From 855fff5962a948eaf59da6f76d4bbc5ea02bdbc1 Mon Sep 17 00:00:00 2001 From: kempersc Date: Fri, 9 Jan 2026 21:09:28 +0100 Subject: [PATCH] data(person): resolve PPID locations and enrich profiles - Rename 512 person files from XX-XX-XXX placeholders to proper GeoNames locations - Update 2,463 profiles with enriched data - Add 512 new person profiles (AU, international heritage professionals) - PPID format: ID_{birth-loc}_{decade}_{work-loc}_{custodian}_{NAME} --- ...AN_195X_AU-01-CAN_XXXX_KEVIN-BRADLEY.json} | 149 ++++++- ...N_196X_AU-01-CAN_XXXX_GIANOULA-BURNS.json} | 149 ++++++- ...01-CAN_196X_AU-01-CAN_XXXX_VERA-DUNN.json} | 149 ++++++- ...7X_AU-01-CAN_XXXX_CATHERINE-ALDERSEY.json} | 138 +++++- ...AN_197X_AU-01-CAN_XXXX_COLETTE-LILLE.json} | 150 ++++++- ...N_197X_AU-01-CAN_XXXX_CONOR-MCCARTHY.json} | 138 +++++- ...1-CAN_197X_AU-01-CAN_XXXX_DAVID-WONG.json} | 193 ++++++++- ...197X_AU-01-CAN_XXXX_FRANCIS-CRIMMINS.json} | 138 +++++- ...AN_197X_AU-01-CAN_XXXX_HEATHER-CLARK.json} | 150 ++++++- ...1-CAN_197X_AU-01-CAN_XXXX_LIBBY-CASS.json} | 149 ++++++- ...AN_197X_AU-01-CAN_XXXX_MARTIN-THOMAS.json} | 166 +++++++- ...197X_AU-01-CAN_XXXX_NICOLA-MACKAYSIM.json} | 138 +++++- ...97X_AU-01-CAN_XXXX_SAOWAPHA-VIRAVONG.json} | 150 ++++++- ...1-CAN_197X_AU-01-CAN_XXXX_SIMON-WALL.json} | 138 +++++- ...197X_AU-01-CAN_XXXX_THERDPUN-KLINJUN.json} | 150 ++++++- ...AN_197X_ID-17-PRA_XXXX_RAMDAH-RADJAB.json} | 160 ++++++- ...CAN_198X_AU-01-CAN_XXXX_ADITYA-BURRA.json} | 171 +++++++- ...AN_198X_AU-01-CAN_XXXX_ALISON-DELLIT.json} | 138 +++++- ..._198X_AU-01-CAN_XXXX_ANTONIA-KASUNIC.json} | 138 +++++- ...AN_198X_AU-01-CAN_XXXX_CATHY-PILGRIM.json} | 27 +- ...N_198X_AU-01-CAN_XXXX_CLAYTON-ROGERS.json} | 138 +++++- ...AN_198X_AU-01-CAN_XXXX_FREYA-OCONNOR.json} | 150 ++++++- ...CAN_198X_AU-01-CAN_XXXX_KARLEE-BAKER.json} | 138 +++++- ...1-CAN_198X_AU-01-CAN_XXXX_KELLY-SKYE.json} | 138 +++++- ...-CAN_198X_AU-01-CAN_XXXX_LUKE-HICKEY.json} | 149 ++++++- ...8X_AU-01-CAN_XXXX_REBECCA-PENDLEBURY.json} | 138 +++++- ...-CAN_198X_AU-01-CAN_XXXX_RENATA-DYER.json} | 27 +- ...AU-01-CAN_198X_AU-01-CAN_XXXX_RHYS-C.json} | 150 ++++++- ...CAN_198X_AU-01-CAN_XXXX_ROBYN-HOLMES.json} | 138 +++++- ...1-CAN_198X_AU-01-CAN_XXXX_ROD-STROUD.json} | 138 +++++- ...-01-CAN_198X_AU-06-FRA_XXXX_VEERIN-C.json} | 160 ++++++- ...-01-CAN_199X_AU-01-CAN_XXXX_ADRIA-HU.json} | 138 +++++- ...9X_AU-01-CAN_XXXX_ADRIANNA-FULLERTON.json} | 149 ++++++- ...N_199X_AU-01-CAN_XXXX_ALLISTER-MILLS.json} | 150 ++++++- ...AN_199X_AU-01-CAN_XXXX_ANNE-ROWLANDS.json} | 150 ++++++- ...CAN_199X_AU-01-CAN_XXXX_BELLE-WILSON.json} | 150 ++++++- ...-CAN_199X_AU-01-CAN_XXXX_BEN-PRATTEN.json} | 150 ++++++- ...99X_AU-01-CAN_XXXX_ISABELLE-SHEPPARD.json} | 148 ++++++- ...9X_AU-01-CAN_XXXX_JONATHAN-GREENSHAW.json} | 138 +++++- ...-CAN_199X_AU-01-CAN_XXXX_KIM-BRUNORO.json} | 138 +++++- ..._199X_AU-01-CAN_XXXX_MARJORIE-CURRIE.json} | 150 ++++++- ..._199X_AU-01-CAN_XXXX_ROSALIND-CLARKE.json} | 150 ++++++- ...-CAN_199X_AU-01-CAN_XXXX_SARAH-HODGE.json} | 150 ++++++- ...U-01-CAN_199X_AU-01-CAN_XXXX_SONJA-B.json} | 138 +++++- ...AN_199X_AU-04-COO_XXXX_CELIA-RIDEAUX.json} | 150 ++++++- ...199X_AU-05-AP_XXXX_JENNIFER-THOMPSON.json} | 171 +++++++- ...CAN_199X_AU-05-AP_XXXX_MIRIAM-COVELL.json} | 150 ++++++- ...1-CAN_199X_AU-05-AP_XXXX_QIANMIN-JIA.json} | 27 +- ...D_AU-01-CAN_199X_AU-05-AP_XXXX_ROS-H.json} | 138 +++++- ...N_199X_AU-07-FLY_XXXX_MADELINE-ONEIL.json} | 138 +++++- ...AN_199X_AU-08-SB_XXXX_MAYUKH-DIKSHIT.json} | 150 ++++++- ...-CAN_199X_XX-XX-XXX_XXXX_BEN-STEVENS.json} | 81 +++- ...1-CAN_199X_XX-XX-XXX_XXXX_JACKY-YANG.json} | 23 +- ...AN_200X_AU-01-CAN_XXXX_BLAKE-SINGLEY.json} | 138 +++++- ...-CAN_200X_AU-01-CAN_XXXX_LILIA-WALSH.json} | 150 ++++++- ...-CAN_200X_AU-02-PAR_XXXX_DANIEL-ROSE.json} | 138 +++++- ...2-BAT_198X_AU-01-CAN_XXXX_JESS-DRAKE.json} | 150 ++++++- ...-BAT_198X_AU-01-CAN_XXXX_NICOLETTE-S.json} | 150 ++++++- ...2-BAT_198X_AU-01-CAN_XXXX_SUSIE-WATT.json} | 27 +- ...2-BAT_199X_AU-01-CAN_XXXX_KASSI-HAYS.json} | 150 ++++++- ...U-02-BAT_199X_AU-02-PAR_XXXX_LINDA-B.json} | 150 ++++++- ..._194X_AU-01-CAN_XXXX_ANNMARI-JORDENS.json} | 150 ++++++- ...D_195X_AU-01-CAN_XXXX_ISOBEL-TRUNDLE.json} | 150 ++++++- ...-SYD_196X_AU-01-CAN_XXXX_CAROLYN-TOW.json} | 27 +- ...-SYD_197X_AU-01-CAN_XXXX_EMMA-JOLLEY.json} | 150 ++++++- ...SYD_197X_AU-01-CAN_XXXX_LIBOR-COUFAL.json} | 149 ++++++- ...D_197X_AU-07-DEA_XXXX_TERENCE-INGRAM.json} | 138 +++++- ...8X_AU-01-CAN_XXXX_KAVAN-MANCHANAYAKE.json} | 150 ++++++- ...SYD_198X_AU-01-CAN_XXXX_LIHONG-ZHANG.json} | 150 ++++++- ...U-02-PAR_XXXX_CONSTANTINA-YIOMELAKIS.json} | 150 ++++++- ...U-02-SYD_199X_XX-XX-XXX_XXXX_GAVIN-B.json} | 23 +- ..._200X_AU-01-CAN_XXXX_JAMES-SCHOFIELD.json} | 150 ++++++- ...04-BRI_197X_AU-01-CAN_XXXX_JO-RITALE.json} | 160 ++++++- ...RI_197X_AU-01-CAN_XXXX_MARCUS-HUGHES.json} | 148 ++++++- ..._197X_AU-01-CAN_XXXX_ROWAN-HENDERSON.json} | 150 ++++++- ..._198X_AU-05-AP_XXXX_KATE-DISHERQUILL.json} | 148 ++++++- ...AP_199X_AU-01-CAN_XXXX_CHERIE-CARTER.json} | 138 +++++- ...L_196X_AU-01-CAN_XXXX_GARRY-STURGESS.json} | 149 ++++++- ...-MEL_197X_AU-05-AP_XXXX_ALICE-GARNER.json} | 150 ++++++- ..._197X_AU-05-AP_XXXX_NIKKI-HENNINGHAM.json} | 150 ++++++- ...97X_XX-XX-XXX_XXXX_MIKE-SHUTTLEWORTH.json} | 23 +- ...L_198X_AU-01-CAN_XXXX_AMELIA-HARTNEY.json} | 150 ++++++- ...EL_198X_AU-01-CAN_XXXX_BARBARA-LEMON.json} | 150 ++++++- ...EL_198X_AU-01-CAN_XXXX_RUTH-HAZLETON.json} | 148 ++++++- ...07-MEL_198X_XX-XX-XXX_XXXX_ANNA-KENT.json} | 81 +++- ...00X_XX-XX-XXX_XXXX_SALWA-CHAIRUNNISA.json} | 93 ++++- ...R-BRU_196X_NL-ZH-TH_XXXX_JELLE-BAKKER.json | 6 +- ...RU_197X_IN-25-CHE_XXXX_NEESHA-AMRISH.json} | 76 +++- ..._197X_NL-NH-AMS_XXXX_PATRICIA-DOCAMPO.json | 6 +- ...RU_197X_NL-ZH-TH_XXXX_JOSINE-WISKERKE.json | 6 +- ...U_198X_BE-BR-BRU_XXXX_JEROEN-REYNIERS.json | 6 +- ...BRU_198X_NL-NH-AMS_XXXX_MICK-REEHORST.json | 6 +- ...R-BRU_198X_XX-XX-XXX_XXXX_BERTINE-BOS.json | 6 +- ...RU_199X_NL-NH-AMS_XXXX_FARBOD-SAATSAZ.json | 6 +- ...198X_BE-VL-ANT_XXXX_FREDERIK-VANMEERT.json | 6 +- ...199X_XX-XX-XXX_XXXX_LOUIS-SCHEUNEMAN.json} | 93 ++++- ...L-HOV_195X_NL-ZH-TH_XXXX_ALEX-MALLEMS.json | 6 +- ...U_198X_NL-NB-EIN_XXXX_JULIEN-MAILFERT.json | 6 +- ...BE-VL-LEU_198X_NL-NB-EIN_XXXX_S-AFZAL.json | 6 +- ...-MEC_199X_NL-NH-AMS_XXXX_EMMA-BENTHEM.json | 6 +- ...D_198X_BE-VL-OUD_XXXX_FREDERIC-LOGGHE.json | 6 +- ...R_198X_NL-NB-EIN_XXXX_ALEXANDER-KLEIN.json | 6 +- ...-STU_198X_NL-NB-EIN_XXXX_ANA-RESTREPO.json | 6 +- ...U_199X_NL-NB-EIN_XXXX_RUBEN-BORGONJEN.json | 6 +- ...A_198X_NL-NB-EIN_XXXX_HENRIQUE-MASINI.json | 6 +- ...STA_199X_NL-NB-EIN_XXXX_LARS-MAXFIELD.json | 6 +- ...RE_199X_NL-NB-VEL_XXXX_ANNALISA-BRODU.json | 6 +- ...96X_NL-NH-AMS_XXXX_ANDREA-SCHARNHORST.json | 6 +- ...16-BER_198X_NL-NH-AMS_XXXX_LISA-SNOEK.json | 6 +- ...RA_200X_ID-08-GS_XXXX_MUHAMMAD-QOSIM.json} | 148 ++++++- ...-STR_197X_XX-XX-XXX_XXXX_WOUTER-VEEN.json} | 125 +++++- ...RI_199X_GB-EN-LEE_XXXX_VANESSA-JONES.json} | 160 ++++++- ...CAM_198X_AU-01-CAN_XXXX_FIONA-MILWAY.json} | 150 ++++++- ...LON_198X_NL-NH-AMS_XXXX_HUGO-PENNING.json} | 81 +++- ...ON_199X_NL-ZH-TH_XXXX_BENJAMIN-DUERR.json} | 93 ++++- ...-EN-NUT_199X_AU-01-CAN_XXXX_LIV-JONG.json} | 148 ++++++- ...-EN-OXF_195X_CA-08-TOR_XXXX_SEAMUS-R.json} | 150 ++++++- ...K_198X_ID-04-JAK_XXXX_HERLINA-HERLINA.json | 305 ++++++++++++++ ...8X_ID-04-JAK_XXXX_MUHAMAD-HETSAPUTRA.json} | 192 ++++++++- ...-JAK_198X_ID-04-JAK_XXXX_ROBBY-HASAN.json} | 138 +++++- ..._198X_XX-XX-XXX_XXXX_ANNELIES-ZWIJNS.json} | 93 ++++- ...JAK_199X_ID-04-JAK_XXXX_ANNISA-FADIAH.json | 358 ++++++++++++++++ ...ID-04-JAK_XXXX_ARIESTA-PREAFITRIALLY.json} | 170 +++++++- ...D-04-JAK_199X_ID-04-JAK_XXXX_CLARA-P.json} | 148 ++++++- ...JAK_199X_ID-04-JAK_XXXX_DINDA-ACHYAR.json} | 159 ++++++- ..._199X_ID-04-JAK_XXXX_INDERA-DEWANTHO.json} | 225 +++++++++- ...199X_ID-04-JAK_XXXX_MUHAMMAD-ROSYIDI.json} | 170 +++++++- ..._199X_ID-04-JAK_XXXX_NOGUS-PAHLIAWAN.json} | 159 ++++++- ...-JAK_199X_ID-04-JAK_XXXX_PAUL-JEMADU.json} | 149 ++++++- ...K_199X_ID-33-BAN_XXXX_HANIEF-ASSEGAF.json} | 138 +++++- ...AK_199X_XX-XX-XXX_XXXX_FAHRI-ALTAKWA.json} | 114 ++++- ...200X_XX-XX-XXX_XXXX_AFIFAH-WULANDARI.json} | 81 +++- ...199X_ID-30-BOG_XXXX_VERONICA-HAPSARI.json} | 138 +++++- ...07-SUR_199X_XX-XX-XXX_XXXX_ANDJANI-C.json} | 81 +++- ...98X_ID-10-YOG_XXXX_NOVITA-DWIHAPSARI.json} | 150 ++++++- ...10-YOG_199X_ID-04-JAK_XXXX_DEVI-AZMI.json} | 150 ++++++- ...G_199X_XX-XX-XXX_XXXX_ELIZA-FITRIANA.json} | 93 ++++- ...9X_XX-XX-XXX_XXXX_WIENDYAZKIA-ARIFFA.json} | 93 ++++- ...200X_ID-04-JAK_XXXX_ADIMAS-DUMARSEMA.json} | 150 ++++++- ...OG_200X_ID-04-JAK_XXXX_TIUR-SITOMPUL.json} | 150 ++++++- ...0X_XX-XX-XXX_XXXX_AMARILIS-MARDHIYAH.json} | 93 ++++- ..._196X_NL-NH-AMS_XXXX_FRIDUS-STEIJLEN.json} | 23 +- ..._199X_ID-04-JAK_XXXX_SINDY-SETIAWATI.json} | 149 ++++++- ...BAN_199X_ID-30-BAN_XXXX_ANANG-SUTONO.json} | 138 +++++- ...BAN_199X_ID-30-BAN_XXXX_REZA-NURIZKI.json} | 138 +++++- ...BAN_199X_XX-XX-XXX_XXXX_MAULIDA-UMMA.json} | 81 +++- ...DEP_199X_ID-04-JAK_XXXX_DEDI-EFFENDI.json} | 193 ++++++++- ..._198X_NL-NB-VEL_XXXX_CLARENCE-DSILVA.json} | 81 +++- ..._199X_XX-XX-XXX_XXXX_RACHEL-MALMBORG.json} | 81 +++- ...-40-HYD_198X_AU-01-CAN_XXXX_NARESH-T.json} | 138 +++++- ...40-HYD_198X_XX-XX-XXX_XXXX_SANDEEP-E.json} | 81 +++- ...-MM_199X_NL-NB-EIN_XXXX_ERICA-FARINA.json} | 93 ++++- ..._199X_NL-NB-EIN_XXXX_GIORGIO-PORCARO.json} | 93 ++++- ...99X_NL-ZH-ROT_XXXX_ANNELYNN-KOENDERS.json} | 81 +++- ...REC_200X_NL-NH-AMS_XXXX_AURORA-BELLI.json} | 92 +++- ...R-TYN_200X_NL-GR-GRO_XXXX_DENNIS-RAAF.json | 6 +- ...AS_197X_XX-XX-XXX_XXXX_ANGELIEK-JONGE.json | 6 +- ...FL-AS_198X_NL-NH-AMS_XXXX_LESTER-BONN.json | 6 +- ...AS_199X_NL-NH-AMS_XXXX_ROBBIN-VERHOEF.json | 6 +- ...FL-AS_199X_NL-NH-AMS_XXXX_SERENA-CHIN.json | 6 +- ...-DRO_199X_NL-FL-DRO_XXXX_TIMO-BROUWER.json | 6 +- ..._198X_NL-FL-LEL_XXXX_JANTINE-TINTEREN.json | 6 +- ...EE_198X_NL-DR-ASS_XXXX_SONJA-DIJKSTRA.json | 6 +- ...R-LEE_198X_NL-FR-LEE_XXXX_JEROEN-BOER.json | 6 +- ...-FR-LEE_198X_NL-GR-GRO_XXXX_BERT-SMIT.json | 6 +- ...E_199X_NL-GE-ARN_XXXX_SANDER-HULLEMAN.json | 6 +- ...199X_NL-ZH-TH_XXXX_KIMBERLY-BRINKHUIS.json | 6 +- ...-APE_196X_NL-GE-APE_XXXX_YVONNE-GRAAF.json | 6 +- ...-GE-APE_196X_NL-NH-AMS_XXXX_BAS-PRONK.json | 6 +- ...GE-APE_197X_NL-GE-APE_XXXX_OSCAR-DIJK.json | 6 +- ...E_197X_NL-GE-ARN_XXXX_JASPER-KROPVELD.json | 6 +- ..._197X_NL-GE-RHE_XXXX_DORIEKE-LEENDERS.json | 6 +- ...E-APE_198X_NL-GE-APE_XXXX_AGNES-MARWA.json | 6 +- ...E-APE_198X_NL-GE-ARN_XXXX_ANNE-SALDEN.json | 6 +- ...PE_198X_NL-NH-AMS_XXXX_MOHAMED-AMRANI.json | 6 +- ...9X_NL-GE-APE_XXXX_JOLIJN-KUURSTRAMUIS.json | 6 +- ...E-APE_199X_NL-GE-ZUT_XXXX_TIM-PARDIJS.json | 6 +- ...NL-GE-APE_199X_NL-NB-EIN_XXXX_VINAY-S.json | 6 +- ...GE-APE_200X_NL-GE-APE_XXXX_ABEL-WEERD.json | 6 +- ..._200X_NL-GE-APE_XXXX_LARISSA-LANDSTRA.json | 6 +- ...GE-APE_200X_NL-NH-ZAA_XXXX_RIK-KROEZE.json | 6 +- ...NL-GE-RHE_XXXX_PATRIES-HOEKSTRASWEERS.json | 6 +- ...RN_195X_NL-GE-VEL_XXXX_HANNEKE-ZUTHEM.json | 6 +- ...ARN_195X_XX-XX-XXX_XXXX_KLAAS-BROUWER.json | 6 +- ...ARN_196X_NL-GE-ARN_XXXX_EDWIN-SLUITER.json | 6 +- ...L-GE-ARN_196X_NL-GE-KIL_XXXX_JOHN-DEE.json | 6 +- ...196X_NL-OV-DEV_XXXX_PETER-BROEKHUIZEN.json | 6 +- ...E-ARN_197X_NL-GE-ARN_XXXX_FIONA-BRUIN.json | 6 +- ...RN_197X_NL-GE-ARN_XXXX_ROB-OOSTENRIJK.json | 6 +- ..._197X_NL-GE-BEN_XXXX_KASIMIR-ENDHOVEN.json | 6 +- ...L-GE-DIE_XXXX_EVELINE-FOLKERSDIJKSTRA.json | 6 +- ..._197X_NL-GE-DOE_XXXX_ANNEMIEK-PLOKKER.json | 6 +- ...ARN_197X_NL-GE-DOO_XXXX_REGINA-PETREK.json | 6 +- ...E-ARN_197X_NL-GE-NIJ_XXXX_SARA-SCHENK.json | 6 +- ..._197X_NL-NB-VUG_XXXX_GODELIEVE-JANSEN.json | 6 +- ...N_197X_XX-XX-XXX_XXXX_CORINE-BOONSTRA.json | 6 +- ...N_198X_NL-GE-APE_XXXX_HAROLD-SCHEFFER.json | 6 +- ...N_198X_NL-GE-ARN_XXXX_BIANCA-FRANSSEN.json | 6 +- ...-ARN_198X_NL-GE-ARN_XXXX_DENNIS-NOORT.json | 6 +- ...E-ARN_198X_NL-GE-ARN_XXXX_FEMKE-VROOM.json | 6 +- ...GE-ARN_198X_NL-GE-ARN_XXXX_MATTY-MAAS.json | 6 +- ...ARN_198X_NL-GE-ARN_XXXX_NIENKE-JANSEN.json | 6 +- ...-ARN_198X_NL-GE-ARN_XXXX_RIAN-VELZING.json | 6 +- ...N_198X_NL-GE-ARN_XXXX_RONNIE-SILFHOUT.json | 6 +- ...RN_198X_NL-GE-ARN_XXXX_RUUD-TEUNISSEN.json | 6 +- ...E-ARN_198X_NL-GE-ARN_XXXX_ZACHA-WEERD.json | 6 +- ...N_198X_NL-GE-NIJ_XXXX_MARTIJN-HERMENS.json | 6 +- ...-ARN_198X_NL-ZH-TH_XXXX_ROOS-PETERSEN.json | 6 +- ...N_198X_XX-XX-XXX_XXXX_SASKIA-OOSTVEEN.json | 6 +- ...-ARN_198X_XX-XX-XXX_XXXX_SIGRID-GRAVE.json | 6 +- ...-ARN_199X_NL-FR-LEE_XXXX_SOFIA-GINEVA.json | 6 +- ...-ARN_199X_NL-GE-APE_XXXX_PONS-VERHEUL.json | 6 +- ...NL-GE-ARN_XXXX_ANASTASIIA-IVASHCHENKO.json | 6 +- ...N_199X_NL-GE-ARN_XXXX_BRUNO-HOOIJDONK.json | 6 +- ...N_199X_NL-GE-ARN_XXXX_DANIEL-WOLFEREN.json | 6 +- ..._199X_NL-GE-ARN_XXXX_DIEDERIK-MENTING.json | 6 +- ...E-ARN_199X_NL-GE-ARN_XXXX_EMMA-BERBEN.json | 6 +- ...N_199X_NL-GE-ARN_XXXX_LOBKE-ROENHORST.json | 6 +- ...X_NL-GE-ARN_XXXX_MARJOLEIN-GROTENHUIS.json | 6 +- ...E-ARN_199X_NL-GE-ARN_XXXX_PASCAL-KLOP.json | 6 +- ..._199X_NL-GE-ARN_XXXX_WESLEY-NIJENHUIS.json | 6 +- ...-ARN_199X_NL-GE-DID_XXXX_THIJE-JANSEN.json | 6 +- ...-GE-ARN_199X_NL-NB-WAA_XXXX_ANIRUDH-H.json | 6 +- ...ARN_200X_NL-GE-ARN_XXXX_DAAN-WILDEMAN.json | 6 +- ...-ARN_200X_NL-GE-ARN_XXXX_ELVIA-BAKKER.json | 6 +- ...ARN_200X_NL-GE-ARN_XXXX_JAHLIYAH-KOLF.json | 6 +- ...GE-ARN_200X_NL-GE-ARN_XXXX_JORCHINO-G.json | 6 +- ...200X_NL-GE-ARN_XXXX_MEREL-THANNHAUSER.json | 6 +- ..._NL-GE-ARN_200X_NL-GE-DID_XXXX_JILL-S.json | 6 +- ...-GE-ARN_200X_NL-LI-MOO_XXXX_SIL-HESEN.json | 6 +- ..._200X_NL-ZH-ROT_XXXX_PASCALE-WILBRINK.json | 6 +- ...E-ARN_XXXX_RUTH-WESTERVELDZWITSERLOOD.json | 6 +- ...-DOE_195X_NL-GE-APE_XXXX_HAN-SNIJDERS.json | 6 +- ...-DOE_198X_NL-GE-DOE_XXXX_DANA-NIJKAMP.json | 6 +- ...E-DOE_199X_NL-GE-ARN_XXXX_ALEX-SMEENK.json | 6 +- ...D_NL-GE-DUI_197X_NL-GE-ARN_XXXX_LY-LY.json | 6 +- ...-GE-DUI_200X_NL-FR-FRA_XXXX_JAN-TASMA.json | 6 +- ...E_197X_NL-NH-AMS_XXXX_ANNABELLE-ARNTZ.json | 6 +- ...-EDE_197X_NL-ZH-TH_XXXX_BERTA-BUURMAN.json | 6 +- ...7X_XX-XX-XXX_XXXX_UTE-BRUININGNIEMANN.json | 6 +- ...98X_NL-NB-EIN_XXXX_VOLHA-SHCHETNIKAVA.json | 6 +- ...-EDE_198X_NL-ZH-SCH_XXXX_HENK-SCHRIEK.json | 6 +- ...E_199X_ID-04-JAK_XXXX_TIRANA-ADISUNA.json} | 86 +++- ...E-EDE_199X_NL-FL-AS_XXXX_EGBERT-IJZER.json | 6 +- ...DE_199X_NL-UT-VEE_XXXX_MARTINA-WALLET.json | 6 +- ...ER_196X_NL-NH-AMS_XXXX_TEUS-EENKHOORN.json | 6 +- ...R_198X_NL-NB-EIN_XXXX_CARLOS-CARDENAS.json | 6 +- ...HED_195X_NL-GE-HED_XXXX_JAN-BUYLINCKX.json | 6 +- ...EU_198X_XX-XX-XXX_XXXX_LATOYA-CHARLES.json | 6 +- ...199X_NL-OV-DAL_XXXX_GERWIN-MELENHORST.json | 6 +- ...GE-NIJ_194X_NL-GE-APE_XXXX_JAN-RUITER.json | 6 +- ...L-GE-NIJ_195X_NL-NB-EIN_XXXX_WIM-MAAS.json | 6 +- ...E-NIJ_195X_NL-NB-HEL_XXXX_ARTHUR-DIJK.json | 6 +- ...E-NIJ_196X_NL-GE-ARN_XXXX_MARC-HOOGEN.json | 6 +- ...IJ_196X_NL-LI-MAA_XXXX_SUZANNE-BOGMAN.json | 6 +- ...-NIJ_196X_NL-NB-TIL_XXXX_INGRID-VEEKE.json | 6 +- ...IJ_196X_NL-NB-VEL_XXXX_RICHARD-ENGELN.json | 6 +- ..._196X_NL-UT-MAA_XXXX_CHANTAL-KEIJSPER.json | 6 +- ...E-NIJ_196X_NL-ZH-TH_XXXX_RIEN-FRAANJE.json | 6 +- ...-GE-NIJ_196X_NL-ZH-TH_XXXX_WIM-GEERTS.json | 6 +- ...E-NIJ_196X_XX-XX-XXX_XXXX_ALFRED-ROOS.json | 6 +- ..._NL-GE-NIJ_196X_XX-XX-XXX_XXXX_ANNE-B.json | 6 +- ...GE-NIJ_196X_XX-XX-XXX_XXXX_JOS-HANSEN.json | 6 +- ...J_196X_XX-XX-XXX_XXXX_MARIELLE-KLERKS.json | 6 +- ...J_197X_NL-DR-ASS_XXXX_WILLI-KLIJNSTRA.json | 6 +- ...-NIJ_197X_NL-GE-ARN_XXXX_ELSE-GOOTJES.json | 6 +- ...IJ_197X_NL-GE-NIJ_XXXX_ALBERT-REIJNEN.json | 177 ++++++++ ...J_197X_NL-NB-CUI_XXXX_MICHAEL-MAESSEN.json | 6 +- ...IJ_197X_NL-NB-SA_XXXX_ERWIN-DAVERVELD.json | 6 +- ...IJ_197X_NL-NH-AMS_XXXX_ANNA-KOLDEWEIJ.json | 6 +- ...-NIJ_197X_NL-NH-BLA_XXXX_MIEKE-DIEPEN.json | 6 +- ...-GE-NIJ_197X_NL-ZH-TH_XXXX_ELIF-BAGCI.json | 6 +- ...E-NIJ_197X_NL-ZH-TH_XXXX_THIJS-DEBEIJ.json | 6 +- ...-ZH-TH_XXXX_WILLEMIJN-BLOTTCAPPENBERG.json | 6 +- ...X_XX-XX-XXX_XXXX_ANGELIQUE-EERENBEEMD.json | 6 +- ...E-NIJ_197X_XX-XX-XXX_XXXX_MIEL-JACOBS.json | 6 +- ...J_198X_NL-GE-ARN_XXXX_ANNE-OOSTERVEER.json | 6 +- ...IJ_198X_NL-GE-ARN_XXXX_LIESBETH-ARKEL.json | 6 +- ...198X_NL-GE-ARN_XXXX_MARJOLEIN-JOCHEMS.json | 6 +- ..._198X_NL-GE-NIJ_XXXX_FABRIZIA-CANFORA.json | 6 +- ...-GE-NIJ_198X_NL-GE-NIJ_XXXX_KOR-BOSCH.json | 6 +- ...NIJ_198X_NL-GE-NIJ_XXXX_MYRNA-EPPINGS.json | 6 +- ...NIJ_198X_NL-GR-GRO_XXXX_MARIJ-DERKSEN.json | 6 +- ...GE-NIJ_198X_NL-LI-ROE_XXXX_CHRIS-DOLS.json | 6 +- ...E-NIJ_198X_NL-NB-BOZ_XXXX_LINDA-PRINS.json | 6 +- ...NL-GE-NIJ_198X_NL-NB-EIN_XXXX_SO-PHAM.json | 6 +- ...198X_NL-NH-ALK_XXXX_MARIEKE-RAVESLOOT.json | 6 +- ...E-NIJ_198X_NL-NH-AMS_XXXX_JOYCE-ZELEN.json | 6 +- ...IJ_198X_NL-UT-HOU_XXXX_JUDITH-SCHMIDT.json | 6 +- ...NIJ_198X_NL-UT-UTR_XXXX_LIES-WIJNTERP.json | 6 +- ...198X_NL-ZH-BER_XXXX_SUSANNE-HOEFNAGEL.json | 6 +- ...NIJ_198X_NL-ZH-TH_XXXX_ANGELIQUE-MADE.json | 6 +- ...L-GE-NIJ_198X_NL-ZH-TH_XXXX_MINKE-SAR.json | 6 +- ...-GE-NIJ_198X_NL-ZH-TH_XXXX_RUTGER-VEN.json | 6 +- ...-NIJ_198X_NL-ZH-TH_XXXX_TIM-SCHEERDER.json | 6 +- ...NIJ_198X_NL-ZH-TH_XXXX_WOUTER-SCHROER.json | 6 +- ...IJ_198X_XX-XX-XXX_XXXX_BARBARA-VISSER.json | 6 +- ...NIJ_198X_XX-XX-XXX_XXXX_ELLEN-GEBOERS.json | 6 +- ...J_198X_XX-XX-XXX_XXXX_JELENA-ZIVKOVIC.json | 6 +- ...GE-NIJ_198X_XX-XX-XXX_XXXX_MAAIKE-MEE.json | 6 +- ...NIJ_198X_XX-XX-XXX_XXXX_SUSANNE-LEEUW.json | 6 +- ...IJ_199X_AU-01-CAN_XXXX_KRYSTAL-ZHANG.json} | 76 +++- ...J_199X_NL-FR-HEE_XXXX_SASKIA-ZANDSTRA.json | 6 +- ...E-NIJ_199X_NL-GE-ARN_XXXX_JOON-KOSMAN.json | 6 +- ...GE-NIJ_199X_NL-GE-ARN_XXXX_MICHA-VINK.json | 6 +- ...J_199X_NL-GE-ARN_XXXX_WOUTER-ZANTINGE.json | 6 +- ...-GE-NIJ_199X_NL-GE-NIJ_XXXX_AUKE-VEEN.json | 6 +- ...-NIJ_199X_NL-GE-NIJ_XXXX_ELINE-ABBINK.json | 6 +- ...199X_NL-GE-NIJ_XXXX_MAHDIYEH-GHAFFARI.json | 6 +- ...NIJ_199X_NL-GE-NIJ_XXXX_NAOMI-BISPING.json | 6 +- ...E-NIJ_199X_NL-GE-NIJ_XXXX_TONNY-GARIC.json | 6 +- ...-GE-NIJ_199X_NL-LI-MAA_XXXX_AFRA-MARS.json | 6 +- ...E-NIJ_199X_NL-NB-BOE_XXXX_LAURA-DAMEN.json | 6 +- ...NL-GE-NIJ_199X_NL-NB-EIN_XXXX_QIN-ONG.json | 6 +- ...9X_NL-NB-EIN_XXXX_SREEPRIYA-SREEKUMAR.json | 6 +- ...-GE-NIJ_199X_NL-NB-OSS_XXXX_BAS-ROOIJ.json | 6 +- ...E-NIJ_199X_NL-NH-AMS_XXXX_MYRTHE-KROM.json | 6 +- ..._199X_NL-NH-AMS_XXXX_TEUN-KROSENBRINK.json | 6 +- ...L-GE-NIJ_199X_NL-OV-ZWO_XXXX_KRIS-AAR.json | 6 +- ...NIJ_199X_NL-UT-AME_XXXX_WIETSE-BAKKER.json | 6 +- ...IJ_199X_NL-UT-UTR_XXXX_JANNE-HULSCHER.json | 6 +- ...NIJ_199X_NL-ZH-TH_XXXX_BJORN-SCHRIJEN.json | 6 +- ...E-NIJ_199X_NL-ZH-TH_XXXX_EVELIEN-DIJK.json | 6 +- ...-GE-NIJ_199X_NL-ZH-TH_XXXX_HJA-SIEPEL.json | 6 +- ...NIJ_199X_NL-ZH-TH_XXXX_JEROEN-ROMEIJN.json | 6 +- ..._199X_XX-XX-XXX_XXXX_CASPER-SOETEKOUW.json | 6 +- ...NIJ_199X_XX-XX-XXX_XXXX_JAN-MARKHORST.json | 6 +- ...-XX-XXX_XXXX_ROSANNE-RIETVELDTERPSTRA.json | 6 +- ...-NIJ_200X_NL-GE-APE_XXXX_IRIS-NEIJHOF.json | 6 +- ...IJ_200X_NL-NB-BOZ_XXXX_GABY-CRANINCKX.json | 6 +- ...-GE-NUN_194X_NL-GE-APE_XXXX_HARM-MUIS.json | 6 +- ...-OPH_199X_NL-GE-OPH_XXXX_MARIEN-KLEIN.json | 6 +- ...E-OTT_197X_NL-GE-OTT_XXXX_BAS-MUHREN.json} | 158 +++---- ...-TIE_196X_NL-GE-TIE_XXXX_JOLANDA-HAAS.json | 6 +- ...-TIE_199X_NL-GE-TIE_XXXX_JELLE-SOELEN.json | 6 +- ...IE_199X_NL-GE-TIE_XXXX_MEREL-ELENBAAS.json | 6 +- ...G_196X_NL-FL-AS_XXXX_ALEXANDER-COENEN.json | 6 +- ...WAG_196X_NL-NB-VEL_XXXX_ERROL-ZALMIJN.json | 6 +- ...AG_196X_NL-NH-HAA_XXXX_AMITO-HAARHUIS.json | 39 +- ...WAG_197X_NL-GE-ARN_XXXX_ANNA-HAANSTRA.json | 6 +- ...WAG_197X_NL-GE-ARN_XXXX_WIETEKE-KAMPS.json | 6 +- ...-WAG_197X_NL-GE-WAG_XXXX_FENNY-EGMOND.json | 6 +- ...-GE-WAG_197X_NL-GE-WAG_XXXX_LEO-LAHTI.json | 12 +- ...E-WAG_197X_NL-OV-DEV_XXXX_RUDY-JONKER.json | 6 +- ...WAG_197X_XX-XX-XXX_XXXX_ARNOUT-SCHUUR.json | 6 +- ...L-GE-WAG_197X_XX-XX-XXX_XXXX_MARIJN-N.json | 6 +- ...-WAG_198X_NL-ZH-DEL_XXXX_HALFORD-DACE.json | 6 +- ...WAG_198X_NL-ZH-TH_XXXX_NASIM-HAMIDIAN.json | 6 +- ...-GE-WAG_198X_NL-ZH-TH_XXXX_RUTGER-POL.json | 6 +- ...-WAG_198X_NL-ZH-TH_XXXX_SILVANA-SUMMA.json | 6 +- ...WAG_199X_NL-GE-ARN_XXXX_JURGEN-UFFINK.json | 6 +- ...199X_NL-GE-WAG_XXXX_CHANTAL-WIECKARDT.json | 6 +- ...-GE-WAG_199X_NL-GE-WAG_XXXX_JELLE-MSC.json | 6 +- ...-GE-WAG_199X_NL-NH-AMS_XXXX_ANNA-KNOL.json | 6 +- ...AG_199X_NL-UT-NIE_XXXX_JUDITH-KIKKERT.json | 6 +- ...-WAG_199X_NL-UT-UTR_XXXX_KIM-FERGUSON.json | 6 +- ...NL-GE-WAG_199X_NL-UT-VEE_XXXX_EDDIE-K.json | 6 +- ...-GE-WAG_199X_NL-UT-VEE_XXXX_MARK-JONG.json | 6 +- ...E-WAG_199X_NL-ZH-TH_XXXX_JOPY-WILLEMS.json | 6 +- ...AG_199X_XX-XX-XXX_XXXX_SITA-DJELANTIK.json | 6 +- ...GE-WAG_200X_NL-UT-UTR_XXXX_JURRE-HEES.json | 6 +- ...-GE-ZUT_199X_NL-GE-EDE_XXXX_PAULINE-V.json | 6 +- ...-GRO_194X_NL-ZH-TH_XXXX_GERRIT-VISSER.json | 6 +- ...GR-GRO_195X_NL-GR-GRO_XXXX_CHRIS-STAM.json | 6 +- ...GRO_195X_NL-GR-GRO_XXXX_PETER-ELSINGA.json | 6 +- ...L-GR-GRO_195X_NL-NH-AMS_XXXX_GIJS-HAM.json | 6 +- ...O_195X_NL-NH-AMS_XXXX_TEIO-MEEDENDORP.json | 6 +- ...L-GR-GRO_196X_NL-DR-HOO_XXXX_JOKE-TOP.json | 6 +- ...GRO_196X_NL-GR-GRO_XXXX_ANNALIES-TULP.json | 6 +- ...R-GRO_196X_NL-GR-GRO_XXXX_GERT-HELDER.json | 6 +- ...GRO_196X_NL-GR-GRO_XXXX_HANS-KAMPHUIS.json | 6 +- ...R-GRO_196X_NL-GR-GRO_XXXX_JAN-HOFSTEE.json | 6 +- ...-GRO_196X_NL-GR-GRO_XXXX_JEANINE-BOER.json | 6 +- ...-GR-GRO_196X_NL-GR-GRO_XXXX_PAM-VOORT.json | 6 +- ...GRO_196X_NL-GR-GRO_XXXX_PETER-BUURMAN.json | 6 +- ...196X_NL-GR-GRO_XXXX_STEPHANIE-BOOSMAN.json | 6 +- ..._196X_NL-GR-LET_XXXX_SIEMONA-HELLINGA.json | 6 +- ...RO_196X_NL-GR-TRI_XXXX_HARRY-DRAGSTRA.json | 6 +- ..._196X_NL-NH-AMS_XXXX_LIJSBETH-HOLVAST.json | 6 +- ...-GRO_196X_NL-NH-HAA_XXXX_NICOLE-BROEK.json | 6 +- ...-GR-GRO_196X_NL-OV-ZWO_XXXX_ROY-RAPPA.json | 6 +- ...RO_196X_NL-UT-UTR_XXXX_ANNET-NIENHUIS.json | 6 +- ...GRO_196X_NL-ZH-TH_XXXX_ELLEN-STEENDAM.json | 6 +- ...-GRO_196X_NL-ZH-TH_XXXX_FREEK-KEPPELS.json | 6 +- ...GRO_196X_XX-XX-XXX_XXXX_CARLA-HARTMAN.json | 6 +- ...-GR-GRO_196X_XX-XX-XXX_XXXX_CENTINA-D.json | 6 +- ...O_196X_XX-XX-XXX_XXXX_ENRICO-BEEKMANS.json | 6 +- ...R-GRO_196X_XX-XX-XXX_XXXX_JAN-RINZEMA.json | 6 +- ...O_196X_XX-XX-XXX_XXXX_LOUWINA-BOOMSMA.json | 6 +- ...GR-GRO_196X_XX-XX-XXX_XXXX_THEO-WITTE.json | 6 +- ...197X_NL-GE-APE_XXXX_MATTHIJS-TERPSTRA.json | 6 +- ...-GR-GRO_197X_NL-GE-APE_XXXX_OTTO-BERG.json | 6 +- ...O_197X_NL-GE-NIJ_XXXX_MARIEKE-HEIJDEN.json | 6 +- ...197X_NL-GE-ZUT_XXXX_MARJAN-HARTSUIKER.json | 6 +- ...197X_NL-GR-GRO_XXXX_ALBERT-WESTERHOFF.json | 6 +- ...-GRO_197X_NL-GR-GRO_XXXX_DENNIS-BREED.json | 6 +- ...GR-GRO_197X_NL-GR-GRO_XXXX_DICK-VRIES.json | 6 +- ...GRO_197X_NL-GR-GRO_XXXX_ERICA-SCHEPER.json | 6 +- ..._197X_NL-GR-GRO_XXXX_JELMER-SPIEKSTRA.json | 6 +- ...R-GRO_197X_NL-GR-GRO_XXXX_NICO-MULDER.json | 6 +- ..._197X_NL-GR-GRO_XXXX_RAYMUNDO-RANCHOR.json | 6 +- ..._197X_NL-GR-GRO_XXXX_RICHARD-RUITINGA.json | 6 +- ..._197X_NL-GR-NIE_XXXX_EWOUT-CLARENBURG.json | 6 +- ...GRO_197X_NL-NB-EIN_XXXX_EDITA-MUJOVIC.json | 6 +- ...-GRO_197X_NL-NH-AMS_XXXX_JASPER-FAASE.json | 6 +- ...-GR-GRO_197X_NL-OV-ZWO_XXXX_MARC-JONG.json | 6 +- ...R-GRO_197X_NL-OV-ZWO_XXXX_SONJA-PAAUW.json | 6 +- ...RO_197X_NL-OV-ZWO_XXXX_VINCENT-ROBIJN.json | 6 +- ...O_197X_NL-OV-ZWO_XXXX_WOUTER-GEERLING.json | 6 +- ...RO_197X_NL-UT-BAA_XXXX_HILDE-VEENSTRA.json | 6 +- ...GRO_197X_NL-UT-DRI_XXXX_MARIEKE-JEPMA.json | 12 +- ...GRO_197X_NL-ZH-DEL_XXXX_MARTIJN-PRONK.json | 6 +- ...RO_197X_NL-ZH-TH_XXXX_JEROEN-DOMMELEN.json | 6 +- ...-GR-GRO_197X_NL-ZH-TH_XXXX_MARK-SARFO.json | 6 +- ...-GRO_197X_NL-ZH-TH_XXXX_SILVIA-EUWEMA.json | 6 +- ...GRO_197X_NL-ZH-VOO_XXXX_ERIK-PETERSEN.json | 6 +- ...GRO_197X_XX-XX-XXX_XXXX_EMMY-STRIJKER.json | 6 +- ...GRO_197X_XX-XX-XXX_XXXX_GERARD-SMEENK.json | 6 +- ...7X_XX-XX-XXX_XXXX_JACQUELIEN-NIENHUIS.json | 6 +- ...RO_197X_XX-XX-XXX_XXXX_PAMELA-KELLOGG.json | 6 +- ...R-GRO_197X_XX-XX-XXX_XXXX_WILFRED-HAM.json | 6 +- ...GRO_198X_NL-DR-ASS_XXXX_AGNES-RUTGERS.json | 6 +- ...-GR-GRO_198X_NL-GE-APE_XXXX_ANNELOT-O.json | 6 +- ...RO_198X_NL-GE-WAG_XXXX_INGE-SCHRIEMER.json | 6 +- ...R-GRO_198X_NL-GR-GRO_XXXX_DAAN-JANSEN.json | 6 +- ...GRO_198X_NL-GR-GRO_XXXX_DORIEN-DONKER.json | 6 +- ...RO_198X_NL-GR-GRO_XXXX_ELISA-VERVOORT.json | 6 +- ...-GRO_198X_NL-GR-GRO_XXXX_HELMA-KAMMEN.json | 6 +- ...R-GRO_198X_NL-GR-GRO_XXXX_HENK-KATOEN.json | 6 +- ...GR-GRO_198X_NL-GR-GRO_XXXX_RONALD-MIK.json | 6 +- ..._198X_NL-GR-GRO_XXXX_SANDER-VERMEULEN.json | 6 +- ...O_198X_NL-NB-EIN_XXXX_SIDDHARTHA-OMAR.json | 6 +- ...198X_NL-NB-EIN_XXXX_THOMAS-MARTINSSON.json | 6 +- ...GRO_198X_NL-NB-VEL_XXXX_MORTEN-BAKKER.json | 6 +- ...98X_NL-NH-AMS_XXXX_CARLIJN-SPAENDONCK.json | 6 +- ...98X_NL-NH-AMS_XXXX_FRANCESCA-GABRIELI.json | 6 +- ...GRO_198X_NL-NH-HAA_XXXX_RICK-BUSSCHER.json | 6 +- ...R-GRO_198X_NL-NH-HAA_XXXX_SUSAN-SMELT.json | 6 +- ...GRO_198X_NL-UT-UTR_XXXX_JULIA-DRISSEN.json | 6 +- ...R-GRO_198X_NL-ZH-RIJ_XXXX_ARJEN-NAUTA.json | 6 +- ...RO_198X_NL-ZH-TH_XXXX_ALEXANDER-SMITS.json | 6 +- ...O_198X_NL-ZH-TH_XXXX_FEDERICA-FANTONE.json | 6 +- ...RO_198X_NL-ZH-TH_XXXX_LIESBETH-MULDER.json | 6 +- ...GRO_198X_NL-ZH-TH_XXXX_ROBBERT-HEUVEN.json | 6 +- ...-GRO_198X_XX-XX-XXX_XXXX_JAN-KRUIDHOF.json | 6 +- ...RO_198X_XX-XX-XXX_XXXX_THESSA-MEIJLIS.json | 6 +- ...RO_199X_NL-FR-LEE_XXXX_MAURICE-MEIJER.json | 6 +- ...-GR-GRO_199X_NL-GR-GRO_XXXX_EFE-SIRIN.json | 6 +- ...-GR-GRO_199X_NL-GR-GRO_XXXX_ELKE-BOER.json | 6 +- ...-GRO_199X_NL-GR-GRO_XXXX_FRANK-DANENS.json | 6 +- ...O_199X_NL-GR-GRO_XXXX_JENTE-WESTERHOF.json | 6 +- ...GRO_199X_NL-GR-GRO_XXXX_KIM-VERMEULEN.json | 6 +- ...-GRO_199X_NL-GR-GRO_XXXX_LEIDA-BERNDT.json | 6 +- ...RO_199X_NL-GR-GRO_XXXX_LIESELOT-DAMME.json | 6 +- ...GRO_199X_NL-GR-GRO_XXXX_NANCY-SCHWUNK.json | 6 +- ..._199X_NL-GR-GRO_XXXX_RUHI-MAHADESHWAR.json | 6 +- ...GRO_199X_NL-GR-GRO_XXXX_SIETA-HOUTMAN.json | 6 +- ...O_199X_NL-GR-GRO_XXXX_SJOERD-SCHOUTEN.json | 6 +- ...GR-GRO_199X_NL-GR-GRO_XXXX_YORAM-POOT.json | 6 +- ...RO_199X_NL-NB-BRE_XXXX_JULIEANNE-BERG.json | 6 +- ...NL-GR-GRO_199X_NL-NB-EIN_XXXX_ANUP-KS.json | 6 +- ...GRO_199X_NL-NH-AMS_XXXX_ANNE-KNIPPING.json | 6 +- ...O_199X_NL-NH-AMS_XXXX_CHARLOTTE-BRAAM.json | 6 +- ...RO_199X_NL-NH-AMS_XXXX_FATIMA-ABDICHE.json | 6 +- ...-GRO_199X_NL-NH-AMS_XXXX_JULIETTE-UHM.json | 6 +- ...RO_199X_NL-NH-AMS_XXXX_NAFTHALI-BROOS.json | 6 +- ...O_199X_NL-NH-AMS_XXXX_NIELS-KOHNSTAMM.json | 6 +- ...R-GRO_199X_NL-NH-AMS_XXXX_TESSA-KLIMP.json | 6 +- ...GRO_199X_NL-OV-ZWO_XXXX_CELYNA-KEATES.json | 6 +- ...-GRO_199X_NL-OV-ZWO_XXXX_MARTINE-BOER.json | 6 +- ...-GRO_199X_NL-OV-ZWO_XXXX_RIXT-ZUIDEMA.json | 6 +- ...-GRO_199X_NL-UT-LIN_XXXX_HENK-KIKKERT.json | 6 +- ...L-GR-GRO_199X_NL-UT-UTR_XXXX_EMMA-WAL.json | 6 +- ...R-GRO_199X_NL-UT-UTR_XXXX_LAURA-VEEN.json} | 148 ++++--- ..._NL-GR-GRO_199X_NL-UT-UTR_XXXX_LEON-D.json | 6 +- ...GR-GRO_199X_NL-UT-UTR_XXXX_LOTTE-LOON.json | 6 +- ...199X_NL-ZH-DEL_XXXX_KORNELIS-FRAGAKIS.json | 6 +- ...GR-GRO_199X_NL-ZH-GOU_XXXX_SJORS-AKEN.json | 6 +- ...RO_199X_NL-ZH-ROT_XXXX_JONATHAN-ELLEN.json | 6 +- ...GRO_199X_NL-ZH-TH_XXXX_HEINE-LAGEVEEN.json | 6 +- ...NL-GR-GRO_199X_NL-ZH-TH_XXXX_IDS-IEST.json | 6 +- ...L-GR-GRO_199X_NL-ZH-TH_XXXX_JORIS-VOS.json | 6 +- ...GRO_199X_NL-ZH-TH_XXXX_SANNE-BARZILAY.json | 6 +- ...-GRO_199X_NL-ZH-TH_XXXX_SILKE-REMMITS.json | 6 +- ..._NL-GR-GRO_199X_NL-ZH-TH_XXXX_XIAO-XU.json | 6 +- ...GR-GRO_199X_XX-XX-XXX_XXXX_ANNA-HOUCK.json | 6 +- ...-GRO_199X_XX-XX-XXX_XXXX_ARISKA-BOSCH.json | 6 +- ..._199X_XX-XX-XXX_XXXX_AUDREY-KOENDERS.json} | 23 +- ...99X_XX-XX-XXX_XXXX_BOUDEWIEN-GOSLINGS.json | 6 +- ...O_199X_XX-XX-XXX_XXXX_ELSBETH-WOLRICH.json | 6 +- ...-GRO_199X_XX-XX-XXX_XXXX_EMILIE-HOVEN.json | 6 +- ...-GRO_199X_XX-XX-XXX_XXXX_EMMA-LINDERS.json | 6 +- ...RO_199X_XX-XX-XXX_XXXX_HANNAH-BIJLSMA.json | 6 +- ...GRO_199X_XX-XX-XXX_XXXX_WOUTER-STAAIJ.json | 6 +- ...GR-GRO_200X_NL-GR-GRO_XXXX_ERIK-OTZEN.json | 6 +- ...O_200X_NL-GR-GRO_XXXX_INGEBORG-STRUYK.json | 6 +- ..._200X_NL-GR-GRO_XXXX_WOUTER-HEIJERMAN.json | 6 +- ...-LI-HEE_196X_NL-UT-UTR_XXXX_WIJNT-MA.json} | 93 ++++- ...E_198X_NL-GE-WIN_XXXX_MARIEKE-UBBINK.json} | 93 ++++- ...EE_200X_XX-XX-XXX_XXXX_MELIKE-YENIAY.json} | 93 ++++- ...A_195X_NL-NB-BOZ_XXXX_RONALD-GOOSSENS.json | 6 +- ...LI-MAA_195X_NL-ZH-MAA_XXXX_PETER-SMIT.json | 6 +- ...-MAA_196X_NL-NH-AMS_XXXX_ARNO-LODDER.json} | 148 ++++--- ..._NL-LI-MAA_196X_NL-ZH-TH_XXXX_DAISY-G.json | 6 +- ...-LI-MAA_196X_NL-ZH-TH_XXXX_DEWI-WEERD.json | 6 +- ...MAA_196X_NL-ZH-TH_XXXX_RICHARD-JANSEN.json | 6 +- ...AA_197X_NL-LI-MAA_XXXX_CHEQUITA-NAHAR.json | 6 +- ...AA_197X_NL-NB-TIL_XXXX_DANIELLE-ARETS.json | 12 +- ...X_NL-NH-VIJ_XXXX_VALENTIJN-WORTELBOER.json | 6 +- ...197X_NL-ZH-TH_XXXX_CATHELIJNE-KUITERS.json | 6 +- ...A_198X_BE-BR-BRU_XXXX_LOUISE-BICKNESE.json | 6 +- ...-MAA_198X_NL-LI-MAA_XXXX_BART-ZWEGERS.json | 6 +- ...AA_198X_NL-LI-MAA_XXXX_JOEP-VOSSEBELD.json | 6 +- ...AA_198X_NL-NH-AMS_XXXX_LORENA-REGUERA.json | 6 +- ...LI-MAA_198X_NL-ZH-DEL_XXXX_JULIE-IDES.json | 6 +- ...MAA_198X_NL-ZH-KAZ_XXXX_MELANIE-TUIJL.json | 6 +- ...-LI-MAA_198X_NL-ZH-TH_XXXX_IONA-EBBEN.json | 6 +- ...98X_NL-ZH-TH_XXXX_JURRIAAN-MIDDELHOFF.json | 6 +- ...-MAA_198X_XX-XX-XXX_XXXX_JESPER-SAMAN.json | 6 +- ...I-MAA_199X_AU-01-CAN_XXXX_BEN-BRADLY.json} | 76 +++- ...A_199X_BE-VL-LEU_XXXX_JUDITH-PUYVELDE.json | 6 +- ...AA_199X_DE-16-BER_XXXX_DELPHINE-BOKAY.json | 6 +- ...AA_199X_NL-GE-ARN_XXXX_LYNN-SALENTIJN.json | 6 +- ...AA_199X_NL-LI-MAA_XXXX_SUSANNE-SOUREN.json | 6 +- ...9X_NL-NH-AMS_XXXX_KASPER-STRAATEMEIER.json | 6 +- ...-LI-MAA_199X_NL-ZH-TH_XXXX_FAUVE-KYLL.json | 6 +- ...AA_199X_NL-ZH-TH_XXXX_LISANNE-WESSELS.json | 6 +- ...AA_199X_XX-XX-XXX_XXXX_EMILY-PIETERSE.json | 6 +- ...9X_XX-XX-XXX_XXXX_MADELEINE-VAUDREMER.json | 6 +- ...I-MAA_200X_NL-LI-BRU_XXXX_KENNY-DEBIE.json | 6 +- ...200X_NL-NB-VEL_XXXX_CARLIJN-BRENTJENS.json | 6 +- ...I-VAA_199X_NL-NB-EIN_XXXX_LUCA-BULLES.json | 6 +- ...198X_NL-GE-NIJ_XXXX_BARBARA-KRUIJSEN.json} | 148 ++++--- ...NB-BES_199X_NL-NB-EIN_XXXX_RODRIGUE-S.json | 6 +- ...BES_199X_NL-UT-UTR_XXXX_ARTHUR-COELHO.json | 6 +- ...NB-BES_200X_NL-NB-BES_XXXX_MUSA-CELIK.json | 6 +- ...BOZ_195X_NL-NB-BRE_XXXX_THEO-MARCELIS.json | 6 +- ...Z_196X_NL-NB-BRE_XXXX_ALBERT-HOEKSTRA.json | 6 +- ...B-BOZ_197X_NL-NB-BOZ_XXXX_INGE-HOMMEL.json | 6 +- ...Z_199X_NL-NB-STE_XXXX_JULIETTE-ROMIJN.json | 6 +- ...B-BRE_197X_NL-NB-MOE_XXXX_ILSE-JANSEN.json | 6 +- ...7X_XX-XX-XXX_XXXX_ROLAND-SCHIJVENAARS.json | 6 +- ...-BRE_198X_NL-NH-HAA_XXXX_WARD-JANSSEN.json | 6 +- ...-BRE_198X_NL-ZH-TH_XXXX_HENK-HUITSING.json | 6 +- ...-NB-BRE_198X_NL-ZH-TH_XXXX_SANNE-KOOL.json | 6 +- ...-BRE_199X_NL-NB-ROO_XXXX_JENNY-JOOSSE.json | 6 +- ...BRE_199X_XX-XX-XXX_XXXX_VICKY-KLEINEN.json | 6 +- ...B-EIN_195X_NL-GE-NIJ_XXXX_BEN-JANSSEN.json | 6 +- ...N_195X_NL-NH-HOO_XXXX_JOHAN-HOLLANDER.json | 6 +- ...X_NL-NB-BRE_XXXX_INE-VRENKENREIJNDERS.json | 6 +- ...-NB-EIN_196X_NL-NB-EIN_XXXX_MARC-WAL.json} | 93 ++++- ...-NB-EIN_196X_NL-NB-TIL_XXXX_CORNE-KOK.json | 6 +- ...196X_NL-NB-VEL_XXXX_JEROEN-DUIVENBODE.json | 6 +- ...B-EIN_196X_NL-NB-VEL_XXXX_JOOST-SMITS.json | 6 +- ..._196X_NL-NB-VEL_XXXX_LEON-VERSTAPPEN.json} | 93 ++++- ...-EIN_197X_NL-NB-EIN_XXXX_DIRK-BROKKEN.json | 6 +- ...-EIN_197X_NL-NB-EIN_XXXX_ERIK-LAMBERS.json | 6 +- ...97X_NL-NB-EIN_XXXX_GUNNAR-TIMMERMANS.json} | 93 ++++- ...EIN_197X_NL-NB-EIN_XXXX_ISHAAN-SHARMA.json | 6 +- ...B-EIN_197X_NL-NB-EIN_XXXX_JOS-HEYDEN.json} | 93 ++++- ..._NL-NB-EIN_197X_NL-NB-EIN_XXXX_LU-GAO.json | 6 +- ...97X_NL-NB-EIN_XXXX_SUPRIYO-CHATTERJEA.json | 6 +- ...IN_197X_NL-NB-TIL_XXXX_DENNIS-EIJSTEN.json | 6 +- ...B-EIN_197X_NL-NB-VEL_XXXX_ERIC-MAROTO.json | 6 +- ...N_198X_NL-LI-MAA_XXXX_JAMIE-PIEROELIE.json | 6 +- ...8X_NL-NB-BOX_XXXX_DANIELLE-STEENBRINK.json | 6 +- ...98X_NL-NB-EIN_XXXX_ABEL-GEBRESILASSIE.json | 6 +- ...EIN_198X_NL-NB-EIN_XXXX_ABHILASH-DASH.json | 6 +- ...N_198X_NL-NB-EIN_XXXX_ALEXANDRE-BUENO.json | 6 +- ...EIN_198X_NL-NB-EIN_XXXX_ALVIN-KHARITS.json | 6 +- ..._NL-NB-EIN_198X_NL-NB-EIN_XXXX_BO-LIU.json | 6 +- ...NB-EIN_198X_NL-NB-EIN_XXXX_CODY-BROWN.json | 6 +- ...-EIN_198X_NL-NB-EIN_XXXX_ERIC-BERKERS.json | 6 +- ...B-EIN_198X_NL-NB-EIN_XXXX_ERNEST-LOBO.json | 6 +- ...IN_198X_NL-NB-EIN_XXXX_FEDERICO-TORRE.json | 6 +- ...EIN_198X_NL-NB-EIN_XXXX_FIGEN-DEMIRER.json | 6 +- ..._198X_NL-NB-EIN_XXXX_FILIPPO-LUSITANI.json | 6 +- ..._198X_NL-NB-EIN_XXXX_GIORGOS-ZOGRAFOS.json | 6 +- ..._198X_NL-NB-EIN_XXXX_GOPAL-MANTRAWADI.json | 6 +- ..._198X_NL-NB-EIN_XXXX_HENRIQUE-MAGESTE.json | 6 +- ...-NB-EIN_198X_NL-NB-EIN_XXXX_JAN-MARCK.json | 6 +- ...B-EIN_198X_NL-NB-EIN_XXXX_LARA-TRUTER.json | 6 +- ...EIN_198X_NL-NB-EIN_XXXX_MAGDY-SHONODA.json | 6 +- ...EIN_198X_NL-NB-EIN_XXXX_MAIKEL-GOOSEN.json | 6 +- ...EIN_198X_NL-NB-EIN_XXXX_MARCEL-MULDER.json | 6 +- ...8X_NL-NB-EIN_XXXX_NAGARAJU-DHULIPALLA.json | 6 +- ...N_198X_NL-NB-EIN_XXXX_PIETER-HORSTMAN.json | 6 +- ...EIN_198X_NL-NB-EIN_XXXX_RALPH-HANZEN.json} | 93 ++++- ...IN_198X_NL-NB-EIN_XXXX_ROBBERT-LINDEN.json | 6 +- ...IN_198X_NL-NB-EIN_XXXX_SAMUEL-CHARLES.json | 6 +- ...-EIN_198X_NL-NB-EIN_XXXX_SANDEEP-YOGI.json | 6 +- ...B-EIN_198X_NL-NB-EIN_XXXX_SEBASTIAN-G.json | 6 +- ...98X_NL-NB-HEL_XXXX_MANJUNATH-MALEPATI.json | 6 +- ...EIN_198X_NL-NB-VEL_XXXX_BAS-KLEUSKENS.json | 6 +- ...EIN_198X_NL-NB-VEL_XXXX_KANNAN-KEIZER.json | 6 +- ...NB-EIN_198X_NL-NB-VEL_XXXX_MIAO-ZHANG.json | 6 +- ...IN_198X_NL-NB-VEL_XXXX_SUPRIYA-MANCHI.json | 6 +- ...-EIN_198X_NL-NB-WAA_XXXX_RALF-WEIJERS.json | 6 +- ...198X_XX-XX-XXX_XXXX_DEVASHRI-KASHYAPE.json | 6 +- ...N_198X_XX-XX-XXX_XXXX_NINA-KLINKHAMER.json | 6 +- ...N_199X_NL-GE-ARN_XXXX_STIJN-MARREWIJK.json | 6 +- ...9X_NL-NB-EIN_XXXX_ABHISHEK-CHANDURKAR.json | 6 +- ...N_199X_NL-NB-EIN_XXXX_ADMASU-GURMESSA.json | 6 +- ...N_199X_NL-NB-EIN_XXXX_AHMED-ABUELFARH.json | 6 +- ...N_199X_NL-NB-EIN_XXXX_ALEXANDER-GRAAF.json | 6 +- ...EIN_199X_NL-NB-EIN_XXXX_ANDRE-KARELSE.json | 6 +- ...9X_NL-NB-EIN_XXXX_ARVIND-RAVICHANDRAN.json | 6 +- ...IN_199X_NL-NB-EIN_XXXX_ASHTON-MENEZES.json | 6 +- ..._NL-NB-EIN_XXXX_CHARALAMBOS-PAPADAKIS.json | 6 +- ...NB-EIN_199X_NL-NB-EIN_XXXX_DAAN-WOUDE.json | 6 +- ..._199X_NL-NB-EIN_XXXX_DIMITRIOS-KENTRO.json | 6 +- ...IN_199X_NL-NB-EIN_XXXX_DORSA-HOSSEINI.json | 6 +- ...N_199X_NL-NB-EIN_XXXX_EMANUELA-CATANA.json | 6 +- ...B-EIN_199X_NL-NB-EIN_XXXX_ENGD-DPENHA.json | 6 +- ...B-EIN_199X_NL-NB-EIN_XXXX_ENGD-TAHIR.json} | 93 ++++- ...EIN_199X_NL-NB-EIN_XXXX_ERIK-SAVENIJE.json | 6 +- ...B-EIN_199X_NL-NB-EIN_XXXX_GIZEM-AKTAS.json | 6 +- ...B-EIN_199X_NL-NB-EIN_XXXX_IMRE-DEHNER.json | 6 +- ...-EIN_199X_NL-NB-EIN_XXXX_JAN-MASTRIGT.json | 6 +- ...-EIN_199X_NL-NB-EIN_XXXX_JOS-SNIJDERS.json | 6 +- ...NB-EIN_199X_NL-NB-EIN_XXXX_KAAN-ERKOC.json | 6 +- ...EIN_199X_NL-NB-EIN_XXXX_KISAKA-MSOFFE.json | 6 +- ...N_199X_NL-NB-EIN_XXXX_LENNART-SIKKENK.json | 6 +- ...EIN_199X_NL-NB-EIN_XXXX_MAKAR-RIABCEV.json | 6 +- ..._199X_NL-NB-EIN_XXXX_MARIJN-DONKELAAR.json | 6 +- ...-EIN_199X_NL-NB-EIN_XXXX_MARION-RIJKS.json | 6 +- ..._NL-NB-EIN_XXXX_PRASANTH-MURALIDHARAN.json | 6 +- ...-EIN_199X_NL-NB-EIN_XXXX_SAMAR-HADDAD.json | 6 +- ...-EIN_199X_NL-NB-EIN_XXXX_SNEHA-SAGALA.json | 6 +- ...IN_199X_NL-NB-EIN_XXXX_VINA-FARAMARZI.json | 6 +- ...-EIN_199X_NL-NB-EIN_XXXX_YOUNES-AOUAJ.json | 6 +- ...-EIN_199X_NL-NB-GEL_XXXX_ROEL-BORGERS.json | 6 +- ...B-EIN_199X_NL-NB-OOS_XXXX_JASPER-GOOS.json | 6 +- ...-EIN_199X_NL-NB-TIL_XXXX_AHMET-COSKUN.json | 6 +- ...EIN_199X_NL-NB-TIL_XXXX_MARLEEN-TRAAS.json | 6 +- ...NB-EIN_199X_NL-NB-VEL_XXXX_ALINA-ONAC.json | 6 +- ...N_199X_NL-NB-VEL_XXXX_DION-VERSCHUREN.json | 6 +- ...NB-EIN_199X_NL-NB-VEL_XXXX_KEVIN-WANG.json | 6 +- ...-EIN_199X_NL-NB-VEL_XXXX_TUGBA-FINDIK.json | 6 +- ...B-EIN_199X_NL-UT-UTR_XXXX_ARAM-MEIJER.json | 6 +- ...IN_199X_XX-XX-XXX_XXXX_OGUZHAN-YILDIZ.json | 6 +- ...EIN_199X_XX-XX-XXX_XXXX_SWATI-KUNWAR.json} | 93 ++++- ...NB-EIN_200X_NL-NB-EIN_XXXX_ALPER-ARAS.json | 6 +- ...B-EIN_200X_NL-NB-EIN_XXXX_ERIK-DEKKER.json | 6 +- ...EIN_200X_NL-NB-EIN_XXXX_SHANE-MILLSON.json | 6 +- ...-NB-EIN_200X_NL-NH-AMS_XXXX_LENA-HAAN.json | 6 +- ...-ETT_195X_NL-GE-DRU_XXXX_CEES-COOIMAN.json | 6 +- ..._NL-NB-ETT_197X_XX-XX-XXX_XXXX_ANNE-V.json | 6 +- ...NB-ETT_199X_NL-NB-ZUN_XXXX_EEFJE-GOOS.json | 6 +- ...-HEL_199X_NL-NB-EIN_XXXX_IGOR-PEREIRA.json | 6 +- ...199X_XX-XX-XXX_XXXX_TRISTEN-STRIJKERT.json | 6 +- ...SS_198X_NL-GE-WAG_XXXX_KARIN-SCHIPPER.json | 6 +- ...IL_195X_NL-ZH-VAL_XXXX_EDUARD-DORMANS.json | 6 +- ...-TIL_196X_NL-NB-VEL_XXXX_KUNO-HUISMAN.json | 12 +- ...-TIL_197X_NL-NH-AMS_XXXX_GURKAN-CELIK.json | 6 +- ...NB-TIL_198X_NL-NB-TIL_XXXX_VERA-DUREN.json | 6 +- ..._198X_NL-NH-AMS_XXXX_PUCK-BASTIAANSEN.json | 6 +- ...R_XXXX_MARIEANNE-KEIZERMITTELHAEUSER.json} | 23 +- ...198X_NL-ZH-LEI_XXXX_NAOMI-DEEGENAARS.json} | 93 ++++- ...TIL_198X_NL-ZH-ROT_XXXX_ENRICO-WELDER.json | 6 +- ...NB-TIL_198X_NL-ZH-TH_XXXX_BIANCA-LOON.json | 6 +- ...-TIL_198X_NL-ZH-TH_XXXX_IBAN-SPIJKERS.json | 6 +- ...-TIL_198X_XX-XX-XXX_XXXX_JORIS-GIELEN.json | 6 +- ...9X_NL-GE-NIJ_XXXX_CARLIJN-BUSSEMAKERS.json | 6 +- ...IL_199X_NL-GE-NIJ_XXXX_RUBEN-ALBRECHT.json | 6 +- ...B-TIL_199X_NL-NB-BOZ_XXXX_ADAM-AHAJAJ.json | 6 +- ...L_199X_NL-NB-BOZ_XXXX_MARK-HOEFNAGELS.json | 6 +- ...-TIL_199X_NL-NB-EIN_XXXX_LUUK-GROENEN.json | 6 +- ...IL_199X_NL-NB-TIL_XXXX_ANWAR-ACHAHBAR.json | 6 +- ...IL_199X_NL-NB-TIL_XXXX_INDIE-LIESHOUT.json | 6 +- ...NL-NB-TIL_199X_NL-NB-TIL_XXXX_MEI-MAN.json | 6 +- ...IL_199X_NL-NB-VEL_XXXX_STEFANI-ILIEVA.json | 6 +- ...IL_199X_NL-UT-MIJ_XXXX_PATRICK-BANIS.json} | 93 ++++- ...L_199X_NL-ZH-ROT_XXXX_DIMITRI-VERZIJL.json | 6 +- ...L_199X_NL-ZH-SCH_XXXX_TJITSKE-HELMICH.json | 6 +- ...-NB-TIL_199X_NL-ZH-TH_XXXX_IRIS-GROOT.json | 6 +- ...-NB-TIL_199X_NL-ZH-TH_XXXX_SVEN-SOKAL.json | 6 +- ...-TIL_199X_XX-XX-XXX_XXXX_ARJAN-MURIQI.json | 6 +- ...NL-NB-TIL_199X_XX-XX-XXX_XXXX_SNEHA-V.json | 6 +- ...TIL_199X_XX-XX-XXX_XXXX_YORAN-SANDERS.json | 6 +- ...B-TIL_200X_NL-NB-VEL_XXXX_ANNA-WIGGEN.json | 6 +- ...-TIL_200X_NL-NB-VEL_XXXX_SANNE-KESSEL.json | 6 +- ...TIL_200X_XX-XX-XXX_XXXX_MARC-VERSTEEG.json | 6 +- ...AL_198X_NL-NB-VAL_XXXX_FLEUR-CARVALHO.json | 6 +- ...-VEG_199X_NL-NB-EIN_XXXX_JASPER-ELSEN.json | 6 +- ...-VEL_196X_NL-NB-VEL_XXXX_JOS-BENSCHOP.json | 6 +- ...VEL_197X_NL-NB-EIN_XXXX_ERWIN-WITKAMP.json | 6 +- ...-VEL_197X_NL-NB-EIN_XXXX_HAROLD-HORCK.json | 6 +- ...EL_197X_XX-XX-XXX_XXXX_FABIO-SBRIZZAI.json | 6 +- ...B-VEL_198X_NL-LI-ROE_XXXX_ANIKA-SMITS.json | 6 +- ...-VEL_198X_NL-NB-EIN_XXXX_CANER-YILMAZ.json | 6 +- ...L_198X_NL-NB-EIN_XXXX_DEBOSREE-SASMAL.json | 6 +- ...-NB-VEL_198X_NL-NB-EIN_XXXX_OZGE-KAYA.json | 6 +- ..._198X_NL-NB-EIN_XXXX_SUMANTA-BHANDARY.json | 6 +- ...EL_198X_NL-NB-VEL_XXXX_CRISTIANE-BOAS.json | 6 +- ...-NB-VEL_198X_NL-NB-VEL_XXXX_IVO-HORST.json | 6 +- ...VEL_198X_NL-NB-VEL_XXXX_KIM-HENDRIKSE.json | 6 +- ...L-NB-VEL_198X_NL-NB-VEL_XXXX_LAURIE-W.json | 6 +- ...B-VEL_198X_NL-NB-VEL_XXXX_MARTIN-KERS.json | 6 +- ...NB-VEL_198X_NL-NB-VEL_XXXX_OSMAN-KALE.json | 6 +- ...EL_198X_NL-NB-VEL_XXXX_SATISH-JAISWAL.json | 6 +- ...VEL_199X_NL-LI-VEN_XXXX_KOEN-CLASSENS.json | 6 +- ...9X_NL-NB-EIN_XXXX_ARYA-KIRATHAMOORTHY.json | 6 +- ...-VEL_199X_NL-NB-EIN_XXXX_BIBIN-THOMAS.json | 6 +- ...99X_NL-NB-EIN_XXXX_KONSTANTINOS-MANOS.json | 6 +- ...EL_199X_NL-NB-EIN_XXXX_LUIS-FERNANDES.json | 6 +- ...L_199X_NL-NB-EIN_XXXX_MOHAMMED-GHIDAN.json | 6 +- ...-VEL_199X_NL-NB-EIN_XXXX_NAOMI-DECKER.json | 6 +- ...-VEL_199X_NL-NB-EIN_XXXX_SAJITH-RAJAN.json | 6 +- ...-VEL_199X_NL-NB-VEL_XXXX_LUCA-SCHRIER.json | 6 +- ..._199X_NL-NB-VEL_XXXX_NARAYANA-ESWARAN.json | 6 +- ...EL_199X_NL-NB-VEL_XXXX_SEPAND-KASHANI.json | 6 +- ...-NB-VEL_199X_XX-XX-XXX_XXXX_BASAK-GUL.json | 6 +- ...9X_XX-XX-XXX_XXXX_SAEEDEH-FAROKHIPOOR.json | 6 +- ...NB-VEL_200X_NL-NB-EIN_XXXX_GIAN-LUCCA.json | 6 +- ...-NB-VEL_200X_NL-NB-EIN_XXXX_IVANO-SNO.json | 6 +- ...-VEL_200X_NL-NB-EIN_XXXX_SHERENA-GAYO.json | 6 +- ...L-NB-VEL_200X_NL-NB-EIN_XXXX_YEE-TEOH.json | 6 +- ...VEL_200X_NL-NB-VEL_XXXX_ADRIAAN-BRINK.json | 6 +- ...-VUG_199X_NL-ZH-TH_XXXX_NINE-CLAASSEN.json | 6 +- ...ZEV_197X_NL-NB-MOE_XXXX_MARIANNE-PAS.json} | 148 ++++--- ...-NH-ALK_195X_NL-NH-ALK_XXXX_LEX-ESSER.json | 6 +- ...-ALK_198X_NL-NH-ALK_XXXX_ERNA-WINTERS.json | 6 +- ...K_198X_NL-NH-AMS_XXXX_MARJORIE-BEEKUM.json | 6 +- ...LK_199X_NL-NH-ALK_XXXX_FEMKE-DIERTENS.json | 6 +- ...-ALK_199X_NL-NH-ALK_XXXX_NOA-DUIJSENS.json | 6 +- ...ALK_199X_NL-NH-AMS_XXXX_MEREL-KOUWETS.json | 6 +- ...00X_NL-NH-MED_XXXX_JESSIE-STELTENPOOL.json | 6 +- ...S_194X_NL-NH-AMS_XXXX_CHARLES-GIELEN.json} | 148 ++++--- ...-NH-AMS_194X_NL-NH-AMS_XXXX_JAAP-HAAG.json | 6 +- ...MS_195X_NL-GE-LOC_XXXX_VINCENT-SLEEBE.json | 6 +- ...MS_195X_NL-NH-AMS_XXXX_CEES-VERMEULEN.json | 6 +- ...AMS_195X_NL-NH-AMS_XXXX_DESIREE-BONIS.json | 6 +- ...-AMS_195X_NL-NH-AMS_XXXX_ERIK-SOMERS.json} | 148 ++++--- ...-AMS_195X_NL-NH-AMS_XXXX_GRANT-SLINGO.json | 6 +- ...NH-AMS_195X_NL-NH-AMS_XXXX_HENNI-BEEK.json | 6 +- ...S_195X_NL-NH-AMS_XXXX_HUIGEN-LEEFLANG.json | 6 +- ...AMS_195X_NL-NH-AMS_XXXX_JAN-SCHINDLER.json | 6 +- ...NH-AMS_195X_NL-NH-AMS_XXXX_LUDO-HALEM.json | 6 +- ...MS_195X_NL-NH-AMS_XXXX_MARLIES-TOOREN.json | 6 +- ...AMS_195X_NL-NH-AMS_XXXX_MILLY-PLOEGER.json | 6 +- ...-AMS_195X_NL-NH-AMS_XXXX_ROB-HENDRIKS.json | 6 +- ...NH-AMS_195X_NL-NH-AMS_XXXX_TON-ISEGER.json | 6 +- ...L-NH-AMS_195X_NL-OV-NED_XXXX_FEBE-MMC.json | 6 +- ...L-NH-AMS_195X_NL-ZH-TH_XXXX_NICO-ATEN.json | 6 +- ...-AMS_196X_NL-FL-AS_XXXX_MARGO-HEKSTRA.json | 6 +- ...MS_196X_NL-GE-ARN_XXXX_PETRA-PETERSEN.json | 6 +- ...AMS_196X_NL-GE-LOC_XXXX_BORIS-MUNNICK.json | 6 +- ...D_NL-NH-AMS_196X_NL-LI-MAA_XXXX_JAC-V.json | 6 +- ...NH-AMS_196X_NL-LI-WEE_XXXX_ANNICK-POL.json | 6 +- ...AMS_196X_NL-NB-OOS_XXXX_ROBERT-PRUIJN.json | 6 +- ...-AMS_196X_NL-NH-AMS_XXXX_ANITA-VRIEND.json | 6 +- ...AMS_196X_NL-NH-AMS_XXXX_ANNELIES-LOON.json | 6 +- ...-NH-AMS_196X_NL-NH-AMS_XXXX_BEN-STOOP.json | 6 +- ...S_196X_NL-NH-AMS_XXXX_BRIGITTE-HEWITT.json | 6 +- ...AMS_196X_NL-NH-AMS_XXXX_BRIGITTE-PARO.json | 6 +- ...L-NH-AMS_196X_NL-NH-AMS_XXXX_CEES-HOF.json | 6 +- ...96X_NL-NH-AMS_XXXX_CHRISTIANE-NAEGELE.json | 6 +- ...S_196X_NL-NH-AMS_XXXX_DANIELLE-JANSEN.json | 6 +- ...NH-AMS_196X_NL-NH-AMS_XXXX_ED-PITSTRA.json | 6 +- ...-NH-AMS_196X_NL-NH-AMS_XXXX_ED-SEWALT.json | 6 +- ...H-AMS_196X_NL-NH-AMS_XXXX_EIKE-HERTOG.json | 6 +- ...H-AMS_196X_NL-NH-AMS_XXXX_GWEN-TAUBER.json | 6 +- ...MS_196X_NL-NH-AMS_XXXX_HILDA-TOMASOUW.json | 6 +- ...-AMS_196X_NL-NH-AMS_XXXX_IRMA-ZEEGERS.json | 6 +- ...-AMS_196X_NL-NH-AMS_XXXX_JANNEKE-WIJK.json | 6 +- ...-AMS_196X_NL-NH-AMS_XXXX_JOKE-BEGEMAN.json | 6 +- ...MS_196X_NL-NH-AMS_XXXX_KARIN-SMOLDERS.json | 6 +- ...-AMS_196X_NL-NH-AMS_XXXX_KARIN-WESTER.json | 6 +- ...-AMS_196X_NL-NH-AMS_XXXX_LENNIE-LANGE.json | 6 +- ...-AMS_196X_NL-NH-AMS_XXXX_LEON-VOSTERS.json | 6 +- ...S_196X_NL-NH-AMS_XXXX_MARIANNE-NOUWEN.json | 6 +- ...H-AMS_196X_NL-NH-AMS_XXXX_MARK-KRACHT.json | 6 +- ...MS_196X_NL-NH-AMS_XXXX_MERCIA-KERKHOF.json | 6 +- ...-AMS_196X_NL-NH-AMS_XXXX_MIRJAM-VENNE.json | 6 +- ...AMS_196X_NL-NH-AMS_XXXX_NICO-LINGBEEK.json | 6 +- ...H-AMS_196X_NL-NH-AMS_XXXX_PIETER-DREU.json | 6 +- ...S_196X_NL-NH-AMS_XXXX_RYCLEF-RIENSTRA.json | 6 +- ...-AMS_196X_NL-NH-AMS_XXXX_SABINE-AARTS.json | 6 +- ...96X_NL-NH-AMS_XXXX_SANDRA-HENNEBERQUE.json | 6 +- ...MS_196X_NL-NH-AMS_XXXX_SANDRA-PLUKKER.json | 6 +- ...NH-AMS_196X_NL-NH-AMS_XXXX_SARA-COHEN.json | 6 +- ...H-AMS_196X_NL-NH-AMS_XXXX_TESSEL-BEEK.json | 6 +- ...MS_196X_NL-NH-AMS_XXXX_TINUS-HOLTHUIS.json | 6 +- ...AMS_196X_NL-NH-AMS_XXXX_TITIA-WISSING.json | 6 +- ...-AMS_196X_NL-NH-AMS_XXXX_WIENEKE-HOEN.json | 6 +- ...-NH-AMS_196X_NL-NH-AMS_XXXX_WIM-SCHOT.json | 6 +- ...L-NH-AMS_196X_NL-NH-AMS_XXXX_WIM-WAGT.json | 6 +- ...96X_NL-NH-BOV_XXXX_ROLAND-BISSCHEROUX.json | 6 +- ...S_196X_NL-NH-BUS_XXXX_MONIQUE-LINDEN.json} | 93 ++++- ...196X_NL-NH-HAA_XXXX_CHARLOTTE-KOSTERS.json | 6 +- ...MS_196X_NL-NH-HAA_XXXX_GERDA-BRINKMAN.json | 6 +- ...96X_NL-NH-HIL_XXXX_JACQUELINE-DIESSEN.json | 6 +- ...-AMS_196X_NL-NH-HIL_XXXX_PAUL-VESTERS.json | 6 +- ...S_196X_NL-NH-HOO_XXXX_CORINA-WILLEGEN.json | 6 +- ...MS_196X_NL-UT-AME_XXXX_MARK-VOORNVELD.json | 6 +- ...MS_196X_NL-UT-UTR_XXXX_CECILE-HARTEN.json} | 148 ++++--- ...AMS_196X_NL-UT-UTR_XXXX_SABIEN-ONVLEE.json | 6 +- ...S_196X_NL-ZH-LEI_XXXX_RENSKE-HEIJUNGS.json | 6 +- ...AMS_196X_NL-ZH-TH_XXXX_ARJAN-POELWIJK.json | 6 +- ...NH-AMS_196X_NL-ZH-TH_XXXX_ESTER-BRUIN.json | 6 +- ...H-AMS_196X_NL-ZH-TH_XXXX_GERA-SNELLER.json | 6 +- ...NH-AMS_196X_NL-ZH-TH_XXXX_MARIJE-BALT.json | 6 +- ...-AMS_196X_NL-ZH-TH_XXXX_MARK-BOOGAARD.json | 6 +- ...NH-AMS_196X_NL-ZH-TH_XXXX_NICOLE-HACK.json | 6 +- ...MS_196X_NL-ZH-TH_XXXX_WERNER-ZONDEROP.json | 6 +- ...H-AMS_196X_XX-XX-XXX_XXXX_BJRN-DEKKER.json | 6 +- ..._196X_XX-XX-XXX_XXXX_EVELINE-NICOLAAS.json | 6 +- ...NH-AMS_196X_XX-XX-XXX_XXXX_HANS-PIENA.json | 6 +- ...AMS_196X_XX-XX-XXX_XXXX_MARC-MOQUETTE.json | 6 +- ...-AMS_196X_XX-XX-XXX_XXXX_MARLIES-LOUZ.json | 6 +- ...MS_197X_BE-VL-ANT_XXXX_JEROEN-MEESTER.json | 6 +- ...S_197X_BE-VL-HOE_XXXX_GWENDOLINE-FIFE.json | 6 +- ...MS_197X_NL-FL-AS_XXXX_TIOLITA-PARDEDE.json | 6 +- ...MS_197X_NL-GE-APE_XXXX_HENK-HOVENKAMP.json | 6 +- ...H-AMS_197X_NL-GE-CUL_XXXX_KITTY-BOGTE.json | 6 +- ...MS_197X_NL-GE-CUL_XXXX_MARIA-LIEVENSE.json | 6 +- ...MS_197X_NL-GE-DOE_XXXX_HESTER-HUITEMA.json | 6 +- ...AMS_197X_NL-GE-OTT_XXXX_BENNO-TEMPEL.json} | 148 ++++--- ...MS_197X_NL-LI-VAA_XXXX_ANDREA-PEETERS.json | 6 +- ..._197X_NL-LI-VEN_XXXX_JULIETTA-ZANDERS.json | 6 +- ...S_197X_NL-NB-BRE_XXXX_CHIDO-HOUBRAKEN.json | 6 +- ...H-AMS_197X_NL-NH-AMS_XXXX_ANNE-JANSEN.json | 6 +- ...MS_197X_NL-NH-AMS_XXXX_ARJUN-WADHAWAN.json | 6 +- ...AMS_197X_NL-NH-AMS_XXXX_ARLETTE-ALTEN.json | 6 +- ...AMS_197X_NL-NH-AMS_XXXX_AZIZ-LAGNAOUI.json | 6 +- ...AMS_197X_NL-NH-AMS_XXXX_BAS-NEDERVEEN.json | 6 +- ...S_197X_NL-NH-AMS_XXXX_CAMILLA-VERWEEL.json | 6 +- ...MS_197X_NL-NH-AMS_XXXX_CARIANNE-DORST.json | 6 +- ...S_197X_NL-NH-AMS_XXXX_CARINE-BRINKMAN.json | 6 +- ..._197X_NL-NH-AMS_XXXX_COLLIN-HOOGEVEEN.json | 6 +- ...197X_NL-NH-AMS_XXXX_DANIELLE-VERSLUIS.json | 6 +- ...H-AMS_197X_NL-NH-AMS_XXXX_DIEGO-MILLO.json | 6 +- ...AMS_197X_NL-NH-AMS_XXXX_EEFJE-WEIJDEN.json | 6 +- ...H-AMS_197X_NL-NH-AMS_XXXX_EEFKE-BORNE.json | 6 +- ...X_NL-NH-AMS_XXXX_ELIF-RONGENKAYNAKCI.json} | 148 ++++--- ...197X_NL-NH-AMS_XXXX_ENDHI-HOUTHUIJSEN.json | 6 +- ...H-AMS_197X_NL-NH-AMS_XXXX_EVA-HERMANS.json | 6 +- ...AMS_197X_NL-NH-AMS_XXXX_EVA-SCHIEVELD.json | 6 +- ...97X_NL-NH-AMS_XXXX_EVELIEN-HOLTROPDOP.json | 6 +- ...-AMS_197X_NL-NH-AMS_XXXX_EVELINE-BOER.json | 6 +- ..._197X_NL-NH-AMS_XXXX_FREDERIQUE-LEEUW.json | 6 +- ...H-AMS_197X_NL-NH-AMS_XXXX_FYONA-FYONA.json | 6 +- ...-AMS_197X_NL-NH-AMS_XXXX_GERI-KLAZEMA.json | 6 +- ..._197X_NL-NH-AMS_XXXX_GIOVANNI-STEFANO.json | 38 +- ...NH-AMS_197X_NL-NH-AMS_XXXX_GUIDO-BOUW.json | 6 +- ...H-AMS_197X_NL-NH-AMS_XXXX_HANNEKE-ACR.json | 6 +- ...-AMS_197X_NL-NH-AMS_XXXX_HARM-STEVENS.json | 6 +- ...97X_NL-NH-AMS_XXXX_HARPERT-MICHIELSEN.json | 6 +- ...-AMS_197X_NL-NH-AMS_XXXX_HELEEN-DRIEL.json | 6 +- ...AMS_197X_NL-NH-AMS_XXXX_HESTER-KUIPER.json | 6 +- ...NH-AMS_197X_NL-NH-AMS_XXXX_INGE-HOVEN.json | 6 +- ...-AMS_197X_NL-NH-AMS_XXXX_INGE-SCHOONE.json | 6 +- ...-NH-AMS_197X_NL-NH-AMS_XXXX_IRIS-KOST.json | 6 +- ...S_197X_NL-NH-AMS_XXXX_JAAP-GULDEMOND.json} | 148 ++++--- ...S_197X_NL-NH-AMS_XXXX_JANNEKE-MARTENS.json | 6 +- ...MS_197X_NL-NH-AMS_XXXX_JEFF-BERGSTROM.json | 6 +- ...-AMS_197X_NL-NH-AMS_XXXX_JELLE-LOTTUM.json | 6 +- ...S_197X_NL-NH-AMS_XXXX_JONATHAN-BIKKER.json | 6 +- ...S_197X_NL-NH-AMS_XXXX_JOOSJE-BENNEKOM.json | 6 +- ...-AMS_197X_NL-NH-AMS_XXXX_JULIA-MOURIK.json | 6 +- ...S_197X_NL-NH-AMS_XXXX_KARIEN-BEERENDS.json | 6 +- ...197X_NL-NH-AMS_XXXX_KARIN-AMATMOEKRIM.json | 6 +- ...AMS_197X_NL-NH-AMS_XXXX_KATRIEN-KEUNE.json | 6 +- ...7X_NL-NH-AMS_XXXX_LIESBETH-GROENEVELD.json | 6 +- ...-AMS_197X_NL-NH-AMS_XXXX_LIESBETH-VEN.json | 6 +- ...197X_NL-NH-AMS_XXXX_MAARTJE-BRATTINGA.json | 6 +- ...AMS_197X_NL-NH-AMS_XXXX_MARIEKE-KLEIN.json | 6 +- ...7X_NL-NH-AMS_XXXX_MARIJKE-SMALLEGANGE.json | 6 +- ...S_197X_NL-NH-AMS_XXXX_MARLIEKE-SCHOEN.json | 6 +- ..._197X_NL-NH-AMS_XXXX_MARLON-BRUINHART.json | 6 +- ...-AMS_197X_NL-NH-AMS_XXXX_MARTIJN-FORM.json | 6 +- ...MS_197X_NL-NH-AMS_XXXX_MAYKEN-JONKMAN.json | 6 +- ...-AMS_197X_NL-NH-AMS_XXXX_MIEKE-SCHAAP.json | 6 +- ...MS_197X_NL-NH-AMS_XXXX_MILOU-HALBESMA.json | 6 +- ...AMS_197X_NL-NH-AMS_XXXX_MIRJAM-LINDEN.json | 6 +- ..._197X_NL-NH-AMS_XXXX_MIRJAM-SHATANAWI.json | 6 +- ...197X_NL-NH-AMS_XXXX_NATHALIE-HEGELSOM.json | 6 +- ...-AMS_197X_NL-NH-AMS_XXXX_NOOR-CROISET.json | 6 +- ...97X_NL-NH-AMS_XXXX_PIM-SCHOONDERWOERD.json | 6 +- ...S_197X_NL-NH-AMS_XXXX_RENSKE-BRINKMAN.json | 6 +- ...AMS_197X_NL-NH-AMS_XXXX_RIK-HOEKSTRA.json} | 148 ++++--- ...-AMS_197X_NL-NH-AMS_XXXX_SANDRA-VRIES.json | 6 +- ...197X_NL-NH-AMS_XXXX_SASKIA-SCHELTJENS.json | 6 +- ...NH-AMS_197X_NL-NH-AMS_XXXX_SHAN-SWART.json | 6 +- ...-AMS_197X_NL-NH-AMS_XXXX_SUZAN-MEIJER.json | 6 +- ...S_197X_NL-NH-AMS_XXXX_SUZANNE-LEEUWEN.json | 6 +- ...NH-AMS_197X_NL-NH-AMS_XXXX_TESSA-HAAN.json | 6 +- ...-AMS_197X_NL-NH-AMS_XXXX_TIJMEN-KWANT.json | 6 +- ...-NH-AMS_197X_NL-NH-AMS_XXXX_VERA-BLOK.json | 6 +- ...7X_NL-NH-AMS_XXXX_VYACHESLAV-TYKHONOV.json | 6 +- ...NH-AMS_197X_NL-NH-ASS_XXXX_SANNE-HOFF.json | 6 +- ...H-AMS_197X_NL-NH-BUS_XXXX_EDO-RIGHINI.json | 6 +- ...H-AMS_197X_NL-NH-HAA_XXXX_FLEUR-SMITH.json | 6 +- ...-AMS_197X_NL-NH-HAA_XXXX_FRANK-SMEETS.json | 6 +- ...-AMS_197X_NL-NH-HAA_XXXX_PATRIS-BOXEL.json | 6 +- ...AMS_197X_NL-NH-HAA_XXXX_WILLEKE-GROOT.json | 6 +- ...AMS_197X_NL-NH-HAA_XXXX_YVETTE-KOPIJN.json | 6 +- ...-NH-AMS_197X_NL-NH-HEI_XXXX_LOEK-ZOON.json | 6 +- ...H-AMS_197X_NL-NH-HIL_XXXX_MARIEKE-MSC.json | 6 +- ...-NH-AMS_197X_NL-NH-PUR_XXXX_DIRK-STAM.json | 6 +- ...-AMS_197X_NL-NH-ZAA_XXXX_BAYRAM-GOKCE.json | 6 +- ...-NH-AMS_197X_NL-OV-DEV_XXXX_GIJS-BOON.json | 6 +- ...97X_NL-UT-BAA_XXXX_MIRJAM-SNEEUWLOPER.json | 6 +- ...S_197X_NL-UT-UTR_XXXX_STELLA-BEMMELEN.json | 6 +- ...MS_197X_NL-UT-WBD_XXXX_MARIANNE-RENSE.json | 6 +- ...MS_197X_NL-ZH-DOR_XXXX_ANNEKE-HEIJDEN.json | 6 +- ...-AMS_197X_NL-ZH-LEI_XXXX_OLGA-CRAPELS.json | 6 +- ...X_NL-ZH-ROT_XXXX_CATELIJNE-MIDDELKOOP.json | 6 +- ...S_197X_NL-ZH-TH_XXXX_ANNELIES-NISPEN.json} | 148 ++++--- ...MS_197X_NL-ZH-TH_XXXX_ARNOLD-OPPELAAR.json | 6 +- ...MS_197X_NL-ZH-TH_XXXX_CHARLENE-DONALD.json | 6 +- ...197X_NL-ZH-TH_XXXX_CHRISTIAN-LINDHOUT.json | 6 +- ...-AMS_197X_NL-ZH-TH_XXXX_DORINE-NORREN.json | 6 +- ..._197X_NL-ZH-TH_XXXX_JEROEN-VANDOMMELE.json | 6 +- ...S_197X_NL-ZH-TH_XXXX_LINDA-REIJNHOUDT.json | 6 +- ..._197X_NL-ZH-TH_XXXX_MARCIA-VALKENHOFF.json | 6 +- ...H-AMS_197X_NL-ZH-TH_XXXX_MICK-POUWELS.json | 6 +- ...-AMS_197X_NL-ZH-TH_XXXX_MINE-TEMURHAN.json | 6 +- ...MS_197X_NL-ZH-TH_XXXX_PETER-KROESKAMP.json | 6 +- ...NH-AMS_197X_NL-ZH-TH_XXXX_RICK-KAMPEN.json | 6 +- ...-AMS_197X_NL-ZH-VOO_XXXX_ILSE-REIJDEN.json | 6 +- ...H-AMS_197X_US-NY-NYC_XXXX_AXEL-RUGER.json} | 165 +++++++- ...NH-AMS_197X_XX-XX-XXX_XXXX_ABEL-BANUS.json | 6 +- ...-AMS_197X_XX-XX-XXX_XXXX_ANN-BLOKLAND.json | 6 +- ..._197X_XX-XX-XXX_XXXX_BERTHIL-HULSEBOS.json | 6 +- ...NL-NH-AMS_197X_XX-XX-XXX_XXXX_CINDY-S.json | 6 +- ...AMS_197X_XX-XX-XXX_XXXX_ERIK-TIGELAAR.json | 6 +- ...-AMS_197X_XX-XX-XXX_XXXX_LIESJE-KLOMP.json | 6 +- ...197X_XX-XX-XXX_XXXX_MAARTEN-RADEMAKER.json | 6 +- ...S_197X_XX-XX-XXX_XXXX_NICOLINE-WIJNJA.json | 6 +- ...H-AMS_197X_XX-XX-XXX_XXXX_NINA-DUGGEN.json | 6 +- ...-NH-AMS_197X_XX-XX-XXX_XXXX_OSKAR-HEK.json | 6 +- ...NH-AMS_197X_XX-XX-XXX_XXXX_SASKIA-MEY.json | 6 +- ...NH-AMS_197X_XX-XX-XXX_XXXX_THEO-SANDE.json | 6 +- ...MS_197X_XX-XX-XXX_XXXX_WOUTER-JURGENS.json | 6 +- ...BR-BRU_XXXX_MARGAUX-ROBERTILINTERMANS.json | 6 +- ...S_198X_BE-VL-ANT_XXXX_SOUFIANE-AMRANI.json | 6 +- ...98X_NL-DR-ASS_XXXX_CAROLA-STEENBERGEN.json | 6 +- ...S_198X_NL-DR-COE_XXXX_ALBERT-TIESINGA.json | 6 +- ...S_198X_NL-GE-NIJ_XXXX_GERRIT-ENGBERTS.json | 6 +- ..._198X_NL-GE-NUN_XXXX_ANGELIQUE-AARDEN.json | 6 +- ...H-AMS_198X_NL-LI-MAA_XXXX_BRUNO-BOURS.json | 6 +- ...AMS_198X_NL-LI-MAA_XXXX_IRENE-SCHRIER.json | 6 +- ...H-AMS_198X_NL-NB-BOZ_XXXX_ANNA-LINGEN.json | 6 +- ...-NH-AMS_198X_NL-NB-BOZ_XXXX_JEAN-POOT.json | 6 +- ...198X_NL-NB-TIL_XXXX_SASKIA-OUDHEUSDEN.json | 6 +- ...S_198X_NL-NH-ALK_XXXX_DANIELLE-MOURIK.json | 6 +- ..._198X_NL-NH-ALK_XXXX_FREDERIEK-BROEKE.json | 6 +- ...-NH-AMS_198X_NL-NH-ALK_XXXX_MARK-BOER.json | 6 +- ...NH-AMS_198X_NL-NH-ALK_XXXX_SARA-DOORN.json | 6 +- ...H-AMS_198X_NL-NH-AMS_XXXX_AMBER-CHIJS.json | 6 +- ...S_198X_NL-NH-AMS_XXXX_ANNA-DABROWSKA.json} | 148 ++++--- ...-AMS_198X_NL-NH-AMS_XXXX_ANNA-MEIJER.json} | 148 ++++--- ...MS_198X_NL-NH-AMS_XXXX_ANNEKE-RUBBENS.json | 6 +- ...98X_NL-NH-AMS_XXXX_ANNEMIEKE-BOUWMANS.json | 6 +- ...MS_198X_NL-NH-AMS_XXXX_ANNETTE-MATSER.json | 6 +- ...H-AMS_198X_NL-NH-AMS_XXXX_ANNIEK-VRIJ.json | 6 +- ...H-AMS_198X_NL-NH-AMS_XXXX_ARMAN-SAHIN.json | 6 +- ...S_198X_NL-NH-AMS_XXXX_BABETTE-WEHKAMP.json | 6 +- ..._198X_NL-NH-AMS_XXXX_BARBARA-OUDEJANS.json | 6 +- ...98X_NL-NH-AMS_XXXX_BASTIAAN-STEVERINK.json | 6 +- ...98X_NL-NH-AMS_XXXX_BENJAMIN-STIPHOUT.json} | 148 ++++--- ...8X_NL-NH-AMS_XXXX_CHANTALLE-VALENTIJN.json | 6 +- ..._198X_NL-NH-AMS_XXXX_CHRIS-DIJKSHOORN.json | 6 +- ..._NL-NH-AMS_XXXX_CISKA-VEREERTBRUGGHEN.json | 6 +- ...MS_198X_NL-NH-AMS_XXXX_CONNY-KRISTEL.json} | 148 ++++--- ...S_198X_NL-NH-AMS_XXXX_CORNELIE-MUHREN.json | 6 +- ...-AMS_198X_NL-NH-AMS_XXXX_DANA-MELCHAR.json | 6 +- ..._198X_NL-NH-AMS_XXXX_DANIEL-BOTTELIER.json | 6 +- ..._198X_NL-NH-AMS_XXXX_DANIELLE-MEESTER.json | 6 +- ...H-AMS_198X_NL-NH-AMS_XXXX_DAVID-KLOOS.json | 6 +- ...NH-AMS_198X_NL-NH-AMS_XXXX_ELLEN-BORK.json | 6 +- ...198X_NL-NH-AMS_XXXX_FRANCK-NEDERSTIGT.json | 6 +- ...S_198X_NL-NH-AMS_XXXX_GEERKE-CATSHOEK.json | 6 +- ...MS_198X_NL-NH-AMS_XXXX_GEOFFREY-BOSCH.json | 6 +- ...-AMS_198X_NL-NH-AMS_XXXX_GIJS-ANSEEUW.json | 6 +- ...NL-NH-AMS_XXXX_HANSMARTIJN-GROENEVELD.json | 6 +- ...AMS_198X_NL-NH-AMS_XXXX_HARMA-UFFELEN.json | 6 +- ...-AMS_198X_NL-NH-AMS_XXXX_HYLKE-STREEF.json | 6 +- ...NH-AMS_198X_NL-NH-AMS_XXXX_ILIAS-ZIAN.json | 6 +- ...MS_198X_NL-NH-AMS_XXXX_INGE-WILLEMSEN.json | 6 +- ...H-AMS_198X_NL-NH-AMS_XXXX_INKA-PIJPER.json | 6 +- ...MS_198X_NL-NH-AMS_XXXX_ISABEL-ERISMAN.json | 6 +- ...-NH-AMS_198X_NL-NH-AMS_XXXX_IZAK-DREU.json | 6 +- ...AMS_198X_NL-NH-AMS_XXXX_JAN-ADRICHEM.json} | 158 +++---- ...H-AMS_198X_NL-NH-AMS_XXXX_JASPER-HORN.json | 6 +- ...H-AMS_198X_NL-NH-AMS_XXXX_JOOST-BURGT.json | 6 +- ...H-AMS_198X_NL-NH-AMS_XXXX_JOOST-HULST.json | 6 +- ...-AMS_198X_NL-NH-AMS_XXXX_JOSHUA-DOBBS.json | 6 +- ...-AMS_198X_NL-NH-AMS_XXXX_JULIA-WAGNER.json | 6 +- ...H-AMS_198X_NL-NH-AMS_XXXX_KASHIF-AMIN.json | 6 +- ...H-AMS_198X_NL-NH-AMS_XXXX_KELLY-DAVIS.json | 6 +- ..._198X_NL-NH-AMS_XXXX_LISA-SMITVERMEER.json | 6 +- ...-NH-AMS_198X_NL-NH-AMS_XXXX_LISE-LISE.json | 6 +- ..._198X_NL-NH-AMS_XXXX_LISELOTTE-MEIJER.json | 6 +- ...-AMS_198X_NL-NH-AMS_XXXX_LOTTE-JAEGER.json | 6 +- ...AMS_198X_NL-NH-AMS_XXXX_MANOUK-HEIDEN.json | 6 +- ...MS_198X_NL-NH-AMS_XXXX_MARA-LAGERWEIJ.json | 6 +- ...-AMS_198X_NL-NH-AMS_XXXX_MARGOT-SANDE.json | 6 +- ...-AMS_198X_NL-NH-AMS_XXXX_MARIEKE-JONG.json | 6 +- ...MS_198X_NL-NH-AMS_XXXX_MARION-CONNECT.json | 6 +- ...MS_198X_NL-NH-AMS_XXXX_MARJOLEIN-KOEK.json | 6 +- ...NH-AMS_198X_NL-NH-AMS_XXXX_MARK-COLLY.json | 6 +- ...NL-NH-AMS_XXXX_MARLIES-CORDIAROELOFFS.json | 6 +- ...S_198X_NL-NH-AMS_XXXX_MIGUEL-HEILBRON.json | 6 +- ...AMS_198X_NL-NH-AMS_XXXX_MIRJAM-LOBBES.json | 6 +- ...S_198X_NL-NH-AMS_XXXX_MITCHELL-ESAJAS.json | 6 +- ...198X_NL-NH-AMS_XXXX_NICKY-SLINGERLAND.json | 6 +- ...MS_198X_NL-NH-AMS_XXXX_NIENKE-WOLTMAN.json | 6 +- ...S_198X_NL-NH-AMS_XXXX_NINA-FOLKERSMA.json} | 148 ++++--- ...AMS_198X_NL-NH-AMS_XXXX_RAINIER-STAAL.json | 6 +- ...MS_198X_NL-NH-AMS_XXXX_RENSKE-SUIJVER.json | 6 +- ...NH-AMS_198X_NL-NH-AMS_XXXX_RETO-SPECK.json | 6 +- ...-NH-AMS_198X_NL-NH-AMS_XXXX_ROBIN-FOK.json | 6 +- ...MS_198X_NL-NH-AMS_XXXX_ROEL-SPRANGERS.json | 6 +- ...MS_198X_NL-NH-AMS_XXXX_RONALD-NIJBOER.json | 6 +- ...AMS_198X_NL-NH-AMS_XXXX_SANDER-DAAMS.json} | 158 +++---- ...MS_198X_NL-NH-AMS_XXXX_SANDRA-PASTOOR.json | 6 +- ...L-NH-AMS_198X_NL-NH-AMS_XXXX_SARA-TAS.json | 6 +- ...MS_198X_NL-NH-AMS_XXXX_SARAH-SPRENGER.json | 6 +- ...H-AMS_198X_NL-NH-AMS_XXXX_SASHA-STONE.json | 6 +- ...S_198X_NL-NH-AMS_XXXX_SHANNON-MUIJDEN.json | 6 +- ...H-AMS_198X_NL-NH-AMS_XXXX_SHANOY-KOEL.json | 6 +- ...S_198X_NL-NH-AMS_XXXX_SIETSE-WIELENGA.json | 6 +- ...AMS_198X_NL-NH-AMS_XXXX_SIHAM-RAZOUKI.json | 6 +- ..._NL-NH-AMS_XXXX_SONIA-GUNNINGLIEVAART.json | 6 +- ..._198X_NL-NH-AMS_XXXX_STEFANIE-WEELAND.json | 6 +- ...8X_NL-NH-AMS_XXXX_STEPHANIE-ARCHANGEL.json | 16 +- ...MS_198X_NL-NH-AMS_XXXX_SVEN-STEVENSON.json | 6 +- ...S_198X_NL-NH-AMS_XXXX_THIJS-GERBRANDY.json | 6 +- ...198X_NL-NH-AMS_XXXX_VALERIA-MARTIELLI.json | 6 +- ...198X_NL-NH-AMS_XXXX_VALERIA-VASILYEVA.json | 6 +- ...S_198X_NL-NH-AMS_XXXX_VIRGINIO-MIDILI.json | 6 +- ...S_198X_NL-NH-AMS_XXXX_WARD-BERENSCHOT.json | 6 +- ...MS_198X_NL-NH-AMS_XXXX_WILLEMIJN-BERG.json | 6 +- ...198X_NL-NH-BUS_XXXX_ROOS-MUNTENRONNER.json | 6 +- ..._198X_NL-NH-HAA_XXXX_ALISSA-REIJNDERS.json | 6 +- ..._198X_NL-NH-HAA_XXXX_ANTOINET-NIJSSEN.json | 6 +- ..._198X_NL-NH-HAA_XXXX_HANNAH-GOEDBLOED.json | 6 +- ...NH-AMS_198X_NL-NH-HAA_XXXX_WENDY-LITH.json | 6 +- ..._198X_NL-NH-HEE_XXXX_SARAH-BROEKHOVEN.json | 6 +- ...AMS_198X_NL-NH-HEE_XXXX_VERA-WIERSEMA.json | 6 +- ...AMS_198X_NL-NH-HEI_XXXX_BARTJAN-STEEN.json | 6 +- ...198X_NL-NH-HIL_XXXX_CLAIRE-PHANTANLUU.json | 6 +- ...-AMS_198X_NL-NH-KRO_XXXX_SUZANNE-KROM.json | 6 +- ...AMS_198X_NL-NH-PUR_XXXX_MATHILDE-KORS.json | 6 +- ...S_198X_NL-NH-ZAA_XXXX_BRIAN-KERKHOVEN.json | 6 +- ...MS_198X_NL-OV-NED_XXXX_ROXANNE-DEKKER.json | 6 +- ...S_198X_NL-OV-ZWO_XXXX_ANNEMIEK-PUNTER.json | 6 +- ...AMS_198X_NL-UT-AME_XXXX_MARLIJN-FLEER.json | 6 +- ...H-AMS_198X_NL-UT-AME_XXXX_PETRA-LINKS.json | 6 +- ...MS_198X_NL-UT-SOE_XXXX_DENNIS-VELTROP.json | 6 +- ...AMS_198X_NL-UT-UTR_XXXX_ARTHUR-MULLER.json | 6 +- ...S_198X_NL-UT-UTR_XXXX_FRANCISCA-PRIEM.json | 6 +- ...-AMS_198X_NL-UT-UTR_XXXX_IVAN-HENCZYK.json | 6 +- ...-NH-AMS_198X_NL-UT-UTR_XXXX_NINA-POST.json | 6 +- ...X_NL-UT-WOE_XXXX_DEBORA-DHONTDIELEMAN.json | 6 +- ...-AMS_198X_NL-ZH-AAD_XXXX_MARCO-ROLING.json | 6 +- ..._198X_NL-ZH-DOR_XXXX_ELLA-KOKMAJEWSKA.json | 6 +- ...AMS_198X_NL-ZH-HIL_XXXX_NATALIE-GROOT.json | 6 +- ...198X_NL-ZH-LEI_XXXX_GRACIELLA-ROOSIEN.json | 6 +- ...-AMS_198X_NL-ZH-LEI_XXXX_JOS-BOERTIES.json | 6 +- ...MS_198X_NL-ZH-LEI_XXXX_MAAIKE-PILGRAM.json | 6 +- ...H-AMS_198X_NL-ZH-LEI_XXXX_URI-SHIMRON.json | 6 +- ...MS_198X_NL-ZH-ROT_XXXX_LIES-BRILLEMAN.json | 6 +- ...H-AMS_198X_NL-ZH-ROT_XXXX_STEFAN-KULK.json | 6 +- ...NL-ZH-TH_XXXX_ANNEKATELIJNE-ROTTEVEEL.json | 6 +- ...-NH-AMS_198X_NL-ZH-TH_XXXX_ARJAN-JONG.json | 6 +- ...NH-AMS_198X_NL-ZH-TH_XXXX_DR-JANSSEN.json} | 158 +++---- ...H-AMS_198X_NL-ZH-TH_XXXX_ERWIN-VISSER.json | 6 +- ...AMS_198X_NL-ZH-TH_XXXX_ILONKA-KOLTHOF.json | 6 +- ...MS_198X_NL-ZH-TH_XXXX_LISA-KLEYENBERG.json | 6 +- ...MS_198X_NL-ZH-TH_XXXX_NOUT-WOUDENBERG.json | 6 +- ...NH-AMS_198X_NL-ZH-TH_XXXX_SIMONE-POST.json | 6 +- ...S_198X_NL-ZH-TH_XXXX_STEPHANIE-DEIJEN.json | 6 +- ...-AMS_198X_NL-ZH-TH_XXXX_TAMARA-VENEMA.json | 6 +- ...-AMS_198X_NL-ZH-TH_XXXX_THOMAS-VERGNA.json | 6 +- ...S_198X_NL-ZH-TH_XXXX_VINCENT-KLEIJNEN.json | 6 +- ...MS_198X_NL-ZH-TH_XXXX_WOUTERJAN-WOUDE.json | 6 +- ..._198X_XX-XX-XXX_XXXX_CARLIJN-LIESHOUT.json | 6 +- ...MS_198X_XX-XX-XXX_XXXX_CARMEN-GIMENEZ.json | 6 +- ...S_198X_XX-XX-XXX_XXXX_CHRIS-PIETERSON.json | 6 +- ...NH-AMS_198X_XX-XX-XXX_XXXX_DAVID-BOER.json | 6 +- ...-AMS_198X_XX-XX-XXX_XXXX_EVELINE-BAAS.json | 6 +- ...MS_198X_XX-XX-XXX_XXXX_FATIN-LUIJSTER.json | 6 +- ..._198X_XX-XX-XXX_XXXX_FLOOR-TEMPELAARS.json | 6 +- ...AMS_198X_XX-XX-XXX_XXXX_HELEN-JOHNSON.json | 6 +- ...AMS_198X_XX-XX-XXX_XXXX_IRIS-FRERICHS.json | 6 +- ...NH-AMS_198X_XX-XX-XXX_XXXX_IRMA-VRIES.json | 6 +- ...H-AMS_198X_XX-XX-XXX_XXXX_JOERI-VOOGT.json | 6 +- ...MS_198X_XX-XX-XXX_XXXX_JORINDE-KOENEN.json | 6 +- ...H-AMS_198X_XX-XX-XXX_XXXX_MARGJE-VUGT.json | 6 +- ...MS_198X_XX-XX-XXX_XXXX_MARIAN-COUSIJN.json | 6 +- ...S_198X_XX-XX-XXX_XXXX_RABIEN-BABOELAL.json | 6 +- ...H-AMS_198X_XX-XX-XXX_XXXX_RANA-ABBAWI.json | 6 +- ...NH-AMS_198X_XX-XX-XXX_XXXX_ROBIN-MAAT.json | 6 +- ...NH-AMS_198X_XX-XX-XXX_XXXX_ROMY-MUSTE.json | 6 +- ...H-AMS_198X_XX-XX-XXX_XXXX_SASCHA-MEER.json | 6 +- ...98X_XX-XX-XXX_XXXX_SERWENDA-JONGBLOED.json | 6 +- ...-AMS_198X_XX-XX-XXX_XXXX_SIMON-KONING.json | 6 +- ...MS_198X_XX-XX-XXX_XXXX_TANYA-BELIAEVA.json | 6 +- ...-NH-AMS_198X_XX-XX-XXX_XXXX_TIM-ESSEN.json | 6 +- ..._199X_BE-BR-BRU_XXXX_BABETTE-MAGERMAN.json | 6 +- ...AMS_199X_BE-BR-BRU_XXXX_ISAURE-MAHIAT.json | 6 +- ...S_199X_NL-FL-AS_XXXX_REMCO-ZWEZEREIJN.json | 6 +- ...H-AMS_199X_NL-GE-APE_XXXX_INEKE-VRIES.json | 6 +- ...AMS_199X_NL-GE-APE_XXXX_STEFAN-RUTTEN.json | 6 +- ..._199X_NL-GE-ARN_XXXX_PAULIEN-COOPMANS.json | 6 +- ...E-REN_XXXX_GERLINE-SONNEVELDTREURNIET.json | 6 +- ..._199X_NL-GE-WAR_XXXX_MARTE-BARENDREGT.json | 6 +- ...MS_199X_NL-LI-MAA_XXXX_STERRE-BOESSEN.json | 6 +- ...-AMS_199X_NL-NB-BOZ_XXXX_KARIN-HARTEN.json | 6 +- ...H-AMS_199X_NL-NB-EIN_XXXX_CHUCHEN-CAI.json | 6 +- ...H-AMS_199X_NL-NB-EIN_XXXX_DAVID-VOCHT.json | 6 +- ...L-NH-AMS_199X_NL-NB-EIN_XXXX_ZEINAB-B.json | 6 +- ...-NH-AMS_199X_NL-NH-AAL_XXXX_BENTE-TAS.json | 6 +- ...99X_NL-NH-ALK_XXXX_ANNEMAARTJE-STRIEN.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_AAFKE-WELLER.json | 6 +- ...NL-NH-AMS_199X_NL-NH-AMS_XXXX_AHLEM-T.json | 6 +- ...9X_NL-NH-AMS_XXXX_ALBA-ALVAREZMARTIN.json} | 23 +- ...9X_NL-NH-AMS_XXXX_ALEXANDRA-NEDERLOF.json} | 148 ++++--- ...-AMS_199X_NL-NH-AMS_XXXX_ALICIA-HOOST.json | 6 +- ...MS_199X_NL-NH-AMS_XXXX_AMIE-GALBRAITH.json | 6 +- ...L-NH-AMS_199X_NL-NH-AMS_XXXX_ANGELA-V.json | 6 +- ..._NL-NH-AMS_XXXX_ANGUELITO-KERTOKARIJO.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_ANNA-LINDERS.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_ANNE-MOURIK.json} | 148 ++++--- ...-AMS_199X_NL-NH-AMS_XXXX_ANNE-SCHMID.json} | 148 ++++--- ...MS_199X_NL-NH-AMS_XXXX_ANNE-STEEGSTRA.json | 6 +- ...199X_NL-NH-AMS_XXXX_ANNELIZE-BOURCIER.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_ANTHONY-DEAN.json | 6 +- ..._199X_NL-NH-AMS_XXXX_ANTHONY-TEODOSIO.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_ANTONIO-MSEC.json | 6 +- ...199X_NL-NH-AMS_XXXX_ARDJUNA-CANDOTTI.json} | 148 ++++--- ...S_199X_NL-NH-AMS_XXXX_ASPASIA-KOPSIDA.json | 6 +- ...9X_NL-NH-AMS_XXXX_AUSTEJA-MACKELAITE.json} | 148 ++++--- ..._199X_NL-NH-AMS_XXXX_BASTIENNE-JANSEN.json | 6 +- ...NH-AMS_199X_NL-NH-AMS_XXXX_BRAM-BERG.json} | 148 ++++--- ...-AMS_199X_NL-NH-AMS_XXXX_BURHAN-UYGUN.json | 6 +- ...99X_NL-NH-AMS_XXXX_CARMEN-MANDUAPESSY.json | 6 +- ...NH-AMS_199X_NL-NH-AMS_XXXX_CEES-GROOT.json | 6 +- ...MS_199X_NL-NH-AMS_XXXX_CHANGDUK-KANG.json} | 148 ++++--- ...199X_NL-NH-AMS_XXXX_CHARL-LANDVREUGD.json} | 148 ++++--- ..._199X_NL-NH-AMS_XXXX_CHARLOTTE-SCHOON.json | 6 +- ...99X_NL-NH-AMS_XXXX_CHARLOTTE-SPIERING.json | 6 +- ...S_199X_NL-NH-AMS_XXXX_CLAIRE-BOOGAARD.json | 6 +- ...H-AMS_199X_NL-NH-AMS_XXXX_CLAIRE-ELS.json} | 148 ++++--- ...-NH-AMS_199X_NL-NH-AMS_XXXX_DIDO-WOLF.json | 6 +- ...H-AMS_199X_NL-NH-AMS_XXXX_DIRKJE-KROM.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_ELINE-PALTHE.json | 6 +- ...S_199X_NL-NH-AMS_XXXX_ELIZA-WALRAVEN.json} | 148 ++++--- ...NH-AMS_199X_NL-NH-AMS_XXXX_EPCO-RUNIA.json | 6 +- ...NH-AMS_199X_NL-NH-AMS_XXXX_ERIK-BOELS.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_FABIO-ZAFFORA.json | 6 +- ...H-AMS_199X_NL-NH-AMS_XXXX_FANNY-BAARS.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_FEMKE-HUISMAN.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_FLOOR-MAFAIT.json | 6 +- ...H-AMS_199X_NL-NH-AMS_XXXX_FREIJA-DIJK.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_FROUKE-VELDEN.json | 6 +- ...-NH-AMS_199X_NL-NH-AMS_XXXX_GAIA-JOOR.json | 6 +- ..._199X_NL-NH-AMS_XXXX_GIOVANNI-VECCARO.json | 6 +- ...NH-AMS_199X_NL-NH-AMS_XXXX_HANNA-TIEL.json | 6 +- ...MS_199X_NL-NH-AMS_XXXX_HANNAH-ZWAVING.json | 6 +- ...MS_199X_NL-NH-AMS_XXXX_HANNEKE-KESSEL.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_HARRIET-SMITH.json | 6 +- ...MS_199X_NL-NH-AMS_XXXX_ILAN-VERMEULEN.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_ILSE-STEEMAN.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_IMARA-LIMON.json} | 148 ++++--- ..._199X_NL-NH-AMS_XXXX_INGEBORG-SANDERS.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_IRIS-RIJSMAN.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_JALEESA-CLOWS.json | 6 +- ...H-AMS_199X_NL-NH-AMS_XXXX_JAN-SENGERS.json | 6 +- ...199X_NL-NH-AMS_XXXX_JANNEKE-WESSELING.json | 6 +- ...S_199X_NL-NH-AMS_XXXX_JESSE-POSTHUMUS.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_JESSICA-SANDE.json | 6 +- ...H-AMS_199X_NL-NH-AMS_XXXX_JOHN-KEIZER.json | 6 +- ...L-NH-AMS_199X_NL-NH-AMS_XXXX_JOKO-WIT.json | 6 +- ...MS_199X_NL-NH-AMS_XXXX_JOSEPHINA-FOUW.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_JULIA-ALVARES.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_KAMELIA-ERICH.json | 6 +- ...NL-NH-AMS_199X_NL-NH-AMS_XXXX_KAY-KOK.json | 6 +- ...NH-AMS_199X_NL-NH-AMS_XXXX_KAYLEIGH-W.json | 6 +- ...H-AMS_199X_NL-NH-AMS_XXXX_KIM-IJNTEMA.json | 6 +- ...99X_NL-NH-AMS_XXXX_KONSTANTINOS-DIMOS.json | 6 +- ...NH-AMS_199X_NL-NH-AMS_XXXX_KOOT-LUTON.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_LAURIEN-WERFF.json | 6 +- ..._199X_NL-NH-AMS_XXXX_LENTINE-SCHOUTEN.json | 6 +- ..._NL-NH-AMS_199X_NL-NH-AMS_XXXX_LISA-G.json | 6 +- ...L-NH-AMS_199X_NL-NH-AMS_XXXX_LOES-ARK.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_LOUISA-MIESEN.json | 6 +- ...H-AMS_199X_NL-NH-AMS_XXXX_LOVRO-KRALJ.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_LUCA-MERLIJN.json | 6 +- ...H-AMS_199X_NL-NH-AMS_XXXX_LUCAS-VRIES.json | 6 +- ...S_199X_NL-NH-AMS_XXXX_MAAIKE-GRINSVEN.json | 6 +- ...S_199X_NL-NH-AMS_XXXX_MAARTJE-VERINGA.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_MADE-PINATIH.json} | 148 ++++--- ...NH-AMS_199X_NL-NH-AMS_XXXX_MARC-BOLLE.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_MARCIN-KLAZES.json | 6 +- ...S_199X_NL-NH-AMS_XXXX_MARGUERITE-POLL.json | 6 +- ..._199X_NL-NH-AMS_XXXX_MARIBEL-HETHARIA.json | 6 +- ...H-AMS_199X_NL-NH-AMS_XXXX_MARIJE-HAAN.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_MARIJE-JANSEN.json | 6 +- ..._199X_NL-NH-AMS_XXXX_MARIJE-VELLEKOOP.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_MARIN-RAPPARD.json | 6 +- ...S_199X_NL-NH-AMS_XXXX_MAUREEN-SCHEPEL.json | 6 +- ...S_199X_NL-NH-AMS_XXXX_MEHMET-KOCAOGLU.json | 6 +- ...MS_199X_NL-NH-AMS_XXXX_MIEL-SCHREUDER.json | 6 +- ...S_199X_NL-NH-AMS_XXXX_MILES-NIEMEIJER.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_NADINE-BOERS.json | 6 +- ...199X_NL-NH-AMS_XXXX_NATHALIE-MACIESZA.json | 6 +- ...-NH-AMS_199X_NL-NH-AMS_XXXX_NIELS-RAS.json | 6 +- ...MS_199X_NL-NH-AMS_XXXX_NOUCHKA-KEYSER.json | 6 +- ...-NH-AMS_199X_NL-NH-AMS_XXXX_PAUL-JONG.json | 6 +- ...H-AMS_199X_NL-NH-AMS_XXXX_PIETER-BOTS.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_RIK-HELWEGEN.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_RODMER-LANGE.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_ROLIEN-BAART.json | 6 +- ...MS_199X_NL-NH-AMS_XXXX_RONALD-ANSMINK.json | 6 +- ...MS_199X_NL-NH-AMS_XXXX_ROWAN-OLIEROOK.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_SARA-BOCCARDO.json | 6 +- ...H-AMS_199X_NL-NH-AMS_XXXX_SARA-WIEMAN.json | 6 +- ...H-AMS_199X_NL-NH-AMS_XXXX_SASCHA-HEIJ.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_SASKIA-ALTENA.json | 6 +- ...S_199X_NL-NH-AMS_XXXX_SHIVANI-JAGROEP.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_SJOERD-AARDEN.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_SUZANNE-REUS.json | 6 +- ...NL-NH-AMS_199X_NL-NH-AMS_XXXX_SYLKE-C.json | 6 +- ..._199X_NL-NH-AMS_XXXX_TAMARA-SCHUKKING.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_TARIQ-ETTAJI.json | 6 +- ...NH-AMS_199X_NL-NH-AMS_XXXX_TESS-ROOIJ.json | 6 +- ...-AMS_199X_NL-NH-AMS_XXXX_THOMAS-GROOT.json | 6 +- ...199X_NL-NH-AMS_XXXX_TJITSKE-SCHILTMAN.json | 6 +- ...199X_NL-NH-AMS_XXXX_VALENTINA-INFANTI.json | 6 +- ...AMS_199X_NL-NH-AMS_XXXX_VICTORIA-WARD.json | 6 +- ...MS_199X_NL-NH-AMS_XXXX_VINCENT-GORTER.json | 6 +- ...H-AMS_199X_NL-NH-AMS_XXXX_WENDY-OAKES.json | 6 +- ...9X_NL-NH-BUS_XXXX_JACQUELINE-DEKNATEL.json | 6 +- ...H-AMS_199X_NL-NH-BUS_XXXX_SARAH-VRIES.json | 6 +- ...S_199X_NL-NH-DIE_XXXX_ERNST-PLEIJSIER.json | 6 +- ...S_199X_NL-NH-DIE_XXXX_LOES-DORRESTEIN.json | 6 +- ..._199X_NL-NH-DIE_XXXX_MEREL-DIJKHUIZEN.json | 6 +- ...NH-AMS_199X_NL-NH-DIE_XXXX_SUUS-LOPES.json | 6 +- ...NH-AMS_199X_NL-NH-DIE_XXXX_ZORA-ONINK.json | 6 +- ...MS_199X_NL-NH-DUI_XXXX_KARIN-LIEFTINK.json | 6 +- ...199X_NL-NH-ENK_XXXX_AYSENUR-GOGEBAKAN.json | 6 +- ...AMS_199X_NL-NH-HAA_XXXX_ANNA-LAKMAKER.json | 6 +- ...-AMS_199X_NL-NH-HAA_XXXX_IRIS-BLOKKER.json | 6 +- ...AMS_199X_NL-NH-HAA_XXXX_KOEN-SNIJDERS.json | 6 +- ...S_199X_NL-NH-HAA_XXXX_MARTINE-HULSHOF.json | 6 +- ...AMS_199X_NL-NH-HAA_XXXX_ROSANNE-SPEET.json | 6 +- ...AMS_199X_NL-NH-HIL_XXXX_DAAN-PLAIZIER.json | 6 +- ...-AMS_199X_NL-NH-HIL_XXXX_EMMA-SLUYTER.json | 6 +- ...MS_199X_NL-NH-HIL_XXXX_SANDER-BLIKMAN.json | 6 +- ..._199X_NL-NH-HOO_XXXX_LOES-EKHARTKNIJN.json | 6 +- ...-AMS_199X_NL-NH-HOO_XXXX_LOES-PITSTRA.json | 6 +- ...-AMS_199X_NL-NH-HOO_XXXX_PIETER-PLOMP.json | 6 +- ...MS_199X_NL-NH-HOO_XXXX_REMCO-BOUWLAND.json | 6 +- ...-AMS_199X_NL-NH-HOO_XXXX_ROOS-KAAGMAN.json | 6 +- ...S_199X_NL-NH-SCH_XXXX_LISETTE-BLOKKER.json | 6 +- ...-AMS_199X_NL-NH-UIT_XXXX_MAJORIE-BOER.json | 6 +- ...-AMS_199X_NL-NH-ZAA_XXXX_AMBER-HONING.json | 6 +- ...S_199X_NL-NH-ZAA_XXXX_FRANCIS-BEEKINK.json | 6 +- ..._199X_NL-NH-ZAA_XXXX_SANDER-HEHANUSSA.json | 6 +- ...NL-OV-OLS_XXXX_LEONIEK-DAMMANVRIELINK.json | 6 +- ...-AMS_199X_NL-UT-MAA_XXXX_LIEKE-BREMER.json | 6 +- ...AMS_199X_NL-UT-UTR_XXXX_FOUAD-BOUKRAA.json | 6 +- ...NH-AMS_199X_NL-UT-UTR_XXXX_IMKE-LANGE.json | 6 +- ...MS_199X_NL-UT-UTR_XXXX_JANNEKE-WONING.json | 6 +- ...S_199X_NL-UT-UTR_XXXX_MYRTE-LEGERSTEE.json | 6 +- ...MS_199X_NL-UT-UTR_XXXX_SANDER-KEIJZER.json | 6 +- ...9X_NL-UT-VEE_XXXX_WILLEMIJN-BOLDERMAN.json | 6 +- ...MS_199X_NL-UT-ZEI_XXXX_JOCHEM-EIJSDEN.json | 6 +- ...S_199X_NL-ZH-BER_XXXX_GHYSLAINE-TROMP.json | 6 +- ...MS_199X_NL-ZH-DEL_XXXX_SHAHRAM-JANBAZ.json | 6 +- ...MS_199X_NL-ZH-LEI_XXXX_NICOLE-COLLAZO.json | 6 +- ...NH-AMS_199X_NL-ZH-LEI_XXXX_OLAF-WALLE.json | 6 +- ...S_199X_NL-ZH-ROT_XXXX_GHIZLAN-HACHIMI.json | 6 +- ...-AMS_199X_NL-ZH-TH_XXXX_ADISHA-MARTEN.json | 6 +- ...199X_NL-ZH-TH_XXXX_ANNEMARIE-BEGHEIJN.json | 6 +- ..._199X_NL-ZH-TH_XXXX_ANNEMARIJE-STAAIJ.json | 6 +- ...AMS_199X_NL-ZH-TH_XXXX_GERALD-HOPSTER.json | 6 +- ...-AMS_199X_NL-ZH-TH_XXXX_JESPER-DEKKER.json | 6 +- ...9X_NL-ZH-TH_XXXX_KELLY-WARNAARBOENDER.json | 6 +- ...NH-AMS_199X_NL-ZH-TH_XXXX_KOEN-HOCKER.json | 6 +- ...-AMS_199X_NL-ZH-TH_XXXX_LAUREN-ROMIJN.json | 6 +- ...-NH-AMS_199X_NL-ZH-TH_XXXX_LISA-GOTOH.json | 6 +- ...H-AMS_199X_NL-ZH-TH_XXXX_MARION-ANKER.json | 6 +- ...199X_NL-ZH-TH_XXXX_REINOUD-LINSCHOTEN.json | 6 +- ..._199X_NL-ZH-TH_XXXX_SAID-HAKIMIKARACA.json | 6 +- ...H-AMS_199X_NL-ZH-TH_XXXX_STERRE-STOLK.json | 6 +- ...S_199X_NL-ZH-ZOE_XXXX_ROAR-WESTERDIJK.json | 6 +- ...-AMS_199X_XX-XX-XXX_XXXX_ALEX-WITKAMP.json | 6 +- ..._199X_XX-XX-XXX_XXXX_AMANDINE-PERZYNA.json | 6 +- ...S_199X_XX-XX-XXX_XXXX_ANA-HARSENHORST.json | 6 +- ...199X_XX-XX-XXX_XXXX_ANNABEL-WILDSCHUT.json | 6 +- ...MS_199X_XX-XX-XXX_XXXX_ANNE-GRONINGEN.json | 6 +- ...L-NH-AMS_199X_XX-XX-XXX_XXXX_BOU-WONG.json | 6 +- ..._199X_XX-XX-XXX_XXXX_DAISY-SLAVENBURG.json | 6 +- ...AMS_199X_XX-XX-XXX_XXXX_DRIES-THIELEN.json | 6 +- ...MS_199X_XX-XX-XXX_XXXX_FARILYANN-MUZO.json | 6 +- ...99X_XX-XX-XXX_XXXX_FREDERIKE-JUNGHEIM.json | 6 +- ...AMS_199X_XX-XX-XXX_XXXX_FRICKE-OOSTEN.json | 6 +- ...NH-AMS_199X_XX-XX-XXX_XXXX_HANNA-SMIT.json | 6 +- ...NH-AMS_199X_XX-XX-XXX_XXXX_HIMAYA-AYO.json | 6 +- ...NH-AMS_199X_XX-XX-XXX_XXXX_JAMIE-CHEN.json | 6 +- ...-NH-AMS_199X_XX-XX-XXX_XXXX_KAJ-BRENS.json | 6 +- ...S_199X_XX-XX-XXX_XXXX_LAURENS-VERBEEK.json | 6 +- ...9X_XX-XX-XXX_XXXX_LODEWIJK-RIJKSBARON.json | 6 +- ...199X_XX-XX-XXX_XXXX_MAARTJE-SLIJKHUIS.json | 6 +- ...MS_199X_XX-XX-XXX_XXXX_MARLOES-FULPEN.json | 6 +- ...AMS_199X_XX-XX-XXX_XXXX_MARTIN-BRUIJN.json | 6 +- ...-AMS_199X_XX-XX-XXX_XXXX_RANISH-BALAK.json | 6 +- ..._NL-NH-AMS_199X_XX-XX-XXX_XXXX_RIMA-G.json | 6 +- ...AMS_199X_XX-XX-XXX_XXXX_SHERILYN-DEEN.json | 6 +- ...S_199X_XX-XX-XXX_XXXX_SIMONE-GIEBELEN.json | 6 +- ...AMS_199X_XX-XX-XXX_XXXX_SIMONE-HOUBEN.json | 6 +- ...199X_XX-XX-XXX_XXXX_SOLEIMAN-GHAFOURI.json | 6 +- ...H-AMS_199X_XX-XX-XXX_XXXX_SOPHIE-HUUT.json | 6 +- ...AMS_199X_XX-XX-XXX_XXXX_TESS-PRIESTER.json | 6 +- ...199X_XX-XX-XXX_XXXX_WOUTER-KLARENBEEK.json | 6 +- ...AMS_200X_NL-GE-ARN_XXXX_ANNELOT-BRUIN.json | 6 +- ...MS_200X_NL-GE-ARN_XXXX_MARTEN-VERHEIJ.json | 6 +- ...-AMS_200X_NL-GE-HIE_XXXX_JANNEKE-BERG.json | 6 +- ...X_NL-NB-EIN_XXXX_JAISHANI-AMARASEKARA.json | 6 +- ...-NH-AMS_200X_NL-NB-VEL_XXXX_MINA-SONG.json | 6 +- ...0X_NL-NH-ALK_XXXX_IRMA-GROOTHOOGEBOOM.json | 6 +- ...S_200X_NL-NH-AMS_XXXX_AGLAIA-GROMMERS.json | 6 +- ...-NH-AMS_XXXX_ANNEMARIE-BLOEMENPATBERG.json | 6 +- ...S_200X_NL-NH-AMS_XXXX_BENTE-POLDERMAN.json | 6 +- ...S_200X_NL-NH-AMS_XXXX_BRAM-KRANENDONK.json | 6 +- ...NH-AMS_200X_NL-NH-AMS_XXXX_BRAM-PRINS.json | 6 +- ...200X_NL-NH-AMS_XXXX_CHARLOTTE-VERWEIJ.json | 6 +- ...MS_200X_NL-NH-AMS_XXXX_DOUAA-BENZZINE.json | 6 +- ..._200X_NL-NH-AMS_XXXX_DYLAN-GIESBERGEN.json | 6 +- ...S_200X_NL-NH-AMS_XXXX_ELLA-BRETHERTON.json | 6 +- ...-NH-AMS_200X_NL-NH-AMS_XXXX_EMMA-CROK.json | 6 +- ...-AMS_200X_NL-NH-AMS_XXXX_EOGHAN-NEILL.json | 6 +- ...D_NL-NH-AMS_200X_NL-NH-AMS_XXXX_EVA-T.json | 6 +- ...-AMS_200X_NL-NH-AMS_XXXX_FABIENNE-KES.json | 6 +- ...MS_200X_NL-NH-AMS_XXXX_FLAVIA-TERZIAN.json | 6 +- ...H-AMS_200X_NL-NH-AMS_XXXX_ILSE-BURGHT.json | 6 +- ...NH-AMS_200X_NL-NH-AMS_XXXX_JOS-KREEFT.json | 6 +- ...AMS_200X_NL-NH-AMS_XXXX_KARLA-MEDAKOV.json | 6 +- ...S_200X_NL-NH-AMS_XXXX_LIDWIEN-GRIEKEN.json | 6 +- ...NL-NH-AMS_XXXX_MANON-MOUSSAROODENBURG.json | 6 +- ...S_200X_NL-NH-AMS_XXXX_MARANTHE-LAMERS.json | 6 +- ..._200X_NL-NH-AMS_XXXX_MARIEKE-BREMMERS.json | 6 +- ...MS_200X_NL-NH-AMS_XXXX_MARTJE-ONIKOYI.json | 6 +- ...-AMS_200X_NL-NH-AMS_XXXX_MEAGAN-BAARS.json | 6 +- ...L-NH-AMS_200X_NL-NH-AMS_XXXX_MY-VUONG.json | 6 +- ...H-AMS_200X_NL-NH-AMS_XXXX_PIETER-METZ.json | 6 +- ...MS_200X_NL-NH-AMS_XXXX_ROGIER-HAGEMAN.json | 6 +- ..._200X_NL-NH-AMS_XXXX_SAMARIA-KIJEWSKA.json | 6 +- ...S_200X_NL-NH-AMS_XXXX_SILVANNA-MAURIK.json | 6 +- ...S_200X_NL-NH-AMS_XXXX_STELLA-EERTWEGH.json | 6 +- ...-AMS_200X_NL-NH-AMS_XXXX_WESLEY-KORFF.json | 6 +- ...-AMS_200X_NL-NH-AMS_XXXX_YECHEN-ZHANG.json | 6 +- ...200X_NL-NH-BUS_XXXX_MATHILDE-BOGAARDS.json | 6 +- ...MS_200X_NL-NH-HAA_XXXX_HANNAH-VERBEEK.json | 6 +- ...00X_NL-NH-HAA_XXXX_LAUDONNE-KRONIEGER.json | 6 +- ...200X_NL-NH-HEE_XXXX_MATTHIJS-MOLLMANN.json | 6 +- ...200X_NL-NH-HOO_XXXX_TEA-BARBATESKOVIC.json | 6 +- ...-NH-AMS_200X_NL-NH-LAR_XXXX_JOS-HILLE.json | 6 +- ...S_200X_NL-NH-UIT_XXXX_BINTOU-KOUROUMA.json | 6 +- ...-NH-AMS_200X_NL-NH-ZAA_XXXX_ANNA-CROK.json | 6 +- ...S_200X_NL-UT-SOE_XXXX_JORIS-RADEMAKER.json | 6 +- ...H-AMS_200X_NL-UT-UTR_XXXX_OLE-LECHNER.json | 6 +- ...H-AMS_200X_NL-UT-UTR_XXXX_STELLA-BERG.json | 6 +- ...D_NL-NH-AMS_200X_NL-ZH-TH_XXXX_ANNE-B.json | 6 +- ...AMS_200X_NL-ZH-TH_XXXX_LARISSA-VIANEN.json | 6 +- ...H-AMS_200X_NL-ZH-TH_XXXX_LUKA-CHOUARD.json | 6 +- ...S_200X_XX-XX-XXX_XXXX_CHAIMAE-KHERAZI.json | 6 +- ...S_200X_XX-XX-XXX_XXXX_DEIRDRE-CARASSO.json | 6 +- ...200X_XX-XX-XXX_XXXX_JUSTINE-ZWARTHOED.json | 6 +- ...0X_XX-XX-XXX_XXXX_MARIELLE-KOEVERMANS.json | 6 +- ...S_200X_XX-XX-XXX_XXXX_MOHAMED-AZTOUTI.json | 6 +- ...-ASS_198X_NL-NH-AMS_XXXX_VERA-MEEBERG.json | 6 +- ..._NL-NH-BEV_199X_NL-NH-HAA_XXXX_LARS-V.json | 6 +- ...-DBU_200X_NL-NH-HOO_XXXX_ARYS-BLANKEN.json | 6 +- ...A_196X_NL-NH-AMS_XXXX_ALEXANDER-BRUIN.json | 16 +- ...HAA_196X_NL-NH-AMS_XXXX_ANNELIES-REUS.json | 6 +- ...96X_NL-NH-AMS_XXXX_MONIQUE-ZIJDERVELD.json | 6 +- ...AA_196X_NL-NH-AMS_XXXX_STINIE-FRANCKE.json | 6 +- ...8X_NL-NH-HAA_XXXX_MAARTJE-PEIJPEELIAS.json | 6 +- ...198X_NL-NH-HAA_XXXX_MARIANNE-HAMERSMA.json | 6 +- ...HAA_198X_NL-ZH-LEI_XXXX_IMELDA-HOEBES.json | 6 +- ...AA_199X_NL-NH-AMS_XXXX_HANS-NUSSELDER.json | 6 +- ...-HAA_199X_NL-NH-HAA_XXXX_ANNABEL-LUKE.json | 6 +- ...AA_199X_NL-NH-HAA_XXXX_ROWAN-SOUHUWAT.json | 6 +- ...198X_NL-NH-ALK_XXXX_MARIEKE-KUITWAARD.json | 6 +- ..._195X_NL-ZH-ROT_XXXX_WILLEM-RIJSDIJK.json} | 93 ++++- ...HIL_197X_NL-NH-AMS_XXXX_BREGTJE-HAAK.json} | 148 ++++--- ...HIL_197X_NL-UT-RHE_XXXX_CAROLA-WOUDE.json} | 93 ++++- ...-HIL_197X_NL-ZH-TH_XXXX_HENK-GOEMANS.json} | 93 ++++- ..._198X_NL-NH-AMS_XXXX_GERALD-WIJNGAART.json | 6 +- ...IL_198X_NL-NH-AMS_XXXX_MARLOES-GRUBEN.json | 6 +- ...-HIL_198X_NL-NH-HIL_XXXX_ARNOUD-GOOS.json} | 148 ++++--- ...HIL_198X_NL-UT-UTR_XXXX_SANJAY-OEMRAW.json | 6 +- ...-HIL_198X_NL-ZH-SCH_XXXX_LUUK-TOORMAN.json | 6 +- ...HIL_198X_NL-ZH-TH_XXXX_LEONIE-RIDDER.json} | 93 ++++- ...L_198X_XX-XX-XXX_XXXX_MARIA-PAPELARD.json} | 93 ++++- ...NB-BRE_XXXX_SUSAN-SUURLANDCASTELIJNS.json} | 93 ++++- ...NH-HIL_199X_NL-NH-AMS_XXXX_ASTRID-SY.json} | 148 ++++--- ...NH-HIL_199X_NL-NH-HIL_XXXX_ARJEN-PAS.json} | 148 ++++--- ...H-HIL_199X_NL-ZH-ROT_XXXX_AMY-WELTEN.json} | 148 ++++--- ...HIL_199X_NL-ZH-TH_XXXX_ERIK-HAMELINK.json} | 93 ++++- ...HIL_199X_NL-ZH-TH_XXXX_SUZETTE-RAADT.json} | 93 ++++- ...NH-HIL_199X_XX-XX-XXX_XXXX_FAY-SELTEN.json | 6 +- ...H-HIL_199X_XX-XX-XXX_XXXX_JAN-FECKEN.json} | 93 ++++- ...L_199X_XX-XX-XXX_XXXX_SAMIRA-CHMOURK.json} | 93 ++++- ...H-HIL_200X_NL-NH-AMS_XXXX_IVANA-SOYER.json | 6 +- ...HIL_200X_NL-NH-HIL_XXXX_ARNOLD-BLONK.json} | 148 ++++--- ...197X_NL-ZH-NIE_XXXX_ESTHER-WESTERVELD.json | 6 +- ...9X_NL-NH-ZAA_XXXX_ANNEMIEKE-SWAGERMAN.json | 6 +- ...98X_NL-NH-ZAA_XXXX_MERLIJN-QUAKERNAAT.json | 6 +- ...AR_198X_NL-GE-ARN_XXXX_JESSE-VELDMAAT.json | 6 +- ...H-MUI_199X_NL-NH-AMS_XXXX_JIMMY-GEERS.json | 6 +- ...D_200X_NL-NH-AMS_XXXX_ANNALIES-EERDE.json} | 23 +- ...UR_197X_NL-NH-PUR_XXXX_FRANK-STOOTMAN.json | 6 +- ...UR_199X_NL-NH-AMS_XXXX_EDGAR-HEINEMAN.json | 6 +- ..._199X_NL-NH-AMS_XXXX_MARGREET-LENSTRA.json | 6 +- ...9X_NL-NH-AMS_XXXX_NATHALIE-ROMPELBERG.json | 6 +- ...VEL_197X_NL-NH-BEV_XXXX_RENTY-HERDINA.json | 6 +- ...H-VOL_199X_NL-NH-VOL_XXXX_CHANNAH-KES.json | 6 +- ...L-NH-WEE_199X_NL-UT-BAA_XXXX_WARSAN-M.json | 6 +- ...ZAA_200X_NL-NH-ZAA_XXXX_KENDA-ALFAHEL.json | 6 +- ...EV_196X_NL-GE-WAG_XXXX_STEPHAN-MANTEL.json | 6 +- ..._197X_NL-OV-DEV_XXXX_ANTON-AMERSFOORT.json | 6 +- ...-DEV_198X_NL-GE-APE_XXXX_ESTHER-WILDE.json | 6 +- ...OV-DEV_199X_NL-GE-ZUT_XXXX_ARUN-PALIT.json | 6 +- ...V-DEV_199X_NL-OV-DEV_XXXX_SEFA-ILBEYI.json | 6 +- ...ENS_194X_AU-05-AP_XXXX_JENNY-HIGGINS.json} | 89 +++- ...NS_194X_NL-GE-DST_XXXX_JAN-BECKHOVEN.json} | 93 ++++- ...V-ENS_195X_NL-NH-DIL_XXXX_EDWIN-HOEK.json} | 93 ++++- ...NS_195X_NL-OV-ENS_XXXX_VISHWAS-GADGIL.json | 6 +- ...NS_195X_XX-XX-XXX_XXXX_HENK-LINDHOUT.json} | 93 ++++- ...NS_196X_GB-EN-LON_XXXX_JANE-HAMILTON.json} | 150 ++++++- ...-ENS_196X_NL-GE-WAG_XXXX_ZHANGUO-BAI.json} | 93 ++++- ...6X_NL-NH-OAD_XXXX_ISKANDER-BREEBAART.json} | 93 ++++- ...NS_196X_NL-ZH-TH_XXXX_HUIBERT-CRIJNS.json} | 93 ++++- ...-ENS_196X_XX-XX-XXX_XXXX_FRANS-BEDEM.json} | 93 ++++- ...S_197X_AU-02-PAR_XXXX_SCOTT-MCKINNON.json} | 150 ++++++- ...S_197X_ID-04-JAK_XXXX_MOCHAMAD-ACHIR.json} | 160 ++++++- ...S_197X_NL-DR-BEI_XXXX_JURJEN-ZOMERMAN.json | 6 +- ..._197X_NL-ZH-TH_XXXX_NICOLETA-NASTASE.json} | 93 ++++- ...S_198X_AU-01-CAN_XXXX_AURELIE-MARTIN.json} | 89 +++- ...198X_AU-01-CAN_XXXX_CHRIS-MCPARTLAND.json} | 150 ++++++- ...NS_198X_AU-01-CAN_XXXX_COLLEEN-AALIA.json} | 150 ++++++- ...-OV-ENS_198X_AU-01-CAN_XXXX_DANIEL-S.json} | 150 ++++++- ...NL-GE-ELS_XXXX_PATRICIA-HOYTINKROUBOS.json | 6 +- ...198X_NL-NB-EIN_XXXX_OLGA-TERESHCHENKO.json | 6 +- ...OV-ENS_198X_NL-NB-VEL_XXXX_OLA-ALLAH.json} | 93 ++++- ...ENS_198X_NL-NB-VEL_XXXX_SAEED-KHAMSEH.json | 6 +- ...ENS_198X_NL-NH-AMS_XXXX_MARISSA-OTTEN.json | 6 +- ...198X_NL-NH-HIL_XXXX_JOEP-CHRISTENHUSZ.json | 6 +- ...8X_NL-NH-HOO_XXXX_KEVANIA-VRIESMENIG.json} | 93 ++++- ...S_198X_NL-OV-BOR_XXXX_NIELS-LEUTEREN.json} | 93 ++++- ...-ENS_198X_NL-ZH-TH_XXXX_GIJS-WILLEMS.json} | 93 ++++- ...V-ENS_198X_NL-ZH-TH_XXXX_GIULIA-VIVO.json} | 93 ++++- ...-ENS_198X_NL-ZH-TH_XXXX_THYS-HOEKMAN.json} | 93 ++++- ...ENS_198X_XX-XX-XXX_XXXX_JOOST-BEUKERS.json | 6 +- ...NS_198X_XX-XX-XXX_XXXX_NATHAN-MULDER.json} | 93 ++++- ...S_198X_XX-XX-XXX_XXXX_PIETER-WILLEMS.json} | 93 ++++- ...8X_XX-XX-XXX_XXXX_ROSALIN-KRISTIANTI.json} | 93 ++++- ...S_199X_AU-01-CAN_XXXX_TOTON-LIANTORO.json} | 150 ++++++- ...99X_ID-04-JAK_XXXX_MUHAMMAD-NURFALAH.json} | 150 ++++++- ...-ENS_199X_ID-04-JAK_XXXX_TIARA-SURYA.json} | 160 ++++++- ...199X_NL-GE-APE_XXXX_MARJOLEIN-SANTING.json | 6 +- ...ENS_199X_NL-NB-EIN_XXXX_LIDA-VRACHATI.json | 6 +- ..._199X_NL-NB-VEL_XXXX_ADELINA-MUCHANGA.json | 6 +- ...ENS_199X_NL-NB-VEL_XXXX_JELMER-BOTER.json} | 23 +- ...L-OV-ENS_199X_NL-NB-VEL_XXXX_VISHAL-R.json | 6 +- ...ENS_199X_NL-NH-AMS_XXXX_DILAY-SARPAY.json} | 93 ++++- ..._199X_NL-NH-AMS_XXXX_MARTINE-LEMMENS.json} | 93 ++++- ...NS_199X_NL-UT-UTR_XXXX_BO-RIJNSOEVER.json} | 93 ++++- ...V-ENS_199X_NL-ZH-DEL_XXXX_FARDAD-MOUD.json | 6 +- ...X_XX-XX-XXX_XXXX_CHRYSOULA-IOANNIDOU.json} | 93 ++++- ...-ENS_199X_XX-XX-XXX_XXXX_ELISA-MOLEN.json} | 93 ++++- ...S_199X_XX-XX-XXX_XXXX_ELSYA-FITRIANA.json} | 93 ++++- ..._199X_XX-XX-XXX_XXXX_MIRYAM-KADDOURI.json} | 93 ++++- ...NS_199X_XX-XX-XXX_XXXX_PEDRO-VIDEIRA.json} | 93 ++++- ...99X_XX-XX-XXX_XXXX_YASHAR-GHAREBAGHI.json} | 93 ++++- ...L-OV-ENS_200X_NL-OV-ENS_XXXX_RAHWAN-A.json | 6 +- ...ENS_200X_XX-XX-XXX_XXXX_PHILIP-ASAAM.json} | 93 ++++- ...V-HEN_199X_NL-NB-VEL_XXXX_JOAN-MATHEW.json | 6 +- ...ED_196X_NL-OV-NED_XXXX_MARJET-BEUKEMA.json | 6 +- ...ED_197X_NL-GR-GRO_XXXX_DESIREE-ROZING.json | 6 +- ...OV-NED_197X_NL-NH-AMS_XXXX_GUNDY-DIJK.json | 6 +- ..._198X_NL-GE-DUI_XXXX_ELVIN-LATUMAHINA.json | 6 +- ..._198X_NL-NH-AMS_XXXX_SHERLIEN-SANCHES.json | 6 +- ..._199X_NL-FR-LEE_XXXX_ALEXANDER-BURGER.json | 6 +- ...9X_NL-NH-AMS_XXXX_REVELINIO-ACHTHOVEN.json | 6 +- ...V-NED_199X_NL-OV-NED_XXXX_MAAIKE-MSC.json} | 168 ++++---- ...D_199X_NL-ZH-RIJ_XXXX_LIZIENNE-ROMANO.json | 6 +- ...D_199X_NL-ZH-TH_XXXX_DAAN-WESTERHEIDE.json | 6 +- ..._200X_NL-NH-AMS_XXXX_BRIAN-KERSBERGEN.json | 6 +- ...ED_200X_NL-OV-NED_XXXX_RGRACIELA-MORA.json | 6 +- ...ZWO_196X_XX-XX-XXX_XXXX_CORINE-MAIJER.json | 6 +- ...WO_197X_NL-NH-HAA_XXXX_RIAN-GERRITSEN.json | 6 +- ...OV-ZWO_197X_NL-OV-DAL_XXXX_CINDY-POT.json} | 93 ++++- ...-ZWO_198X_NL-OV-DAL_XXXX_ELWIN-KLAPPE.json | 6 +- ...-OV-ZWO_198X_NL-OV-ZWO_XXXX_JAN-BEENS.json | 6 +- ...NL-OV-ZWO_198X_NL-UT-EEM_XXXX_THEO-V.json} | 93 ++++- ...V-ZWO_199X_NL-OV-ZWO_XXXX_JURGEN-POPS.json | 6 +- ...ZWO_200X_NL-OV-OLS_XXXX_EMIEL-STOPLER.json | 6 +- ...E_196X_NL-ZH-LEI_XXXX_MARTIJN-MANDERS.json | 6 +- ...ME_197X_NL-UT-AME_XXXX_DANNY-FUTTERER.json | 6 +- ...-UT-AME_198X_XX-XX-XXX_XXXX_PAUL-BOON.json | 6 +- ...E_199X_NL-UT-UTR_XXXX_CATO-STROECKEN.json} | 148 ++++--- ...AME_199X_XX-XX-XXX_XXXX_LUNA-KASTEREN.json | 6 +- ...-AME_200X_NL-UT-AME_XXXX_ERWIN-KRIGER.json | 6 +- ...RE_197X_XX-XX-XXX_XXXX_INGER-SANDERS.json} | 93 ++++- ...RE_198X_XX-XX-XXX_XXXX_JEROEN-MEIJER.json} | 93 ++++- ...199X_NL-ZH-TH_XXXX_RAYMOND-APPELDOORN.json | 6 +- ...196X_NL-NH-AMS_XXXX_JACQUELIENE-HEER.json} | 148 ++++--- ...HOU_195X_NL-UT-HOU_XXXX_JOHN-KEMENADE.json | 6 +- ..._198X_NL-NH-AMS_XXXX_NOORTJE-BREIJDER.json | 6 +- ..._199X_NL-GE-GRO_XXXX_ELISE-STEMERDINK.json | 6 +- ..._NL-UT-MAA_199X_NL-NH-ZAA_XXXX_LOES-M.json | 6 +- ...N_196X_NL-UT-AME_XXXX_CARLA-SANDBRINK.json | 6 +- ...IE_197X_XX-XX-XXX_XXXX_RODERICK-DERKS.json | 6 +- ...-RHE_197X_NL-UT-RHE_XXXX_SANDRA-BOERS.json | 6 +- ...T-SOE_199X_NL-UT-SOE_XXXX_DIRK-STAAT.json} | 148 ++++--- ...SOE_200X_NL-NH-AMS_XXXX_ARJAN-UITHOL.json} | 148 ++++--- ...UT-UTR_195X_NL-GR-GRO_XXXX_JAN-SAMSOM.json | 6 +- ...R_195X_NL-NB-HAL_XXXX_MARY-HOOIJDONK.json} | 93 ++++- ..._NL-NH-AMS_XXXX_ANNEMIES-BROEKGAARDEN.json | 6 +- ...-UTR_195X_NL-NH-AMS_XXXX_CARMEN-CAIRO.json | 6 +- ...UT-UTR_195X_NL-NH-AMS_XXXX_DU-MORTIER.json | 6 +- ...-UTR_195X_NL-NH-ZAA_XXXX_CHRIS-KOPPEN.json | 6 +- ...UTR_195X_NL-OV-BLO_XXXX_JOS-MOOIJWEER.json | 6 +- ...-UT-UTR_195X_NL-UT-UTR_XXXX_ANJA-SMIT.json | 270 ------------ ...TR_195X_NL-UT-UTR_XXXX_MICHIEL-GOOSEN.json | 6 +- ...-UTR_195X_NL-ZH-ROT_XXXX_ELINE-GERATS.json | 6 +- ...UT-UTR_195X_NL-ZH-ROT_XXXX_MARG-BURGH.json | 6 +- ...L-UT-UTR_195X_NL-ZH-TH_XXXX_ARJEN-KOK.json | 6 +- ...UTR_195X_NL-ZH-TH_XXXX_EMILIET-ALBERS.json | 6 +- ...T-UTR_195X_NL-ZH-TH_XXXX_MARCUS-LEEUW.json | 6 +- ...UT-UTR_195X_NL-ZH-TH_XXXX_PETER-DOORN.json | 6 +- ...-UTR_195X_XX-XX-XXX_XXXX_LAMBERT-AKSE.json | 6 +- ...T-UTR_195X_XX-XX-XXX_XXXX_MARTINE-POL.json | 6 +- ...T-UTR_196X_NL-FL-AS_XXXX_MONICA-DAMEN.json | 6 +- ...96X_NL-GE-APE_XXXX_ANDRIEKE-OLLEFERS.json} | 148 ++++--- ..._196X_NL-GE-APE_XXXX_SASKIA-SPOELSTRA.json | 6 +- ...UTR_196X_NL-GE-TIE_XXXX_TANJA-KUSTERS.json | 6 +- ...TR_196X_NL-GR-GRO_XXXX_HENDRIK-DEIMAN.json | 6 +- ...-UT-UTR_196X_NL-LI-BAN_XXXX_HANS-HALL.json | 6 +- ...TR_196X_NL-NH-AMS_XXXX_AUKJE-VERGEEST.json | 6 +- ...R_196X_NL-NH-AMS_XXXX_ESTHER-BRINKMAN.json | 6 +- ...UTR_196X_NL-NH-AMS_XXXX_JANTIEN-WURTH.json | 6 +- ..._196X_NL-NH-AMS_XXXX_LEENDERT-BOOYENS.json | 6 +- ...196X_NL-NH-AMS_XXXX_RENEE-STEENBERGEN.json | 6 +- ...T-UTR_196X_NL-OV-NED_XXXX_NANCY-JOUWE.json | 6 +- ...96X_NL-OV-ZWO_XXXX_JOKELYNE-GERRITSEN.json | 6 +- ...T-UTR_196X_NL-UT-UTR_XXXX_AART-HARTEN.json | 6 +- ...-UT-UTR_196X_NL-UT-UTR_XXXX_ANJA-SMIT.json | 393 ++++++++++++++++++ ...196X_NL-UT-UTR_XXXX_EVERT-REGTERSCHOT.json | 16 +- ...-UTR_196X_NL-UT-UTR_XXXX_FEDOR-ROSSEM.json | 6 +- ..._196X_NL-UT-UTR_XXXX_LUUK-BOESSENKOOL.json | 6 +- ...-UT-UTR_196X_NL-UT-UTR_XXXX_PAUL-DUIN.json | 6 +- ...196X_NL-ZH-DEL_XXXX_EVELIEN-MASSELINK.json | 6 +- ...196X_NL-ZH-DOR_XXXX_HELEEN-HEIJTVELDT.json | 6 +- ...TR_196X_NL-ZH-LEI_XXXX_ESTHER-CAPTAIN.json | 6 +- ...T-UTR_196X_NL-ZH-TH_XXXX_ANKE-FREESE.json} | 93 ++++- ...TR_196X_NL-ZH-TH_XXXX_SITA-BHAGWANDIN.json | 6 +- ...UTR_196X_NL-ZH-TH_XXXX_YVETTE-EECHOUD.json | 6 +- ...6X_XX-XX-XXX_XXXX_CARLA-TAKHOOGENDIJK.json | 6 +- ...R_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER.json} | 113 ++++- ...TR_196X_XX-XX-XXX_XXXX_JOYCE-PENNINGS.json | 6 +- ...UTR_196X_XX-XX-XXX_XXXX_KARIN-MONNINK.json | 6 +- ...R_196X_XX-XX-XXX_XXXX_MARIANNE-BRUINS.json | 6 +- ...6X_XX-XX-XXX_XXXX_MARJOLEIN-WASSENAAR.json | 6 +- ...TR_197X_NL-GE-REN_XXXX_VICTOR-LANSINK.json | 6 +- ...UT-UTR_197X_NL-GE-WAG_XXXX_FREYA-SENF.json | 6 +- ...UTR_197X_NL-NH-AMS_XXXX_FRANK-BERGSMA.json | 6 +- ...197X_NL-NH-AMS_XXXX_MAAIKE-WOLTERBEEK.json | 6 +- ...UTR_197X_NL-NH-AMS_XXXX_MARTHA-JELSMA.json | 6 +- ...UTR_197X_NL-NH-AMS_XXXX_MICHELLE-WIJS.json | 6 +- ...UT-UTR_197X_NL-NH-HAA_XXXX_MARC-BEYER.json | 6 +- ...-UTR_197X_NL-NH-HIL_XXXX_JURGEN-MOERS.json | 6 +- ...T-UTR_197X_NL-UT-RHE_XXXX_JESSY-DOORN.json | 6 +- ...UTR_197X_NL-UT-UTR_XXXX_ASTRID-HERTOG.json | 6 +- ..._197X_NL-UT-UTR_XXXX_FLOOR-WAGEMAKERS.json | 6 +- ...UTR_197X_NL-UT-UTR_XXXX_JANJAAP-LUIJT.json | 6 +- ..._197X_NL-UT-UTR_XXXX_MARIEKE-LOGCHEM.json} | 23 +- ...UTR_197X_NL-UT-UTR_XXXX_MARIEKE-MEER.json} | 158 +++---- ...TR_197X_NL-UT-UTR_XXXX_WILLEM-BROUWER.json | 6 +- ...TR_197X_NL-ZH-ALB_XXXX_ARJAN-KAPTEIJN.json | 6 +- ...-UT-UTR_197X_NL-ZH-TH_XXXX_ANNET-VEEN.json | 6 +- ...197X_NL-ZH-TH_XXXX_BASTIAAN-ENGELHARD.json | 6 +- ...UTR_197X_NL-ZH-TH_XXXX_MADELEINE-BERG.json | 6 +- ...97X_NL-ZH-TH_XXXX_MECHTELD-GRAVENDEEL.json | 6 +- ...-UTR_197X_NL-ZH-TH_XXXX_NIEK-SCHROTEN.json | 6 +- ...197X_NL-ZH-TH_XXXX_TASSILO-LUTTERVELT.json | 6 +- ...TR_197X_XX-XX-XXX_XXXX_BART-COOIJMANS.json | 6 +- ...-UT-UTR_197X_XX-XX-XXX_XXXX_BRAM-WITS.json | 6 +- ...T-UTR_197X_XX-XX-XXX_XXXX_FRITS-BRENK.json | 6 +- ...R_197X_XX-XX-XXX_XXXX_MAARTENJAN-MEIJ.json | 6 +- ..._197X_XX-XX-XXX_XXXX_MARJOLEIN-DEKKER.json | 6 +- ...T-UTR_197X_XX-XX-XXX_XXXX_MARK-WALLET.json | 6 +- ...UTR_197X_XX-XX-XXX_XXXX_MONIQUE-BEERS.json | 6 +- ...UT-UTR_197X_XX-XX-XXX_XXXX_RUTH-ZORGE.json | 6 +- ...UTR_197X_XX-XX-XXX_XXXX_SAFIERA-FUNNA.json | 6 +- ...R_197X_XX-XX-XXX_XXXX_SASKIA-DURVILLE.json | 6 +- ..._197X_XX-XX-XXX_XXXX_SIMONE-KORTEKAAS.json | 6 +- ..._197X_XX-XX-XXX_XXXX_VINCENT-MONTANUS.json | 6 +- ...TR_197X_XX-XX-XXX_XXXX_WENDY-KONINGEN.json | 6 +- ...T-UTR_198X_NL-FL-AS_XXXX_SILVIA-NOBIS.json | 6 +- ..._198X_NL-GE-ARN_XXXX_LEONIEKE-TERLOUW.json | 6 +- ...R_198X_NL-GE-CUL_XXXX_JANNEKE-HETEREN.json | 6 +- ...R_198X_NL-GE-EDE_XXXX_ALETTE-MEIJEREN.json | 6 +- ...-UT-UTR_198X_NL-GE-HAR_XXXX_TAMAR-BOS.json | 6 +- ...UTR_198X_NL-GE-TIE_XXXX_WARDA-AZTOUTI.json | 6 +- ...-UTR_198X_NL-GE-WAG_XXXX_JILLES-MATEN.json | 6 +- ...T-UTR_198X_NL-NB-ALM_XXXX_MIRJAM-BAKX.json | 6 +- ...-NB-TIL_XXXX_FEMKE-NUNNIKHOVENBERTENS.json | 6 +- ...UTR_198X_NL-NB-TIL_XXXX_RIANNE-EXALTO.json | 6 +- ...UT-UTR_198X_NL-NH-ALK_XXXX_JESSE-DIJL.json | 16 +- ...T-UTR_198X_NL-NH-AMS_XXXX_ANNE-SCHUIT.json | 6 +- ...UTR_198X_NL-NH-AMS_XXXX_BODILL-LAMAIN.json | 6 +- ...UTR_198X_NL-NH-AMS_XXXX_CERIANNE-GEER.json | 6 +- ...UTR_198X_NL-NH-AMS_XXXX_ESTHER-KOETSE.json | 6 +- ...8X_NL-NH-AMS_XXXX_FREDERIKE-LEFFELAAR.json | 6 +- ...-UTR_198X_NL-NH-AMS_XXXX_HANNEKE-DIJK.json | 6 +- ...T-UTR_198X_NL-NH-AMS_XXXX_HINDE-HAEST.json | 6 +- ...-UTR_198X_NL-NH-AMS_XXXX_JOEN-HERMANS.json | 6 +- ...TR_198X_NL-NH-AMS_XXXX_KAMEL-ESSABANE.json | 6 +- ...R_198X_NL-NH-AMS_XXXX_LAURENS-DITTMER.json | 6 +- ..._198X_NL-NH-AMS_XXXX_LENA-KARVOVSKAYA.json | 6 +- ...R_198X_NL-NH-AMS_XXXX_MADO-AKKERSDIJK.json | 6 +- ...UTR_198X_NL-NH-AMS_XXXX_MARIA-HOLTROP.json | 6 +- ...T-UTR_198X_NL-NH-AMS_XXXX_MEREL-ETTEN.json | 6 +- ..._198X_NL-NH-AMS_XXXX_ROBIN-KUHLEMEIER.json | 6 +- ...UTR_198X_NL-NH-AMS_XXXX_TESSA-KOLKERT.json | 6 +- ...-UTR_198X_NL-NH-AMS_XXXX_WILLEKE-SLIM.json | 6 +- ...TR_198X_NL-NH-BLA_XXXX_MARK-SPONSELEE.json | 6 +- ...UT-UTR_198X_NL-NH-HAA_XXXX_ANNA-ALLIS.json | 6 +- ..._198X_NL-NH-HAA_XXXX_LAURIEN-BERKVENS.json | 6 +- ...-UTR_198X_NL-OV-HEN_XXXX_VERA-WANDERS.json | 6 +- ..._198X_NL-OV-NED_XXXX_LAURENS-SCHOUTEN.json | 6 +- ...R_198X_NL-OV-ZWO_XXXX_KAYLEIGH-WEERDT.json | 6 +- ...R_198X_NL-OV-ZWO_XXXX_MARJO-VENTEBOS.json} | 93 ++++- ...UT-UTR_198X_NL-UT-AME_XXXX_MEREL-BEEK.json | 6 +- ...R_198X_NL-UT-LEU_XXXX_ASTER-DIJKGRAAF.json | 6 +- ...T-UTR_198X_NL-UT-NIE_XXXX_TOM-REITSMA.json | 6 +- ...-UT-UTR_198X_NL-UT-UTR_XXXX_AAT-HOUT.json} | 168 ++++---- ..._198X_NL-UT-UTR_XXXX_FLOOR-ELSENBURG.json} | 158 +++---- ...R_198X_NL-UT-UTR_XXXX_JILDOU-BAARSMA.json} | 148 ++++--- ...UTR_198X_NL-UT-UTR_XXXX_JOOST-KOUTRIK.json | 6 +- ...NL-UT-UTR_198X_NL-UT-UTR_XXXX_JOS-LIM.json | 6 +- ...-UT-UTR_XXXX_LIENEKE-KRIJTHEWESTERINK.json | 6 +- ...UT-UTR_198X_NL-UT-UTR_XXXX_MARK-SCHEP.json | 6 +- ...R_198X_NL-UT-UTR_XXXX_MATTHIAS-REKERS.json | 6 +- ...T-UTR_198X_NL-UT-UTR_XXXX_NADINE-JONG.json | 6 +- ...UT-UTR_198X_NL-UT-UTR_XXXX_TIM-FELIKS.json | 6 +- ...-UTR_198X_NL-UT-UTR_XXXX_TOM-WETERING.json | 6 +- ..._198X_NL-UT-UTR_XXXX_TRISTAN-AKKERMAN.json | 6 +- ...UT-UTR_198X_NL-UT-ZEI_XXXX_ELLEN-BLOM.json | 6 +- ...T-UTR_198X_NL-ZH-DEL_XXXX_NINA-BRANDS.json | 6 +- ...R_198X_NL-ZH-ROT_XXXX_IVANA-CEROVECKI.json | 6 +- ...UT-UTR_198X_NL-ZH-ROT_XXXX_LINDA-WOLF.json | 6 +- ...UTR_198X_NL-ZH-SAS_XXXX_VERONIQUE-VOS.json | 6 +- ...L-UT-UTR_198X_NL-ZH-TH_XXXX_EMMA-SMIT.json | 6 +- ...UT-UTR_198X_NL-ZH-TH_XXXX_EVA-LACHNIT.json | 6 +- ...UTR_198X_NL-ZH-TH_XXXX_FRERIK-KAMPMAN.json | 6 +- ...T-UTR_198X_NL-ZH-TH_XXXX_JAIKE-BAKKER.json | 6 +- ...-UTR_198X_NL-ZH-TH_XXXX_JUDITH-SCHOLS.json | 6 +- ...T-UTR_198X_NL-ZH-TH_XXXX_LAURA-COELLO.json | 6 +- ...T-UTR_198X_NL-ZH-TH_XXXX_MARIJN-SPETH.json | 6 +- ...T-UTR_198X_NL-ZH-TH_XXXX_SANNE-MAAREL.json | 6 +- ...T-UTR_198X_NL-ZH-TH_XXXX_TAKE-PADDING.json | 6 +- ...TR_198X_NL-ZH-ZOE_XXXX_MIRELLA-RUITER.json | 6 +- ...X-XX-XXX_XXXX_COLETA-LIESHOUTWILLEMEN.json | 6 +- ...8X_XX-XX-XXX_XXXX_GERDIENTJE-SCHOUTEN.json | 6 +- ...198X_XX-XX-XXX_XXXX_HELEEN-NIEUWPOORT.json | 6 +- ...UTR_198X_XX-XX-XXX_XXXX_JOLIEN-KEULEN.json | 6 +- ...TR_198X_XX-XX-XXX_XXXX_MAAIKE-RIETRAE.json | 6 +- ..._198X_XX-XX-XXX_XXXX_MIES-VOLLENHOVEN.json | 6 +- ...-UTR_198X_XX-XX-XXX_XXXX_MIRJAM-CUPER.json | 6 +- ...-UTR_198X_XX-XX-XXX_XXXX_MUSTAFA-KAYA.json | 6 +- ...UTR_198X_XX-XX-XXX_XXXX_NICOLE-MULDER.json | 6 +- ..._198X_XX-XX-XXX_XXXX_PATRICIA-LEEUWIS.json | 6 +- ...TR_198X_XX-XX-XXX_XXXX_SASKIA-MEILAND.json | 6 +- ...X-XX-XXX_XXXX_SHAILESHKOEMAR-BISESSAR.json | 6 +- ...-UTR_198X_XX-XX-XXX_XXXX_SIMONE-SOUER.json | 6 +- ...UTR_198X_XX-XX-XXX_XXXX_THOMAS-HABETS.json | 6 +- ...-GE-AAL_XXXX_RACHEL-WESTERVELDLENSINK.json | 6 +- ..._199X_NL-GE-APE_XXXX_PIETER-SIWABESSY.json | 6 +- ...-UTR_199X_NL-GE-APE_XXXX_THOMAS-BRAAS.json | 6 +- ...TR_199X_NL-GE-ARN_XXXX_MARGOT-LEERINK.json | 6 +- ...NL-UT-UTR_199X_NL-GE-NIJ_XXXX_LEX-HOF.json | 6 +- ...199X_NL-GE-REN_XXXX_SANDER-LANGBROEK.json} | 23 +- ...UT-UTR_199X_NL-GE-TIE_XXXX_KEVIN-TUIL.json | 6 +- ..._199X_NL-NB-BES_XXXX_SANGEETIKA-RUCHI.json | 6 +- ...X_NL-NB-EIN_XXXX_MARKELLA-KOSTOPOULOU.json | 6 +- ...99X_NL-NB-EIN_XXXX_MAURICE-CROMBEECKE.json | 6 +- ...-UTR_199X_NL-NB-GEE_XXXX_MAAIKE-SNOEK.json | 6 +- ...T-UTR_199X_NL-NB-VEL_XXXX_JEROEN-MEER.json | 6 +- ..._199X_NL-NH-ALK_XXXX_BARRY-OOSTERBAAN.json | 6 +- ..._199X_NL-NH-AMS_XXXX_CHARLOTTE-ENGELS.json | 6 +- ...UTR_199X_NL-NH-AMS_XXXX_DENNIS-HOLTEN.json | 6 +- ...99X_NL-NH-AMS_XXXX_DIEDERIK-BERGHUIJS.json | 6 +- ...R_199X_NL-NH-AMS_XXXX_FRAUKE-VANDOREN.json | 6 +- ...TR_199X_NL-NH-AMS_XXXX_JANNEKE-HEMMEN.json | 6 +- ...UTR_199X_NL-NH-AMS_XXXX_JUDITH-KOSTER.json | 6 +- ..._199X_NL-NH-AMS_XXXX_LARISSA-VERSLOOT.json | 6 +- ...TR_199X_NL-NH-AMS_XXXX_LIEKE-BROEKMAN.json | 6 +- ...UTR_199X_NL-NH-AMS_XXXX_MANUELA-BOSCH.json | 6 +- ...-UT-UTR_199X_NL-NH-AMS_XXXX_NINA-REID.json | 6 +- ...T-UTR_199X_NL-NH-AMS_XXXX_PASCAL-LUIT.json | 6 +- ...T-UTR_199X_NL-NH-AMS_XXXX_PAUL-DALSEN.json | 6 +- ...T-UTR_199X_NL-NH-AMS_XXXX_THOMAS-ABMA.json | 6 +- ...UT-UTR_199X_NL-NH-AMS_XXXX_TIM-HARTOG.json | 6 +- ...TR_199X_NL-NH-HOO_XXXX_SALINA-NEEFJES.json | 6 +- ...UT-UTR_199X_NL-OV-DEV_XXXX_MANDY-SMIT.json | 6 +- ...TR_199X_NL-UT-AME_XXXX_ESTHER-VREEKEN.json | 6 +- ...NL-UT-UTR_XXXX_CHARLOTTE-SCHUITEMAKER.json | 6 +- ...-UTR_199X_NL-UT-UTR_XXXX_EMMA-DOLMANS.json | 6 +- ...99X_NL-UT-UTR_XXXX_ESTHER-KLINKENBERG.json | 6 +- ...R_199X_NL-UT-UTR_XXXX_JOHANN-VILLIERS.json | 6 +- ...-UTR_199X_NL-UT-UTR_XXXX_KEVIN-JANSEN.json | 6 +- ...UTR_199X_NL-UT-UTR_XXXX_LISA-HUIJSMAN.json | 6 +- ...UTR_199X_NL-UT-UTR_XXXX_LIZANNE-ZWETH.json | 6 +- ...TR_199X_NL-UT-UTR_XXXX_MARRIT-BORGHT.json} | 148 ++++--- ...T-UTR_199X_NL-UT-UTR_XXXX_MATHIJS-HES.json | 6 +- ...199X_NL-UT-UTR_XXXX_MATHILDA-WANROOIJ.json | 6 +- ...UTR_199X_NL-UT-UTR_XXXX_ROBRECHT-HAEX.json | 6 +- ...UTR_199X_NL-UT-UTR_XXXX_SANNE-RINGERS.json | 6 +- ..._199X_NL-UT-UTR_XXXX_THOMAS-DIEVELAAR.json | 6 +- ...R_199X_NL-UT-UTR_XXXX_THOMAS-MEBRAHTU.json | 6 +- ...T-UTR_199X_NL-UT-UTR_XXXX_VERA-WESTRA.json | 6 +- ...TR_199X_NL-ZH-DEL_XXXX_MICHEL-KLAPHEK.json | 6 +- ...R_199X_NL-ZH-KAZ_XXXX_MARILIJN-SCHAAP.json | 6 +- ...UT-UTR_199X_NL-ZH-NAD_XXXX_MARK-BARTO.json | 6 +- ...199X_NL-ZH-RIJ_XXXX_WILLEM-DRIEBERGEN.json | 6 +- ...-UTR_199X_NL-ZH-ROT_XXXX_BRAM-DONDERS.json | 6 +- ...UTR_199X_NL-ZH-ROT_XXXX_JORENA-ROZIJN.json | 6 +- ...TR_199X_NL-ZH-TH_XXXX_AIRIEN-MOENNOE.json} | 93 ++++- ..._199X_NL-ZH-TH_XXXX_DAPHNIE-PLOEGSTRA.json | 6 +- ...9X_NL-ZH-TH_XXXX_JELLEJOCHEM-SCHELLEN.json | 6 +- ...UTR_199X_NL-ZH-TH_XXXX_MARISKA-WAKKEE.json | 6 +- ...UT-UTR_199X_NL-ZH-TH_XXXX_METKA-HAGEN.json | 6 +- ..._199X_NL-ZH-WAD_XXXX_SARMAD-ALMASOUDI.json | 6 +- ...T-UTR_199X_XX-XX-XXX_XXXX_AMANDA-LOBO.json | 6 +- ...TR_199X_XX-XX-XXX_XXXX_CHARLOTTE-BEEK.json | 6 +- ...199X_XX-XX-XXX_XXXX_DIEWERTJE-WAPSTRA.json | 6 +- ...L-UT-UTR_199X_XX-XX-XXX_XXXX_EVA-BOER.json | 6 +- ...T-UTR_199X_XX-XX-XXX_XXXX_IAN-VERKAIK.json | 6 +- ...R_199X_XX-XX-XXX_XXXX_IBTISSAM-OUAALI.json | 6 +- ...-UTR_199X_XX-XX-XXX_XXXX_JETTE-BROEKE.json | 6 +- ..._199X_XX-XX-XXX_XXXX_LAILA-BOUALLOUCH.json | 6 +- ..._199X_XX-XX-XXX_XXXX_MARLY-SCHELTINGA.json | 6 +- ...UT-UTR_199X_XX-XX-XXX_XXXX_MEREL-BLOM.json | 6 +- ...L-UT-UTR_199X_XX-XX-XXX_XXXX_NINA-BOS.json | 6 +- ...99X_XX-XX-XXX_XXXX_PHILIPPINE-JENSTER.json | 6 +- ...UTR_199X_XX-XX-XXX_XXXX_SIMONE-HUTING.json | 6 +- ...-XX-XXX_XXXX_SUSANNE-BERGWERFFVERBURG.json | 6 +- ...T-UTR_200X_NL-GE-ARN_XXXX_MEGAN-EMPEL.json | 6 +- ...200X_NL-GE-TIE_XXXX_NATALLIA-HENNEMAN.json | 6 +- ...R_200X_NL-NH-AMS_XXXX_ANNE-VOORWINDEN.json | 6 +- ...L-UT-UTR_200X_NL-NH-AMS_XXXX_KARIJN-B.json | 6 +- ...UTR_200X_NL-NH-AMS_XXXX_PETAR-VERZAAL.json | 6 +- ...-UTR_200X_NL-NH-AMS_XXXX_RUTH-RUSKAMP.json | 6 +- ...00X_NL-NH-WEE_XXXX_CHRISTIAN-PFEIFFER.json | 6 +- ...UT-UTR_200X_NL-UT-AME_XXXX_OLIVIA-MUS.json | 6 +- ...-UTR_200X_NL-UT-BAA_XXXX_MIRJAM-LENTZ.json | 6 +- ...T-UTR_200X_NL-UT-UTR_XXXX_CASPER-TOPS.json | 6 +- ...UT-UTR_200X_NL-UT-UTR_XXXX_GIJS-EWIJK.json | 6 +- ...R_200X_NL-UT-UTR_XXXX_MATTHIAS-SJERPS.json | 6 +- ...UTR_200X_NL-UT-UTR_XXXX_TIM-KOORNSTRA.json | 6 +- ...UTR_200X_NL-UT-ZEI_XXXX_FRANK-MASCINI.json | 6 +- ...T-UTR_200X_NL-ZH-DEL_XXXX_MARJOLEIN-K.json | 6 +- ...-UTR_200X_NL-ZH-ROT_XXXX_KRIS-KORVING.json | 6 +- ...R_200X_NL-ZH-TH_XXXX_ABDULLAH-SMSMIEH.json | 6 +- ..._200X_XX-XX-XXX_XXXX_MARTINE-BARNHARD.json | 6 +- ...-UTR_200X_XX-XX-XXX_XXXX_MEREL-ROTMAN.json | 6 +- ...VEE_197X_NL-GE-WIJ_XXXX_CORINA-LINDEN.json | 6 +- ...T-VIA_198X_NL-NB-EIN_XXXX_ANANDO-PAUL.json | 6 +- ...VIA_199X_NL-UT-UTR_XXXX_NIELS-WORRELL.json | 6 +- ...D_195X_NL-UT-WBD_XXXX_WINFRIED-LEEMAN.json | 6 +- ...WBD_199X_NL-GE-ARN_XXXX_BRAM-KLAPWIJK.json | 6 +- ...WBD_199X_NL-NB-TIL_XXXX_LARS-THIJSSEN.json | 6 +- ...UT-WOE_197X_NL-ZH-TH_XXXX_MARCEL-BERG.json | 6 +- ...UT-WOE_198X_NL-ZH-VLA_XXXX_THEO-HODES.json | 6 +- ...-ZEI_197X_NL-UT-UTR_XXXX_FATIHA-FAJR.json} | 148 ++++--- ...ZEI_199X_NL-UT-ZEI_XXXX_BERT-OORSCHOT.json | 6 +- ...-ZE-HUL_198X_NL-ZE-MID_XXXX_ROBIN-MOL.json | 6 +- ...D_197X_NL-NB-BOZ_XXXX_JULIETTE-ROMIJN.json | 6 +- ...-ZE-MID_198X_NL-ZH-TH_XXXX_CEES-HEERE.json | 6 +- ...NL-ZE-MID_199X_NL-GE-ARN_XXXX_ELINE-S.json | 6 +- ...-AAD_198X_XX-XX-XXX_XXXX_MYRNA-VOSSEN.json | 6 +- ...R_199X_XX-XX-XXX_XXXX_REMCO-PRUIJSERS.json | 6 +- ...99X_NL-ZH-SCH_XXXX_JULIAN-VREUGDENHIL.json | 6 +- ...CAD_200X_XX-XX-XXX_XXXX_SUZANNE-HEIDE.json | 6 +- ...ZH-DEL_193X_XX-XX-XXX_XXXX_HENK-HAAS.json} | 93 ++++- ...-DEL_195X_NL-FR-LEE_XXXX_STEF-AVEZAAT.json | 6 +- ...L-ZH-DEL_195X_NL-ZH-PIJ_XXXX_ERIK-VOS.json | 6 +- ...L_195X_NL-ZH-TH_XXXX_ERIK-BOEKESTEIJN.json | 6 +- ...-DEL_196X_NL-OV-DEV_XXXX_JORDEN-ESSER.json | 6 +- ...DEL_196X_NL-ZH-DEL_XXXX_MISCHA-SOMERS.json | 6 +- ...H-DEL_196X_NL-ZH-DOR_XXXX_ERIK-BERGH.json} | 93 ++++- ...DEL_196X_NL-ZH-ROT_XXXX_KRISTEL-BAELE.json | 6 +- ...NL-ZH-DEL_196X_NL-ZH-TH_XXXX_JAN-HEUL.json | 6 +- ...L_196X_NL-ZH-TH_XXXX_RONALD-TOUSSAINT.json | 6 +- ...197X_NL-ZH-DEL_XXXX_MARIELLE-HENDRIKS.json | 6 +- ...-ZH-DEL_197X_NL-ZH-NAD_XXXX_HAN-WEBER.json | 6 +- ...H-DEL_197X_NL-ZH-TH_XXXX_HAN-HEIJMANS.json | 6 +- ...EL_197X_NL-ZH-TH_XXXX_INGE-GEUZEBROEK.json | 6 +- ...H-DEL_197X_NL-ZH-TH_XXXX_MARTIJN-POEL.json | 6 +- ...DEL_197X_NL-ZH-TH_XXXX_WILLEMIJN-TIL.json} | 93 ++++- ...EL_197X_NL-ZH-TH_XXXX_WILMA-WEZENBEEK.json | 6 +- ...DEL_197X_XX-XX-XXX_XXXX_EDWIN-KOLSTER.json | 6 +- ...EL_197X_XX-XX-XXX_XXXX_JEFFREY-HOEVEN.json | 6 +- ...H-DEL_198X_NL-NB-EIN_XXXX_BAS-GOORDEN.json | 6 +- ...198X_NL-NB-EIN_XXXX_GOPIKA-RAMANANDAN.json | 6 +- ..._198X_NL-NB-EIN_XXXX_JILA-RAFIGHDOOST.json | 6 +- ...L-NB-EIN_XXXX_PRASANNA-RAGHAVENDRARAO.json | 6 +- ...L_198X_NL-NB-EIN_XXXX_ROBINSON-THOMAS.json | 6 +- ...H-DEL_198X_NL-NB-VEL_XXXX_PIETER-BUCK.json | 6 +- ...198X_NL-NH-AMS_XXXX_JONAS-PIJNENBURG.json} | 23 +- ...-DEL_198X_NL-ZH-DEL_XXXX_EMILIE-LOPES.json | 6 +- ..._198X_NL-ZH-DEL_XXXX_MADELEINE-SMAELE.json | 6 +- ...EL_198X_NL-ZH-ROT_XXXX_CHARLOTTE-WIJK.json | 6 +- ...H-DEL_198X_NL-ZH-TH_XXXX_IRMA-WOONING.json | 6 +- ...DEL_198X_NL-ZH-TH_XXXX_KRIJN-WIJNANDS.json | 6 +- ...L_198X_NL-ZH-TH_XXXX_THEODORE-KLOUVAS.json | 6 +- ...DEL_198X_XX-XX-XXX_XXXX_LOUISE-OTTING.json | 6 +- ...-DEL_199X_NL-NB-EIN_XXXX_AFSHIN-VAHID.json | 6 +- ...L_199X_NL-NB-EIN_XXXX_ANTANAS-MELAIKA.json | 6 +- ...L_199X_NL-NB-EIN_XXXX_JOEP-ASSENDELFT.json | 6 +- ...H-DEL_199X_NL-NB-EIN_XXXX_PRANAV-MANI.json | 6 +- ...DEL_199X_NL-NB-EIN_XXXX_RAVI-KAPARAPU.json | 6 +- ...DEL_199X_NL-NB-EIN_XXXX_SOOVAM-BISWAL.json | 6 +- ...EL_199X_NL-NB-VEL_XXXX_CHRISTEL-PRINS.json | 6 +- ...L_199X_NL-NB-VEL_XXXX_MATHIJS-GARMING.json | 6 +- ...EL_199X_NL-NB-VEL_XXXX_SANDER-BIERENS.json | 6 +- ..._199X_NL-NB-VEL_XXXX_WILLEMIJN-PETERS.json | 6 +- ...-DEL_199X_NL-NH-AMS_XXXX_IMAN-TANTAWY.json | 6 +- ...EL_199X_NL-NH-AMS_XXXX_KARIMA-ALMOUJY.json | 6 +- ...EL_199X_NL-NH-AMS_XXXX_THIJS-BOLSCHER.json | 6 +- ...DEL_199X_NL-NH-AMS_XXXX_THOM-WOUDSTRA.json | 6 +- ...NL-ZH-DEL_199X_NL-UT-NIE_XXXX_TOM-TOM.json | 6 +- ...NL-ZH-DEL_199X_NL-ZH-DEL_XXXX_FENG-MA.json | 6 +- ...ZH-DEL_199X_NL-ZH-DEL_XXXX_LUIS-NIETO.json | 6 +- ...ZH-DEL_199X_NL-ZH-DEL_XXXX_MARIO-SOSA.json | 6 +- ..._199X_NL-ZH-TH_XXXX_BERTIEN-BROEKHANS.json | 6 +- ...ZH-DEL_199X_NL-ZH-TH_XXXX_BRUNO-TOORN.json | 6 +- ...-ZH-DEL_199X_NL-ZH-WAD_XXXX_JAAP-DORP.json | 6 +- ...NL-ZH-DEL_199X_XX-XX-XXX_XXXX_NOA-MAN.json | 6 +- ...NB-EIN_XXXX_HARIPRASADH-PARTHASARATHY.json | 6 +- ...ZH-DEL_200X_NL-ZH-DEL_XXXX_DOEKE-SMIT.json | 6 +- ...DEL_200X_NL-ZH-DEL_XXXX_MADELEIN-FEIJ.json | 6 +- ...DEL_200X_NL-ZH-DEL_XXXX_MAX-TANGELDER.json | 6 +- ...DEL_200X_NL-ZH-DEL_XXXX_YASIR-AYDEMIR.json | 6 +- ...EL_200X_NL-ZH-LEI_XXXX_AGNES-SCHIPPER.json | 6 +- ...-DEL_200X_XX-XX-XXX_XXXX_EMILIE-AKKER.json | 6 +- ...H-DOR_197X_NL-ZH-ZWI_XXXX_ARNOLD-VELD.json | 6 +- ...DOR_198X_XX-XX-XXX_XXXX_MYLENE-SILVA.json} | 93 ++++- ...OR_199X_NL-ZH-GOR_XXXX_PATRICIA-VRIES.json | 6 +- ...97X_NL-ZH-ZOE_XXXX_ANNEMIEKE-FIERINCK.json | 6 +- ...-HIL_199X_NL-NH-HOO_XXXX_DANNY-ALPHEN.json | 6 +- ...HVH_198X_NL-ZH-ROT_XXXX_GERBEN-VISSER.json | 6 +- ...LEI_193X_NL-ZH-VOO_XXXX_HELEEN-DUPUIS.json | 6 +- ...I_194X_NL-GE-APE_XXXX_MARIANNE-WILMER.json | 6 +- ...-LEI_195X_NL-GE-APE_XXXX_RON-ELSINGA.json} | 93 ++++- ..._NL-NB-TIL_XXXX_GODELIEVE-BROEKLANDER.json | 6 +- ...LEI_195X_NL-NH-HAA_XXXX_MARCEL-AUWERS.json | 6 +- ...-ZH-LEI_195X_NL-ZH-TH_XXXX_LINDA-WIJK.json | 6 +- ...LEI_195X_XX-XX-XXX_XXXX_HARRY-VERWEIJ.json | 6 +- ...LEI_196X_NL-GE-ARN_XXXX_HUBERT-SLINGS.json | 6 +- ...6X_NL-GE-GEN_XXXX_CAROLINE-SCHAEFFER.json} | 93 ++++- ...-LEI_196X_NL-GE-LOC_XXXX_VANESSA-LANN.json | 6 +- ...ZH-LEI_196X_NL-NH-AMS_XXXX_SU-TIMPGAN.json | 6 +- ...ZH-LEI_196X_NL-NH-AMS_XXXX_WIM-HOEBEN.json | 6 +- ...-LEI_196X_NL-NH-HIL_XXXX_HELEEN-RUIJG.json | 6 +- ...-LEI_196X_NL-NH-ZAA_XXXX_WILMAR-TAAL.json} | 93 ++++- ...H-LEI_196X_NL-OV-DEV_XXXX_EVA-KLEEMAN.json | 6 +- ...196X_NL-UT-UTR_XXXX_FLOORTJE-TUINSTRA.json | 6 +- ...I_196X_NL-UT-UTR_XXXX_MONIQUE-OKKERSE.json | 6 +- ...H-LEI_196X_NL-UT-UTR_XXXX_TJYYING-LIU.json | 6 +- ...-LEI_196X_NL-ZH-LEI_XXXX_DIRK-BIEMOND.json | 6 +- ...H-LEI_196X_NL-ZH-LEI_XXXX_EWALD-EBING.json | 6 +- ...ZH-LEI_196X_NL-ZH-LEI_XXXX_WILCO-KAMP.json | 6 +- ...ZH-LEI_196X_NL-ZH-TH_XXXX_AGNES-STORM.json | 6 +- ...L-ZH-LEI_196X_NL-ZH-TH_XXXX_ANTON-BAL.json | 6 +- ...-LEI_196X_NL-ZH-TH_XXXX_ARIE-MEIJBOOM.json | 6 +- ..._196X_NL-ZH-TH_XXXX_CARIETTE-ITTERSUM.json | 6 +- ..._196X_NL-ZH-TH_XXXX_DRSMA-ENGELENBURG.json | 6 +- ...6X_NL-ZH-TH_XXXX_FREDERIQUE-SYBRANDI.json} | 93 ++++- ..._NL-ZH-LEI_196X_NL-ZH-TH_XXXX_HELIA-D.json | 6 +- ...H-LEI_196X_NL-ZH-TH_XXXX_INGRID-DILLO.json | 6 +- ...-LEI_196X_NL-ZH-TH_XXXX_LAMAN-BERNINI.json | 6 +- ...H-LEI_196X_NL-ZH-TH_XXXX_MAARTJE-EIJK.json | 6 +- ...H-LEI_196X_NL-ZH-TH_XXXX_PETER-ELLENS.json | 6 +- ...H-LEI_196X_NL-ZH-TH_XXXX_REIN-DEKKERS.json | 6 +- ..._196X_NL-ZH-TH_XXXX_STEVEN-CLAEYSSENS.json | 6 +- ...I_196X_NL-ZH-TH_XXXX_VALIKA-SMEULDERS.json | 6 +- ..._196X_XX-XX-XXX_XXXX_DOMINIQUE-GEELEN.json | 6 +- ...-LEI_196X_XX-XX-XXX_XXXX_IRIS-TULKENS.json | 6 +- ...EI_196X_XX-XX-XXX_XXXX_SANDER-JANSSEN.json | 6 +- ...-LEI_197X_NL-NB-VEL_XXXX_AMAL-TOURABI.json | 6 +- ...H-LEI_197X_NL-NH-AMS_XXXX_ANNETTE-WIT.json | 6 +- ...I_197X_NL-NH-AMS_XXXX_ANNIEK-MEINDERS.json | 6 +- ...97X_NL-NH-AMS_XXXX_BERNADETTE-MEIBORG.json | 6 +- ...H-LEI_197X_NL-NH-AMS_XXXX_LUCIEN-XIAN.json | 6 +- ...LEI_197X_NL-NH-AMS_XXXX_MARGOT-KOOTEN.json | 6 +- ...LEI_197X_NL-NH-AMS_XXXX_MICHELLE-BERK.json | 6 +- ...LEI_197X_NL-NH-AMS_XXXX_NIENKE-BAKKER.json | 6 +- ...LEI_197X_NL-NH-HIL_XXXX_ELSBETH-KWANT.json | 6 +- ...H-LEI_197X_NL-UT-AME_XXXX_JASMIJN-BUS.json | 6 +- ...EI_197X_NL-UT-UTR_XXXX_MARCEL-TORSING.json | 6 +- ...LEI_197X_NL-UT-UTR_XXXX_YVONNE-HEMMEN.json | 6 +- ...97X_NL-ZH-LEI_XXXX_CHANNA-HOOGERVORST.json | 6 +- ...7X_NL-ZH-LEI_XXXX_FIONA-ROMBOUTSHARMS.json | 6 +- ...H-LEI_197X_NL-ZH-LEI_XXXX_VERA-HUBERS.json | 6 +- ...H-LEI_197X_NL-ZH-RIJ_XXXX_TEUNIS-HAAS.json | 6 +- ..._NL-ZH-ROT_XXXX_ANTOINETTE-BRUMMELINK.json | 6 +- ...-LEI_197X_NL-ZH-TH_XXXX_ARLETTE-SJERP.json | 6 +- ...LEI_197X_NL-ZH-TH_XXXX_CORINNE-HOFMAN.json | 6 +- ...ZH-LEI_197X_NL-ZH-TH_XXXX_INA-DIJKMAN.json | 6 +- ...NL-ZH-LEI_197X_NL-ZH-TH_XXXX_KIM-SMIT.json | 6 +- ...197X_NL-ZH-TH_XXXX_MEREL-LEIDELMEIJER.json | 6 +- ...H-LEI_197X_NL-ZH-TH_XXXX_OLAF-JANSSEN.json | 6 +- ..._197X_NL-ZH-TH_XXXX_RUBEN-WAARDHUIZEN.json | 6 +- ...-ZH-LEI_197X_NL-ZH-TH_XXXX_SUGENG-MSC.json | 6 +- ...197X_XX-XX-XXX_XXXX_ADRIANA-ARELLANO.json} | 93 ++++- ...-LEI_197X_XX-XX-XXX_XXXX_ARNE-WOSSINK.json | 6 +- ...97X_XX-XX-XXX_XXXX_ARTHUR-NIGGEBRUGGE.json | 6 +- ...LEI_197X_XX-XX-XXX_XXXX_EVELINE-GOEDE.json | 6 +- ...H-LEI_197X_XX-XX-XXX_XXXX_HARRY-ASSEN.json | 6 +- ...ZH-LEI_197X_XX-XX-XXX_XXXX_HILDE-HALM.json | 6 +- ..._197X_XX-XX-XXX_XXXX_PAULINE-GOETTSCH.json | 6 +- ..._198X_NL-GE-ARN_XXXX_FREDERIK-KNEGTEL.json | 6 +- ...LEI_198X_NL-NB-BRE_XXXX_SJOERD-BAKKER.json | 6 +- ...LEI_198X_NL-NB-EIN_XXXX_RICK-LEIJSSEN.json | 6 +- ...I_198X_NL-NH-AMS_XXXX_CAROLINE-KONING.json | 6 +- ...-ZH-LEI_198X_NL-NH-AMS_XXXX_LISA-BEEK.json | 6 +- ...98X_NL-NH-AMS_XXXX_RIENTSANNE-SLOTEMA.json | 6 +- ...LEI_198X_NL-NH-AMS_XXXX_ROBERT-VUUREN.json | 6 +- ...-ZH-LEI_198X_NL-NH-AMS_XXXX_SARA-DIJK.json | 6 +- ...EI_198X_NL-NH-HAA_XXXX_EWOUT-VREEBURG.json | 6 +- ...I_198X_NL-UT-AME_XXXX_REMCO-VERMEULEN.json | 6 +- ...LEI_198X_NL-UT-LEU_XXXX_LOEK-BRINKMAN.json | 6 +- ...I_198X_NL-ZH-LEI_XXXX_ALEID-SCHELTEMA.json | 6 +- ...L-ZH-LEI_198X_NL-ZH-LEI_XXXX_BRITTA-W.json | 6 +- ..._198X_NL-ZH-LEI_XXXX_DIANA-SUHARDIMAN.json | 6 +- ...ZH-LEI_198X_NL-ZH-LEI_XXXX_LAURA-VELD.json | 6 +- ...EI_198X_NL-ZH-LEI_XXXX_MARIJKE-HARTOG.json | 6 +- ...EI_198X_NL-ZH-LEI_XXXX_WENGKY-ARIANDO.json | 6 +- ...LEI_198X_NL-ZH-OEG_XXXX_ALEX-BRANDSEN.json | 6 +- ...-ZH-LEI_198X_NL-ZH-OEG_XXXX_JAN-KLERK.json | 6 +- ...-LEI_198X_NL-ZH-OEG_XXXX_LUCAS-KNITEL.json | 6 +- ...ZH-LEI_198X_NL-ZH-TH_XXXX_DAAN-ELDERS.json | 6 +- ...I_198X_NL-ZH-TH_XXXX_DIEDERIK-ROMONDT.json | 6 +- ...-ZH-LEI_198X_NL-ZH-TH_XXXX_GUUS-ZWOLL.json | 6 +- ...ZH-LEI_198X_NL-ZH-TH_XXXX_HESTER-TORN.json | 6 +- ...ZH-LEI_198X_NL-ZH-TH_XXXX_LIANNE-BELT.json | 6 +- ...-ZH-LEI_198X_NL-ZH-TH_XXXX_PEDRO-ROCO.json | 6 +- ...H-LEI_198X_NL-ZH-TH_XXXX_PIM-WIENTJES.json | 6 +- ...I_198X_NL-ZH-TH_XXXX_QUINTEN-SNIJDERS.json | 6 +- ...-ZH-LEI_198X_NL-ZH-TH_XXXX_SEDA-AKTAS.json | 6 +- ...EI_198X_NL-ZH-TH_XXXX_TOM-HOOGERVORST.json | 6 +- ...NL-ZH-LEI_198X_NL-ZH-TH_XXXX_VIOLET-M.json | 6 +- ..._198X_NL-ZH-ZOE_XXXX_WENDY-ZWAANSWIJK.json | 6 +- ...198X_XX-XX-XXX_XXXX_ALEXANDER-DENCHER.json | 12 +- ...ZH-LEI_198X_XX-XX-XXX_XXXX_EGON-OEVER.json | 6 +- ...LEI_198X_XX-XX-XXX_XXXX_ELLEN-WAERDEN.json | 6 +- ...H-LEI_198X_XX-XX-XXX_XXXX_GERRIT-KROL.json | 6 +- ...-LEI_198X_XX-XX-XXX_XXXX_RIES-KAMPHOF.json | 6 +- ...199X_NL-GE-BED_XXXX_BASTIAN-STEPHOUDT.json | 6 +- ...-LEI_199X_NL-NB-BOZ_XXXX_TIM-KERKHOFS.json | 6 +- ...-ZH-LEI_199X_NL-NH-AMS_XXXX_EMMA-BREE.json | 6 +- ...H-LEI_199X_NL-NH-AMS_XXXX_GEETA-BRUIN.json | 6 +- ...-LEI_199X_NL-NH-AMS_XXXX_JOELLE-DAEMS.json | 6 +- ...I_199X_NL-NH-AMS_XXXX_KERSTIN-WINKING.json | 6 +- ...LEI_199X_NL-NH-AMS_XXXX_STERRE-CAMPEN.json | 6 +- ..._NL-ZH-LEI_199X_NL-NH-AMS_XXXX_SUDI-S.json | 6 +- ...9X_NL-NH-AMS_XXXX_TAMAR-HESTRINGRADER.json | 6 +- ..._199X_NL-NH-HAA_XXXX_ESTHER-GRAFTDIJK.json | 6 +- ...I_199X_NL-OV-ENS_XXXX_JASMIJN-MENNINK.json | 6 +- ...ZH-LEI_199X_NL-OV-LOS_XXXX_THIJS-SPIN.json | 6 +- ...EI_199X_NL-UT-UTR_XXXX_EMIEL-WALGAARD.json | 6 +- ...EI_199X_NL-ZH-DEL_XXXX_CHELSEY-RENSEN.json | 6 +- ...I_199X_NL-ZH-DEL_XXXX_KRISHTI-KRISHTI.json | 6 +- ...I_199X_NL-ZH-DOR_XXXX_DENNIS-DAVRADOS.json | 6 +- ...I_199X_NL-ZH-LEI_XXXX_ASHLEIGH-MORRIS.json | 6 +- ...99X_NL-ZH-LEI_XXXX_DAPHNE-WIJNGAARDEN.json | 6 +- ...EI_199X_NL-ZH-LEI_XXXX_DIRK-HUIJSMANS.json | 6 +- ...H-LEI_199X_NL-ZH-LEI_XXXX_JIM-DWINGER.json | 6 +- ...LEI_199X_NL-ZH-LEI_XXXX_JORT-ZIJLSTRA.json | 6 +- ...EI_199X_NL-ZH-LEI_XXXX_KARIN-KEESMAAT.json | 6 +- ...199X_NL-ZH-LEI_XXXX_KARWAN-FATAHBLACK.json | 6 +- ...H-LEI_199X_NL-ZH-LEI_XXXX_MANOUK-OORD.json | 6 +- ...-LEI_199X_NL-ZH-LEI_XXXX_MARIJE-PLOMP.json | 6 +- ...H-LEI_199X_NL-ZH-LEI_XXXX_MARIJE-REST.json | 6 +- ...ZH-LEI_199X_NL-ZH-LEI_XXXX_MARTHE-KES.json | 6 +- ...-LEI_199X_NL-ZH-LEI_XXXX_MILOU-DEKKER.json | 6 +- ...EI_199X_NL-ZH-LEI_XXXX_OTTO-STUPARITZ.json | 6 +- ...-LEI_199X_NL-ZH-LEI_XXXX_SANDER-HORST.json | 6 +- ...-LEI_199X_NL-ZH-LEI_XXXX_SUZAN-BOREEL.json | 6 +- ...-LEI_199X_NL-ZH-LEI_XXXX_TEUKU-FADELI.json | 6 +- ...99X_NL-ZH-LEI_XXXX_THOMASJAN-KOERHUIS.json | 6 +- ...LEI_199X_NL-ZH-LEI_XXXX_TOM-GERRITSEN.json | 6 +- ..._199X_NL-ZH-ROT_XXXX_JESPER-HESHUSIUS.json | 6 +- ...H-LEI_199X_NL-ZH-ROT_XXXX_RABER-HAKIM.json | 6 +- ..._NL-ZH-LEI_199X_NL-ZH-TH_XXXX_ALANY-R.json | 6 +- ...H-LEI_199X_NL-ZH-TH_XXXX_CLAUDIA-DIJK.json | 6 +- ...-LEI_199X_NL-ZH-TH_XXXX_CORS-BRINKMAN.json | 6 +- ...199X_NL-ZH-TH_XXXX_FJODOR-RIJSSELBERG.json | 6 +- ...99X_NL-ZH-TH_XXXX_ISABEL-CORTABITARTE.json | 6 +- ...H-LEI_199X_NL-ZH-TH_XXXX_JORIS-KUIPER.json | 6 +- ...-LEI_199X_NL-ZH-TH_XXXX_LAURA-NIJSSEN.json | 6 +- ..._199X_NL-ZH-TH_XXXX_MARIEKE-MOOLENAAR.json | 6 +- ...LEI_199X_NL-ZH-TH_XXXX_MATTHIJS-BAART.json | 6 +- ...199X_NL-ZH-TH_XXXX_MATTHIJS-HERWEIJER.json | 6 +- ...LEI_199X_NL-ZH-TH_XXXX_OLIVIER-MEULEN.json | 6 +- ...H-LEI_199X_NL-ZH-TH_XXXX_ROSALIE-WERD.json | 6 +- ...H-LEI_199X_NL-ZH-TH_XXXX_SADE-DEVILEE.json | 6 +- ...H-LEI_199X_NL-ZH-TH_XXXX_TESSA-STADEN.json | 6 +- ..._NL-ZH-LEI_199X_NL-ZH-ZOE_XXXX_KYRA-M.json | 6 +- ...EI_199X_XX-XX-XXX_XXXX_ALEC-RIJSEWIJK.json | 6 +- ...-ZH-LEI_199X_XX-XX-XXX_XXXX_AMY-KOOIJ.json | 6 +- ...-LEI_199X_XX-XX-XXX_XXXX_CAITLIN-BOER.json | 6 +- ...X-XXX_XXXX_CORNELIA-SANDIKCILARLOOIJE.json | 6 +- ...ZH-LEI_199X_XX-XX-XXX_XXXX_DAAN-BEERS.json | 6 +- ...EI_199X_XX-XX-XXX_XXXX_DAVID-STOLWIJK.json | 6 +- ...LEI_199X_XX-XX-XXX_XXXX_FATIHA-ABBACH.json | 6 +- ...ZH-LEI_199X_XX-XX-XXX_XXXX_HANNA-RUIZ.json | 6 +- ...-LEI_199X_XX-XX-XXX_XXXX_JOEL-ANTONIE.json | 6 +- ...-LEI_199X_XX-XX-XXX_XXXX_KELLY-SCHENK.json | 6 +- ..._199X_XX-XX-XXX_XXXX_LISANNE-NOORDZIJ.json | 6 +- ...I_199X_XX-XX-XXX_XXXX_LOUISE-DORTMOND.json | 6 +- ...LEI_199X_XX-XX-XXX_XXXX_MAARTEN-MANSE.json | 6 +- ...I_199X_XX-XX-XXX_XXXX_MARIJN-WEYTINGH.json | 6 +- ...EI_199X_XX-XX-XXX_XXXX_MEREL-THIJSSEN.json | 6 +- ...EI_199X_XX-XX-XXX_XXXX_NICK-WARMERDAM.json | 6 +- ...H-LEI_199X_XX-XX-XXX_XXXX_ROSA-KONING.json | 6 +- ...I_199X_XX-XX-XXX_XXXX_SIMONE-VUURPIJL.json | 6 +- ...LEI_200X_NL-GE-ZUT_XXXX_SANDER-ERADES.json | 6 +- ...200X_NL-NH-AMS_XXXX_DENISE-SCHALKWIJK.json | 6 +- ...EI_200X_NL-NH-AMS_XXXX_KAI-TJONGAYONG.json | 6 +- ...H-LEI_200X_NL-NH-AMS_XXXX_LEA-HAASTER.json | 6 +- ...LEI_200X_NL-NH-AMS_XXXX_PUCK-BRANTJES.json | 6 +- ...LEI_200X_NL-UT-UTR_XXXX_IRIS-BRANDTS.json} | 93 ++++- ...H-LEI_200X_NL-ZH-LEI_XXXX_AMAAL-SALIE.json | 6 +- ...ZH-LEI_200X_NL-ZH-LEI_XXXX_FONS-HOOFT.json | 6 +- ..._200X_NL-ZH-LEI_XXXX_MARRE-WESTERBEEK.json | 6 +- ...H-LEI_200X_NL-ZH-LEI_XXXX_RUQAYA-ZAKI.json | 6 +- ...I_200X_NL-ZH-NAD_XXXX_REBECCA-PRINSEN.json | 6 +- ...EI_200X_NL-ZH-ROT_XXXX_JULIA-BLOMBERG.json | 6 +- ...-ZH-LEI_200X_NL-ZH-TH_XXXX_AMIN-DHAOU.json | 6 +- ...ZH-LEI_200X_NL-ZH-TH_XXXX_JORIS-VULTO.json | 6 +- ...I_200X_NL-ZH-TH_XXXX_MARIA-POLUSHKINA.json | 6 +- ...H-LEI_200X_XX-XX-XXX_XXXX_ANNE-BERGEN.json | 6 +- ...EI_200X_XX-XX-XXX_XXXX_SUZE-WARMERDAM.json | 6 +- ...-MAA_197X_NL-ZH-DEL_XXXX_BIANCA-VLIET.json | 6 +- ...199X_NL-NB-EIN_XXXX_GHANISHTHA-BHATTI.json | 6 +- ...H-RIJ_196X_XX-XX-XXX_XXXX_HERMAN-PLAS.json | 6 +- ...-ROE_199X_NL-ZH-TH_XXXX_DANIELLA-KERN.json | 6 +- ...-ROT_194X_NL-GE-LOC_XXXX_NEIL-WALLACE.json | 6 +- ...-ROT_195X_XX-XX-XXX_XXXX_JACQUELINE-K.json | 6 +- ...-ROT_195X_XX-XX-XXX_XXXX_RENE-BROUWER.json | 6 +- ...ROT_196X_NL-NB-BRE_XXXX_THIJS-HEIJDEN.json | 6 +- ...ZH-ROT_196X_NL-NB-OIS_XXXX_FRANS-PEGT.json | 6 +- ...H-ROT_196X_NL-NH-SCH_XXXX_PATRICK-MIL.json | 6 +- ...OT_196X_NL-UT-AME_XXXX_ROBERT-WICHINK.json | 6 +- ...ROT_196X_NL-ZH-ROT_XXXX_DIRK-OOSTHOEK.json | 6 +- ...H-ROT_196X_NL-ZH-TH_XXXX_WAMPIE-LIBON.json | 6 +- ...OT_196X_XX-XX-XXX_XXXX_ANNETTE-VRIES.json} | 99 ++++- ...ROT_196X_XX-XX-XXX_XXXX_BARBERA-KOOIJ.json | 6 +- ...OT_196X_XX-XX-XXX_XXXX_KARIN-STEIJGER.json | 6 +- ...-ROT_197X_NL-GE-APE_XXXX_BRENDA-GRAAF.json | 6 +- ...97X_NL-GE-BED_XXXX_ELISABETH-OVERLOOP.json | 6 +- ...-ROT_197X_NL-NH-AMS_XXXX_JAN-PELSDONK.json | 6 +- ...H-ROT_197X_NL-NH-AMS_XXXX_MINUS-HUYNH.json | 6 +- ...T_197X_NL-NH-AMS_XXXX_SENNAY-GHEBREAB.json | 38 +- ..._NL-ZH-ROT_197X_NL-NH-DHE_XXXX_MARK-D.json | 6 +- ...ZH-ROT_197X_NL-NH-WAA_XXXX_BOUDIEN-RI.json | 6 +- ...97X_NL-ZH-DEL_XXXX_DAVE-VANDERHEIJDEN.json | 6 +- ...ROT_197X_NL-ZH-KAD_XXXX_ANGELA-BERBEN.json | 6 +- ...-ZH-ROT_197X_NL-ZH-LEI_XXXX_LOES-VALK.json | 6 +- ...L-ZH-ROT_197X_NL-ZH-TH_XXXX_KATJA-MUR.json | 6 +- ...L-ZH-ROT_197X_NL-ZH-TH_XXXX_NICO-LAAN.json | 6 +- ...ROT_197X_XX-XX-XXX_XXXX_BRAM-OOSTDIJK.json | 6 +- ...OT_197X_XX-XX-XXX_XXXX_CLAUDETTE-MEER.json | 6 +- ...-ZH-ROT_197X_XX-XX-XXX_XXXX_FUCHUNG-M.json | 6 +- ...OT_197X_XX-XX-XXX_XXXX_MARTIJN-KLEPPE.json | 6 +- ...ZH-ROT_197X_XX-XX-XXX_XXXX_REMCO-BOER.json | 6 +- ...ROT_198X_NL-GE-APE_XXXX_ELMA-PLAISIER.json | 6 +- ...8X_NL-GE-WAG_XXXX_LIESBETH-NIEMANSKOM.json | 6 +- ...98X_NL-NB-BOZ_XXXX_ISABELLE-TOUSSAINT.json | 6 +- ...OT_198X_NL-NB-BRE_XXXX_DIEDERIK-SMITS.json | 6 +- ...ROT_198X_NL-NB-DOM_XXXX_JURJEN-GEENEN.json | 6 +- ...H-ROT_198X_NL-NB-EIN_XXXX_RUPAL-BASAK.json | 6 +- ...ROT_198X_NL-NB-VEL_XXXX_BART-HEZEWIJK.json | 6 +- ...-ROT_198X_NL-NH-AMS_XXXX_CASPER-KRUIT.json | 6 +- ...ZH-ROT_198X_NL-NH-AMS_XXXX_CINDY-DOFF.json | 6 +- ...OT_198X_NL-NH-AMS_XXXX_LENA-HOOGSTADT.json | 6 +- ...OT_198X_NL-OV-ALM_XXXX_SOFIE-BOUWHUIS.json | 6 +- ...198X_NL-OV-DEV_XXXX_DARIO-BONGIOVANNI.json | 6 +- ...ROT_198X_NL-UT-UTR_XXXX_DENNIS-WEGINK.json | 6 +- ...T_198X_NL-UT-UTR_XXXX_MICHAEL-WILLEMS.json | 6 +- ...ZH-ROT_198X_NL-ZH-LEI_XXXX_BIEKE-MARK.json | 6 +- ...-ZH-ROT_198X_NL-ZH-LEI_XXXX_ERIK-BERG.json | 6 +- ...ROT_198X_NL-ZH-LEI_XXXX_GRACE-LEKSANA.json | 6 +- ..._198X_NL-ZH-RIJ_XXXX_BEHRANG-MOUSAVI.json} | 148 ++++--- ...ZH-ROT_198X_NL-ZH-RIJ_XXXX_ELKE-FINKH.json | 6 +- ...-ROT_198X_NL-ZH-ROT_XXXX_ANDRE-CASTRO.json | 6 +- ...X_NL-ZH-ROT_XXXX_GERTJAN-BALLEGOOIJEN.json | 6 +- ...ROT_198X_NL-ZH-TH_XXXX_MARWAN-JEZRAWI.json | 6 +- ...NL-ZH-ROT_198X_NL-ZH-TH_XXXX_MSC-TOMA.json | 6 +- ...-ZH-ROT_198X_NL-ZH-TH_XXXX_NIEK-VRIES.json | 6 +- ...NL-ZH-ROT_198X_NL-ZH-TH_XXXX_ROP-LAAR.json | 6 +- ...-ROT_198X_NL-ZH-TH_XXXX_THIJS-PRIJKEL.json | 6 +- ...OT_198X_XX-XX-XXX_XXXX_CUISHAN-ZHUANG.json | 6 +- ...-ROT_198X_XX-XX-XXX_XXXX_DIGNA-NIELEN.json | 6 +- ...ZH-ROT_198X_XX-XX-XXX_XXXX_INGE-BOUTS.json | 6 +- ...-ROT_198X_XX-XX-XXX_XXXX_RIANNE-GROEN.json | 6 +- ...-XX-XXX_XXXX_ROSEMARIJN-STEVENSSMEETS.json | 6 +- ...ROT_198X_XX-XX-XXX_XXXX_YVONNE-WILMER.json | 6 +- ...ROT_199X_NL-NB-HEI_XXXX_JOHAN-HOENINK.json | 6 +- ...H-ROT_199X_NL-NH-AMS_XXXX_DONNA-RIJST.json | 6 +- ..._199X_NL-NH-AMS_XXXX_GIANNA-GIANOTTEN.json | 6 +- ...-ROT_199X_NL-NH-AMS_XXXX_OUMAIMA-HJRY.json | 6 +- ...H-ROT_199X_NL-NH-AMS_XXXX_TIM-RAMSCHE.json | 6 +- ...-ROT_199X_NL-UT-DOO_XXXX_EWOUT-HEUKER.json | 6 +- ...OT_199X_NL-UT-RHE_XXXX_JEANETTE-VLIET.json | 6 +- ...OT_199X_NL-UT-UTR_XXXX_JULIE-GROESEN.json} | 93 ++++- ...ROT_199X_NL-UT-UTR_XXXX_MEREL-BRUGMAN.json | 6 +- ...H-ROT_199X_NL-ZH-BOD_XXXX_STEFFI-BERG.json | 6 +- ...-ZH-ROT_199X_NL-ZH-ROT_XXXX_JIM-DUIJL.json | 6 +- ...ZH-ROT_199X_NL-ZH-ROT_XXXX_SANNE-JONG.json | 6 +- ...T_199X_NL-ZH-SCH_XXXX_MATHIJS-BARTELS.json | 6 +- ...H-ROT_199X_NL-ZH-TH_XXXX_LARISSA-CHUA.json | 6 +- ...ZH-ROT_199X_XX-XX-XXX_XXXX_JENNY-JONG.json | 6 +- ...H-ROT_199X_XX-XX-XXX_XXXX_JOS-VERHEIJ.json | 6 +- ...H-ROT_199X_XX-XX-XXX_XXXX_LAURA-REIJM.json | 6 +- ..._199X_XX-XX-XXX_XXXX_SHIVANI-FUZZALLY.json | 6 +- ...ZH-ROT_199X_XX-XX-XXX_XXXX_TUGBA-KAYA.json | 6 +- ...NL-ZH-ROT_200X_BE-VL-KIN_XXXX_JOS-BIE.json | 6 +- ...ZH-ROT_200X_NL-NH-AMS_XXXX_FLEUR-PELT.json | 6 +- ...OT_200X_NL-ZH-ROT_XXXX_DESIREE-HUIZER.json | 6 +- ...T_200X_NL-ZH-ROT_XXXX_LAKSHITA-BHATTI.json | 6 +- ...OT_200X_NL-ZH-ROT_XXXX_SANNE-GOEDHART.json | 6 +- ...-ZH-ROT_200X_NL-ZH-TH_XXXX_TIJS-VLIET.json | 6 +- ...OT_200X_NL-ZH-VLA_XXXX_LORENZO-HALEVY.json | 6 +- ...T_200X_XX-XX-XXX_XXXX_DIONYSIA-DINIUS.json | 6 +- ...T_200X_XX-XX-XXX_XXXX_MEREL-HAVERKAMP.json | 6 +- ...-ZH-ROT_200X_XX-XX-XXX_XXXX_RICK-HOEK.json | 6 +- ...CH_200X_NL-ZH-ROT_XXXX_BRITT-BENNEKOM.json | 6 +- ...SLI_198X_NL-ZH-DOR_XXXX_INGRID-HUIZER.json | 6 +- ...199X_NL-NB-EIN_XXXX_VICTOR-OGUNMODEDE.json | 6 +- ...L-ZH-TH_195X_NL-ZH-TH_XXXX_CAICO-KOEK.json | 6 +- ...NL-ZH-TH_195X_NL-ZH-TH_XXXX_JAAP-HART.json | 6 +- ...ZH-TH_196X_NL-NH-AMS_XXXX_BETTY-BEUNK.json | 6 +- ..._196X_NL-NH-AMS_XXXX_PETER-ASSENDELFT.json | 6 +- ...H-TH_196X_NL-ZH-TH_XXXX_JOYCE-NIJSSEN.json | 6 +- ...ZH-TH_196X_NL-ZH-WAS_XXXX_PAUL-IJSSEL.json | 6 +- ..._XX-XX-XXX_XXXX_INGRID-KORVERKUIJPERS.json | 6 +- ..._196X_XX-XX-XXX_XXXX_SANDRA-PELLEGROM.json | 6 +- ...197X_AT-09-VIE_XXXX_MARJAN-HERSCHEIT.json} | 86 +++- ...H_197X_NL-NB-VEL_XXXX_ALEXANDER-BRINK.json | 6 +- ...H_197X_NL-NB-VEL_XXXX_JEROEN-STEGGINK.json | 6 +- ...ZH-TH_197X_NL-NH-AMS_XXXX_FRANS-HORST.json | 6 +- ...197X_NL-NH-AMS_XXXX_MISCHA-KOPPENBERG.json | 6 +- ...TH_197X_NL-NH-AMS_XXXX_THOMAS-CASTRO.json} | 158 +++---- ...-TH_197X_NL-UT-HOU_XXXX_RONALD-HUIZER.json | 6 +- ...TH_197X_NL-UT-UTR_XXXX_BEATRICE-GRAAF.json | 6 +- ..._197X_NL-ZH-DEL_XXXX_ANJALIE-RAMKISOR.json | 6 +- ...NL-ZH-TH_197X_NL-ZH-LEI_XXXX_VAN-WOLF.json | 6 +- ...ZH-TH_197X_NL-ZH-RIJ_XXXX_DAVID-TJIOE.json | 6 +- ...ZH-TH_197X_NL-ZH-TH_XXXX_BERTIL-VOOGD.json | 6 +- ..._197X_NL-ZH-TH_XXXX_DUSANKA-LATINOVIC.json | 6 +- ...197X_NL-ZH-TH_XXXX_ELS-BRENNINKMEIJER.json | 6 +- ...ZH-TH_197X_NL-ZH-TH_XXXX_ESTHER-KLOET.json | 6 +- ...TH_197X_NL-ZH-TH_XXXX_GERBEN-PLANTING.json | 6 +- ...-TH_197X_NL-ZH-TH_XXXX_GERRIE-WILLEMS.json | 6 +- ...-ZH-TH_197X_NL-ZH-TH_XXXX_JACCO-HOOGE.json | 6 +- ...97X_NL-ZH-TH_XXXX_JACQUELINE-TEGELAAR.json | 6 +- ...H-TH_197X_NL-ZH-TH_XXXX_JEROEN-VUUREN.json | 6 +- ...ZH-TH_197X_NL-ZH-TH_XXXX_JOYCE-SIMONS.json | 6 +- ...L-ZH-TH_197X_NL-ZH-TH_XXXX_KLAUS-RIJK.json | 6 +- ...7X_NL-ZH-TH_XXXX_MICHIEL-VALKENBURCHT.json | 6 +- ...L-ZH-TH_197X_NL-ZH-TH_XXXX_THOM-KLUCK.json | 6 +- ...7X_NL-ZH-TH_XXXX_WENDELA-HARINGHUIZEN.json | 6 +- ...97X_XX-XX-XXX_XXXX_ASTRID-CAPELLEVEEN.json | 6 +- ...7X_XX-XX-XXX_XXXX_CHRISTIAAN-REBERGEN.json | 6 +- ...-TH_197X_XX-XX-XXX_XXXX_HELEEN-BAKKER.json | 6 +- ...-TH_197X_XX-XX-XXX_XXXX_JOEY-PIJKEREN.json | 6 +- ...ZH-TH_197X_XX-XX-XXX_XXXX_PROF-MIERT.json} | 105 ++++- ...L-ZH-TH_198X_NL-GE-APE_XXXX_SJENG-PHO.json | 6 +- ...-TH_198X_NL-NH-AMS_XXXX_ANNE-LENDERS.json} | 158 +++---- ...TH_198X_NL-NH-AMS_XXXX_BARBARA-TEDDER.json | 6 +- ...198X_NL-NH-AMS_XXXX_BERNA-KESKINDEMIR.json | 6 +- ...ZH-TH_198X_NL-NH-AMS_XXXX_HANS-DOCTER.json | 6 +- ..._198X_NL-OV-HEN_XXXX_TJERK-TIELENBURG.json | 6 +- ...-TH_198X_NL-UT-UTR_XXXX_MARNIX-SEGERS.json | 6 +- ...ZH-TH_198X_NL-ZH-LEI_XXXX_PAUL-YMKERS.json | 6 +- ...8X_NL-ZH-PIJ_XXXX_SANDRA-SCHERPENISSE.json | 6 +- ...ZH-TH_198X_NL-ZH-TH_XXXX_ANNE-DANKERT.json | 6 +- ...-TH_198X_NL-ZH-TH_XXXX_ASTRID-DIRKSEN.json | 6 +- ...-TH_198X_NL-ZH-TH_XXXX_DEBORAH-THORPE.json | 6 +- ...ZH-TH_198X_NL-ZH-TH_XXXX_EDWIN-HIRSCH.json | 6 +- ...-TH_198X_NL-ZH-TH_XXXX_GABRIELLE-HURK.json | 6 +- ...H-TH_198X_NL-ZH-TH_XXXX_GERTY-RUTGERS.json | 6 +- ...-ZH-TH_198X_NL-ZH-TH_XXXX_HANS-JANSEN.json | 6 +- ...-ZH-TH_198X_NL-ZH-TH_XXXX_JAMES-SMITH.json | 6 +- ...-ZH-TH_198X_NL-ZH-TH_XXXX_MATINE-HAAR.json | 6 +- ...-TH_198X_NL-ZH-TH_XXXX_PASCAL-NAVARRO.json | 6 +- ...-ZH-TH_198X_NL-ZH-TH_XXXX_PAUL-NIJDAM.json | 6 +- ...-TH_198X_NL-ZH-TH_XXXX_REINIER-DEINUM.json | 6 +- ...H-TH_198X_NL-ZH-TH_XXXX_ROLIEN-HARTEN.json | 6 +- ...-ZH-TH_198X_NL-ZH-TH_XXXX_SAM-ALLOING.json | 6 +- ...H-TH_198X_NL-ZH-TH_XXXX_SANDRA-DEBETS.json | 6 +- ...H-TH_198X_NL-ZH-TH_XXXX_SIMONE-BAKKER.json | 6 +- ...-TH_198X_NL-ZH-TH_XXXX_VASSO-KALAITZI.json | 6 +- ...L-ZH-TH_198X_NL-ZH-WAD_XXXX_KA-CHEUNG.json | 6 +- ...H_198X_NL-ZH-WAS_XXXX_MAARTEN-DERKSEN.json | 6 +- ..._198X_XX-XX-XXX_XXXX_ALEXANDER-DEINSE.json | 6 +- ...-ZH-TH_198X_XX-XX-XXX_XXXX_FENN-HINSE.json | 6 +- ...H_198X_XX-XX-XXX_XXXX_KRISTINE-RACINA.json | 6 +- ...TH_198X_XX-XX-XXX_XXXX_MARC-SWEELSSEN.json | 6 +- ...8X_XX-XX-XXX_XXXX_STEPHANIE-GERTENAAR.json | 6 +- ...ZH-TH_199X_NL-NB-EIN_XXXX_ISAAC-ODOMA.json | 6 +- ..._199X_NL-NH-AMS_XXXX_ALEX-ALSEMGEEST.json} | 177 +++++--- ...199X_NL-NH-AMS_XXXX_WANDA-SCHOONHOVEN.json | 6 +- ...ZH-TH_199X_NL-UT-UTR_XXXX_LUUK-PEPERS.json | 6 +- ...H-TH_199X_NL-ZH-ROT_XXXX_LEILA-ALMADA.json | 6 +- ..._199X_NL-ZH-TH_XXXX_ANDREA-BERKELDER.json} | 158 +++---- ..._199X_NL-ZH-TH_XXXX_CAROLINE-VOGELAAR.json | 6 +- ...ZH-TH_199X_NL-ZH-TH_XXXX_FONS-VERHOEF.json | 6 +- ...TH_199X_NL-ZH-TH_XXXX_HELLA-HOLLANDER.json | 6 +- ...H-TH_199X_NL-ZH-TH_XXXX_JANNEKE-ETTEN.json | 6 +- ...-TH_199X_NL-ZH-TH_XXXX_KISHAN-BOEDHOE.json | 6 +- ...-ZH-TH_199X_NL-ZH-TH_XXXX_RENSKE-ZEE.json} | 148 ++++--- ...TH_199X_NL-ZH-TH_XXXX_STANISLAW-BARAN.json | 6 +- ...H-TH_199X_NL-ZH-TH_XXXX_THIERRY-HORST.json | 6 +- ...X_NL-ZH-WAD_XXXX_BELINDA-SLAAVERBOOM.json} | 148 ++++--- ...H-TH_199X_XX-XX-XXX_XXXX_ANNE-BENNETT.json | 6 +- ...ZH-TH_199X_XX-XX-XXX_XXXX_LINDA-GUIJT.json | 6 +- ...199X_XX-XX-XXX_XXXX_NICOLE-EMMENEGGER.json | 6 +- ...ID_NL-ZH-TH_200X_NL-NH-AMS_XXXX_OKI-U.json | 6 +- ...-ZH-TH_200X_NL-ZH-OEG_XXXX_SOPHIE-HAM.json | 6 +- ...H_200X_NL-ZH-TH_XXXX_ALIYA-WESENHAGEN.json | 6 +- ...H-WAS_199X_NL-NH-AMS_XXXX_OLIVIA-DAWE.json | 6 +- ...H-ZOE_195X_NL-ZH-ZOE_XXXX_PAUL-KLEINE.json | 6 +- ...ZH-ZOE_198X_NL-ZH-TH_XXXX_ARIE-GROEN.json} | 148 ++++--- ...-ZH-ZOE_199X_NL-ZH-ZOE_XXXX_YOUSSEF-M.json | 6 +- ...E_200X_NL-ZH-PIJ_XXXX_DEWI-RIETBERGEN.json | 6 +- ...NL-ZH-ZOE_200X_XX-XX-XXX_XXXX_SOFIE-S.json | 6 +- ...SL_198X_NO-12-OSL_XXXX_JORUNN-HILDRE.json} | 138 +++++- ...6-STO_198X_SE-26-STO_XXXX_YAEL-FRIED.json} | 169 +++++++- ...ST_198X_NL-ZH-TH_XXXX_JEROEN-GANKEMA.json} | 103 ++++- ...NK_198X_XX-XX-XXX_XXXX_DEBBIE-CREMER.json} | 92 +++- ...K_199X_NL-NB-EIN_XXXX_BENSU-YILDIRIM.json} | 93 ++++- ...-ANK_199X_NL-NB-VEL_XXXX_KAAN-ARSLAN.json} | 93 ++++- ...99X_US-CT-STA_XXXX_GOWTHAM-SIVAKUMAR.json} | 149 ++++++- ...S-NC-UC_197X_US-CA-SF_XXXX_AARON-XIMM.json | 358 ++++++++++++++++ ...S-NY-NYC_195X_US-NY-NYC_XXXX_B-GEORGE.json | 375 +++++++++++++++++ ...196X_XX-XX-XXX_XXXX_EMILIE-GORDENKER.json} | 93 ++++- ...NYC_198X_XX-XX-XXX_XXXX_ANNA-BITKINA.json} | 177 +++++++- ...YC_199X_US-NJ-JC_XXXX_MARIA-PUZYREVA.json} | 27 +- ...-XXX_193X_NL-NH-AMS_XXXX_JOOP-HAASTER.json | 6 +- ...X_194X_NL-GE-APE_XXXX_KARLA-KASSENAAR.json | 6 +- ...X-XX-XXX_XXXX_ELLEN-MAARSCHALKERWEERD.json | 30 +- ...194X_XX-XX-XXX_XXXX_FARIBORZ-KHOSRAVI.json | 6 +- ...X-XXX_195X_NL-FL-AS_XXXX_HENK-SOOMERS.json | 16 +- ...95X_NL-GE-APE_XXXX_DESIREE-SLAUERHOFF.json | 6 +- ...195X_NL-NH-AMS_XXXX_CHARLOTTE-RAPPARD.json | 6 +- ...195X_NL-NH-AMS_XXXX_ISABELLE-GARACHON.json | 6 +- ...95X_NL-NH-AMS_XXXX_KAROLIEN-VERBRUGGE.json | 6 +- ...195X_NL-NH-AMS_XXXX_MANJA-ZELDENRUST.json} | 142 ++++--- ...X-XXX_195X_NL-NH-AMS_XXXX_WIM-HIJDRA.json} | 142 ++++--- ...XX-XXX_195X_NL-NH-ZAA_XXXX_ROB-PETERS.json | 6 +- ...X-XX-XXX_195X_NL-OV-ZWO_XXXX_A-GEVERS.json | 6 +- ...XX-XXX_195X_NL-UT-SOE_XXXX_JET-BRINKE.json | 6 +- ...XXX_195X_NL-ZH-LEI_XXXX_HARRY-LEEUWEN.json | 6 +- ...XX-XXX_195X_NL-ZH-TH_XXXX_ANS-SCHMETZ.json | 6 +- ...-XX-XXX_195X_NL-ZH-TH_XXXX_FRITS-RIJT.json | 6 +- ...XX-XXX_195X_NL-ZH-TH_XXXX_KEES-NOOREL.json | 6 +- ...X-XXX_195X_NL-ZH-TH_XXXX_MARIAN-POLEN.json | 6 +- ...XX-XXX_195X_NL-ZH-TH_XXXX_RINSKE-HAAN.json | 6 +- ...X-XXX_195X_NL-ZH-TH_XXXX_ROSA-LACHMAN.json | 6 +- ...XX_195X_US-CA-SF_XXXX_BREWSTER-KAHLE.json} | 161 ++++++- ...5X_XX-XX-XXX_XXXX_BALASAN-HARUTYUNYAN.json | 6 +- ...-XX-XXX_195X_XX-XX-XXX_XXXX_FRANK-MSC.json | 6 +- ..._195X_XX-XX-XXX_XXXX_GERARD-HEUVELINK.json | 6 +- ...XXX_195X_XX-XX-XXX_XXXX_IRENE-WOLTERS.json | 6 +- ...XX-XXX_195X_XX-XX-XXX_XXXX_NM-SMABERS.json | 6 +- ...XXX_195X_XX-XX-XXX_XXXX_PETER-WOUTERS.json | 6 +- ...X-XX-XXX_195X_XX-XX-XXX_XXXX_PIET-BOT.json | 6 +- ...X_195X_XX-XX-XXX_XXXX_SANDRA-RIKKOERT.json | 6 +- ...XXX_196X_NL-FL-AS_XXXX_ERIK-SCHUILING.json | 6 +- ...X-XXX_196X_NL-GE-APE_XXXX_CONNY-AGEMA.json | 6 +- ...-XX-XXX_196X_NL-GE-DOE_XXXX_RON-SPAAN.json | 6 +- ...-XXX_196X_NL-NB-BRE_XXXX_BERT-SCHUUR.json} | 141 ++++--- ...-XXX_196X_NL-NB-BRE_XXXX_MARCUS-DOORN.json | 6 +- ...-XX-XXX_196X_NL-NB-BRE_XXXX_VAN-ESSEN.json | 6 +- ..._NL-NH-AMS_XXXX_ALFONS-HUTSCHEMAEKERS.json | 6 +- ...XXX_196X_NL-NH-AMS_XXXX_BENITA-JANSMA.json | 164 ++++++++ ...XX-XXX_196X_NL-NH-AMS_XXXX_BRAM-VRIES.json | 6 +- ...X-XXX_196X_NL-NH-AMS_XXXX_ERIK-GINKEL.json | 6 +- ..._196X_NL-NH-AMS_XXXX_IDELETTE-LEEUWEN.json | 6 +- ...X_196X_NL-NH-AMS_XXXX_IGOR-SANTHAGENS.json | 6 +- ..._196X_NL-NH-AMS_XXXX_JEPHTA-HERMELINK.json | 6 +- ...X_196X_NL-NH-AMS_XXXX_LAURENT-SOZZANI.json | 6 +- ...-XX-XXX_196X_NL-NH-AMS_XXXX_OLGA-MEER.json | 6 +- ...6X_NL-NH-AMS_XXXX_ROSMARIJN-WEDDEPOHL.json | 6 +- ..._196X_NL-NH-AMS_XXXX_SASKIA-MOLENDIJK.json | 6 +- ...XXX_196X_NL-NH-AMS_XXXX_SASKIA-MOOREN.json | 6 +- ...X-XXX_196X_NL-NH-AMS_XXXX_TRUUS-VRIES.json | 6 +- ...XX-XXX_196X_NL-NH-AMS_XXXX_VAN-SCHAAF.json | 6 +- ...X_196X_NL-NH-HOO_XXXX_YOLANDA-LIPPENS.json | 6 +- ...96X_NL-NH-OAD_XXXX_ISKANDER-BREEBAART.json | 6 +- ...96X_NL-UT-DBI_XXXX_ANGELIQUE-LUNTEREN.json | 6 +- ...XX_196X_NL-ZH-AAD_XXXX_FRED-KOELEWIJN.json | 6 +- ...X-XXX_196X_NL-ZH-CAD_XXXX_SUZAN-WELLE.json | 6 +- ...X-XXX_196X_NL-ZH-DEL_XXXX_MARION-BERG.json | 6 +- ...-XXX_196X_NL-ZH-RIJ_XXXX_PAOLA-BREMER.json | 6 +- ..._NL-ZH-TH_XXXX_ANNEMARIE-SNELDERWAARD.json | 6 +- ...X-XXX_196X_NL-ZH-TH_XXXX_ESTHER-SNOEK.json | 6 +- ...X-XXX_196X_NL-ZH-TH_XXXX_KARIN-WIGMAN.json | 6 +- ...XX_196X_NL-ZH-TH_XXXX_MARIJKE-BESSELS.json | 6 +- ...X_196X_NL-ZH-TH_XXXX_PAUL-CAPELLEVEEN.json | 6 +- ...-XXX_196X_NL-ZH-TH_XXXX_PAULINE-CARST.json | 6 +- ...-XX-XXX_196X_NL-ZH-TH_XXXX_TON-DIEREN.json | 6 +- ...X_196X_NL-ZH-TH_XXXX_YVONNE-SCHEEPERS.json | 6 +- ...XXX_196X_XX-XX-XXX_XXXX_ALIDA-RITSEMA.json | 6 +- ...-XX-XXX_196X_XX-XX-XXX_XXXX_ANCA-EGAS.json | 6 +- ...-XX-XXX_196X_XX-XX-XXX_XXXX_ANN-MARES.json | 6 +- ...-XXX_196X_XX-XX-XXX_XXXX_ARIE-WALLERT.json | 12 +- ...XXX_196X_XX-XX-XXX_XXXX_ARNO-DIETEREN.json | 6 +- ..._196X_XX-XX-XXX_XXXX_BILIANA-BIBISHAN.json | 6 +- ...-XX-XXX_196X_XX-XX-XXX_XXXX_BINDA-ROB.json | 6 +- ...X_196X_XX-XX-XXX_XXXX_BRIGIDA-ALMEIDA.json | 6 +- ...X_196X_XX-XX-XXX_XXXX_DAISY-HOMBERGEN.json | 6 +- ...-XX-XXX_196X_XX-XX-XXX_XXXX_ED-BIESTA.json | 166 ++++++++ ...X_196X_XX-XX-XXX_XXXX_ERIK-HINTERDING.json | 6 +- ...X_196X_XX-XX-XXX_XXXX_EUGENIE-COPPENS.json | 6 +- ...X-XXX_196X_XX-XX-XXX_XXXX_GITTA-PAANS.json | 6 +- ...X-XXX_196X_XX-XX-XXX_XXXX_GUUS-GEURTS.json | 6 +- ..._196X_XX-XX-XXX_XXXX_HABIBOLLAH-AZIMI.json | 6 +- ...XXX_196X_XX-XX-XXX_XXXX_HENK-SCHOLTEN.json | 6 +- ...X_196X_XX-XX-XXX_XXXX_HERMS-LUNENBORG.json | 6 +- ...X-XXX_196X_XX-XX-XXX_XXXX_JAN-OELBERS.json | 6 +- ...96X_XX-XX-XXX_XXXX_JANET-LEERAARSMOOK.json | 6 +- ...-XXX_196X_XX-XX-XXX_XXXX_JEANNY-DUIJF.json | 6 +- ...X-XX-XXX_196X_XX-XX-XXX_XXXX_JOKE-POL.json | 6 +- ...XX_196X_XX-XX-XXX_XXXX_JUDIKJE-KIERS.json} | 43 +- ...XX_196X_XX-XX-XXX_XXXX_LOUIS-TILBORGH.json | 6 +- ...XX_196X_XX-XX-XXX_XXXX_LUMINITA-GRUIA.json | 6 +- ..._196X_XX-XX-XXX_XXXX_MADELEINE-PFUNDT.json | 6 +- ...-XXX_196X_XX-XX-XXX_XXXX_MARG-CARROLL.json | 6 +- ...XXX_196X_XX-XX-XXX_XXXX_MARIANNE-BOER.json | 6 +- ...196X_XX-XX-XXX_XXXX_MARTIJN-EICKHOFF.json} | 44 +- ..._196X_XX-XX-XXX_XXXX_MIHAELA-VAZZOLLA.json | 6 +- ...XX-XXX_196X_XX-XX-XXX_XXXX_NICO-JONG.json} | 90 +++- ...X_196X_XX-XX-XXX_XXXX_NICOLETTE-STORK.json | 6 +- ...X-XXX_196X_XX-XX-XXX_XXXX_ROBERT-NITU.json | 6 +- ...X_196X_XX-XX-XXX_XXXX_RONALD-WIENTJES.json | 6 +- ...-XXX_196X_XX-XX-XXX_XXXX_RONNY-KRAMER.json | 6 +- ...-XX-XXX_196X_XX-XX-XXX_XXXX_SUNITA-J.json} | 93 ++++- ...XXX_196X_XX-XX-XXX_XXXX_ZWANET-PANMAN.json | 6 +- ...X_197X_AU-01-CAN_XXXX_DOUGLAS-ELFORD.json} | 76 +++- ...XX_197X_AU-01-CAN_XXXX_MELANIE-BROWN.json} | 76 +++- ...XX-XXX_197X_NL-FL-AS_XXXX_IRIS-LABEUR.json | 6 +- ...X_197X_NL-FL-AS_XXXX_MICHAEL-MEERWIJK.json | 6 +- ...X_197X_NL-FR-BUI_XXXX_WILLEM-REITSEMA.json | 6 +- ..._197X_NL-GE-APE_XXXX_JACCO-HOOIKAMMER.json | 6 +- ...-XX-XXX_197X_NL-GE-APE_XXXX_LIDA-BURG.json | 6 +- ...X-XXX_197X_NL-GE-APE_XXXX_MARC-MEULEN.json | 6 +- ...L-GE-ARN_XXXX_NICOLE-MAKKINJEVERHALLE.json | 6 +- ...XX-XXX_197X_NL-GE-ARN_XXXX_PETER-MAAS.json | 6 +- ...197X_NL-GE-ARN_XXXX_SANDRA-KLEEDKAMER.json | 6 +- ..._197X_NL-GE-DOE_XXXX_CHRISTINE-FUENTE.json | 6 +- ...XX-XXX_197X_NL-GE-EDE_XXXX_WYTZE-VEER.json | 6 +- ...-XXX_197X_NL-GE-GRO_XXXX_WILMA-TOOREN.json | 6 +- ...-XX-XXX_197X_NL-GE-OOS_XXXX_ROOS-BEEK.json | 6 +- ...XXX_197X_NL-GE-WAG_XXXX_MARCEL-BHOMER.json | 6 +- ...X_197X_NL-LI-WEE_XXXX_FREDERIQUE-ROOT.json | 6 +- ...XXX_197X_NL-NB-TIL_XXXX_QUINTA-KOOLS.json} | 142 ++++--- ...XXX_197X_NL-NB-VEL_XXXX_ALEXANDER-HIL.json | 6 +- ...X_197X_NL-NH-AMS_XXXX_ALEX-GROENEWOUD.json | 6 +- ...-XXX_197X_NL-NH-AMS_XXXX_ANNA-MARTENS.json | 6 +- ...XX-XXX_197X_NL-NH-AMS_XXXX_ANNET-BULT.json | 6 +- ...X-XXX_197X_NL-NH-AMS_XXXX_BRAM-BUIJZE.json | 6 +- ...XX_197X_NL-NH-AMS_XXXX_GINNY-FIGUEROA.json | 6 +- ...197X_NL-NH-AMS_XXXX_HANNIE-DIEPENDAAL.json | 6 +- ...XX-XXX_197X_NL-NH-AMS_XXXX_HARRY-RAAD.json | 6 +- ...XXX_197X_NL-NH-AMS_XXXX_INGE-ROSEBOOM.json | 6 +- ...XX_197X_NL-NH-AMS_XXXX_INGRID-PASMANS.json | 6 +- ...NH-AMS_XXXX_JACQUELINE-PRAASWAKKERMAN.json | 6 +- ...-XXX_197X_NL-NH-AMS_XXXX_JANA-RICANEK.json | 6 +- ..._197X_NL-NH-AMS_XXXX_JANWILLEM-SWANE.json} | 144 ++++--- ...-XXX_197X_NL-NH-AMS_XXXX_JERNEY-BELLE.json | 6 +- ...XX-XXX_197X_NL-NH-AMS_XXXX_JOHN-BOELE.json | 6 +- ...197X_NL-NH-AMS_XXXX_KRISZTA-SCHNEIDER.json | 6 +- ...-XXX_197X_NL-NH-AMS_XXXX_MICHEL-CONCI.json | 6 +- ...XX_197X_NL-NH-AMS_XXXX_NICOLE-STERREN.json | 6 +- ...X_197X_NL-NH-AMS_XXXX_PATRICK-VLEGELS.json | 6 +- ...XXX_197X_NL-NH-AMS_XXXX_PAULIEN-RINGS.json | 6 +- ...X-XX-XXX_197X_NL-NH-AMS_XXXX_PIA-WIEL.json | 6 +- ...X-XX-XXX_197X_NL-NH-AMS_XXXX_TED-TOGT.json | 6 +- ...X_197X_NL-NH-AMS_XXXX_WENDELA-BROUWER.json | 6 +- ...X-XXX_197X_NL-NH-BLA_XXXX_LEJO-SCHENK.json | 6 +- ...XXX_197X_NL-NH-HAA_XXXX_ANDREA-ROOSEN.json | 6 +- ...XX_197X_NL-NH-HAA_XXXX_ROBBERT-STEMAN.json | 6 +- ...-XXX_197X_NL-NH-HAA_XXXX_SIMONE-ELST.json} | 142 ++++--- ...X_197X_NL-NH-HEI_XXXX_LONNEKE-SENGERS.json | 6 +- ...-XX-XXX_197X_NL-OV-KAM_XXXX_NAOMI-TOL.json | 6 +- ...XX_197X_NL-OV-ZWO_XXXX_FRED-DALHUISEN.json | 6 +- ...-XXX_197X_NL-UT-BAA_XXXX_NATALIE-KUIK.json | 6 +- ...X_197X_NL-UT-BIL_XXXX_SJOERI-JONKERS.json} | 141 ++++--- ...XXX_197X_NL-UT-WOE_XXXX_KEES-THEUNIS.json} | 142 ++++--- ...XXX_197X_NL-ZH-AAD_XXXX_ALIDA-OPPERS.json} | 162 ++++---- ...-XXX_197X_NL-ZH-TH_XXXX_ANAND-JAGROEP.json | 6 +- ...X_197X_NL-ZH-TH_XXXX_ANNEMARIE-DEKKER.json | 6 +- ...X-XXX_197X_NL-ZH-TH_XXXX_BERT-ELEVELD.json | 6 +- ..._197X_NL-ZH-TH_XXXX_DOMINIQUE-KUHLING.json | 6 +- ...XX-XX-XXX_197X_NL-ZH-TH_XXXX_ED-VLIST.json | 6 +- ...XX-XXX_197X_NL-ZH-TH_XXXX_GUUS-RIKHOF.json | 6 +- ...XXX_197X_NL-ZH-TH_XXXX_HENRI-HEIJDEN.json} | 142 ++++--- ...XX_197X_NL-ZH-TH_XXXX_INGMAR-SEELBACH.json | 6 +- ...197X_NL-ZH-TH_XXXX_JACQUELINE-BROERSE.json | 6 +- ...-XX-XXX_197X_NL-ZH-TH_XXXX_LEO-BREDIE.json | 6 +- ...-XXX_197X_NL-ZH-TH_XXXX_MARTIN-OUWENS.json | 6 +- ...X_197X_NL-ZH-TH_XXXX_MARTINE-WANSBEEK.json | 6 +- ...-XXX_197X_NL-ZH-TH_XXXX_MICHEL-ZAGARA.json | 6 +- ...X-XX-XXX_197X_NL-ZH-TH_XXXX_NIEK-KLOM.json | 6 +- ...XX-XXX_197X_NL-ZH-TH_XXXX_REMKO-GEEST.json | 6 +- ...-XXX_197X_NL-ZH-TH_XXXX_RUTGER-STOLK.json} | 142 ++++--- ...XX_197X_NL-ZH-TH_XXXX_SIMONE-DRIESSEN.json | 6 +- ...XX-XXX_197X_NL-ZH-TH_XXXX_STAGECO-BZ.json} | 142 ++++--- ...XXX_197X_XX-XX-XXX_XXXX_ALEXIS-ROSSI.json} | 103 ++++- ...XXX_197X_XX-XX-XXX_XXXX_ANDRIES-VELDE.json | 6 +- ...197X_XX-XX-XXX_XXXX_ANGEL-CHORAPCHIEV.json | 6 +- ...XX-XXX_197X_XX-XX-XXX_XXXX_ANN-GASTEL.json | 6 +- ...XXX_197X_XX-XX-XXX_XXXX_ARNO-DIETEREN.json | 163 ++++++++ ...X_197X_XX-XX-XXX_XXXX_BEATRIJS-MEIJER.json | 6 +- ...-XX-XXX_197X_XX-XX-XXX_XXXX_BEN-ALINK.json | 6 +- ...97X_XX-XX-XXX_XXXX_CAMIEL-VINGERHOETS.json | 6 +- ...7X_XX-XX-XXX_XXXX_CHRISTIAAN-HUIZINGA.json | 6 +- ...97X_XX-XX-XXX_XXXX_CORIEN-BLIJDERVEEN.json | 6 +- ...-XXX_197X_XX-XX-XXX_XXXX_DANA-PORATH.json} | 93 ++++- ...XX_197X_XX-XX-XXX_XXXX_DANIEL-LUIPEN.json} | 102 ++++- ...XX_197X_XX-XX-XXX_XXXX_DESIREE-VISSER.json | 6 +- ...X-XXX_197X_XX-XX-XXX_XXXX_DOLF-MULLER.json | 6 +- ...97X_XX-XX-XXX_XXXX_DRAMAL-ABDELWAHHAB.json | 6 +- ...197X_XX-XX-XXX_XXXX_DUSAN-NIKODIJEVIC.json | 6 +- ...X-XXX_197X_XX-XX-XXX_XXXX_ELLEN-HARDY.json | 6 +- ...-XXX_197X_XX-XX-XXX_XXXX_FARAH-ZAHEDI.json | 6 +- ...X-XXX_197X_XX-XX-XXX_XXXX_GERARD-POEL.json | 6 +- ...XX-XX-XXX_197X_XX-XX-XXX_XXXX_HELGA-V.json | 6 +- ...XX-XXX_197X_XX-XX-XXX_XXXX_HENK-WEVER.json | 155 +++++++ ...XX_197X_XX-XX-XXX_XXXX_HERMAN-TRUMPIE.json | 30 +- ...XXX_197X_XX-XX-XXX_XXXX_INGEBORG-SMIT.json | 6 +- ...197X_XX-XX-XXX_XXXX_JEROEN-HEIJDEMANN.json | 6 +- ..._197X_XX-XX-XXX_XXXX_JEROEN-KERSEBOOM.json | 6 +- ...-XX-XXX_197X_XX-XX-XXX_XXXX_JOOST-TOP.json | 6 +- ...XXX_197X_XX-XX-XXX_XXXX_LETTY-SPIEKER.json | 6 +- ...X-XXX_197X_XX-XX-XXX_XXXX_LIANE-OTTEN.json | 6 +- ...X-XXX_197X_XX-XX-XXX_XXXX_MAIA-TODRIA.json | 6 +- ...X-XXX_197X_XX-XX-XXX_XXXX_MALA-DOERGA.json | 6 +- ...197X_XX-XX-XXX_XXXX_MANON-HOEPPERMANS.json | 6 +- ...97X_XX-XX-XXX_XXXX_MARISSA-SCHUURMANS.json | 6 +- ...X_197X_XX-XX-XXX_XXXX_MARTINE-BARTELS.json | 6 +- ...197X_XX-XX-XXX_XXXX_MARTINE-GOSSELINK.json | 6 +- ...XXX_197X_XX-XX-XXX_XXXX_MICHIEL-HUNEN.json | 6 +- ...XX_197X_XX-XX-XXX_XXXX_MIHAELA-GOLBAN.json | 158 +++++++ ...XXX_197X_XX-XX-XXX_XXXX_MINOUCHE-BOR.json} | 93 ++++- ...X_197X_XX-XX-XXX_XXXX_MIRELLA-TASSEVA.json | 6 +- ...X_XX-XX-XXX_XXXX_MONIQUE-GOEDESTRUIJK.json | 6 +- ...XX_197X_XX-XX-XXX_XXXX_NARGES-AZIZIAN.json | 6 +- ...XX_197X_XX-XX-XXX_XXXX_NICOLE-WERINGH.json | 6 +- ...X-XXX_197X_XX-XX-XXX_XXXX_OLAF-PETERS.json | 6 +- ...-XXX_197X_XX-XX-XXX_XXXX_PETER-KONING.json | 6 +- ...-XXX_197X_XX-XX-XXX_XXXX_RAMIRO-REMOR.json | 6 +- ...-XXX_197X_XX-XX-XXX_XXXX_RENATE-FLIER.json | 6 +- ...-XXX_197X_XX-XX-XXX_XXXX_RIK-WILLEMSE.json | 6 +- ...XX-XXX_197X_XX-XX-XXX_XXXX_ROB-WILLIS.json | 153 +++++++ ...X-XXX_197X_XX-XX-XXX_XXXX_ROELOF-KOOI.json | 6 +- ...X-XXX_197X_XX-XX-XXX_XXXX_RONALD-NIJS.json | 6 +- ...197X_XX-XX-XXX_XXXX_ROSEMARIE-VEENOEI.json | 6 +- ...-XXX_197X_XX-XX-XXX_XXXX_RUTGER-BRUIN.json | 6 +- ...-XXX_197X_XX-XX-XXX_XXXX_RUUD-BANKRAS.json | 6 +- ...X_197X_XX-XX-XXX_XXXX_SOMAYEH-HASHEMI.json | 6 +- ...XX-XXX_197X_XX-XX-XXX_XXXX_STEVEN-HAM.json | 6 +- ...XX_197X_XX-XX-XXX_XXXX_URSULA-LENTING.json | 6 +- ...7X_XX-XX-XXX_XXXX_VALENTINA-BRANKOVIC.json | 6 +- ...7X_XX-XX-XXX_XXXX_VESNA-ALEKSANDROVIC.json | 6 +- ...XXX_197X_XX-XX-XXX_XXXX_VLADAN-TRIJIC.json | 6 +- ...X_197X_XX-XX-XXX_XXXX_WIJNAND-MARCHAL.json | 6 +- ...-XX-XXX_197X_XX-XX-XXX_XXXX_WIM-OTTEN.json | 6 +- ..._197X_XX-XX-XXX_XXXX_WOUTER-VALENTIJN.json | 6 +- ...98X_AU-01-CAN_XXXX_BADRA-KARUNARATHNA.json | 248 +++++++++++ ..._198X_AU-01-CAN_XXXX_CARMEL-MCINERNY.json} | 76 +++- ...X_198X_AU-01-CAN_XXXX_GREGORY-DOWNTON.json | 170 ++++++++ ...XX_198X_AU-01-CAN_XXXX_LONI-HOFFMANN.json} | 76 +++- ...X_AU-01-CAN_XXXX_SNEZANA-MIHAJILOVIC.json} | 76 +++- ...XXX_198X_AU-01-CAN_XXXX_TIEKE-ATIKAH.json} | 76 +++- ...-XX-XXX_198X_AU-01-CAN_XXXX_WAN-WONG.json} | 76 +++- ...XXX_198X_BE-VL-BAS_XXXX_TOM-COBBAERT.json} | 144 ++++--- ...X-XXX_198X_CN-14-CHI_XXXX_YESHI-CHEN.json} | 76 +++- ...XX_198X_CZ-52-PRA_XXXX_MICHAL-FRANKL.json} | 23 +- ...X-XXX_198X_DE-07-RUH_XXXX_JOHAN-EVERS.json | 6 +- ...XX_198X_ID-04-JAK_XXXX_HAVIZ-NUGROHO.json} | 76 +++- ...XX_198X_ID-04-JAK_XXXX_RADI-MANGGALA.json} | 76 +++- ...XX_198X_ID-04-JAK_XXXX_RENDI-RUSGIAN.json} | 76 +++- ...XXX_198X_ID-30-BAN_XXXX_RUDY-SANTOSO.json} | 76 +++- ...X_198X_ID-33-BAN_XXXX_DESSY-WIDOWATI.json} | 76 +++- ...X_198X_NL-DR-KOE_XXXX_RUURD-DONKELAAR.json | 6 +- ...XX_198X_NL-DR-PEI_XXXX_ARMANDA-PIEPER.json | 6 +- ...X-XXX_198X_NL-FL-AS_XXXX_MARLEEN-HAAN.json | 6 +- ...X_198X_NL-FL-AS_XXXX_MAUREEN-CHANNOO.json} | 141 ++++--- ...XX-XXX_198X_NL-GE-APE_XXXX_ALDERT-MAK.json | 6 +- ...-XXX_198X_NL-GE-APE_XXXX_EVELYNE-SMIT.json | 6 +- ...X-XX-XXX_198X_NL-GE-APE_XXXX_LYA-GILS.json | 6 +- ...XX_198X_NL-GE-APE_XXXX_MARIJKE-ZWIERS.json | 6 +- ...X-XXX_198X_NL-GE-ARN_XXXX_DAAN-BRUIJN.json | 6 +- ..._198X_NL-GE-ARN_XXXX_MARVIN-WILLEMSEN.json | 6 +- ...XX_198X_NL-GE-ARN_XXXX_VOORBERGEN-DIA.json | 6 +- ...-XX-XXX_198X_NL-GE-CUL_XXXX_DJOKE-DAM.json | 6 +- ...-XXX_198X_NL-GE-DOE_XXXX_WENDY-KLAVER.json | 6 +- ...XX-XXX_198X_NL-GE-DUI_XXXX_BERT-SMITS.json | 6 +- ...XX_198X_NL-GE-EIB_XXXX_DIRKJAN-HEINEN.json | 6 +- ...98X_NL-GE-VEL_XXXX_MARIAN-WISSENBURG.json} | 142 ++++--- ...8X_NL-GE-WAG_XXXX_MARJOLEIN-SANDERMAN.json | 6 +- ...X_198X_NL-GE-WES_XXXX_FRED-SPARREBOOM.json | 6 +- ...XXX_198X_NL-GE-ZEV_XXXX_BRAM-BOERBOOM.json | 6 +- ...XXX_198X_NL-GR-ZUI_XXXX_PETRA-TOGTEMA.json | 6 +- ...198X_NL-NB-BRE_XXXX_MIRJAM-STRAATMAN.json} | 141 ++++--- ..._198X_NL-NB-EIN_XXXX_CHRISTIAN-BREKEL.json | 6 +- ...-XXX_198X_NL-NB-EIN_XXXX_JUAN-PEREIRA.json | 6 +- ...98X_NL-NB-EIN_XXXX_MAARTEN-OOSTERHOUT.json | 6 +- ...-XXX_198X_NL-NB-EIN_XXXX_SINATRA-KHO.json} | 142 ++++--- ...198X_NL-NB-EIN_XXXX_VICTORIA-VORONINA.json | 6 +- ...XX_198X_NL-NB-TIL_XXXX_HAROLD-MIERLO.json} | 142 ++++--- ...XXX_198X_NL-NB-VEL_XXXX_BARBARA-WITEK.json | 6 +- ...X-XXX_198X_NL-NB-VEL_XXXX_EDWIN-WEELE.json | 6 +- ...198X_NL-NB-VEL_XXXX_SOFIA-CORZOGARCIA.json | 6 +- ...XX_198X_NL-NH-AMS_XXXX_ANDREA-MELGERS.json | 6 +- ...XXX_198X_NL-NH-AMS_XXXX_ANNA-KREKELER.json | 6 +- ...XXX_198X_NL-NH-AMS_XXXX_BERT-OFFERMAN.json | 6 +- ...XX_198X_NL-NH-AMS_XXXX_CAROLINE-EVERS.json | 6 +- ...X-XXX_198X_NL-NH-AMS_XXXX_CINDY-WEELE.json | 6 +- ...-XXX_198X_NL-NH-AMS_XXXX_DESMOND-HAAN.json | 6 +- ...-XXX_198X_NL-NH-AMS_XXXX_EDWIN-BECKER.json | 6 +- ...XXX_198X_NL-NH-AMS_XXXX_FENNA-BROUWER.json | 6 +- ...-XXX_198X_NL-NH-AMS_XXXX_GERT-WEHKAMP.json | 6 +- ...X_198X_NL-NH-AMS_XXXX_HAMID-BOUGHLALA.json | 6 +- ...X-XXX_198X_NL-NH-AMS_XXXX_HENNO-ZELIS.json | 6 +- ...-XXX_198X_NL-NH-AMS_XXXX_INGE-SCHAGEN.json | 6 +- ...-XXX_198X_NL-NH-AMS_XXXX_KATHRIN-PILZ.json | 6 +- ...XXX_198X_NL-NH-AMS_XXXX_LEILA-SAUVAGE.json | 6 +- ...XX_198X_NL-NH-AMS_XXXX_M-KLIJNHUISMAN.json | 166 ++++++++ ..._198X_NL-NH-AMS_XXXX_MARGOT-SCHINKEL.json} | 142 ++++--- ...X-XXX_198X_NL-NH-AMS_XXXX_MARIA-PATER.json | 6 +- ...XX-XXX_198X_NL-NH-AMS_XXXX_MARIA-SMIT.json | 6 +- ...X_198X_NL-NH-AMS_XXXX_MICHIEL-OMTZIGT.json | 6 +- ...-XXX_198X_NL-NH-AMS_XXXX_NAOMI-MARTES.json | 6 +- ...X_198X_NL-NH-AMS_XXXX_NOUSCHKA-HOMMES.json | 6 +- ...98X_NL-NH-AMS_XXXX_PETRA-DORENSTOUTER.json | 6 +- ...XXX_198X_NL-NH-AMS_XXXX_PIET-EVERDINK.json | 6 +- ...X-XX-XXX_198X_NL-NH-AMS_XXXX_PIM-JONG.json | 6 +- ...XX-XXX_198X_NL-NH-AMS_XXXX_R-HUYSMANS.json | 6 +- ...XXX_198X_NL-NH-AMS_XXXX_ROB-HOVEMANN.json} | 141 ++++--- ...XXX_198X_NL-NH-AMS_XXXX_ROBERT-RITTER.json | 6 +- ...X-XXX_198X_NL-NH-AMS_XXXX_RON-VALKEN.json} | 141 ++++--- ...XX_198X_NL-NH-AMS_XXXX_STAESKE-REBERS.json | 6 +- ...198X_NL-NH-AMS_XXXX_SUSAN-HOENDERDAAL.json | 6 +- ...X_198X_NL-NH-AMS_XXXX_TEIO-MEEDENDORP.json | 6 +- ...XX_198X_NL-NH-AMS_XXXX_TESS-GRAAFLAND.json | 6 +- ...X-XXX_198X_NL-NH-AMS_XXXX_TESSA-BOSMA.json | 6 +- ...98X_NL-NH-AMS_XXXX_WILLIAM-SOUTHWORTH.json | 6 +- ...-XXX_198X_NL-NH-AMS_XXXX_YASAR-KUNDUZ.json | 6 +- ...8X_NL-NH-ZAA_XXXX_MARINKE-KRUIDENBERG.json | 6 +- ...XX_198X_NL-NH-ZAA_XXXX_NATALIA-WEENER.json | 6 +- ..._198X_NL-UT-UTR_XXXX_FANNY-VERWOERDT.json} | 151 ++++--- ...-XXX_198X_NL-UT-UTR_XXXX_LINDA-SENDEN.json | 6 +- ...XXX_198X_NL-UT-UTR_XXXX_MICHELLE-WAL.json} | 152 ++++--- ...X_198X_NL-ZH-DEL_XXXX_DERK-POORTVLIET.json | 6 +- ...XX_198X_NL-ZH-DEL_XXXX_MONIQUE-GEMERT.json | 6 +- ...-XXX_198X_NL-ZH-DOR_XXXX_ANNE-BOELSMA.json | 6 +- ...X-XXX_198X_NL-ZH-ROE_XXXX_YVONNE-FAAS.json | 6 +- ...X-XXX_198X_NL-ZH-TH_XXXX_AGNES-SMEETS.json | 6 +- ...X_198X_NL-ZH-TH_XXXX_ANNEMARIE-DEKKER.json | 6 +- ...X-XXX_198X_NL-ZH-TH_XXXX_ARDA-SCHOLTE.json | 6 +- ..._XX-XX-XXX_198X_NL-ZH-TH_XXXX_BAS-RUE.json | 6 +- ...ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_BEP-W.json | 6 +- ...XX_198X_NL-ZH-TH_XXXX_CAMILLA-VEERMAN.json | 6 +- ...XXX_198X_NL-ZH-TH_XXXX_CORNELIA-KOKOT.json | 6 +- ...XX-XX-XXX_198X_NL-ZH-TH_XXXX_DRS-NEVE.json | 6 +- ...XX-XXX_198X_NL-ZH-TH_XXXX_ELLA-MOURIK.json | 6 +- ...-XXX_198X_NL-ZH-TH_XXXX_FEMKE-COEVERT.json | 6 +- ...X_198X_NL-ZH-TH_XXXX_GABRIELLE-JANSEN.json | 6 +- ...X_198X_NL-ZH-TH_XXXX_INGRID-COLERIDGE.json | 164 ++++++++ ...XX_198X_NL-ZH-TH_XXXX_JANNEKE-WEEGEN.json} | 141 ++++--- ...XXX_198X_NL-ZH-TH_XXXX_JEANNETTE-HOEK.json | 6 +- ...-XXX_198X_NL-ZH-TH_XXXX_KOOS-DIJKSTRA.json | 6 +- ...XX-XXX_198X_NL-ZH-TH_XXXX_LENIE-VUURE.json | 6 +- ...XX_198X_NL-ZH-TH_XXXX_LIEDEWIJ-LAMERS.json | 6 +- ...XXX_198X_NL-ZH-TH_XXXX_ROGIER-ZAVAROS.json | 6 +- ..._198X_NL-ZH-TH_XXXX_ROSEMARIJN-HOEFTE.json | 6 +- ...-XXX_198X_NL-ZH-TH_XXXX_SASKIA-RAMJAN.json | 6 +- ...198X_NL-ZH-TH_XXXX_STEFAN-WLADIMIROFF.json | 6 +- ...-XXX_198X_NL-ZH-TH_XXXX_TERRY-PANGKEY.json | 6 +- ...XX_198X_NL-ZH-TH_XXXX_TJEERD-VEENSTRA.json | 6 +- ...198X_NL-ZH-TH_XXXX_VALENTIJN-GILISSEN.json | 6 +- ...-XXX_198X_NL-ZH-TH_XXXX_WIEKE-HOLLAND.json | 6 +- ...XX-XXX_198X_NL-ZH-TH_XXXX_WILCO-JONGE.json | 6 +- ...-XX-XXX_198X_NL-ZH-WAD_XXXX_DEEM-STAM.json | 6 +- ...XX_198X_US-MO-SL_XXXX_CHRIS-FREELAND.json} | 161 ++++++- ...XXX_198X_US-NC-DUR_XXXX_ATLAS-MCLAMB.json} | 161 ++++++- ...X_198X_XX-XX-XXX_XXXX_ABEER-BEHBEHANI.json | 162 ++++++++ ...-XXX_198X_XX-XX-XXX_XXXX_ANJA-OSKAMP.json} | 93 ++++- ...XXX_198X_XX-XX-XXX_XXXX_ANNET-PASVEER.json | 6 +- ...X_198X_XX-XX-XXX_XXXX_ANNETTE-GAALMAN.json | 6 +- ...XX-XXX_198X_XX-XX-XXX_XXXX_APAS-ZWART.json | 6 +- ...-XXX_198X_XX-XX-XXX_XXXX_ARCO-AMBTMAN.json | 6 +- ...X-XXX_198X_XX-XX-XXX_XXXX_ARIAN-KRUIF.json | 6 +- ...-XXX_198X_XX-XX-XXX_XXXX_ARIE-WALLERT.json | 6 +- ..._198X_XX-XX-XXX_XXXX_ARJAN-VOSKUILEN.json} | 93 ++++- ...XXX_198X_XX-XX-XXX_XXXX_ARTHUR-APONN.json} | 90 +++- ..._198X_XX-XX-XXX_XXXX_AURELIA-MIRCESCU.json | 6 +- ...98X_XX-XX-XXX_XXXX_BILJANA-DJORDJEVIC.json | 6 +- ...XX-XXX_198X_XX-XX-XXX_XXXX_BJORN-JONG.json | 6 +- ...198X_XX-XX-XXX_XXXX_BORIANA-HADZIYSKA.json | 6 +- ...XX_198X_XX-XX-XXX_XXXX_BRIAN-BOTTINGA.json | 6 +- ...XX_198X_XX-XX-XXX_XXXX_CAITLIN-OLSON.json} | 93 ++++- ...-XXX_198X_XX-XX-XXX_XXXX_CAROL-PENGEL.json | 6 +- ..._198X_XX-XX-XXX_XXXX_CAROLIEN-BOENDER.json | 6 +- ..._198X_XX-XX-XXX_XXXX_CHANTAL-HARTMAN.json} | 93 ++++- ...XX_198X_XX-XX-XXX_XXXX_CHRIS-ZIELSTRA.json | 160 +++++++ ..._198X_XX-XX-XXX_XXXX_CONNY-MERKESTEIN.json | 6 +- ...XX-XXX_198X_XX-XX-XXX_XXXX_DEBBIE-COX.json | 158 +++++++ ...-XXX_198X_XX-XX-XXX_XXXX_DINI-MARISKA.json | 6 +- ...X-XX-XXX_198X_XX-XX-XXX_XXXX_EEF-VEGT.json | 6 +- ...XX-XXX_198X_XX-XX-XXX_XXXX_ELSA-BITRI.json | 6 +- ...XXX_198X_XX-XX-XXX_XXXX_FLORIN-NISTOR.json | 6 +- ...XX_198X_XX-XX-XXX_XXXX_GERARD-BUKKEMS.json | 6 +- ...X-XXX_198X_XX-XX-XXX_XXXX_GERARD-POEL.json | 6 +- ...98X_XX-XX-XXX_XXXX_GREGORY-RICHARDSON.json | 6 +- ...-XXX_198X_XX-XX-XXX_XXXX_HASAN-KUMAS.json} | 100 +++-- ...198X_XX-XX-XXX_XXXX_HUSNA-HUSNABUDPAR.json | 30 +- ...-XXX_198X_XX-XX-XXX_XXXX_IRINA-LYNDEN.json | 6 +- ...XX_198X_XX-XX-XXX_XXXX_JOLEIN-KREGTEN.json | 6 +- ...X-XXX_198X_XX-XX-XXX_XXXX_JUDI-MESMAN.json | 6 +- ...XX_198X_XX-XX-XXX_XXXX_LEO-LANSBERGEN.json | 6 +- ...198X_XX-XX-XXX_XXXX_LIESBETH-LAGEVEEN.json | 6 +- ..._198X_XX-XX-XXX_XXXX_LJUBICA-LJUBISIC.json | 6 +- ...98X_XX-XX-XXX_XXXX_LORAINE-BROKELMAN.json} | 90 +++- ...XXX_198X_XX-XX-XXX_XXXX_LUDWIG-ROEMER.json | 6 +- ...X-XXX_198X_XX-XX-XXX_XXXX_MARGA-THIJM.json | 155 +++++++ ...XX_198X_XX-XX-XXX_XXXX_MARINUS-POSTMA.json | 6 +- ...-XXX_198X_XX-XX-XXX_XXXX_MARJAN-FABER.json | 6 +- ...XXX_198X_XX-XX-XXX_XXXX_MICHEL-REIJNS.json | 6 +- ...XX-XXX_XXXX_MICKEY-VALKENBURGWARINGA.json} | 93 ++++- ..._198X_XX-XX-XXX_XXXX_MIRCESCU-AURELIA.json | 155 +++++++ ...X_198X_XX-XX-XXX_XXXX_MISA-STOJANOVIC.json | 6 +- ...98X_XX-XX-XXX_XXXX_MOSTAFA-TABATABAEI.json | 6 +- ...X_XX-XX-XXX_XXXX_NAJAFGHOLINEJAD-AZAM.json | 6 +- ...98X_XX-XX-XXX_XXXX_NERSES-HAYRAPETYAN.json | 6 +- ..._198X_XX-XX-XXX_XXXX_NICOLIEN-NANKMAN.json | 6 +- ...-XXX_198X_XX-XX-XXX_XXXX_NIGEL-MOOLEN.json | 6 +- ...XX_198X_XX-XX-XXX_XXXX_PAULINA-BAKKER.json | 6 +- ...XXX_198X_XX-XX-XXX_XXXX_PETER-BLENKEN.json | 6 +- ...X-XXX_198X_XX-XX-XXX_XXXX_PIETER-DREU.json | 6 +- ...X_198X_XX-XX-XXX_XXXX_PRIYA-LAIGSINGH.json | 6 +- ...X-XX-XXX_198X_XX-XX-XXX_XXXX_RENS-TOP.json | 6 +- ...XX_198X_XX-XX-XXX_XXXX_ROEL-HORSTINK.json} | 93 ++++- ...-XXX_198X_XX-XX-XXX_XXXX_ROEL-WILLEMS.json | 6 +- ...XX-XXX_198X_XX-XX-XXX_XXXX_ROY-BEIJER.json | 6 +- ...X-XXX_198X_XX-XX-XXX_XXXX_RUUD-LANGE.json} | 90 +++- ...XX_198X_XX-XX-XXX_XXXX_SEDIGHEH-KHANI.json | 6 +- ...-XXX_198X_XX-XX-XXX_XXXX_SIMONA-TUDOR.json | 6 +- ...XX-XXX_198X_XX-XX-XXX_XXXX_SUZI-VARGA.json | 162 ++++++++ ...-XXX_198X_XX-XX-XXX_XXXX_SVEN-BONTJE.json} | 90 +++- ...-XXX_198X_XX-XX-XXX_XXXX_TAUFIQ-RODHY.json | 6 +- ...-XXX_198X_XX-XX-XXX_XXXX_TESSA-VELZEN.json | 6 +- ..._198X_XX-XX-XXX_XXXX_TIGRAN-ZARGARYAN.json | 6 +- ...X-XXX_198X_XX-XX-XXX_XXXX_TIM-HARTMAN.json | 6 +- ...X-XXX_198X_XX-XX-XXX_XXXX_TIM-VERBERK.json | 6 +- ...X-XXX_198X_XX-XX-XXX_XXXX_VESNA-INJAC.json | 6 +- ...X-XXX_198X_XX-XX-XXX_XXXX_ZALM-INGRID.json | 6 +- ...X-XXX_199X_AU-01-CAN_XXXX_GUY-HANSEN.json} | 76 +++- ...X-XXX_199X_AU-01-CAN_XXXX_JEMMA-POSCH.json | 222 ++++++++++ ...9X_AU-01-CAN_XXXX_NICOLE-SCHWIRTLICH.json} | 76 +++- ..._199X_AU-01-CAN_XXXX_PHILLIP-HALLIDAY.json | 190 +++++++++ ...XX-XXX_199X_AU-05-AP_XXXX_GIANG-PHAM.json} | 23 +- ...X-XXX_199X_AU-05-AP_XXXX_NINO-DIVITO.json} | 76 +++- ...XX_199X_ID-04-JAK_XXXX_ARYA-ANINDITA.json} | 76 +++- ...199X_ID-04-JAK_XXXX_FARISAH-SHADRINA.json} | 76 +++- ...99X_ID-04-JAK_XXXX_KRISHNI-HANDAYANI.json} | 23 +- ...XXX_199X_ID-33-BAN_XXXX_BULAN-ASTUTI.json} | 96 ++++- ...XXX_199X_ID-33-TAN_XXXX_DIAH-HASANAH.json} | 76 +++- ...199X_NL-FL-LEL_XXXX_SERGIO-HOOGVLIETS.json | 6 +- ...99X_NL-FL-SWI_XXXX_LIDY-KUTSCHRUITER.json} | 144 ++++--- ...199X_NL-FR-LEE_XXXX_SIEBOLD-HEMPENIUS.json | 6 +- ...-XXX_199X_NL-GE-APE_XXXX_ANNE-BECKERS.json | 6 +- ...XXX_199X_NL-GE-ARN_XXXX_ELLES-DIJKEN.json} | 142 ++++--- ...X-XXX_199X_NL-GE-ARN_XXXX_GUUS-GEURTS.json | 6 +- ...XXX_199X_NL-GE-ARN_XXXX_MARLOUS-AKKER.json | 6 +- ..._199X_NL-GE-ARN_XXXX_YVONNE-LAGERWEIJ.json | 6 +- ...XX_199X_NL-GE-BEU_XXXX_HARRIE-GELSING.json | 6 +- ..._199X_NL-GE-ELB_XXXX_LISANNE-HUISMAN.json} | 141 ++++--- ...-XXX_199X_NL-GE-HUI_XXXX_DIAN-TOERING.json | 6 +- ...-XXX_199X_NL-GE-LEN_XXXX_PETRA-WILMER.json | 6 +- ...XX-XXX_199X_NL-GE-NIJ_XXXX_JOEP-LANGE.json | 6 +- ...199X_NL-GE-NIJ_XXXX_MAURITS-RAVESTEYN.json | 6 +- ...XX_199X_NL-GE-NIJ_XXXX_WOUTER-GASTER.json} | 141 ++++--- ...XXX_199X_NL-GE-TIE_XXXX_TANJA-KUSTERS.json | 6 +- ...-XXX_199X_NL-GE-VEL_XXXX_SANDRA-SACHS.json | 6 +- ...X-XXX_199X_NL-GE-WAG_XXXX_NANNE-GROOT.json | 166 ++++++++ ...-XXX_199X_NL-GR-GRO_XXXX_ELLEN-VISSER.json | 6 +- ...199X_NL-GR-GRO_XXXX_TIM-KONINGSBRUGGE.json | 6 +- ...X_199X_NL-NB-EIN_XXXX_LUUK-GODTSCHALK.json | 6 +- ...X_199X_NL-NB-EIN_XXXX_MAHMOUD-MAHGOUB.json | 6 +- ...XX_199X_NL-NB-EIN_XXXX_MALOU-HARMELEN.json | 164 ++++++++ ...199X_NL-NB-EIN_XXXX_PRADEEP-PARTHIBAN.json | 6 +- ...99X_NL-NB-EIN_XXXX_RUBEN-KOLFSCHOTEN.json} | 142 ++++--- ...X-XXX_199X_NL-NB-EIN_XXXX_TIANRAN-LIU.json | 6 +- ..._XX-XX-XXX_199X_NL-NB-TIL_XXXX_P-PHAM.json | 6 +- ...XX_199X_NL-NH-ALK_XXXX_ROSANNA-CUENCA.json | 6 +- ..._199X_NL-NH-AMS_XXXX_ANNEMIEKE-ROMIJN.json | 6 +- ...X-XX-XXX_199X_NL-NH-AMS_XXXX_BO-BOJOH.json | 6 +- ...-XXX_199X_NL-NH-AMS_XXXX_CAROLA-WIJK.json} | 142 ++++--- ...X-XXX_199X_NL-NH-AMS_XXXX_CASPER-HUIS.json | 6 +- ..._199X_NL-NH-AMS_XXXX_CATHERINE-WOLFS.json} | 144 ++++--- ..._199X_NL-NH-AMS_XXXX_CLAIRE-BROOIMANS.json | 6 +- ...XX_199X_NL-NH-AMS_XXXX_EDITH-SCHREURS.json | 6 +- ...X-XXX_199X_NL-NH-AMS_XXXX_EVA-LAMMERS.json | 6 +- ...199X_NL-NH-AMS_XXXX_FREDERIEKE-MELSEN.json | 6 +- ..._NL-NH-AMS_XXXX_INFOBALIE-RIJKSMUSEUM.json | 6 +- ...XX_199X_NL-NH-AMS_XXXX_JELTE-REINDERS.json | 6 +- ...99X_NL-NH-AMS_XXXX_MICHELLE-HEEMEIJER.json | 6 +- ...-XXX_199X_NL-NH-AMS_XXXX_MYRA-KRAMER.json} | 142 ++++--- ...-XX-XXX_199X_NL-NH-AMS_XXXX_PAUL-POST.json | 164 ++++++++ ...X-XXX_199X_NL-NH-AMS_XXXX_PIETER-WOLF.json | 6 +- ...XX_199X_NL-NH-AMS_XXXX_RUUD-HOGERWERF.json | 6 +- ...XX_199X_NL-NH-AMS_XXXX_SJOUKJE-ALPHEN.json | 6 +- ...XXX_199X_NL-NH-AMS_XXXX_YASHA-HOLTUIN.json | 6 +- ...XX-XX-XXX_199X_NL-NH-BUS_XXXX_HAYAT-M.json | 6 +- ...X_199X_NL-NH-DGO_XXXX_NELLEMIEKE-REUS.json | 6 +- ...X-XXX_199X_NL-NH-LOO_XXXX_ARIE-PAPPOT.json | 6 +- ...XX_199X_NL-NH-UIT_XXXX_PATRICE-HESHOF.json | 6 +- ...XX_199X_NL-NH-ZAA_XXXX_RENATE-SUNLOUW.json | 6 +- ...XXX_199X_NL-NH-ZAA_XXXX_ROXANNE-BOSCH.json | 6 +- ...-XXX_199X_NL-OV-ZWO_XXXX_ESMA-NICOLAI.json | 6 +- ...-XXX_199X_NL-UT-NIE_XXXX_MIRJAM-BERG.json} | 141 ++++--- ...-XXX_199X_NL-UT-UTR_XXXX_HANIFE-CESUR.json | 6 +- ..._199X_NL-UT-UTR_XXXX_MARIEKE-WENTINK.json} | 152 ++++--- ...-XXX_199X_NL-UT-WBD_XXXX_JOKE-PUTTEN.json} | 141 ++++--- ...199X_NL-UT-ZEI_XXXX_ROCHELLE-GOUDEAU.json} | 141 ++++--- ...X-XXX_199X_NL-ZH-AAD_XXXX_ILSE-KONING.json | 6 +- ...X_199X_NL-ZH-DEL_XXXX_LINDA-HEEMSKERK.json | 6 +- ...-XX-XXX_199X_NL-ZH-DEL_XXXX_VICTOR-K.json} | 142 ++++--- ...99X_NL-ZH-LEI_XXXX_DIA-KOTERISMEIJERS.json | 6 +- ...XX-XXX_199X_NL-ZH-ROT_XXXX_LAYBOW-KUO.json | 6 +- ...XX_199X_NL-ZH-SAS_XXXX_MAUD-HARTEVELT.json | 6 +- ...NL-ZH-TH_XXXX_AARTIE-KEDARKRISHNASING.json | 6 +- ...-XXX_199X_NL-ZH-TH_XXXX_AMINE-MORABIT.json | 6 +- ...XXX_199X_NL-ZH-TH_XXXX_ANNABELL-THODE.json | 6 +- ...X_199X_NL-ZH-TH_XXXX_ARJAN-WESTSTRATE.json | 6 +- ...XXX_199X_NL-ZH-TH_XXXX_BERHAN-TESFAYE.json | 6 +- ...-XX-XXX_199X_NL-ZH-TH_XXXX_COEN-GEEST.json | 6 +- ...XXX_199X_NL-ZH-TH_XXXX_DIEGO-DINDAJAL.json | 6 +- ...X-XXX_199X_NL-ZH-TH_XXXX_DOUWE-BEULEN.json | 6 +- ...XX-XXX_199X_NL-ZH-TH_XXXX_FINN-LEDEN.json} | 142 ++++--- ...X_199X_NL-ZH-TH_XXXX_FLORENCE-LIMBURG.json | 6 +- ...XXX_199X_NL-ZH-TH_XXXX_GAITRIE-BADLOE.json | 6 +- ...X_199X_NL-ZH-TH_XXXX_GINO-HOOGSTRATEN.json | 6 +- ...-XX-XXX_199X_NL-ZH-TH_XXXX_HAROLD-ZEE.json | 6 +- ...X_199X_NL-ZH-TH_XXXX_JOOP-BLEIJSWIJK.json} | 142 ++++--- ...-XXX_199X_NL-ZH-TH_XXXX_LAURA-MORISON.json | 6 +- ...XX-XXX_199X_NL-ZH-TH_XXXX_LEO-TIMMERS.json | 6 +- ...-XX-XXX_199X_NL-ZH-TH_XXXX_MADAN-MOTI.json | 6 +- ...X_199X_NL-ZH-TH_XXXX_MARLOES-LIGTVOET.json | 6 +- ...X-XXX_199X_NL-ZH-TH_XXXX_MICHAEL-KUIK.json | 6 +- ...X_199X_NL-ZH-TH_XXXX_MIRANDA-KNOESTER.json | 6 +- ...-XXX_199X_NL-ZH-TH_XXXX_PATRICIA-VANE.json | 6 +- ...X-XXX_199X_NL-ZH-TH_XXXX_PATRYCJA-BIK.json | 6 +- ...X_199X_NL-ZH-TH_XXXX_RAYMOND-POETERAY.json | 6 +- ...X_199X_NL-ZH-ZOE_XXXX_LETSCH-MARIANNE.json | 6 +- ...XX_199X_NL-ZH-ZWI_XXXX_ARIEJAN-PRINS.json} | 142 ++++--- ...XX_199X_XX-XX-XXX_XXXX_AGUSTIN-RAHAYU.json | 6 +- ...-XXX_199X_XX-XX-XXX_XXXX_ANNA-CHULYAN.json | 6 +- ...99X_XX-XX-XXX_XXXX_ATIEKRATNA-WIRATRI.json | 6 +- ...-XXX_199X_XX-XX-XXX_XXXX_BEJNA-YILDIZ.json | 6 +- ...9X_XX-XX-XXX_XXXX_CATARINA-DITTSCHLAG.json | 6 +- ...XX_199X_XX-XX-XXX_XXXX_CINDRA-YULIANI.json | 6 +- ...XXX_199X_XX-XX-XXX_XXXX_CORRIE-PERDOK.json | 155 +++++++ ...XX_199X_XX-XX-XXX_XXXX_DAGMAR-BERBEN.json} | 90 +++- ...X-XXX_199X_XX-XX-XXX_XXXX_DON-KARDONO.json | 6 +- ...99X_XX-XX-XXX_XXXX_ELISABETH-WIESSNER.json | 6 +- ...XXX_199X_XX-XX-XXX_XXXX_FANDY-ADRIANA.json | 6 +- ...X-XX-XXX_199X_XX-XX-XXX_XXXX_FEMKE-S.json} | 90 +++- ...-XXX_199X_XX-XX-XXX_XXXX_FOUKJE-BROER.json | 6 +- ...XXX_199X_XX-XX-XXX_XXXX_FRANK-PEETERS.json | 155 +++++++ ...X_199X_XX-XX-XXX_XXXX_FRANKA-SALOMONS.json | 6 +- ...X-XXX_199X_XX-XX-XXX_XXXX_FRITS-BOUMA.json | 6 +- ...XX_199X_XX-XX-XXX_XXXX_HOORIEH-SAEIDI.json | 160 +++++++ ...X-XXX_199X_XX-XX-XXX_XXXX_HUGO-PONTES.json | 6 +- ...XX_199X_XX-XX-XXX_XXXX_ILONA-DOMANSKA.json | 6 +- ...X-XX-XXX_199X_XX-XX-XXX_XXXX_JAN-HOND.json | 174 ++++++++ ...X_199X_XX-XX-XXX_XXXX_JORGE-RODRIGUES.json | 6 +- ...XXX_199X_XX-XX-XXX_XXXX_JULES-SNEPPEN.json | 6 +- ...XX_199X_XX-XX-XXX_XXXX_LOTTE-DIGGELEN.json | 6 +- ...X_199X_XX-XX-XXX_XXXX_LOUISE-RAHARDJO.json | 6 +- ...X_199X_XX-XX-XXX_XXXX_LUKAS-ELEUWARIN.json | 6 +- ...XX-XXX_199X_XX-XX-XXX_XXXX_MARC-MEURS.json | 6 +- ...XXX_199X_XX-XX-XXX_XXXX_MARIS-LEEUWEN.json | 6 +- ...XXX_199X_XX-XX-XXX_XXXX_MARTIJN-ELDIK.json | 6 +- ..._199X_XX-XX-XXX_XXXX_MICHELLE-BOENDER.json | 6 +- ...-XXX_199X_XX-XX-XXX_XXXX_MIHAIL-VALOV.json | 6 +- ...XX-XXX_199X_XX-XX-XXX_XXXX_MINA-SINGH.json | 6 +- ...X_199X_XX-XX-XXX_XXXX_MITCHELL-EGBERS.json | 6 +- ...XXX_199X_XX-XX-XXX_XXXX_NADHILA-FITRI.json | 6 +- ...-XXX_199X_XX-XX-XXX_XXXX_NINA-RUNHAAR.json | 6 +- ...X-XXX_199X_XX-XX-XXX_XXXX_NOURA-AKDI.json} | 90 +++- ...-XXX_199X_XX-XX-XXX_XXXX_PAUL-NOPPERS.json | 6 +- ...-XXX_199X_XX-XX-XXX_XXXX_PETER-HOOGEN.json | 6 +- ...XX_199X_XX-XX-XXX_XXXX_REMCO-DIJKSTRA.json | 6 +- ...-XXX_199X_XX-XX-XXX_XXXX_RENS-JANSSEN.json | 6 +- ...X_199X_XX-XX-XXX_XXXX_RIANNE-WETERING.json | 6 +- ..._199X_XX-XX-XXX_XXXX_ROBERT-HOMMERSOM.json | 6 +- ..._199X_XX-XX-XXX_XXXX_ROBERT-WESTERHOF.json | 170 ++++++++ ...XX-XX-XXX_199X_XX-XX-XXX_XXXX_RON-KOK.json | 6 +- ...XX_199X_XX-XX-XXX_XXXX_ROY-RIJSBERGEN.json | 6 +- ...XXX_199X_XX-XX-XXX_XXXX_SHIVANI-MOHAN.json | 6 +- ...199X_XX-XX-XXX_XXXX_STEFANIE-KASDIRAN.json | 6 +- ...XX-XXX_199X_XX-XX-XXX_XXXX_SUAD-BULLE.json | 6 +- ...X_199X_XX-XX-XXX_XXXX_TANITHA-GANGEL.json} | 90 +++- ..._199X_XX-XX-XXX_XXXX_TARIEF-ALIHOESEN.json | 30 +- ...9X_XX-XX-XXX_XXXX_TATJANA-TIMOTIJEVIC.json | 6 +- ...199X_XX-XX-XXX_XXXX_VICTORINE-BANGERT.json | 6 +- ...-XXX_199X_XX-XX-XXX_XXXX_VINCENT-KAMP.json | 165 ++++++++ ...99X_XX-XX-XXX_XXXX_VIOLETTA-RIJTHOVEN.json | 153 +++++++ ..._199X_XX-XX-XXX_XXXX_WILMA-SIGTERMANS.json | 153 +++++++ ...X_199X_XX-XX-XXX_XXXX_YOUSRA-CHAABANE.json | 6 +- ..._200X_AU-01-CAN_XXXX_ISOBEL-JOHNSTONE.json | 220 ++++++++++ ...0X_AU-01-CAN_XXXX_MARIUSZ-KALINOWSKI.json} | 76 +++- ...00X_AU-01-CAN_XXXX_SNEZANA-MIHAJLOVIC.json | 224 ++++++++++ ...X-XXX_200X_AU-05-AP_XXXX_JENNY-OSTINI.json | 228 ++++++++++ ...XXX_200X_ID-04-JAK_XXXX_ASTRI-PUSPITA.json | 219 ++++++++++ ...-XXX_200X_NL-FL-AS_XXXX_AAD-KASTELEIN.json | 6 +- ...X_200X_NL-GE-ARN_XXXX_FRED-VERSCHOOR.json} | 142 ++++--- ...-XXX_200X_NL-GE-ARN_XXXX_GERARD-OENE.json} | 142 ++++--- ...-XXX_200X_NL-GE-CUL_XXXX_KAREN-SALDEN.json | 6 +- ...-XXX_200X_NL-GE-CUL_XXXX_RUTH-WOLTERS.json | 6 +- ...XX_200X_NL-GE-NIJ_XXXX_MARTIN-BERGSMA.json | 164 ++++++++ ..._200X_NL-GR-WED_XXXX_MONIQUE-NICOLAIJ.json | 6 +- ..._200X_NL-NB-'S-_XXXX_MAARTEN-FOLKERS.json} | 141 ++++--- ...-XX-XXX_200X_NL-NB-EIN_XXXX_MAARTEN-B.json | 6 +- ..._200X_NL-NB-TIL_XXXX_JOHN-KIESEBRINK.json} | 142 ++++--- ...X-XXX_200X_NL-NB-TIL_XXXX_SJALINA-RA.json} | 141 ++++--- ...-XXX_200X_NL-NB-TIL_XXXX_SOPHIE-HURK.json} | 141 ++++--- ...00X_NL-NH-AMS_XXXX_IRIS-LOUWERSHEIMER.json | 6 +- ...X-XXX_200X_NL-NH-AMS_XXXX_JINMING-LYU.json | 6 +- ...XXX_200X_NL-NH-AMS_XXXX_LISANNE-LAAT.json} | 142 ++++--- ..._200X_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD.json | 166 ++++++++ ...XX-XX-XXX_200X_NL-NH-AMS_XXXX_MANON-P.json | 6 +- ...XX_200X_NL-NH-AMS_XXXX_MARA-BOVIATSI.json} | 144 ++++--- ..._200X_NL-NH-AMS_XXXX_MARIELLE-TILBURG.json | 6 +- ...00X_NL-NH-AMS_XXXX_MELISSA-DAUGHERTY.json} | 142 ++++--- ...X_200X_NL-NH-AMS_XXXX_MERLIJN-RIKKEN.json} | 142 ++++--- ..._200X_NL-NH-AMS_XXXX_REBECCA-ZEINSTRA.json | 6 +- ...XX_200X_NL-NH-AMS_XXXX_SARA-HALILOVIC.json | 6 +- ...00X_NL-NH-AMS_XXXX_SEBASTIAAN-GUBBELS.json | 6 +- ...XXX_200X_NL-NH-AMS_XXXX_TESSA-SIJMONS.json | 6 +- ...00X_NL-NH-HAA_XXXX_DORETH-OOSTERBAAN.json} | 142 ++++--- ...X_200X_NL-OV-DEV_XXXX_WILCO-VELDWIJK.json} | 142 ++++--- ...X_200X_NL-OV-DEV_XXXX_YVONNE-TILBURG.json} | 141 ++++--- ..._200X_NL-OV-ZWO_XXXX_EVERLIEN-LEUSINK.json | 6 +- ...-XXX_200X_NL-UT-HOU_XXXX_FRANK-HEINEN.json | 6 +- ...X_NL-UT-WOE_XXXX_EUNICE-PELTKLEINJAN.json} | 142 ++++--- ...-XXX_200X_NL-ZH-ROT_XXXX_OUALID-TOGOU.json | 6 +- ...XXX_200X_NL-ZH-TH_XXXX_EMMEKE-HULSHOF.json | 166 ++++++++ ...00X_NL-ZH-TH_XXXX_EVELYNE-SCHUURMANS.json} | 142 ++++--- ...XXX_200X_NL-ZH-TH_XXXX_GERRY-KLINKEN.json} | 142 ++++--- ..._200X_NL-ZH-TH_XXXX_JORINDE-LAGENDIJK.json | 6 +- ...XXX_200X_NL-ZH-TH_XXXX_PIETER-BIERMA.json} | 142 ++++--- ...X_200X_NL-ZH-TH_XXXX_RACHEL-KOEHOORN.json} | 142 ++++--- ...L-ZH-ZOE_XXXX_HILDE-HAIGHTONONGERING.json} | 142 ++++--- ...X-XXX_200X_XX-XX-XXX_XXXX_ABDAN-KABAN.json | 6 +- ...XXX_200X_XX-XX-XXX_XXXX_ANNEMARIJKE-V.json | 6 +- ...-XXX_200X_XX-XX-XXX_XXXX_BAS-BEEKHUIS.json | 158 +++++++ ...XX_200X_XX-XX-XXX_XXXX_BETUL-YILDIRIM.json | 6 +- ...X-XXX_200X_XX-XX-XXX_XXXX_CHEN-MALUL.json} | 93 ++++- ...XXX_200X_XX-XX-XXX_XXXX_EFFI-NEUMANN.json} | 93 ++++- ...XXX_200X_XX-XX-XXX_XXXX_EKHTIAR-SYED.json} | 90 +++- ...XXX_200X_XX-XX-XXX_XXXX_ELLEN-FREEMAN.json | 6 +- ...X_200X_XX-XX-XXX_XXXX_ILSE-SEVERIJNEN.json | 155 +++++++ ...-XX-XXX_200X_XX-XX-XXX_XXXX_JOLANDE-T.json | 155 +++++++ ...XX-XXX_200X_XX-XX-XXX_XXXX_JULIA-CLER.json | 6 +- ...XX_200X_XX-XX-XXX_XXXX_JULIE-ROUSSEAU.json | 6 +- ...200X_XX-XX-XXX_XXXX_LIANNA-SARKISIAN.json} | 93 ++++- ..._200X_XX-XX-XXX_XXXX_MAHBOUBEH-RABIEI.json | 6 +- ...X_200X_XX-XX-XXX_XXXX_MARCO-HESSELINK.json | 155 +++++++ ...X_200X_XX-XX-XXX_XXXX_MARJAN-NANNINGA.json | 6 +- ...X_XX-XX-XXX_XXXX_MARJOLEIN-JEGERINGS.json} | 90 +++- ..._200X_XX-XX-XXX_XXXX_MARK-DWARSWAARD.json} | 90 +++- ..._XX-XX-XXX_200X_XX-XX-XXX_XXXX_MAYA-T.json | 156 +++++++ ...-XX-XXX_200X_XX-XX-XXX_XXXX_MIEKE-VOS.json | 158 +++++++ ...XX-XXX_200X_XX-XX-XXX_XXXX_NAVIN-REGI.json | 6 +- ...-XX-XXX_200X_XX-XX-XXX_XXXX_NOA-SPOOR.json | 30 +- ...X_200X_XX-XX-XXX_XXXX_NURUL-MALLALAHI.json | 6 +- ...X_200X_XX-XX-XXX_XXXX_PIETER-ROELOFS.json} | 90 +++- ..._200X_XX-XX-XXX_XXXX_RONALD-DUSSELJEE.json | 6 +- ...00X_XX-XX-XXX_XXXX_SEBASTIAAN-HEEREMA.json | 6 +- ...XXX_200X_XX-XX-XXX_XXXX_TIJN-DONNERS.json} | 90 +++- ...X-XXX_200X_XX-XX-XXX_XXXX_ZAIDE-KRAPI.json | 6 +- ...X_XXXX_AT-09-VIE_XXXX_HERBERT-SOMPEL.json} | 92 ++-- ...XXX_XXXX_AU-01-CAN_XXXX_DAVID-PEARSON.json | 143 +++++++ ...XXX_XXXX_AU-01-CAN_XXXX_JAN-FULLERTON.json | 142 +++++++ ...XX_XXXX_AU-01-CAN_XXXX_JASMIN-CAMERON.json | 142 +++++++ ...XX_XXXX_AU-01-CAN_XXXX_MARK-CORBOULD.json} | 96 ++--- ..._XXXX_AU-01-CAN_XXXX_MELANIE-SORENSON.json | 145 +++++++ ...X_XXXX_AU-01-CAN_XXXX_MICHELE-HUSTON.json} | 92 ++-- ...X-XXX_XXXX_AU-01-CAN_XXXX_PAM-GATENBY.json | 145 +++++++ ..._XX-XX-XXX_XXXX_AU-01-CAN_XXXX_PE-ZAR.json | 149 +++++++ ...XXX_XXXX_AU-01-CAN_XXXX_QUENTIN-SLADE.json | 145 +++++++ ...X_XXXX_AU-04-RR_XXXX_BRENTON-CLIFFORD.json | 143 +++++++ ...XXX_XXXX_CA-08-TOR_XXXX_ANDREA-MILLS.json} | 77 +++- ...XXX_XXXX_CA-08-TOR_XXXX_ANGELA-DUGAS.json} | 77 +++- ...XX_XXXX_GB-EN-OSM_XXXX_RACHEL-PISTOL.json} | 92 ++-- ...-XXX_XXXX_ID-04-JAK_XXXX_ACHMAD-QORI.json} | 77 +++- ...X_XXXX_ID-04-JAK_XXXX_ADHIMAS-SUSILO.json} | 77 +++- ..._XXXX_ID-04-JAK_XXXX_ADITIAN-PRATAMA.json} | 77 +++- ...-XXX_XXXX_ID-04-JAK_XXXX_AHMAD-ZUFAR.json} | 77 +++- ...XX-XXX_XXXX_ID-04-JAK_XXXX_ALI-FAJAR.json} | 77 +++- ...-XXX_XXXX_ID-04-JAK_XXXX_AMARA-PUTRI.json} | 77 +++- ...-XXX_XXXX_ID-04-JAK_XXXX_AMBIYA-ADJI.json} | 77 +++- ...-XXX_XXXX_ID-04-JAK_XXXX_ANANTA-YOGA.json} | 77 +++- ...XXX_XXXX_ID-04-JAK_XXXX_ANITA-JANNAH.json} | 77 +++- ...XXX_XXXX_ID-04-JAK_XXXX_ANNISA-HUSNA.json} | 77 +++- ...XXX_XXXX_ID-04-JAK_XXXX_ANWAR-ASYRAF.json} | 77 +++- ...XXX_XXXX_ID-04-JAK_XXXX_ARI-SETIAWAN.json} | 77 +++- ...-XXX_XXXX_ID-04-JAK_XXXX_ARIF-JANUAR.json} | 77 +++- ..._XXXX_ID-04-JAK_XXXX_ARINDITHA-PUTRI.json} | 77 +++- ...XXXX_ID-04-JAK_XXXX_ARVIA-EARWANTAMA.json} | 77 +++- ...X_XXXX_ID-04-JAK_XXXX_AULIA-PRAMESTI.json} | 77 +++- ...XX_XXXX_ID-04-JAK_XXXX_BAMBANG-UTOMO.json} | 77 +++- ...-XXX_XXXX_ID-04-JAK_XXXX_BAYU-TANOYO.json} | 77 +++- ...XX_XXXX_ID-04-JAK_XXXX_BELLA-MALISSA.json} | 77 +++- ...XXXX_ID-04-JAK_XXXX_DADY-RACHMANANTA.json} | 94 ++--- ...-XXX_XXXX_ID-04-JAK_XXXX_HAKIM-HAKIM.json} | 77 +++- ...X_XXXX_ID-30-BAN_XXXX_TSAMARA-NUGRAHA.json | 140 +++++++ ...X_XXXX_ID-33-BAN_XXXX_DEDDY-KRISTIAN.json} | 94 ++--- ...XX_XXXX_NL-NH-AMS_XXXX_LEONORE-SLOTEN.json | 10 +- ...X_XXXX_NL-UT-SOE_XXXX_ALFRED-STAARMAN.json | 10 +- ...XXX_XXXX_NL-ZH-TH_XXXX_EMMEKE-HULSHOF.json | 142 ------- ...X_XXXX_NL-ZH-TH_XXXX_INGRID-COLERIDGE.json | 140 ------- ..._XXXX_NO-09-NOR_XXXX_KIRSTEN-RYDLAND.json} | 92 ++-- ...XX_XXXX_TR-68-ANK_XXXX_MEHMET-YIRTAR.json} | 77 +++- ...XXXX_US-CA-CC_XXXX_ISA-HERICOVELASCO.json} | 77 +++- ...X-XXX_XXXX_US-CA-SF_XXXX_ADAM-MILLER.json} | 87 +++- ...-XXX_XXXX_US-CA-SF_XXXX_ALEX-DEMPSEY.json} | 77 +++- ...XX_XXXX_US-CA-SF_XXXX_AMANDA-BARRETT.json} | 87 +++- ...X_XXXX_US-CA-SF_XXXX_AMANDARI-KARACA.json} | 87 +++- ...XXX_XXXX_US-CA-SF_XXXX_AMIR-ESFAHANI.json} | 87 +++- ...XXX_XXXX_US-CA-SF_XXXX_ANISH-SARANGI.json} | 87 +++- ...XXXX_US-CA-SF_XXXX_JONATHAN-MARTINEZ.json} | 81 +++- ...-XXX_XXXX_US-NY-NYC_XXXX_DERIS-NAGARA.json | 140 +++++++ ...XX_XXXX_US-WA-SEA_XXXX_AMANDA-MCCABE.json} | 77 +++- ...XX_XXXX_US-WA-TAC_XXXX_ANNA-TRAMMELL.json} | 77 +++- ...XX-XXX_XXXX_XX-XX-XXX_XXXX_AARON-XIMM.json | 151 ------- ...X_XXXX_XX-XX-XXX_XXXX_ABEER-BEHBEHANI.json | 82 ---- ...XX_XXXX_XX-XX-XXX_XXXX_ALBERT-REIJNEN.json | 90 ---- ...XXX_XXXX_XX-XX-XXX_XXXX_ANNISA-FADIAH.json | 129 ------ ..._ARNO-DIETEREN-arno_dieteren_37914a30.json | 83 ---- ...XXX_XXXX_XX-XX-XXX_XXXX_ASTRI-PUSPITA.json | 75 ---- ...X-XX-XXX_XXXX_XX-XX-XXX_XXXX_B-GEORGE.json | 168 -------- ...XXX_XX-XX-XXX_XXXX_BADRA-KARUNARATHNA.json | 104 ----- ...-XXX_XXXX_XX-XX-XXX_XXXX_BAS-BEEKHUIS.json | 78 ---- ..._XXXX_XX-XX-XXX_XXXX_BRENTON-CLIFFORD.json | 76 ---- ...XXX_CASPER-HUIS-casper_huis_8b1350180.json | 6 +- ...XX_XXXX_XX-XX-XXX_XXXX_CHRIS-ZIELSTRA.json | 80 ---- ...XXX_XXXX_XX-XX-XXX_XXXX_CORRIE-PERDOK.json | 75 ---- ..._XXXX_XX-XX-XXX_XXXX_DADY-RACHMANANTA.json | 75 ---- ...XXX_XXXX_XX-XX-XXX_XXXX_DAVID-PEARSON.json | 76 ---- ...XX-XXX_XXXX_XX-XX-XXX_XXXX_DEBBIE-COX.json | 78 ---- ...XX_XXXX_XX-XX-XXX_XXXX_DEDDY-KRISTIAN.json | 75 ---- ...-XXX_XXXX_XX-XX-XXX_XXXX_DERIS-NAGARA.json | 73 ---- ...XX_XXXX_DJOKE-DAM-djoke_dam_3a92a3139.json | 6 +- ...-XX-XXX_XXXX_XX-XX-XXX_XXXX_ED-BIESTA.json | 86 ---- ...XXX_XXXX_XX-XX-XXX_XXXX_FRANK-PEETERS.json | 75 ---- ...X_XXXX_XX-XX-XXX_XXXX_GREGORY-DOWNTON.json | 79 ---- ...X-XXX_XXXX_XX-XX-XXX_XXXX_HASAN-KUMAS.json | 104 ----- ...XX-XXX_XXXX_XX-XX-XXX_XXXX_HENK-WEVER.json | 75 ---- ...XX_XXXX_XX-XX-XXX_XXXX_HERBERT-SOMPEL.json | 73 ---- ...XX_XXXX_XX-XX-XXX_XXXX_HOORIEH-SAEIDI.json | 80 ---- ...X_XXXX_XX-XX-XXX_XXXX_ILSE-SEVERIJNEN.json | 75 ---- ..._XXXX_XX-XX-XXX_XXXX_ISOBEL-JOHNSTONE.json | 76 ---- ...XXX_XXXX_XX-XX-XXX_XXXX_JAN-FULLERTON.json | 75 ---- ...X-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAN-HOND.json | 94 ----- ...XX_XXXX_XX-XX-XXX_XXXX_JASMIN-CAMERON.json | 75 ---- ...X-XXX_XXXX_XX-XX-XXX_XXXX_JEMMA-POSCH.json | 78 ---- ...-XXX_XXXX_XX-XX-XXX_XXXX_JENNY-OSTINI.json | 84 ---- ...-XX-XXX_XXXX_XX-XX-XXX_XXXX_JOLANDE-T.json | 75 ---- ...X_XXXX_XX-XX-XXX_XXXX_KIRSTEN-RYDLAND.json | 73 ---- ...X_XXXX_XX-XX-XXX_XXXX_MARCO-HESSELINK.json | 75 ---- ...X-XXX_XXXX_XX-XX-XXX_XXXX_MARGA-THIJM.json | 75 ---- ...XXX_XXXX_XX-XX-XXX_XXXX_MARK-CORBOULD.json | 77 ---- ..._XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MAYA-T.json | 76 ---- ..._XXXX_XX-XX-XXX_XXXX_MELANIE-SORENSON.json | 78 ---- ...XX_XXXX_XX-XX-XXX_XXXX_MICHELE-HUSTON.json | 73 ---- ...-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIEKE-VOS.json | 78 ---- ...XX_XXXX_XX-XX-XXX_XXXX_MIHAELA-GOLBAN.json | 78 ---- ..._XXXX_XX-XX-XXX_XXXX_MIRCESCU-AURELIA.json | 75 ---- ...DWIHAPSARI-novita_dwihapsari_27788027.json | 90 +++- ...X-XXX_XXXX_XX-XX-XXX_XXXX_PAM-GATENBY.json | 78 ---- ..._XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PE-ZAR.json | 82 ---- ..._XXXX_XX-XX-XXX_XXXX_PHILLIP-HALLIDAY.json | 99 ----- ...XXX_XXXX_XX-XX-XXX_XXXX_QUENTIN-SLADE.json | 78 ---- ...XXX_XXXX_XX-XX-XXX_XXXX_RACHEL-PISTOL.json | 73 ---- ...XX-XXX_XXXX_XX-XX-XXX_XXXX_ROB-WILLIS.json | 73 ---- ..._XXXX_XX-XX-XXX_XXXX_ROBERT-WESTERHOF.json | 90 ---- ...XXX_XX-XX-XXX_XXXX_SNEZANA-MIHAJLOVIC.json | 80 ---- ...XX-XXX_XXXX_XX-XX-XXX_XXXX_SUZI-VARGA.json | 82 ---- ...X_XXXX_XX-XX-XXX_XXXX_TSAMARA-NUGRAHA.json | 73 ---- ...-XXX_XXXX_XX-XX-XXX_XXXX_VINCENT-KAMP.json | 85 ---- ...XXX_XX-XX-XXX_XXXX_VIOLETTA-RIJTHOVEN.json | 73 ---- ..._XXXX_XX-XX-XXX_XXXX_WILMA-SIGTERMANS.json | 73 ---- ...200X_NL-NB-VEL_XXXX_MATTHEW-THORBURN.json} | 93 ++++- 3025 files changed, 61541 insertions(+), 22218 deletions(-) rename data/person/{ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_KEVIN-BRADLEY.json => ID_AU-01-CAN_195X_AU-01-CAN_XXXX_KEVIN-BRADLEY.json} (68%) rename data/person/{ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GIANOULA-BURNS.json => ID_AU-01-CAN_196X_AU-01-CAN_XXXX_GIANOULA-BURNS.json} (63%) rename data/person/{ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_VERA-DUNN.json => ID_AU-01-CAN_196X_AU-01-CAN_XXXX_VERA-DUNN.json} (62%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CATHERINE-ALDERSEY.json => ID_AU-01-CAN_197X_AU-01-CAN_XXXX_CATHERINE-ALDERSEY.json} (57%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_COLETTE-LILLE.json => ID_AU-01-CAN_197X_AU-01-CAN_XXXX_COLETTE-LILLE.json} (56%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CONOR-MCCARTHY.json => ID_AU-01-CAN_197X_AU-01-CAN_XXXX_CONOR-MCCARTHY.json} (61%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DAVID-WONG.json => ID_AU-01-CAN_197X_AU-01-CAN_XXXX_DAVID-WONG.json} (54%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_FRANCIS-CRIMMINS.json => ID_AU-01-CAN_197X_AU-01-CAN_XXXX_FRANCIS-CRIMMINS.json} (62%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HEATHER-CLARK.json => ID_AU-01-CAN_197X_AU-01-CAN_XXXX_HEATHER-CLARK.json} (58%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIBBY-CASS.json => ID_AU-01-CAN_197X_AU-01-CAN_XXXX_LIBBY-CASS.json} (59%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARTIN-THOMAS.json => ID_AU-01-CAN_197X_AU-01-CAN_XXXX_MARTIN-THOMAS.json} (64%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NICOLA-MACKAYSIM.json => ID_AU-01-CAN_197X_AU-01-CAN_XXXX_NICOLA-MACKAYSIM.json} (71%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SAOWAPHA-VIRAVONG.json => ID_AU-01-CAN_197X_AU-01-CAN_XXXX_SAOWAPHA-VIRAVONG.json} (52%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SIMON-WALL.json => ID_AU-01-CAN_197X_AU-01-CAN_XXXX_SIMON-WALL.json} (63%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_THERDPUN-KLINJUN.json => ID_AU-01-CAN_197X_AU-01-CAN_XXXX_THERDPUN-KLINJUN.json} (72%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RAMDAH-RADJAB.json => ID_AU-01-CAN_197X_ID-17-PRA_XXXX_RAMDAH-RADJAB.json} (56%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ADITYA-BURRA.json => ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ADITYA-BURRA.json} (50%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ALISON-DELLIT.json => ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ALISON-DELLIT.json} (59%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANTONIA-KASUNIC.json => ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ANTONIA-KASUNIC.json} (55%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CATHY-PILGRIM.json => ID_AU-01-CAN_198X_AU-01-CAN_XXXX_CATHY-PILGRIM.json} (88%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CLAYTON-ROGERS.json => ID_AU-01-CAN_198X_AU-01-CAN_XXXX_CLAYTON-ROGERS.json} (56%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FREYA-OCONNOR.json => ID_AU-01-CAN_198X_AU-01-CAN_XXXX_FREYA-OCONNOR.json} (69%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KARLEE-BAKER.json => ID_AU-01-CAN_198X_AU-01-CAN_XXXX_KARLEE-BAKER.json} (58%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KELLY-SKYE.json => ID_AU-01-CAN_198X_AU-01-CAN_XXXX_KELLY-SKYE.json} (64%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LUKE-HICKEY.json => ID_AU-01-CAN_198X_AU-01-CAN_XXXX_LUKE-HICKEY.json} (61%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_REBECCA-PENDLEBURY.json => ID_AU-01-CAN_198X_AU-01-CAN_XXXX_REBECCA-PENDLEBURY.json} (56%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENATA-DYER.json => ID_AU-01-CAN_198X_AU-01-CAN_XXXX_RENATA-DYER.json} (91%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RHYS-C.json => ID_AU-01-CAN_198X_AU-01-CAN_XXXX_RHYS-C.json} (50%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROBYN-HOLMES.json => ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ROBYN-HOLMES.json} (61%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROD-STROUD.json => ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ROD-STROUD.json} (54%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_VEERIN-C.json => ID_AU-01-CAN_198X_AU-06-FRA_XXXX_VEERIN-C.json} (76%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ADRIA-HU.json => ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ADRIA-HU.json} (54%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ADRIANNA-FULLERTON.json => ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ADRIANNA-FULLERTON.json} (61%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ALLISTER-MILLS.json => ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ALLISTER-MILLS.json} (58%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANNE-ROWLANDS.json => ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ANNE-ROWLANDS.json} (78%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BELLE-WILSON.json => ID_AU-01-CAN_199X_AU-01-CAN_XXXX_BELLE-WILSON.json} (58%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEN-PRATTEN.json => ID_AU-01-CAN_199X_AU-01-CAN_XXXX_BEN-PRATTEN.json} (54%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ISABELLE-SHEPPARD.json => ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ISABELLE-SHEPPARD.json} (63%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JONATHAN-GREENSHAW.json => ID_AU-01-CAN_199X_AU-01-CAN_XXXX_JONATHAN-GREENSHAW.json} (54%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KIM-BRUNORO.json => ID_AU-01-CAN_199X_AU-01-CAN_XXXX_KIM-BRUNORO.json} (55%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARJORIE-CURRIE.json => ID_AU-01-CAN_199X_AU-01-CAN_XXXX_MARJORIE-CURRIE.json} (61%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROSALIND-CLARKE.json => ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ROSALIND-CLARKE.json} (61%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SARAH-HODGE.json => ID_AU-01-CAN_199X_AU-01-CAN_XXXX_SARAH-HODGE.json} (51%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SONJA-B.json => ID_AU-01-CAN_199X_AU-01-CAN_XXXX_SONJA-B.json} (53%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CELIA-RIDEAUX.json => ID_AU-01-CAN_199X_AU-04-COO_XXXX_CELIA-RIDEAUX.json} (64%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JENNIFER-THOMPSON.json => ID_AU-01-CAN_199X_AU-05-AP_XXXX_JENNIFER-THOMPSON.json} (68%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIRIAM-COVELL.json => ID_AU-01-CAN_199X_AU-05-AP_XXXX_MIRIAM-COVELL.json} (57%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_QIANMIN-JIA.json => ID_AU-01-CAN_199X_AU-05-AP_XXXX_QIANMIN-JIA.json} (88%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROS-H.json => ID_AU-01-CAN_199X_AU-05-AP_XXXX_ROS-H.json} (68%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MADELINE-ONEIL.json => ID_AU-01-CAN_199X_AU-07-FLY_XXXX_MADELINE-ONEIL.json} (72%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MAYUKH-DIKSHIT.json => ID_AU-01-CAN_199X_AU-08-SB_XXXX_MAYUKH-DIKSHIT.json} (78%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEN-STEVENS.json => ID_AU-01-CAN_199X_XX-XX-XXX_XXXX_BEN-STEVENS.json} (67%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JACKY-YANG.json => ID_AU-01-CAN_199X_XX-XX-XXX_XXXX_JACKY-YANG.json} (93%) rename data/person/{ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BLAKE-SINGLEY.json => ID_AU-01-CAN_200X_AU-01-CAN_XXXX_BLAKE-SINGLEY.json} (53%) rename data/person/{ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_LILIA-WALSH.json => ID_AU-01-CAN_200X_AU-01-CAN_XXXX_LILIA-WALSH.json} (61%) rename data/person/{ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_DANIEL-ROSE.json => ID_AU-01-CAN_200X_AU-02-PAR_XXXX_DANIEL-ROSE.json} (56%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JESS-DRAKE.json => ID_AU-02-BAT_198X_AU-01-CAN_XXXX_JESS-DRAKE.json} (72%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NICOLETTE-S.json => ID_AU-02-BAT_198X_AU-01-CAN_XXXX_NICOLETTE-S.json} (56%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SUSIE-WATT.json => ID_AU-02-BAT_198X_AU-01-CAN_XXXX_SUSIE-WATT.json} (90%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KASSI-HAYS.json => ID_AU-02-BAT_199X_AU-01-CAN_XXXX_KASSI-HAYS.json} (58%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LINDA-B.json => ID_AU-02-BAT_199X_AU-02-PAR_XXXX_LINDA-B.json} (58%) rename data/person/{ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_ANNMARI-JORDENS.json => ID_AU-02-SYD_194X_AU-01-CAN_XXXX_ANNMARI-JORDENS.json} (63%) rename data/person/{ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_ISOBEL-TRUNDLE.json => ID_AU-02-SYD_195X_AU-01-CAN_XXXX_ISOBEL-TRUNDLE.json} (52%) rename data/person/{ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_CAROLYN-TOW.json => ID_AU-02-SYD_196X_AU-01-CAN_XXXX_CAROLYN-TOW.json} (86%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_EMMA-JOLLEY.json => ID_AU-02-SYD_197X_AU-01-CAN_XXXX_EMMA-JOLLEY.json} (71%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIBOR-COUFAL.json => ID_AU-02-SYD_197X_AU-01-CAN_XXXX_LIBOR-COUFAL.json} (64%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_TERENCE-INGRAM.json => ID_AU-02-SYD_197X_AU-07-DEA_XXXX_TERENCE-INGRAM.json} (63%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KAVAN-MANCHANAYAKE.json => ID_AU-02-SYD_198X_AU-01-CAN_XXXX_KAVAN-MANCHANAYAKE.json} (70%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LIHONG-ZHANG.json => ID_AU-02-SYD_198X_AU-01-CAN_XXXX_LIHONG-ZHANG.json} (74%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CONSTANTINA-YIOMELAKIS.json => ID_AU-02-SYD_198X_AU-02-PAR_XXXX_CONSTANTINA-YIOMELAKIS.json} (73%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GAVIN-B.json => ID_AU-02-SYD_199X_XX-XX-XXX_XXXX_GAVIN-B.json} (91%) rename data/person/{ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JAMES-SCHOFIELD.json => ID_AU-02-SYD_200X_AU-01-CAN_XXXX_JAMES-SCHOFIELD.json} (61%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JO-RITALE.json => ID_AU-04-BRI_197X_AU-01-CAN_XXXX_JO-RITALE.json} (58%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARCUS-HUGHES.json => ID_AU-04-BRI_197X_AU-01-CAN_XXXX_MARCUS-HUGHES.json} (64%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROWAN-HENDERSON.json => ID_AU-04-BRI_197X_AU-01-CAN_XXXX_ROWAN-HENDERSON.json} (67%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KATE-DISHERQUILL.json => ID_AU-05-AP_198X_AU-05-AP_XXXX_KATE-DISHERQUILL.json} (61%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CHERIE-CARTER.json => ID_AU-05-AP_199X_AU-01-CAN_XXXX_CHERIE-CARTER.json} (56%) rename data/person/{ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GARRY-STURGESS.json => ID_AU-07-MEL_196X_AU-01-CAN_XXXX_GARRY-STURGESS.json} (65%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ALICE-GARNER.json => ID_AU-07-MEL_197X_AU-05-AP_XXXX_ALICE-GARNER.json} (74%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NIKKI-HENNINGHAM.json => ID_AU-07-MEL_197X_AU-05-AP_XXXX_NIKKI-HENNINGHAM.json} (71%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIKE-SHUTTLEWORTH.json => ID_AU-07-MEL_197X_XX-XX-XXX_XXXX_MIKE-SHUTTLEWORTH.json} (93%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AMELIA-HARTNEY.json => ID_AU-07-MEL_198X_AU-01-CAN_XXXX_AMELIA-HARTNEY.json} (62%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BARBARA-LEMON.json => ID_AU-07-MEL_198X_AU-01-CAN_XXXX_BARBARA-LEMON.json} (73%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUTH-HAZLETON.json => ID_AU-07-MEL_198X_AU-01-CAN_XXXX_RUTH-HAZLETON.json} (68%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNA-KENT.json => ID_AU-07-MEL_198X_XX-XX-XXX_XXXX_ANNA-KENT.json} (81%) rename data/person/{ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_SALWA-CHAIRUNNISA.json => ID_AU-07-MEL_200X_XX-XX-XXX_XXXX_SALWA-CHAIRUNNISA.json} (71%) rename data/person/{ID_BE-BR-BRU_197X_XX-XX-XXX_XXXX_NEESHA-AMRISH.json => ID_BE-BR-BRU_197X_IN-25-CHE_XXXX_NEESHA-AMRISH.json} (88%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LOUIS-SCHEUNEMAN.json => ID_BE-VL-ANT_199X_XX-XX-XXX_XXXX_LOUIS-SCHEUNEMAN.json} (67%) rename data/person/{ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MUHAMMAD-QOSIM.json => ID_ES-51-GRA_200X_ID-08-GS_XXXX_MUHAMMAD-QOSIM.json} (62%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WOUTER-VEEN.json => ID_FR-44-STR_197X_XX-XX-XXX_XXXX_WOUTER-VEEN.json} (58%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VANESSA-JONES.json => ID_GB-EN-BRI_199X_GB-EN-LEE_XXXX_VANESSA-JONES.json} (73%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FIONA-MILWAY.json => ID_GB-EN-CAM_198X_AU-01-CAN_XXXX_FIONA-MILWAY.json} (56%) rename data/person/{ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_HUGO-PENNING.json => ID_GB-EN-LON_198X_NL-NH-AMS_XXXX_HUGO-PENNING.json} (72%) rename data/person/{ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_BENJAMIN-DUERR.json => ID_GB-EN-LON_199X_NL-ZH-TH_XXXX_BENJAMIN-DUERR.json} (75%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LIV-JONG.json => ID_GB-EN-NUT_199X_AU-01-CAN_XXXX_LIV-JONG.json} (58%) rename data/person/{ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_SEAMUS-R.json => ID_GB-EN-OXF_195X_CA-08-TOR_XXXX_SEAMUS-R.json} (66%) create mode 100644 data/person/ID_ID-04-JAK_198X_ID-04-JAK_XXXX_HERLINA-HERLINA.json rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MUHAMAD-HETSAPUTRA.json => ID_ID-04-JAK_198X_ID-04-JAK_XXXX_MUHAMAD-HETSAPUTRA.json} (58%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROBBY-HASAN.json => ID_ID-04-JAK_198X_ID-04-JAK_XXXX_ROBBY-HASAN.json} (54%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNELIES-ZWIJNS.json => ID_ID-04-JAK_198X_XX-XX-XXX_XXXX_ANNELIES-ZWIJNS.json} (63%) create mode 100644 data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_ANNISA-FADIAH.json rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ARIESTA-PREAFITRIALLY.json => ID_ID-04-JAK_199X_ID-04-JAK_XXXX_ARIESTA-PREAFITRIALLY.json} (60%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CLARA-P.json => ID_ID-04-JAK_199X_ID-04-JAK_XXXX_CLARA-P.json} (65%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DINDA-ACHYAR.json => ID_ID-04-JAK_199X_ID-04-JAK_XXXX_DINDA-ACHYAR.json} (66%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_INDERA-DEWANTHO.json => ID_ID-04-JAK_199X_ID-04-JAK_XXXX_INDERA-DEWANTHO.json} (53%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MUHAMMAD-ROSYIDI.json => ID_ID-04-JAK_199X_ID-04-JAK_XXXX_MUHAMMAD-ROSYIDI.json} (64%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NOGUS-PAHLIAWAN.json => ID_ID-04-JAK_199X_ID-04-JAK_XXXX_NOGUS-PAHLIAWAN.json} (53%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PAUL-JEMADU.json => ID_ID-04-JAK_199X_ID-04-JAK_XXXX_PAUL-JEMADU.json} (53%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HANIEF-ASSEGAF.json => ID_ID-04-JAK_199X_ID-33-BAN_XXXX_HANIEF-ASSEGAF.json} (55%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FAHRI-ALTAKWA.json => ID_ID-04-JAK_199X_XX-XX-XXX_XXXX_FAHRI-ALTAKWA.json} (71%) rename data/person/{ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_AFIFAH-WULANDARI.json => ID_ID-07-SEM_200X_XX-XX-XXX_XXXX_AFIFAH-WULANDARI.json} (73%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VERONICA-HAPSARI.json => ID_ID-07-SUR_199X_ID-30-BOG_XXXX_VERONICA-HAPSARI.json} (57%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANDJANI-C.json => ID_ID-07-SUR_199X_XX-XX-XXX_XXXX_ANDJANI-C.json} (79%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NOVITA-DWIHAPSARI.json => ID_ID-10-YOG_198X_ID-10-YOG_XXXX_NOVITA-DWIHAPSARI.json} (52%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DEVI-AZMI.json => ID_ID-10-YOG_199X_ID-04-JAK_XXXX_DEVI-AZMI.json} (66%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELIZA-FITRIANA.json => ID_ID-10-YOG_199X_XX-XX-XXX_XXXX_ELIZA-FITRIANA.json} (67%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_WIENDYAZKIA-ARIFFA.json => ID_ID-10-YOG_199X_XX-XX-XXX_XXXX_WIENDYAZKIA-ARIFFA.json} (70%) rename data/person/{ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ADIMAS-DUMARSEMA.json => ID_ID-10-YOG_200X_ID-04-JAK_XXXX_ADIMAS-DUMARSEMA.json} (57%) rename data/person/{ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_TIUR-SITOMPUL.json => ID_ID-10-YOG_200X_ID-04-JAK_XXXX_TIUR-SITOMPUL.json} (77%) rename data/person/{ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_AMARILIS-MARDHIYAH.json => ID_ID-10-YOG_200X_XX-XX-XXX_XXXX_AMARILIS-MARDHIYAH.json} (74%) rename data/person/{ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_FRIDUS-STEIJLEN.json => ID_ID-28-AMB_196X_NL-NH-AMS_XXXX_FRIDUS-STEIJLEN.json} (90%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SINDY-SETIAWATI.json => ID_ID-30-BAN_199X_ID-04-JAK_XXXX_SINDY-SETIAWATI.json} (63%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANANG-SUTONO.json => ID_ID-30-BAN_199X_ID-30-BAN_XXXX_ANANG-SUTONO.json} (58%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_REZA-NURIZKI.json => ID_ID-30-BAN_199X_ID-30-BAN_XXXX_REZA-NURIZKI.json} (68%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MAULIDA-UMMA.json => ID_ID-30-BAN_199X_XX-XX-XXX_XXXX_MAULIDA-UMMA.json} (82%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DEDI-EFFENDI.json => ID_ID-30-DEP_199X_ID-04-JAK_XXXX_DEDI-EFFENDI.json} (52%) rename data/person/{ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_CLARENCE-DSILVA.json => ID_IN-16-MUM_198X_NL-NB-VEL_XXXX_CLARENCE-DSILVA.json} (84%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RACHEL-MALMBORG.json => ID_IN-19-RT_199X_XX-XX-XXX_XXXX_RACHEL-MALMBORG.json} (87%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NARESH-T.json => ID_IN-40-HYD_198X_AU-01-CAN_XXXX_NARESH-T.json} (61%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SANDEEP-E.json => ID_IN-40-HYD_198X_XX-XX-XXX_XXXX_SANDEEP-E.json} (66%) rename data/person/{ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_ERICA-FARINA.json => ID_IT-05-MM_199X_NL-NB-EIN_XXXX_ERICA-FARINA.json} (65%) rename data/person/{ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_GIORGIO-PORCARO.json => ID_IT-05-MM_199X_NL-NB-EIN_XXXX_GIORGIO-PORCARO.json} (64%) rename data/person/{ID_XX-XX-XXX_199X_NL-ZH-ROT_XXXX_ANNELYNN-KOENDERS.json => ID_IT-07-ROM_199X_NL-ZH-ROT_XXXX_ANNELYNN-KOENDERS.json} (75%) rename data/person/{ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_AURORA-BELLI.json => ID_IT-10-REC_200X_NL-NH-AMS_XXXX_AURORA-BELLI.json} (69%) rename data/person/{ID_NL-GE-EDE_199X_XX-XX-XXX_XXXX_TIRANA-ADISUNA.json => ID_NL-GE-EDE_199X_ID-04-JAK_XXXX_TIRANA-ADISUNA.json} (71%) create mode 100644 data/person/ID_NL-GE-NIJ_197X_NL-GE-NIJ_XXXX_ALBERT-REIJNEN.json rename data/person/{ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_KRYSTAL-ZHANG.json => ID_NL-GE-NIJ_199X_AU-01-CAN_XXXX_KRYSTAL-ZHANG.json} (78%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-GE-OTT_XXXX_BAS-MUHREN.json => ID_NL-GE-OTT_197X_NL-GE-OTT_XXXX_BAS-MUHREN.json} (64%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_LAURA-VEEN.json => ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_LAURA-VEEN.json} (71%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_AUDREY-KOENDERS.json => ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_AUDREY-KOENDERS.json} (92%) rename data/person/{ID_XX-XX-XXX_196X_NL-UT-UTR_XXXX_WIJNT-MA.json => ID_NL-LI-HEE_196X_NL-UT-UTR_XXXX_WIJNT-MA.json} (66%) rename data/person/{ID_XX-XX-XXX_198X_NL-GE-WIN_XXXX_MARIEKE-UBBINK.json => ID_NL-LI-HEE_198X_NL-GE-WIN_XXXX_MARIEKE-UBBINK.json} (75%) rename data/person/{ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MELIKE-YENIAY.json => ID_NL-LI-HEE_200X_XX-XX-XXX_XXXX_MELIKE-YENIAY.json} (63%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARNO-LODDER.json => ID_NL-LI-MAA_196X_NL-NH-AMS_XXXX_ARNO-LODDER.json} (75%) rename data/person/{ID_NL-LI-MAA_199X_XX-XX-XXX_XXXX_BEN-BRADLY.json => ID_NL-LI-MAA_199X_AU-01-CAN_XXXX_BEN-BRADLY.json} (77%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_BARBARA-KRUIJSEN.json => ID_NL-LI-VEN_198X_NL-GE-NIJ_XXXX_BARBARA-KRUIJSEN.json} (68%) rename data/person/{ID_XX-XX-XXX_196X_NL-NB-EIN_XXXX_MARC-WAL.json => ID_NL-NB-EIN_196X_NL-NB-EIN_XXXX_MARC-WAL.json} (65%) rename data/person/{ID_XX-XX-XXX_196X_NL-NB-VEL_XXXX_LEON-VERSTAPPEN.json => ID_NL-NB-EIN_196X_NL-NB-VEL_XXXX_LEON-VERSTAPPEN.json} (64%) rename data/person/{ID_XX-XX-XXX_197X_NL-NB-EIN_XXXX_GUNNAR-TIMMERMANS.json => ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_GUNNAR-TIMMERMANS.json} (64%) rename data/person/{ID_XX-XX-XXX_197X_NL-NB-EIN_XXXX_JOS-HEYDEN.json => ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_JOS-HEYDEN.json} (72%) rename data/person/{ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_RALPH-HANZEN.json => ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_RALPH-HANZEN.json} (70%) rename data/person/{ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_ENGD-TAHIR.json => ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ENGD-TAHIR.json} (65%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SWATI-KUNWAR.json => ID_NL-NB-EIN_199X_XX-XX-XXX_XXXX_SWATI-KUNWAR.json} (66%) rename data/person/{ID_NL-NB-TIL_198X_XX-XX-XXX_XXXX_MARIEANNE-KEIZERMITTELHAEUSER.json => ID_NL-NB-TIL_198X_NL-UT-UTR_XXXX_MARIEANNE-KEIZERMITTELHAEUSER.json} (88%) rename data/person/{ID_XX-XX-XXX_198X_NL-ZH-LEI_XXXX_NAOMI-DEEGENAARS.json => ID_NL-NB-TIL_198X_NL-ZH-LEI_XXXX_NAOMI-DEEGENAARS.json} (84%) rename data/person/{ID_XX-XX-XXX_199X_NL-UT-MIJ_XXXX_PATRICK-BANIS.json => ID_NL-NB-TIL_199X_NL-UT-MIJ_XXXX_PATRICK-BANIS.json} (78%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NB-MOE_XXXX_MARIANNE-PAS.json => ID_NL-NB-ZEV_197X_NL-NB-MOE_XXXX_MARIANNE-PAS.json} (70%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHARLES-GIELEN.json => ID_NL-NH-AMS_194X_NL-NH-AMS_XXXX_CHARLES-GIELEN.json} (67%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ERIK-SOMERS.json => ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_ERIK-SOMERS.json} (70%) rename data/person/{ID_XX-XX-XXX_196X_NL-NH-BUS_XXXX_MONIQUE-LINDEN.json => ID_NL-NH-AMS_196X_NL-NH-BUS_XXXX_MONIQUE-LINDEN.json} (75%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_CECILE-HARTEN.json => ID_NL-NH-AMS_196X_NL-UT-UTR_XXXX_CECILE-HARTEN.json} (67%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-GE-OTT_XXXX_BENNO-TEMPEL.json => ID_NL-NH-AMS_197X_NL-GE-OTT_XXXX_BENNO-TEMPEL.json} (74%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ELIF-RONGENKAYNAKCI.json => ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ELIF-RONGENKAYNAKCI.json} (66%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JAAP-GULDEMOND.json => ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JAAP-GULDEMOND.json} (73%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_RIK-HOEKSTRA.json => ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_RIK-HOEKSTRA.json} (69%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ANNELIES-NISPEN.json => ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_ANNELIES-NISPEN.json} (83%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AXEL-RUGER.json => ID_NL-NH-AMS_197X_US-NY-NYC_XXXX_AXEL-RUGER.json} (62%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNA-DABROWSKA.json => ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNA-DABROWSKA.json} (69%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNA-MEIJER.json => ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNA-MEIJER.json} (68%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BENJAMIN-STIPHOUT.json => ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BENJAMIN-STIPHOUT.json} (75%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CONNY-KRISTEL.json => ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CONNY-KRISTEL.json} (74%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JAN-ADRICHEM.json => ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JAN-ADRICHEM.json} (63%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_NINA-FOLKERSMA.json => ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_NINA-FOLKERSMA.json} (74%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_SANDER-DAAMS.json => ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SANDER-DAAMS.json} (77%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_DR-JANSSEN.json => ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_DR-JANSSEN.json} (75%) rename data/person/{ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_ALBA-ALVAREZMARTIN.json => ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALBA-ALVAREZMARTIN.json} (92%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ALEXANDRA-NEDERLOF.json => ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALEXANDRA-NEDERLOF.json} (72%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-MOURIK.json => ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-MOURIK.json} (81%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-SCHMID.json => ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-SCHMID.json} (74%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARDJUNA-CANDOTTI.json => ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ARDJUNA-CANDOTTI.json} (78%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_AUSTEJA-MACKELAITE.json => ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AUSTEJA-MACKELAITE.json} (80%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BRAM-BERG.json => ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_BRAM-BERG.json} (70%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHANGDUK-KANG.json => ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHANGDUK-KANG.json} (76%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHARL-LANDVREUGD.json => ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHARL-LANDVREUGD.json} (77%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CLAIRE-ELS.json => ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CLAIRE-ELS.json} (62%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ELIZA-WALRAVEN.json => ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ELIZA-WALRAVEN.json} (72%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_IMARA-LIMON.json => ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_IMARA-LIMON.json} (74%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MADE-PINATIH.json => ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MADE-PINATIH.json} (72%) rename data/person/{ID_XX-XX-XXX_195X_NL-ZH-ROT_XXXX_WILLEM-RIJSDIJK.json => ID_NL-NH-HIL_195X_NL-ZH-ROT_XXXX_WILLEM-RIJSDIJK.json} (79%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BREGTJE-HAAK.json => ID_NL-NH-HIL_197X_NL-NH-AMS_XXXX_BREGTJE-HAAK.json} (75%) rename data/person/{ID_XX-XX-XXX_197X_NL-UT-RHE_XXXX_CAROLA-WOUDE.json => ID_NL-NH-HIL_197X_NL-UT-RHE_XXXX_CAROLA-WOUDE.json} (87%) rename data/person/{ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_HENK-GOEMANS.json => ID_NL-NH-HIL_197X_NL-ZH-TH_XXXX_HENK-GOEMANS.json} (73%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARNOUD-GOOS.json => ID_NL-NH-HIL_198X_NL-NH-HIL_XXXX_ARNOUD-GOOS.json} (75%) rename data/person/{ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_LEONIE-RIDDER.json => ID_NL-NH-HIL_198X_NL-ZH-TH_XXXX_LEONIE-RIDDER.json} (73%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARIA-PAPELARD.json => ID_NL-NH-HIL_198X_XX-XX-XXX_XXXX_MARIA-PAPELARD.json} (65%) rename data/person/{ID_XX-XX-XXX_199X_NL-NB-BRE_XXXX_SUSAN-SUURLANDCASTELIJNS.json => ID_NL-NH-HIL_199X_NL-NB-BRE_XXXX_SUSAN-SUURLANDCASTELIJNS.json} (65%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ASTRID-SY.json => ID_NL-NH-HIL_199X_NL-NH-AMS_XXXX_ASTRID-SY.json} (73%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARJEN-PAS.json => ID_NL-NH-HIL_199X_NL-NH-HIL_XXXX_ARJEN-PAS.json} (62%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-ROT_XXXX_AMY-WELTEN.json => ID_NL-NH-HIL_199X_NL-ZH-ROT_XXXX_AMY-WELTEN.json} (70%) rename data/person/{ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_ERIK-HAMELINK.json => ID_NL-NH-HIL_199X_NL-ZH-TH_XXXX_ERIK-HAMELINK.json} (79%) rename data/person/{ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_SUZETTE-RAADT.json => ID_NL-NH-HIL_199X_NL-ZH-TH_XXXX_SUZETTE-RAADT.json} (68%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JAN-FECKEN.json => ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_JAN-FECKEN.json} (62%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SAMIRA-CHMOURK.json => ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_SAMIRA-CHMOURK.json} (72%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARNOLD-BLONK.json => ID_NL-NH-HIL_200X_NL-NH-HIL_XXXX_ARNOLD-BLONK.json} (61%) rename data/person/{ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_ANNALIES-EERDE.json => ID_NL-NH-NAD_200X_NL-NH-AMS_XXXX_ANNALIES-EERDE.json} (92%) rename data/person/{ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_JENNY-HIGGINS.json => ID_NL-OV-ENS_194X_AU-05-AP_XXXX_JENNY-HIGGINS.json} (64%) rename data/person/{ID_XX-XX-XXX_194X_NL-GE-DST_XXXX_JAN-BECKHOVEN.json => ID_NL-OV-ENS_194X_NL-GE-DST_XXXX_JAN-BECKHOVEN.json} (74%) rename data/person/{ID_XX-XX-XXX_195X_NL-NH-DIL_XXXX_EDWIN-HOEK.json => ID_NL-OV-ENS_195X_NL-NH-DIL_XXXX_EDWIN-HOEK.json} (72%) rename data/person/{ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_HENK-LINDHOUT.json => ID_NL-OV-ENS_195X_XX-XX-XXX_XXXX_HENK-LINDHOUT.json} (65%) rename data/person/{ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JANE-HAMILTON.json => ID_NL-OV-ENS_196X_GB-EN-LON_XXXX_JANE-HAMILTON.json} (78%) rename data/person/{ID_XX-XX-XXX_196X_NL-GE-WAG_XXXX_ZHANGUO-BAI.json => ID_NL-OV-ENS_196X_NL-GE-WAG_XXXX_ZHANGUO-BAI.json} (72%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-OAD_XXXX_ISKANDER-BREEBAART.json => ID_NL-OV-ENS_196X_NL-NH-OAD_XXXX_ISKANDER-BREEBAART.json} (61%) rename data/person/{ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_HUIBERT-CRIJNS.json => ID_NL-OV-ENS_196X_NL-ZH-TH_XXXX_HUIBERT-CRIJNS.json} (76%) rename data/person/{ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_FRANS-BEDEM.json => ID_NL-OV-ENS_196X_XX-XX-XXX_XXXX_FRANS-BEDEM.json} (63%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SCOTT-MCKINNON.json => ID_NL-OV-ENS_197X_AU-02-PAR_XXXX_SCOTT-MCKINNON.json} (67%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MOCHAMAD-ACHIR.json => ID_NL-OV-ENS_197X_ID-04-JAK_XXXX_MOCHAMAD-ACHIR.json} (77%) rename data/person/{ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_NICOLETA-NASTASE.json => ID_NL-OV-ENS_197X_NL-ZH-TH_XXXX_NICOLETA-NASTASE.json} (77%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AURELIE-MARTIN.json => ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_AURELIE-MARTIN.json} (74%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHRIS-MCPARTLAND.json => ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_CHRIS-MCPARTLAND.json} (60%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_COLLEEN-AALIA.json => ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_COLLEEN-AALIA.json} (77%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DANIEL-S.json => ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_DANIEL-S.json} (53%) rename data/person/{ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_OLA-ALLAH.json => ID_NL-OV-ENS_198X_NL-NB-VEL_XXXX_OLA-ALLAH.json} (77%) rename data/person/{ID_XX-XX-XXX_198X_NL-NH-HOO_XXXX_KEVANIA-VRIESMENIG.json => ID_NL-OV-ENS_198X_NL-NH-HOO_XXXX_KEVANIA-VRIESMENIG.json} (75%) rename data/person/{ID_XX-XX-XXX_198X_NL-OV-BOR_XXXX_NIELS-LEUTEREN.json => ID_NL-OV-ENS_198X_NL-OV-BOR_XXXX_NIELS-LEUTEREN.json} (80%) rename data/person/{ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GIJS-WILLEMS.json => ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_GIJS-WILLEMS.json} (65%) rename data/person/{ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GIULIA-VIVO.json => ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_GIULIA-VIVO.json} (66%) rename data/person/{ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_THYS-HOEKMAN.json => ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_THYS-HOEKMAN.json} (70%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NATHAN-MULDER.json => ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_NATHAN-MULDER.json} (80%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PIETER-WILLEMS.json => ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_PIETER-WILLEMS.json} (70%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROSALIN-KRISTIANTI.json => ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_ROSALIN-KRISTIANTI.json} (61%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TOTON-LIANTORO.json => ID_NL-OV-ENS_199X_AU-01-CAN_XXXX_TOTON-LIANTORO.json} (64%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MUHAMMAD-NURFALAH.json => ID_NL-OV-ENS_199X_ID-04-JAK_XXXX_MUHAMMAD-NURFALAH.json} (57%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TIARA-SURYA.json => ID_NL-OV-ENS_199X_ID-04-JAK_XXXX_TIARA-SURYA.json} (52%) rename data/person/{ID_XX-XX-XXX_199X_NL-NB-VEL_XXXX_JELMER-BOTER.json => ID_NL-OV-ENS_199X_NL-NB-VEL_XXXX_JELMER-BOTER.json} (89%) rename data/person/{ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_DILAY-SARPAY.json => ID_NL-OV-ENS_199X_NL-NH-AMS_XXXX_DILAY-SARPAY.json} (72%) rename data/person/{ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MARTINE-LEMMENS.json => ID_NL-OV-ENS_199X_NL-NH-AMS_XXXX_MARTINE-LEMMENS.json} (69%) rename data/person/{ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_BO-RIJNSOEVER.json => ID_NL-OV-ENS_199X_NL-UT-UTR_XXXX_BO-RIJNSOEVER.json} (73%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CHRYSOULA-IOANNIDOU.json => ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_CHRYSOULA-IOANNIDOU.json} (66%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELISA-MOLEN.json => ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_ELISA-MOLEN.json} (67%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELSYA-FITRIANA.json => ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_ELSYA-FITRIANA.json} (66%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIRYAM-KADDOURI.json => ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_MIRYAM-KADDOURI.json} (68%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PEDRO-VIDEIRA.json => ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_PEDRO-VIDEIRA.json} (73%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_YASHAR-GHAREBAGHI.json => ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_YASHAR-GHAREBAGHI.json} (71%) rename data/person/{ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_PHILIP-ASAAM.json => ID_NL-OV-ENS_200X_XX-XX-XXX_XXXX_PHILIP-ASAAM.json} (73%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-OV-NED_XXXX_MAAIKE-MSC.json => ID_NL-OV-NED_199X_NL-OV-NED_XXXX_MAAIKE-MSC.json} (61%) rename data/person/{ID_XX-XX-XXX_197X_NL-OV-DAL_XXXX_CINDY-POT.json => ID_NL-OV-ZWO_197X_NL-OV-DAL_XXXX_CINDY-POT.json} (69%) rename data/person/{ID_XX-XX-XXX_198X_NL-UT-EEM_XXXX_THEO-V.json => ID_NL-OV-ZWO_198X_NL-UT-EEM_XXXX_THEO-V.json} (77%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_CATO-STROECKEN.json => ID_NL-UT-AME_199X_NL-UT-UTR_XXXX_CATO-STROECKEN.json} (67%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_INGER-SANDERS.json => ID_NL-UT-BRE_197X_XX-XX-XXX_XXXX_INGER-SANDERS.json} (73%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JEROEN-MEIJER.json => ID_NL-UT-BRE_198X_XX-XX-XXX_XXXX_JEROEN-MEIJER.json} (70%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JACQUELIENE-HEER.json => ID_NL-UT-DME_196X_NL-NH-AMS_XXXX_JACQUELIENE-HEER.json} (63%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-SOE_XXXX_DIRK-STAAT.json => ID_NL-UT-SOE_199X_NL-UT-SOE_XXXX_DIRK-STAAT.json} (61%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARJAN-UITHOL.json => ID_NL-UT-SOE_200X_NL-NH-AMS_XXXX_ARJAN-UITHOL.json} (64%) rename data/person/{ID_XX-XX-XXX_195X_NL-NB-HAL_XXXX_MARY-HOOIJDONK.json => ID_NL-UT-UTR_195X_NL-NB-HAL_XXXX_MARY-HOOIJDONK.json} (74%) delete mode 100644 data/person/ID_NL-UT-UTR_195X_NL-UT-UTR_XXXX_ANJA-SMIT.json rename data/person/{ID_XX-XX-XXX_XXXX_NL-GE-APE_XXXX_ANDRIEKE-OLLEFERS.json => ID_NL-UT-UTR_196X_NL-GE-APE_XXXX_ANDRIEKE-OLLEFERS.json} (74%) create mode 100644 data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_ANJA-SMIT.json rename data/person/{ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_ANKE-FREESE.json => ID_NL-UT-UTR_196X_NL-ZH-TH_XXXX_ANKE-FREESE.json} (61%) rename data/person/{ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER.json => ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER.json} (69%) rename data/person/{ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MARIEKE-LOGCHEM.json => ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_MARIEKE-LOGCHEM.json} (87%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARIEKE-MEER.json => ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_MARIEKE-MEER.json} (71%) rename data/person/{ID_XX-XX-XXX_198X_NL-OV-ZWO_XXXX_MARJO-VENTEBOS.json => ID_NL-UT-UTR_198X_NL-OV-ZWO_XXXX_MARJO-VENTEBOS.json} (70%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_AAT-HOUT.json => ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_AAT-HOUT.json} (84%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FLOOR-ELSENBURG.json => ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_FLOOR-ELSENBURG.json} (72%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_JILDOU-BAARSMA.json => ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_JILDOU-BAARSMA.json} (76%) rename data/person/{ID_XX-XX-XXX_199X_NL-GE-REN_XXXX_SANDER-LANGBROEK.json => ID_NL-UT-UTR_199X_NL-GE-REN_XXXX_SANDER-LANGBROEK.json} (89%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARRIT-BORGHT.json => ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_MARRIT-BORGHT.json} (69%) rename data/person/{ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_AIRIEN-MOENNOE.json => ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_AIRIEN-MOENNOE.json} (74%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FATIHA-FAJR.json => ID_NL-UT-ZEI_197X_NL-UT-UTR_XXXX_FATIHA-FAJR.json} (65%) rename data/person/{ID_XX-XX-XXX_193X_XX-XX-XXX_XXXX_HENK-HAAS.json => ID_NL-ZH-DEL_193X_XX-XX-XXX_XXXX_HENK-HAAS.json} (70%) rename data/person/{ID_XX-XX-XXX_196X_NL-ZH-DOR_XXXX_ERIK-BERGH.json => ID_NL-ZH-DEL_196X_NL-ZH-DOR_XXXX_ERIK-BERGH.json} (72%) rename data/person/{ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_WILLEMIJN-TIL.json => ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_WILLEMIJN-TIL.json} (68%) rename data/person/{ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_JONAS-PIJNENBURG.json => ID_NL-ZH-DEL_198X_NL-NH-AMS_XXXX_JONAS-PIJNENBURG.json} (91%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MYLENE-SILVA.json => ID_NL-ZH-DOR_198X_XX-XX-XXX_XXXX_MYLENE-SILVA.json} (66%) rename data/person/{ID_XX-XX-XXX_195X_NL-GE-APE_XXXX_RON-ELSINGA.json => ID_NL-ZH-LEI_195X_NL-GE-APE_XXXX_RON-ELSINGA.json} (80%) rename data/person/{ID_XX-XX-XXX_196X_NL-GE-GEN_XXXX_CAROLINE-SCHAEFFER.json => ID_NL-ZH-LEI_196X_NL-GE-GEN_XXXX_CAROLINE-SCHAEFFER.json} (77%) rename data/person/{ID_XX-XX-XXX_196X_NL-NH-ZAA_XXXX_WILMAR-TAAL.json => ID_NL-ZH-LEI_196X_NL-NH-ZAA_XXXX_WILMAR-TAAL.json} (71%) rename data/person/{ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_FREDERIQUE-SYBRANDI.json => ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_FREDERIQUE-SYBRANDI.json} (72%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ADRIANA-ARELLANO.json => ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_ADRIANA-ARELLANO.json} (77%) rename data/person/{ID_XX-XX-XXX_200X_NL-UT-UTR_XXXX_IRIS-BRANDTS.json => ID_NL-ZH-LEI_200X_NL-UT-UTR_XXXX_IRIS-BRANDTS.json} (60%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNETTE-VRIES.json => ID_NL-ZH-ROT_196X_XX-XX-XXX_XXXX_ANNETTE-VRIES.json} (63%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-RIJ_XXXX_BEHRANG-MOUSAVI.json => ID_NL-ZH-ROT_198X_NL-ZH-RIJ_XXXX_BEHRANG-MOUSAVI.json} (76%) rename data/person/{ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_JULIE-GROESEN.json => ID_NL-ZH-ROT_199X_NL-UT-UTR_XXXX_JULIE-GROESEN.json} (66%) rename data/person/{ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_MARJAN-HERSCHEIT.json => ID_NL-ZH-TH_197X_AT-09-VIE_XXXX_MARJAN-HERSCHEIT.json} (73%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_THOMAS-CASTRO.json => ID_NL-ZH-TH_197X_NL-NH-AMS_XXXX_THOMAS-CASTRO.json} (76%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PROF-MIERT.json => ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_PROF-MIERT.json} (71%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-LENDERS.json => ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_ANNE-LENDERS.json} (63%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ALEX-ALSEMGEEST.json => ID_NL-ZH-TH_199X_NL-NH-AMS_XXXX_ALEX-ALSEMGEEST.json} (68%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ANDREA-BERKELDER.json => ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_ANDREA-BERKELDER.json} (67%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RENSKE-ZEE.json => ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_RENSKE-ZEE.json} (75%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-WAD_XXXX_BELINDA-SLAAVERBOOM.json => ID_NL-ZH-TH_199X_NL-ZH-WAD_XXXX_BELINDA-SLAAVERBOOM.json} (62%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ARIE-GROEN.json => ID_NL-ZH-ZOE_198X_NL-ZH-TH_XXXX_ARIE-GROEN.json} (66%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JORUNN-HILDRE.json => ID_NO-12-OSL_198X_NO-12-OSL_XXXX_JORUNN-HILDRE.json} (59%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_YAEL-FRIED.json => ID_SE-26-STO_198X_SE-26-STO_XXXX_YAEL-FRIED.json} (52%) rename data/person/{ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JEROEN-GANKEMA.json => ID_TR-34-IST_198X_NL-ZH-TH_XXXX_JEROEN-GANKEMA.json} (66%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DEBBIE-CREMER.json => ID_TR-68-ANK_198X_XX-XX-XXX_XXXX_DEBBIE-CREMER.json} (68%) rename data/person/{ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_BENSU-YILDIRIM.json => ID_TR-68-ANK_199X_NL-NB-EIN_XXXX_BENSU-YILDIRIM.json} (78%) rename data/person/{ID_XX-XX-XXX_199X_NL-NB-VEL_XXXX_KAAN-ARSLAN.json => ID_TR-68-ANK_199X_NL-NB-VEL_XXXX_KAAN-ARSLAN.json} (71%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GOWTHAM-SIVAKUMAR.json => ID_US-IA-AME_199X_US-CT-STA_XXXX_GOWTHAM-SIVAKUMAR.json} (64%) create mode 100644 data/person/ID_US-NC-UC_197X_US-CA-SF_XXXX_AARON-XIMM.json create mode 100644 data/person/ID_US-NY-NYC_195X_US-NY-NYC_XXXX_B-GEORGE.json rename data/person/{ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_EMILIE-GORDENKER.json => ID_US-NY-NYC_196X_XX-XX-XXX_XXXX_EMILIE-GORDENKER.json} (68%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-BITKINA.json => ID_US-NY-NYC_198X_XX-XX-XXX_XXXX_ANNA-BITKINA.json} (51%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARIA-PUZYREVA.json => ID_US-NY-NYC_199X_US-NJ-JC_XXXX_MARIA-PUZYREVA.json} (88%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MANJA-ZELDENRUST-manja_zeldenrust_31475912.json => ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_MANJA-ZELDENRUST.json} (51%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_WIM-HIJDRA.json => ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_WIM-HIJDRA.json} (65%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BREWSTER-KAHLE.json => ID_XX-XX-XXX_195X_US-CA-SF_XXXX_BREWSTER-KAHLE.json} (58%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NB-BRE_XXXX_BERT-SCHUUR.json => ID_XX-XX-XXX_196X_NL-NB-BRE_XXXX_BERT-SCHUUR.json} (60%) create mode 100644 data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_BENITA-JANSMA.json create mode 100644 data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ED-BIESTA.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JUDIKJE-KIERS.json => ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JUDIKJE-KIERS.json} (60%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARTIJN-EICKHOFF.json => ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MARTIJN-EICKHOFF.json} (60%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NICO-JONG.json => ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_NICO-JONG.json} (71%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUNITA-J.json => ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_SUNITA-J.json} (62%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DOUGLAS-ELFORD.json => ID_XX-XX-XXX_197X_AU-01-CAN_XXXX_DOUGLAS-ELFORD.json} (69%) rename data/person/{ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MELANIE-BROWN.json => ID_XX-XX-XXX_197X_AU-01-CAN_XXXX_MELANIE-BROWN.json} (74%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_QUINTA-KOOLS.json => ID_XX-XX-XXX_197X_NL-NB-TIL_XXXX_QUINTA-KOOLS.json} (71%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JANWILLEM-SWANE.json => ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JANWILLEM-SWANE.json} (69%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-HAA_XXXX_SIMONE-ELST.json => ID_XX-XX-XXX_197X_NL-NH-HAA_XXXX_SIMONE-ELST.json} (51%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-BIL_XXXX_SJOERI-JONKERS.json => ID_XX-XX-XXX_197X_NL-UT-BIL_XXXX_SJOERI-JONKERS.json} (68%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-WOE_XXXX_KEES-THEUNIS.json => ID_XX-XX-XXX_197X_NL-UT-WOE_XXXX_KEES-THEUNIS.json} (77%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-AAD_XXXX_ALIDA-OPPERS.json => ID_XX-XX-XXX_197X_NL-ZH-AAD_XXXX_ALIDA-OPPERS.json} (77%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_HENRI-HEIJDEN.json => ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_HENRI-HEIJDEN.json} (68%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RUTGER-STOLK.json => ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_RUTGER-STOLK.json} (55%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_STAGECO-BZ.json => ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_STAGECO-BZ.json} (56%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEXIS-ROSSI.json => ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ALEXIS-ROSSI.json} (67%) create mode 100644 data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ARNO-DIETEREN.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DANA-PORATH.json => ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DANA-PORATH.json} (61%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DANIEL-LUIPEN.json => ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DANIEL-LUIPEN.json} (51%) create mode 100644 data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HENK-WEVER.json create mode 100644 data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIHAELA-GOLBAN.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MINOUCHE-BOR.json => ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MINOUCHE-BOR.json} (66%) create mode 100644 data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROB-WILLIS.json create mode 100644 data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_BADRA-KARUNARATHNA.json rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CARMEL-MCINERNY.json => ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_CARMEL-MCINERNY.json} (68%) create mode 100644 data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_GREGORY-DOWNTON.json rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LONI-HOFFMANN.json => ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_LONI-HOFFMANN.json} (73%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SNEZANA-MIHAJILOVIC.json => ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_SNEZANA-MIHAJILOVIC.json} (67%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIEKE-ATIKAH.json => ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_TIEKE-ATIKAH.json} (68%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_WAN-WONG.json => ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_WAN-WONG.json} (70%) rename data/person/{ID_XX-XX-XXX_XXXX_BE-VL-BAS_XXXX_TOM-COBBAERT.json => ID_XX-XX-XXX_198X_BE-VL-BAS_XXXX_TOM-COBBAERT.json} (77%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_YESHI-CHEN.json => ID_XX-XX-XXX_198X_CN-14-CHI_XXXX_YESHI-CHEN.json} (77%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICHAL-FRANKL.json => ID_XX-XX-XXX_198X_CZ-52-PRA_XXXX_MICHAL-FRANKL.json} (89%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HAVIZ-NUGROHO.json => ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_HAVIZ-NUGROHO.json} (71%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RADI-MANGGALA.json => ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_RADI-MANGGALA.json} (74%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENDI-RUSGIAN.json => ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_RENDI-RUSGIAN.json} (77%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUDY-SANTOSO.json => ID_XX-XX-XXX_198X_ID-30-BAN_XXXX_RUDY-SANTOSO.json} (69%) rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DESSY-WIDOWATI.json => ID_XX-XX-XXX_198X_ID-33-BAN_XXXX_DESSY-WIDOWATI.json} (69%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-FL-AS_XXXX_MAUREEN-CHANNOO.json => ID_XX-XX-XXX_198X_NL-FL-AS_XXXX_MAUREEN-CHANNOO.json} (74%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-GE-VEL_XXXX_MARIAN-WISSENBURG.json => ID_XX-XX-XXX_198X_NL-GE-VEL_XXXX_MARIAN-WISSENBURG.json} (52%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NB-BRE_XXXX_MIRJAM-STRAATMAN.json => ID_XX-XX-XXX_198X_NL-NB-BRE_XXXX_MIRJAM-STRAATMAN.json} (64%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_SINATRA-KHO.json => ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_SINATRA-KHO.json} (50%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_HAROLD-MIERLO.json => ID_XX-XX-XXX_198X_NL-NB-TIL_XXXX_HAROLD-MIERLO.json} (50%) create mode 100644 data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_M-KLIJNHUISMAN.json rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MARGOT-SCHINKEL.json => ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MARGOT-SCHINKEL.json} (52%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ROB-HOVEMANN.json => ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ROB-HOVEMANN.json} (60%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_RON-VALKEN.json => ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_RON-VALKEN.json} (62%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FANNY-VERWOERDT.json => ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_FANNY-VERWOERDT.json} (87%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MICHELLE-WAL.json => ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_MICHELLE-WAL.json} (63%) create mode 100644 data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_INGRID-COLERIDGE.json rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_JANNEKE-WEEGEN.json => ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JANNEKE-WEEGEN.json} (66%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-FREELAND.json => ID_XX-XX-XXX_198X_US-MO-SL_XXXX_CHRIS-FREELAND.json} (57%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ATLAS-MCLAMB.json => ID_XX-XX-XXX_198X_US-NC-DUR_XXXX_ATLAS-MCLAMB.json} (50%) create mode 100644 data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ABEER-BEHBEHANI.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANJA-OSKAMP.json => ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANJA-OSKAMP.json} (61%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARJAN-VOSKUILEN.json => ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARJAN-VOSKUILEN.json} (68%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARTHUR-APONN.json => ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARTHUR-APONN.json} (53%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CAITLIN-OLSON.json => ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CAITLIN-OLSON.json} (67%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHANTAL-HARTMAN.json => ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHANTAL-HARTMAN.json} (63%) create mode 100644 data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHRIS-ZIELSTRA.json create mode 100644 data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DEBBIE-COX.json rename data/person/{ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HERLINA-HERLINA.json => ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HASAN-KUMAS.json} (57%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LORAINE-BROKELMAN.json => ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LORAINE-BROKELMAN.json} (69%) create mode 100644 data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARGA-THIJM.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MICKEY-VALKENBURGWARINGA.json => ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICKEY-VALKENBURGWARINGA.json} (67%) create mode 100644 data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MIRCESCU-AURELIA.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROEL-HORSTINK.json => ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROEL-HORSTINK.json} (56%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RUUD-LANGE.json => ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUUD-LANGE.json} (54%) create mode 100644 data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SUZI-VARGA.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SVEN-BONTJE.json => ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SVEN-BONTJE.json} (66%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GUY-HANSEN.json => ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_GUY-HANSEN.json} (67%) create mode 100644 data/person/ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_JEMMA-POSCH.json rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NICOLE-SCHWIRTLICH.json => ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_NICOLE-SCHWIRTLICH.json} (77%) create mode 100644 data/person/ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_PHILLIP-HALLIDAY.json rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GIANG-PHAM.json => ID_XX-XX-XXX_199X_AU-05-AP_XXXX_GIANG-PHAM.json} (90%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NINO-DIVITO.json => ID_XX-XX-XXX_199X_AU-05-AP_XXXX_NINO-DIVITO.json} (68%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ARYA-ANINDITA.json => ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_ARYA-ANINDITA.json} (72%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FARISAH-SHADRINA.json => ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_FARISAH-SHADRINA.json} (74%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KRISHNI-HANDAYANI.json => ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_KRISHNI-HANDAYANI.json} (89%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BULAN-ASTUTI.json => ID_XX-XX-XXX_199X_ID-33-BAN_XXXX_BULAN-ASTUTI.json} (68%) rename data/person/{ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DIAH-HASANAH.json => ID_XX-XX-XXX_199X_ID-33-TAN_XXXX_DIAH-HASANAH.json} (70%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-FL-SWI_XXXX_LIDY-KUTSCHRUITER.json => ID_XX-XX-XXX_199X_NL-FL-SWI_XXXX_LIDY-KUTSCHRUITER.json} (73%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_ELLES-DIJKEN.json => ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_ELLES-DIJKEN.json} (53%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-GE-ELB_XXXX_LISANNE-HUISMAN.json => ID_XX-XX-XXX_199X_NL-GE-ELB_XXXX_LISANNE-HUISMAN.json} (79%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_WOUTER-GASTER.json => ID_XX-XX-XXX_199X_NL-GE-NIJ_XXXX_WOUTER-GASTER.json} (75%) create mode 100644 data/person/ID_XX-XX-XXX_199X_NL-GE-WAG_XXXX_NANNE-GROOT.json create mode 100644 data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_MALOU-HARMELEN.json rename data/person/{ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_RUBEN-KOLFSCHOTEN.json => ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_RUBEN-KOLFSCHOTEN.json} (52%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CAROLA-WIJK.json => ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CAROLA-WIJK.json} (62%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CATHERINE-WOLFS.json => ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CATHERINE-WOLFS.json} (64%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MYRA-KRAMER.json => ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MYRA-KRAMER.json} (51%) create mode 100644 data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_PAUL-POST.json rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-NIE_XXXX_MIRJAM-BERG.json => ID_XX-XX-XXX_199X_NL-UT-NIE_XXXX_MIRJAM-BERG.json} (61%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARIEKE-WENTINK.json => ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_MARIEKE-WENTINK.json} (60%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-WBD_XXXX_JOKE-PUTTEN.json => ID_XX-XX-XXX_199X_NL-UT-WBD_XXXX_JOKE-PUTTEN.json} (61%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-ZEI_XXXX_ROCHELLE-GOUDEAU.json => ID_XX-XX-XXX_199X_NL-UT-ZEI_XXXX_ROCHELLE-GOUDEAU.json} (74%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-DEL_XXXX_VICTOR-K.json => ID_XX-XX-XXX_199X_NL-ZH-DEL_XXXX_VICTOR-K.json} (50%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_FINN-LEDEN.json => ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_FINN-LEDEN.json} (60%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_JOOP-BLEIJSWIJK.json => ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_JOOP-BLEIJSWIJK.json} (53%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-ZWI_XXXX_ARIEJAN-PRINS.json => ID_XX-XX-XXX_199X_NL-ZH-ZWI_XXXX_ARIEJAN-PRINS.json} (54%) create mode 100644 data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CORRIE-PERDOK.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DAGMAR-BERBEN.json => ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DAGMAR-BERBEN.json} (52%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FEMKE-S.json => ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FEMKE-S.json} (69%) create mode 100644 data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FRANK-PEETERS.json create mode 100644 data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HOORIEH-SAEIDI.json create mode 100644 data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JAN-HOND.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NOURA-AKDI.json => ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NOURA-AKDI.json} (67%) create mode 100644 data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROBERT-WESTERHOF.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TANITHA-GANGEL.json => ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TANITHA-GANGEL.json} (64%) create mode 100644 data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VINCENT-KAMP.json create mode 100644 data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VIOLETTA-RIJTHOVEN.json create mode 100644 data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_WILMA-SIGTERMANS.json create mode 100644 data/person/ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_ISOBEL-JOHNSTONE.json rename data/person/{ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARIUSZ-KALINOWSKI.json => ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_MARIUSZ-KALINOWSKI.json} (68%) create mode 100644 data/person/ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_SNEZANA-MIHAJLOVIC.json create mode 100644 data/person/ID_XX-XX-XXX_200X_AU-05-AP_XXXX_JENNY-OSTINI.json create mode 100644 data/person/ID_XX-XX-XXX_200X_ID-04-JAK_XXXX_ASTRI-PUSPITA.json rename data/person/{ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_FRED-VERSCHOOR.json => ID_XX-XX-XXX_200X_NL-GE-ARN_XXXX_FRED-VERSCHOOR.json} (51%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_GERARD-OENE.json => ID_XX-XX-XXX_200X_NL-GE-ARN_XXXX_GERARD-OENE.json} (58%) create mode 100644 data/person/ID_XX-XX-XXX_200X_NL-GE-NIJ_XXXX_MARTIN-BERGSMA.json rename data/person/{ID_XX-XX-XXX_XXXX_NL-NB-'S-_XXXX_MAARTEN-FOLKERS.json => ID_XX-XX-XXX_200X_NL-NB-'S-_XXXX_MAARTEN-FOLKERS.json} (64%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_JOHN-KIESEBRINK.json => ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_JOHN-KIESEBRINK.json} (52%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_SJALINA-RA.json => ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_SJALINA-RA.json} (67%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_SOPHIE-HURK.json => ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_SOPHIE-HURK.json} (79%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_LISANNE-LAAT.json => ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_LISANNE-LAAT.json} (53%) create mode 100644 data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD.json rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MARA-BOVIATSI.json => ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MARA-BOVIATSI.json} (63%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MELISSA-DAUGHERTY.json => ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MELISSA-DAUGHERTY.json} (50%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MERLIJN-RIKKEN.json => ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MERLIJN-RIKKEN.json} (73%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-HAA_XXXX_DORETH-OOSTERBAAN.json => ID_XX-XX-XXX_200X_NL-NH-HAA_XXXX_DORETH-OOSTERBAAN.json} (51%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-OV-DEV_XXXX_WILCO-VELDWIJK.json => ID_XX-XX-XXX_200X_NL-OV-DEV_XXXX_WILCO-VELDWIJK.json} (51%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-OV-DEV_XXXX_YVONNE-TILBURG.json => ID_XX-XX-XXX_200X_NL-OV-DEV_XXXX_YVONNE-TILBURG.json} (55%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-UT-WOE_XXXX_EUNICE-PELTKLEINJAN.json => ID_XX-XX-XXX_200X_NL-UT-WOE_XXXX_EUNICE-PELTKLEINJAN.json} (66%) create mode 100644 data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_EMMEKE-HULSHOF.json rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_EVELYNE-SCHUURMANS.json => ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_EVELYNE-SCHUURMANS.json} (52%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_GERRY-KLINKEN.json => ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_GERRY-KLINKEN.json} (51%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_PIETER-BIERMA.json => ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_PIETER-BIERMA.json} (50%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RACHEL-KOEHOORN.json => ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_RACHEL-KOEHOORN.json} (78%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-ZH-ZOE_XXXX_HILDE-HAIGHTONONGERING.json => ID_XX-XX-XXX_200X_NL-ZH-ZOE_XXXX_HILDE-HAIGHTONONGERING.json} (51%) create mode 100644 data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BAS-BEEKHUIS.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHEN-MALUL.json => ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_CHEN-MALUL.json} (60%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EFFI-NEUMANN.json => ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_EFFI-NEUMANN.json} (54%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EKHTIAR-SYED.json => ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_EKHTIAR-SYED.json} (52%) create mode 100644 data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ILSE-SEVERIJNEN.json create mode 100644 data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JOLANDE-T.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LIANNA-SARKISIAN.json => ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_LIANNA-SARKISIAN.json} (54%) create mode 100644 data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARCO-HESSELINK.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARJOLEIN-JEGERINGS.json => ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARJOLEIN-JEGERINGS.json} (50%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARK-DWARSWAARD.json => ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARK-DWARSWAARD.json} (59%) create mode 100644 data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MAYA-T.json create mode 100644 data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MIEKE-VOS.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PIETER-ROELOFS.json => ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_PIETER-ROELOFS.json} (60%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TIJN-DONNERS.json => ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_TIJN-DONNERS.json} (64%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_PAUL-POST.json => ID_XX-XX-XXX_XXXX_AT-09-VIE_XXXX_HERBERT-SOMPEL.json} (52%) create mode 100644 data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_DAVID-PEARSON.json create mode 100644 data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_JAN-FULLERTON.json create mode 100644 data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_JASMIN-CAMERON.json rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD.json => ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MARK-CORBOULD.json} (51%) create mode 100644 data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MELANIE-SORENSON.json rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BENITA-JANSMA.json => ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MICHELE-HUSTON.json} (51%) create mode 100644 data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_PAM-GATENBY.json create mode 100644 data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_PE-ZAR.json create mode 100644 data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_QUENTIN-SLADE.json create mode 100644 data/person/ID_XX-XX-XXX_XXXX_AU-04-RR_XXXX_BRENTON-CLIFFORD.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANDREA-MILLS.json => ID_XX-XX-XXX_XXXX_CA-08-TOR_XXXX_ANDREA-MILLS.json} (69%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANGELA-DUGAS.json => ID_XX-XX-XXX_XXXX_CA-08-TOR_XXXX_ANGELA-DUGAS.json} (60%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_MARTIN-BERGSMA.json => ID_XX-XX-XXX_XXXX_GB-EN-OSM_XXXX_RACHEL-PISTOL.json} (52%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ACHMAD-QORI.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ACHMAD-QORI.json} (62%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADHIMAS-SUSILO.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ADHIMAS-SUSILO.json} (61%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADITIAN-PRATAMA.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ADITIAN-PRATAMA.json} (65%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AHMAD-ZUFAR.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AHMAD-ZUFAR.json} (62%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALI-FAJAR.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ALI-FAJAR.json} (64%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMARA-PUTRI.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AMARA-PUTRI.json} (61%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMBIYA-ADJI.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AMBIYA-ADJI.json} (60%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANANTA-YOGA.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANANTA-YOGA.json} (60%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANITA-JANNAH.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANITA-JANNAH.json} (60%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNISA-HUSNA.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANNISA-HUSNA.json} (63%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANWAR-ASYRAF.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANWAR-ASYRAF.json} (62%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARI-SETIAWAN.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARI-SETIAWAN.json} (60%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARIF-JANUAR.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARIF-JANUAR.json} (60%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARINDITHA-PUTRI.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARINDITHA-PUTRI.json} (68%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARVIA-EARWANTAMA.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARVIA-EARWANTAMA.json} (62%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AULIA-PRAMESTI.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AULIA-PRAMESTI.json} (71%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAMBANG-UTOMO.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BAMBANG-UTOMO.json} (58%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAYU-TANOYO.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BAYU-TANOYO.json} (64%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BELLA-MALISSA.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BELLA-MALISSA.json} (61%) rename data/person/{ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_M-KLIJNHUISMAN.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_DADY-RACHMANANTA.json} (51%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HAKIM-HAKIM.json => ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_HAKIM-HAKIM.json} (52%) create mode 100644 data/person/ID_XX-XX-XXX_XXXX_ID-30-BAN_XXXX_TSAMARA-NUGRAHA.json rename data/person/{ID_XX-XX-XXX_XXXX_NL-GE-WAG_XXXX_NANNE-GROOT.json => ID_XX-XX-XXX_XXXX_ID-33-BAN_XXXX_DEDDY-KRISTIAN.json} (51%) delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_EMMEKE-HULSHOF.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_INGRID-COLERIDGE.json rename data/person/{ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_MALOU-HARMELEN.json => ID_XX-XX-XXX_XXXX_NO-09-NOR_XXXX_KIRSTEN-RYDLAND.json} (52%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MEHMET-YIRTAR.json => ID_XX-XX-XXX_XXXX_TR-68-ANK_XXXX_MEHMET-YIRTAR.json} (51%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ISA-HERICOVELASCO.json => ID_XX-XX-XXX_XXXX_US-CA-CC_XXXX_ISA-HERICOVELASCO.json} (61%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADAM-MILLER.json => ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ADAM-MILLER.json} (54%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEX-DEMPSEY.json => ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ALEX-DEMPSEY.json} (69%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDA-BARRETT.json => ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMANDA-BARRETT.json} (57%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDARI-KARACA.json => ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMANDARI-KARACA.json} (58%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMIR-ESFAHANI.json => ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMIR-ESFAHANI.json} (58%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANISH-SARANGI.json => ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ANISH-SARANGI.json} (58%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JONATHAN-MARTINEZ.json => ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_JONATHAN-MARTINEZ.json} (56%) create mode 100644 data/person/ID_XX-XX-XXX_XXXX_US-NY-NYC_XXXX_DERIS-NAGARA.json rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDA-MCCABE.json => ID_XX-XX-XXX_XXXX_US-WA-SEA_XXXX_AMANDA-MCCABE.json} (67%) rename data/person/{ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-TRAMMELL.json => ID_XX-XX-XXX_XXXX_US-WA-TAC_XXXX_ANNA-TRAMMELL.json} (64%) delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AARON-XIMM.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ABEER-BEHBEHANI.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALBERT-REIJNEN.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNISA-FADIAH.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNO-DIETEREN-arno_dieteren_37914a30.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ASTRI-PUSPITA.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_B-GEORGE.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BADRA-KARUNARATHNA.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAS-BEEKHUIS.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BRENTON-CLIFFORD.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-ZIELSTRA.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CORRIE-PERDOK.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DADY-RACHMANANTA.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DAVID-PEARSON.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DEBBIE-COX.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DEDDY-KRISTIAN.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DERIS-NAGARA.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ED-BIESTA.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FRANK-PEETERS.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GREGORY-DOWNTON.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HASAN-KUMAS.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HENK-WEVER.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HERBERT-SOMPEL.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HOORIEH-SAEIDI.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ILSE-SEVERIJNEN.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ISOBEL-JOHNSTONE.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAN-FULLERTON.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAN-HOND.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JASMIN-CAMERON.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JEMMA-POSCH.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JENNY-OSTINI.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JOLANDE-T.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_KIRSTEN-RYDLAND.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARCO-HESSELINK.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARGA-THIJM.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARK-CORBOULD.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MAYA-T.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MELANIE-SORENSON.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MICHELE-HUSTON.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIEKE-VOS.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIHAELA-GOLBAN.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIRCESCU-AURELIA.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PAM-GATENBY.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PE-ZAR.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PHILLIP-HALLIDAY.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_QUENTIN-SLADE.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RACHEL-PISTOL.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROB-WILLIS.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROBERT-WESTERHOF.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SNEZANA-MIHAJLOVIC.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUZI-VARGA.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TSAMARA-NUGRAHA.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VINCENT-KAMP.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VIOLETTA-RIJTHOVEN.json delete mode 100644 data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_WILMA-SIGTERMANS.json rename data/person/{ID_XX-XX-XXX_200X_NL-NB-VEL_XXXX_MATTHEW-THORBURN.json => ID_ZA-11-CT_200X_NL-NB-VEL_XXXX_MATTHEW-THORBURN.json} (67%) diff --git a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_KEVIN-BRADLEY.json b/data/person/ID_AU-01-CAN_195X_AU-01-CAN_XXXX_KEVIN-BRADLEY.json similarity index 68% rename from data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_KEVIN-BRADLEY.json rename to data/person/ID_AU-01-CAN_195X_AU-01-CAN_XXXX_KEVIN-BRADLEY.json index 1954d32a6d..bc70e94010 100644 --- a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_KEVIN-BRADLEY.json +++ b/data/person/ID_AU-01-CAN_195X_AU-01-CAN_XXXX_KEVIN-BRADLEY.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_KEVIN-BRADLEY", + "ppid": "ID_AU-01-CAN_195X_AU-01-CAN_XXXX_KEVIN-BRADLEY", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "195X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "KEVIN", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Kevin Bradley", @@ -170,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kevin-bradley-psm-3127a41b_20251214T103753Z.json" ], - "modified_at": "2026-01-09T19:18:15.682586+00:00", + "modified_at": "2026-01-09T19:51:13.413292+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kevin-bradley-psm-3127a41b", @@ -183,6 +185,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_KEVIN-BRADLEY", + "new_ppid": "ID_AU-01-CAN_195X_AU-01-CAN_XXXX_KEVIN-BRADLEY", + "changed_at": "2026-01-09T19:51:13.413290+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -197,7 +210,7 @@ "primary_rationale": "1957 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +259,129 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1957 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.682549+00:00", + "inferred_at": "2026-01-09T19:51:13.399317+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Gilet Guitars", + "title": "Luthier", + "date_range": "Oct 1980 - Dec 1982 • 2 years and 2 months", + "location": "Sydney" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Sound Archivist", + "date_range": "Jan 1983 - Dec 1992 • 9 years and 11 months", + "location": "Canberra, Australia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:13.406724+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:13.413275+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GIANOULA-BURNS.json b/data/person/ID_AU-01-CAN_196X_AU-01-CAN_XXXX_GIANOULA-BURNS.json similarity index 63% rename from data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GIANOULA-BURNS.json rename to data/person/ID_AU-01-CAN_196X_AU-01-CAN_XXXX_GIANOULA-BURNS.json index 506edbae6d..4ce01ef648 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GIANOULA-BURNS.json +++ b/data/person/ID_AU-01-CAN_196X_AU-01-CAN_XXXX_GIANOULA-BURNS.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GIANOULA-BURNS", + "ppid": "ID_AU-01-CAN_196X_AU-01-CAN_XXXX_GIANOULA-BURNS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "196X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "GIANOULA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Gianoula Burns", @@ -131,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gianoula-burns-018272112_20251214T103915Z.json" ], - "modified_at": "2026-01-09T19:18:13.790376+00:00", + "modified_at": "2026-01-09T19:50:56.583015+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gianoula-burns-018272112", @@ -144,6 +146,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GIANOULA-BURNS", + "new_ppid": "ID_AU-01-CAN_196X_AU-01-CAN_XXXX_GIANOULA-BURNS", + "changed_at": "2026-01-09T19:50:56.583013+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -158,7 +171,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +220,129 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.790327+00:00", + "inferred_at": "2026-01-09T19:50:56.573148+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Country Energy", + "title": "HRD Consultant", + "date_range": "Feb 1997 - Jul 1999 • 2 years and 5 months", + "location": "Queanbeyan" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "ANU Enterprise", + "title": "Senior HR Manager", + "date_range": "Aug 1999 - Apr 2000 • 8 months", + "location": "Canberra, Australia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:56.578215+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:56.583005+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_VERA-DUNN.json b/data/person/ID_AU-01-CAN_196X_AU-01-CAN_XXXX_VERA-DUNN.json similarity index 62% rename from data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_VERA-DUNN.json rename to data/person/ID_AU-01-CAN_196X_AU-01-CAN_XXXX_VERA-DUNN.json index ebcf9277ce..f45255a7a3 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_VERA-DUNN.json +++ b/data/person/ID_AU-01-CAN_196X_AU-01-CAN_XXXX_VERA-DUNN.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_VERA-DUNN", + "ppid": "ID_AU-01-CAN_196X_AU-01-CAN_XXXX_VERA-DUNN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "196X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "VERA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Vera Dunn", @@ -135,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vera-dunn-5575a127_20251214T103803Z.json" ], - "modified_at": "2026-01-09T19:18:13.075254+00:00", + "modified_at": "2026-01-09T19:50:51.037273+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vera-dunn-5575a127", @@ -148,6 +150,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_VERA-DUNN", + "new_ppid": "ID_AU-01-CAN_196X_AU-01-CAN_XXXX_VERA-DUNN", + "changed_at": "2026-01-09T19:50:51.037270+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -162,7 +175,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +224,129 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.075227+00:00", + "inferred_at": "2026-01-09T19:50:51.023125+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Collection Development Librarian, Overseas Collections", + "date_range": "Nov 2002 - Jan 2014 • 11 years and 2 months", + "location": "Pacific specialist" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Contributor Liaison Officer (APS6), Australian Newspaper Digitisation Program", + "date_range": "Feb 2014 - Aug 2014 • 6 months", + "location": "Canberra, Australia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:51.028647+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:51.037254+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CATHERINE-ALDERSEY.json b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_CATHERINE-ALDERSEY.json similarity index 57% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CATHERINE-ALDERSEY.json rename to data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_CATHERINE-ALDERSEY.json index 7f909ad9a4..eef90e24e1 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CATHERINE-ALDERSEY.json +++ b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_CATHERINE-ALDERSEY.json @@ -1,17 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CATHERINE-ALDERSEY", + "ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_CATHERINE-ALDERSEY", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "CATHERINE", "ALDERSEY" ], - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Catherine Aldersey", @@ -113,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/catherine-aldersey-a0b56914_20251214T103937Z.json" ], - "modified_at": "2026-01-09T19:18:14.008164+00:00", + "modified_at": "2026-01-09T19:50:58.061567+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "catherine-aldersey-a0b56914", @@ -126,6 +128,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CATHERINE-ALDERSEY", + "new_ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_CATHERINE-ALDERSEY", + "changed_at": "2026-01-09T19:50:58.061564+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -134,7 +147,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +188,118 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.008118+00:00", + "inferred_at": "2026-01-09T19:50:58.048315+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Manuscripts Acquisitions", + "date_range": "Oct 2018 - Nov 2020 • 2 years and 1 month", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:58.053584+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:58.061549+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_COLETTE-LILLE.json b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_COLETTE-LILLE.json similarity index 56% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_COLETTE-LILLE.json rename to data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_COLETTE-LILLE.json index 1ba5ef7d00..0b6f7d7b59 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_COLETTE-LILLE.json +++ b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_COLETTE-LILLE.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_COLETTE-LILLE", + "ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_COLETTE-LILLE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "COLETTE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Colette van Lille", @@ -107,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/colette-van-lille-9132358_20251214T103803Z.json" ], - "modified_at": "2026-01-09T19:18:17.842988+00:00", + "modified_at": "2026-01-09T19:50:48.415993+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "colette-van-lille-9132358", @@ -129,6 +131,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_COLETTE-LILLE", + "new_ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_COLETTE-LILLE", + "changed_at": "2026-01-09T19:50:48.415989+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -143,7 +156,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +205,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.842888+00:00", + "inferred_at": "2026-01-09T19:50:48.281478+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The Australian National University", + "date_range": "1990 - 1995 • 5 years", + "degree": "" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The Australian National University", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:48.410700+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:48.415973+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CONOR-MCCARTHY.json b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_CONOR-MCCARTHY.json similarity index 61% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CONOR-MCCARTHY.json rename to data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_CONOR-MCCARTHY.json index 420a0cab78..752481878d 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CONOR-MCCARTHY.json +++ b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_CONOR-MCCARTHY.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CONOR-MCCARTHY", + "ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_CONOR-MCCARTHY", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "CONOR", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Conor McCarthy", @@ -142,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/conor-mccarthy-23914913_20251214T103930Z.json" ], - "modified_at": "2026-01-09T19:18:15.832961+00:00", + "modified_at": "2026-01-09T19:51:14.523551+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "conor-mccarthy-23914913", @@ -155,6 +157,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CONOR-MCCARTHY", + "new_ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_CONOR-MCCARTHY", + "changed_at": "2026-01-09T19:51:14.523549+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -169,7 +182,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +231,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.832912+00:00", + "inferred_at": "2026-01-09T19:51:14.513309+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Director Of Philanthropy", + "date_range": "Dec 2019 - Present • 5 years and 11 months", + "location": "Canberra, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:14.518295+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:14.523539+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DAVID-WONG.json b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_DAVID-WONG.json similarity index 54% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DAVID-WONG.json rename to data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_DAVID-WONG.json index 1a21c1e6b9..29ead9f8f8 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DAVID-WONG.json +++ b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_DAVID-WONG.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DAVID-WONG", + "ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_DAVID-WONG", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "DAVID", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "David Wong", @@ -153,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/davidwong6_20251214T103836Z.json" ], - "modified_at": "2026-01-09T19:18:13.876337+00:00", + "modified_at": "2026-01-09T19:50:56.750253+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "davidwong6", @@ -166,6 +168,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DAVID-WONG", + "new_ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_DAVID-WONG", + "changed_at": "2026-01-09T19:50:56.750250+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -180,7 +193,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +242,173 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.876301+00:00", + "inferred_at": "2026-01-09T19:50:56.732811+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "ObjectMastery", + "title": "Software Engineer", + "date_range": "Jan 2000 - Jul 2001 • 1 year and 6 months", + "location": "Financial Services" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Department of Defence of Australia", + "title": "E-Business Solutions Developer", + "date_range": "Apr 2002 - Oct 2003 • 1 year and 6 months", + "location": "Corporate Services and Infrastructure Group" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Applications Developer", + "date_range": "Nov 2003 - Aug 2005 • 1 year and 9 months", + "location": "Java and XML developer" + } + }, + { + "step": 4, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Team Leader", + "date_range": "Sep 2005 - Sep 2006 • 1 year", + "location": "Web archiving systems" + } + }, + { + "step": 5, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Department of Foreign Affairs and Trade", + "title": "Senior Applications Developer", + "date_range": "Sep 2006 - Sep 2007 • 1 year", + "location": "IBM WebSphere applications and infrastructure developer" + } + }, + { + "step": 6, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Chief Information Officer", + "date_range": "Oct 2015 - Present • 10 years and 1 month", + "location": "Canberra, Australia" + } + }, + { + "step": 7, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 8, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:56.744165+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:56.750234+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_FRANCIS-CRIMMINS.json b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_FRANCIS-CRIMMINS.json similarity index 62% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_FRANCIS-CRIMMINS.json rename to data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_FRANCIS-CRIMMINS.json index 87e1072b87..a1d034b9fb 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_FRANCIS-CRIMMINS.json +++ b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_FRANCIS-CRIMMINS.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_FRANCIS-CRIMMINS", + "ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_FRANCIS-CRIMMINS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "FRANCIS", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Francis Crimmins", @@ -143,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/franciscrimmins_20251214T103831Z.json" ], - "modified_at": "2026-01-09T19:18:16.776428+00:00", + "modified_at": "2026-01-09T19:50:58.703980+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "franciscrimmins", @@ -165,6 +167,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_FRANCIS-CRIMMINS", + "new_ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_FRANCIS-CRIMMINS", + "changed_at": "2026-01-09T19:50:58.703977+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -173,7 +186,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +227,118 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.776361+00:00", + "inferred_at": "2026-01-09T19:50:58.684345+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Funnelback Pty", + "title": "Senior Software Engineer", + "date_range": "Dec 2005 - Jul 2014 • 8 years and 7 months", + "location": "Canberra, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:58.690469+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:58.703961+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HEATHER-CLARK.json b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_HEATHER-CLARK.json similarity index 58% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HEATHER-CLARK.json rename to data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_HEATHER-CLARK.json index 26140e6ef9..9b22044a16 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HEATHER-CLARK.json +++ b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_HEATHER-CLARK.json @@ -1,17 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HEATHER-CLARK", + "ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_HEATHER-CLARK", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "HEATHER", "CLARK" ], - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Heather Clark", @@ -133,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/heather-clark-b9361998_20251214T103915Z.json" ], - "modified_at": "2026-01-09T19:18:13.147399+00:00", + "modified_at": "2026-01-09T19:50:52.961348+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "heather-clark-b9361998", @@ -146,6 +148,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HEATHER-CLARK", + "new_ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_HEATHER-CLARK", + "changed_at": "2026-01-09T19:50:52.961346+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -154,7 +167,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +208,130 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.147342+00:00", + "inferred_at": "2026-01-09T19:50:52.951190+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The Australian National University", + "date_range": "1993 - 1996 • 3 years", + "degree": "Bachelor's degree, Economics" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The Australian National University", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:52.956331+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:52.961336+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIBBY-CASS.json b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_LIBBY-CASS.json similarity index 59% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIBBY-CASS.json rename to data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_LIBBY-CASS.json index 9cac5b4626..18327e0f90 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIBBY-CASS.json +++ b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_LIBBY-CASS.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIBBY-CASS", + "ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_LIBBY-CASS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "LIBBY", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Libby Cass", @@ -140,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/libby-cass-88350521_20251214T103851Z.json" ], - "modified_at": "2026-01-09T19:18:15.306770+00:00", + "modified_at": "2026-01-09T19:51:08.497786+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "libby-cass-88350521", @@ -153,6 +155,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIBBY-CASS", + "new_ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_LIBBY-CASS", + "changed_at": "2026-01-09T19:51:08.497783+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -167,7 +180,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +229,129 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.306745+00:00", + "inferred_at": "2026-01-09T19:51:08.443484+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Migration Review Tribunal & Refugee Review Tribunal", + "title": "Library Manager", + "date_range": "Jan 1998 - Jan 2001 • 3 years", + "location": "Sydney" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Council of Australian University Librarians", + "title": "Communications And Policy Officer", + "date_range": "Mar 2013 - Feb 2014 • 11 months", + "location": "Canberra, Australia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:08.483910+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:08.497763+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARTIN-THOMAS.json b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_MARTIN-THOMAS.json similarity index 64% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARTIN-THOMAS.json rename to data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_MARTIN-THOMAS.json index 5a50e81016..c5e0a8de89 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARTIN-THOMAS.json +++ b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_MARTIN-THOMAS.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARTIN-THOMAS", + "ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_MARTIN-THOMAS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "MARTIN", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Martin Thomas", @@ -146,8 +148,10 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T00:27:00Z", + "result": "not_found", + "notes": "Exa search found a different Martin Thomas (born 1964 UK). The Australian ANU professor's birth date not found. Search query: \"Martin Thomas\" ANU professor history born birthday biography" } }, "provenance": { @@ -156,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martin-thomas-3a9857276_20251214T103906Z.json" ], - "modified_at": "2026-01-09T19:18:13.463291+00:00", + "modified_at": "2026-01-09T19:50:54.505339+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martin-thomas-3a9857276", @@ -169,6 +173,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARTIN-THOMAS", + "new_ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_MARTIN-THOMAS", + "changed_at": "2026-01-09T19:50:54.505337+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -183,7 +198,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +247,140 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.463241+00:00", + "inferred_at": "2026-01-09T19:50:54.476813+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Australian Broadcasting Corporation (ABC)", + "title": "Radio Producer", + "date_range": "Jun 1991 - Aug 2008 • 17 years and 2 months", + "location": "Sydney, New South Wales, Australia" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "University of Technology Sydney", + "title": "ARC Postdoctoral Fellow", + "date_range": "May 2001 - Apr 2004 • 2 years and 11 months", + "location": "Sydney, New South Wales, Australia" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Oral History Interviewer", + "date_range": "Jun 2003 - Present • 22 years and 5 months", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 4, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 5, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:54.499516+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:54.505325+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NICOLA-MACKAYSIM.json b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_NICOLA-MACKAYSIM.json similarity index 71% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NICOLA-MACKAYSIM.json rename to data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_NICOLA-MACKAYSIM.json index 5cd857bc23..48c3d47d5b 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NICOLA-MACKAYSIM.json +++ b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_NICOLA-MACKAYSIM.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NICOLA-MACKAYSIM", + "ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_NICOLA-MACKAYSIM", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "NICOLA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Nicola Mackay-Sim", @@ -183,7 +185,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicola-mackay-sim-45b4a447_20251214T103949Z.json" ], - "modified_at": "2026-01-09T19:18:15.667052+00:00", + "modified_at": "2026-01-09T19:51:13.387286+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicola-mackay-sim-45b4a447", @@ -196,6 +198,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NICOLA-MACKAYSIM", + "new_ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_NICOLA-MACKAYSIM", + "changed_at": "2026-01-09T19:51:13.387283+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -210,7 +223,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +272,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.667013+00:00", + "inferred_at": "2026-01-09T19:51:13.322048+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Gallery of Australia", + "title": "Research Assistant, Under A Southern Sun CD Rom Project", + "date_range": "Dec 1995 - Apr 1996 • 4 months", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:13.378361+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:13.387261+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SAOWAPHA-VIRAVONG.json b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_SAOWAPHA-VIRAVONG.json similarity index 52% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SAOWAPHA-VIRAVONG.json rename to data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_SAOWAPHA-VIRAVONG.json index 393d1a4e3e..6a0b4aab4b 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SAOWAPHA-VIRAVONG.json +++ b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_SAOWAPHA-VIRAVONG.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SAOWAPHA-VIRAVONG", + "ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_SAOWAPHA-VIRAVONG", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "SAOWAPHA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Saowapha Viravong", @@ -93,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sophieviravong_20251214T104011Z.json" ], - "modified_at": "2026-01-09T19:18:15.594453+00:00", + "modified_at": "2026-01-09T19:51:12.682975+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sophieviravong", @@ -106,6 +108,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SAOWAPHA-VIRAVONG", + "new_ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_SAOWAPHA-VIRAVONG", + "changed_at": "2026-01-09T19:51:12.682972+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -114,7 +127,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +168,130 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.594420+00:00", + "inferred_at": "2026-01-09T19:51:12.654209+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Canberra", + "date_range": "1996 - 1997 • 1 year", + "degree": "Grad Dip., Library Information Management" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Canberra", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:12.673600+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:12.682952+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SIMON-WALL.json b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_SIMON-WALL.json similarity index 63% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SIMON-WALL.json rename to data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_SIMON-WALL.json index 1b85c2f9e7..b07a4acd39 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SIMON-WALL.json +++ b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_SIMON-WALL.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SIMON-WALL", + "ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_SIMON-WALL", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "SIMON", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Simon Wall", @@ -160,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/simonjameswall_20251214T103759Z.json" ], - "modified_at": "2026-01-09T19:18:14.363743+00:00", + "modified_at": "2026-01-09T19:51:01.707156+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "simonjameswall", @@ -173,6 +175,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SIMON-WALL", + "new_ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_SIMON-WALL", + "changed_at": "2026-01-09T19:51:01.707154+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -187,7 +200,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +249,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.363714+00:00", + "inferred_at": "2026-01-09T19:51:01.659791+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Australian Bureau of Statistics", + "title": "Director (Metadata Infrastructure)", + "date_range": "Jan 2012 - Aug 2016 • 4 years and 7 months", + "location": "Canberra, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:01.701628+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:01.707141+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_THERDPUN-KLINJUN.json b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_THERDPUN-KLINJUN.json similarity index 72% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_THERDPUN-KLINJUN.json rename to data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_THERDPUN-KLINJUN.json index 62c8e9a9b3..9420f966d4 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_THERDPUN-KLINJUN.json +++ b/data/person/ID_AU-01-CAN_197X_AU-01-CAN_XXXX_THERDPUN-KLINJUN.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_THERDPUN-KLINJUN", + "ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_THERDPUN-KLINJUN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "THERDPUN", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Therdpun Klinjun", @@ -223,7 +225,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tklinjun_20251214T103754Z.json" ], - "modified_at": "2026-01-09T19:18:14.136631+00:00", + "modified_at": "2026-01-09T19:51:21.947891+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tklinjun", @@ -245,6 +247,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_THERDPUN-KLINJUN", + "new_ppid": "ID_AU-01-CAN_197X_AU-01-CAN_XXXX_THERDPUN-KLINJUN", + "changed_at": "2026-01-09T19:51:21.947889+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -253,7 +266,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -294,7 +307,130 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.136533+00:00", + "inferred_at": "2026-01-09T19:51:21.937671+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Canberra", + "date_range": "2006 - 2008 • 2 years", + "degree": "Graduate Diploma in Design and Technology, Landscape Architect" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Canberra", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:21.942893+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:21.947879+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RAMDAH-RADJAB.json b/data/person/ID_AU-01-CAN_197X_ID-17-PRA_XXXX_RAMDAH-RADJAB.json similarity index 56% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RAMDAH-RADJAB.json rename to data/person/ID_AU-01-CAN_197X_ID-17-PRA_XXXX_RAMDAH-RADJAB.json index 52f51b0226..5f59e132a1 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RAMDAH-RADJAB.json +++ b/data/person/ID_AU-01-CAN_197X_ID-17-PRA_XXXX_RAMDAH-RADJAB.json @@ -1,17 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RAMDAH-RADJAB", + "ppid": "ID_AU-01-CAN_197X_ID-17-PRA_XXXX_RAMDAH-RADJAB", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "ID-17-PRA", "last_date": "XXXX", "name_tokens": [ "RAMDAH", "RADJAB" ], - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Ramdah Radjab", @@ -134,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ramdah-radjab-23258a175_20251214T111934Z.json" ], - "modified_at": "2026-01-09T19:18:12.596253+00:00", + "modified_at": "2026-01-09T19:50:48.632124+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ramdah-radjab-23258a175", @@ -147,6 +149,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RAMDAH-RADJAB", + "new_ppid": "ID_AU-01-CAN_197X_ID-17-PRA_XXXX_RAMDAH-RADJAB", + "changed_at": "2026-01-09T19:50:48.632120+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -155,7 +168,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +209,140 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.596170+00:00", + "inferred_at": "2026-01-09T19:50:48.517998+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Canberra", + "date_range": "2006 - 2008 • 2 years", + "degree": "Master of Educational Leadership, Eucational Leadership, Post Graduate" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Canberra", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:48.524195+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Praya", + "formatted": "ID-17-PRA", + "country_code": "ID", + "region_code": "17", + "settlement_code": "PRA", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "West Nusa Tenggara, Indonesia (ID)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Food and Beverage Service Department", + "title": "Head Of Department", + "location": "Praya, West Nusa Tenggara, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Praya, West Nusa Tenggara, Indonesia", + "result": { + "geonames_id": 1630662, + "geonames_name": "Praya", + "admin1_code": "17", + "admin1_name": "West Nusa Tenggara", + "feature_code": "PPLA3", + "latitude": -8.70536, + "longitude": 116.27036 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-17-PRA" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 1630662, + "geonames_name": "Praya", + "admin1_code": "17", + "admin1_name": "West Nusa Tenggara", + "feature_code": "PPLA3", + "latitude": -8.70536, + "longitude": 116.27036 + }, + "inferred_at": "2026-01-09T19:50:48.632082+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ADITYA-BURRA.json b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ADITYA-BURRA.json similarity index 50% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ADITYA-BURRA.json rename to data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ADITYA-BURRA.json index 17cfb4432a..8d1a340668 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ADITYA-BURRA.json +++ b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ADITYA-BURRA.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ADITYA-BURRA", + "ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ADITYA-BURRA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "ADITYA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Aditya Burra", @@ -106,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aditya-burra-14098052_20251214T103831Z.json" ], - "modified_at": "2026-01-09T19:18:13.145525+00:00", + "modified_at": "2026-01-09T19:50:52.947590+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aditya-burra-14098052", @@ -119,6 +121,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ADITYA-BURRA", + "new_ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ADITYA-BURRA", + "changed_at": "2026-01-09T19:50:52.947587+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -133,7 +146,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +195,151 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.145504+00:00", + "inferred_at": "2026-01-09T19:50:52.796518+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "British Gas", + "title": "Senior Java Developer", + "date_range": "Oct 2010 - May 2013 • 2 years and 7 months", + "location": "Staines-Upon-Thames, United Kingdom" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Cognizant Technology Solutions", + "title": "Associate Projects", + "date_range": "Oct 2010 - Sep 2016 • 5 years and 11 months", + "location": "Staines-Upon-Thames, United Kingdom" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "British Gas", + "title": "Lead Developer", + "date_range": "Jun 2013 - Sep 2016 • 3 years and 3 months", + "location": "Staines-Upon-Thames, United Kingdom" + } + }, + { + "step": 4, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Java Consultant", + "date_range": "Nov 2016 - Present • 9 years", + "location": "Canberra, Australia" + } + }, + { + "step": 5, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 6, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:52.935690+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:52.947567+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ALISON-DELLIT.json b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ALISON-DELLIT.json similarity index 59% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ALISON-DELLIT.json rename to data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ALISON-DELLIT.json index 17d451d380..a785c5f18f 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ALISON-DELLIT.json +++ b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ALISON-DELLIT.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ALISON-DELLIT", + "ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ALISON-DELLIT", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "ALISON", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Alison Dellit", @@ -106,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alison-dellit-a575034_20251214T103840Z.json" ], - "modified_at": "2026-01-09T19:18:15.710720+00:00", + "modified_at": "2026-01-09T19:51:13.496689+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alison-dellit-a575034", @@ -119,6 +121,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ALISON-DELLIT", + "new_ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ALISON-DELLIT", + "changed_at": "2026-01-09T19:51:13.496687+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -133,7 +146,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +195,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.710701+00:00", + "inferred_at": "2026-01-09T19:51:13.482763+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Business Architect, Libraries Australia, National Library Of Australia", + "date_range": "Sep 2011 - Oct 2012 • 1 year and 1 month", + "location": "Canberra, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:13.487778+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:13.496673+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANTONIA-KASUNIC.json b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ANTONIA-KASUNIC.json similarity index 55% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANTONIA-KASUNIC.json rename to data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ANTONIA-KASUNIC.json index 9d31e17fb8..ec742c010a 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANTONIA-KASUNIC.json +++ b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ANTONIA-KASUNIC.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANTONIA-KASUNIC", + "ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ANTONIA-KASUNIC", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "ANTONIA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Antonia Kasunic", @@ -99,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/antonia-kasunic-80477051_20251214T103833Z.json" ], - "modified_at": "2026-01-09T19:18:16.605159+00:00", + "modified_at": "2026-01-09T19:51:20.530329+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "antonia-kasunic-80477051", @@ -112,6 +114,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANTONIA-KASUNIC", + "new_ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ANTONIA-KASUNIC", + "changed_at": "2026-01-09T19:51:20.530327+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -126,7 +139,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +188,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.605141+00:00", + "inferred_at": "2026-01-09T19:51:20.521156+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Program Manager, Curatorial And Collection Research", + "date_range": "Sep 2020 - Present • 5 years and 2 months", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:20.525817+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:20.530321+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CATHY-PILGRIM.json b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_CATHY-PILGRIM.json similarity index 88% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CATHY-PILGRIM.json rename to data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_CATHY-PILGRIM.json index 3d6a6b3b18..f406a0cd6b 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CATHY-PILGRIM.json +++ b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_CATHY-PILGRIM.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CATHY-PILGRIM", + "ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_CATHY-PILGRIM", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "CATHY", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Cathy Pilgrim", @@ -102,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cathy-pilgrim-89b39124_20251214T103843Z.json" ], - "modified_at": "2026-01-09T19:18:12.367242+00:00", + "modified_at": "2026-01-09T19:51:29.287210+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cathy-pilgrim-89b39124", @@ -115,6 +117,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CATHY-PILGRIM", + "new_ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_CATHY-PILGRIM", + "changed_at": "2026-01-09T19:47:59.589547+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -129,7 +142,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +191,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.367218+00:00", + "inferred_at": "2026-01-09T19:51:29.287206+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CLAYTON-ROGERS.json b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_CLAYTON-ROGERS.json similarity index 56% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CLAYTON-ROGERS.json rename to data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_CLAYTON-ROGERS.json index 3bf0e85327..ca9a0e0d7e 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CLAYTON-ROGERS.json +++ b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_CLAYTON-ROGERS.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CLAYTON-ROGERS", + "ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_CLAYTON-ROGERS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "CLAYTON", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Clayton Rogers", @@ -98,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/clayton-rogers-1b907987_20251214T103946Z.json" ], - "modified_at": "2026-01-09T19:18:13.427594+00:00", + "modified_at": "2026-01-09T19:50:54.156247+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "clayton-rogers-1b907987", @@ -111,6 +113,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CLAYTON-ROGERS", + "new_ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_CLAYTON-ROGERS", + "changed_at": "2026-01-09T19:50:54.156242+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -125,7 +138,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +187,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.427579+00:00", + "inferred_at": "2026-01-09T19:50:54.126023+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "A G Assistant Director, Cybersecurity", + "date_range": "Oct 2020 - Dec 2020 • 2 months", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:54.141013+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:54.156187+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FREYA-OCONNOR.json b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_FREYA-OCONNOR.json similarity index 69% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FREYA-OCONNOR.json rename to data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_FREYA-OCONNOR.json index 5c4bdc12c8..e23c4344fb 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FREYA-OCONNOR.json +++ b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_FREYA-OCONNOR.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FREYA-OCONNOR", + "ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_FREYA-OCONNOR", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "FREYA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Freya O'Connor", @@ -184,7 +186,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/freya-o-connor-6896a092_20251214T103829Z.json" ], - "modified_at": "2026-01-09T19:18:15.186614+00:00", + "modified_at": "2026-01-09T19:51:18.532345+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "freya-o-connor-6896a092", @@ -206,6 +208,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FREYA-OCONNOR", + "new_ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_FREYA-OCONNOR", + "changed_at": "2026-01-09T19:51:18.532342+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -220,7 +233,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -269,7 +282,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.186546+00:00", + "inferred_at": "2026-01-09T19:51:18.517725+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The Australian National University", + "date_range": "2009 - 2011 • 2 years", + "degree": "Bachelor's Degree, Bachelor of Arts, major in International Relations and Spanish" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The Australian National University", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:18.523626+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:18.532321+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KARLEE-BAKER.json b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_KARLEE-BAKER.json similarity index 58% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KARLEE-BAKER.json rename to data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_KARLEE-BAKER.json index 4077cc1464..a40235ab39 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KARLEE-BAKER.json +++ b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_KARLEE-BAKER.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KARLEE-BAKER", + "ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_KARLEE-BAKER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "KARLEE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Karlee Baker", @@ -116,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karlee-baker-6a4651a8_20251214T104007Z.json" ], - "modified_at": "2026-01-09T19:18:13.459980+00:00", + "modified_at": "2026-01-09T19:50:54.463248+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karlee-baker-6a4651a8", @@ -129,6 +131,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KARLEE-BAKER", + "new_ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_KARLEE-BAKER", + "changed_at": "2026-01-09T19:50:54.463246+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -137,7 +150,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +191,118 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.459943+00:00", + "inferred_at": "2026-01-09T19:50:54.446150+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Museum of Australia", + "title": "Education Officer", + "date_range": "Jun 2020 - Apr 2021 • 10 months", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:54.454743+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:54.463234+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KELLY-SKYE.json b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_KELLY-SKYE.json similarity index 64% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KELLY-SKYE.json rename to data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_KELLY-SKYE.json index fd7df156a2..eb21ba6599 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KELLY-SKYE.json +++ b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_KELLY-SKYE.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KELLY-SKYE", + "ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_KELLY-SKYE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "KELLY", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Kelly Skye", @@ -164,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kellyskye_20251214T103913Z.json" ], - "modified_at": "2026-01-09T19:18:18.204395+00:00", + "modified_at": "2026-01-09T19:51:29.211263+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kellyskye", @@ -177,6 +179,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KELLY-SKYE", + "new_ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_KELLY-SKYE", + "changed_at": "2026-01-09T19:51:29.211260+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -191,7 +204,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +253,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.204358+00:00", + "inferred_at": "2026-01-09T19:51:29.174197+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Australian Government Department of Veterans' Affairs", + "title": "Senior Java Developer", + "date_range": "Aug 2017 - Aug 2018 • 1 year", + "location": "Canberra, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:29.206351+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:29.211249+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LUKE-HICKEY.json b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_LUKE-HICKEY.json similarity index 61% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LUKE-HICKEY.json rename to data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_LUKE-HICKEY.json index 013b5806ad..4e050379ac 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LUKE-HICKEY.json +++ b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_LUKE-HICKEY.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LUKE-HICKEY", + "ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_LUKE-HICKEY", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "LUKE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Luke Hickey", @@ -119,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/luke-hickey-aab11b59_20251214T104010Z.json" ], - "modified_at": "2026-01-09T19:18:15.527958+00:00", + "modified_at": "2026-01-09T19:51:11.833477+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "luke-hickey-aab11b59", @@ -132,6 +134,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LUKE-HICKEY", + "new_ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_LUKE-HICKEY", + "changed_at": "2026-01-09T19:51:11.833474+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -146,7 +159,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +208,129 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.527935+00:00", + "inferred_at": "2026-01-09T19:51:11.807303+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Commonwealth Treasury", + "title": "GM Ministerial And Communications Division", + "date_range": "Jul 2012 - Mar 2016 • 3 years and 8 months", + "location": "General Manager, Ministerial and Communications division" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Department of Parliamentary Services", + "title": "Assistant Secretary, Parliamentary Experience Branch", + "date_range": "Mar 2016 - Dec 2019 • 3 years and 9 months", + "location": "Canberra, Australia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:11.821775+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:11.833443+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_REBECCA-PENDLEBURY.json b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_REBECCA-PENDLEBURY.json similarity index 56% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_REBECCA-PENDLEBURY.json rename to data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_REBECCA-PENDLEBURY.json index f2e9ce3054..f9d31f4e4a 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_REBECCA-PENDLEBURY.json +++ b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_REBECCA-PENDLEBURY.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_REBECCA-PENDLEBURY", + "ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_REBECCA-PENDLEBURY", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "REBECCA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Rebecca Pendlebury", @@ -99,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rebecca-pendlebury-78790b133_20251214T103801Z.json" ], - "modified_at": "2026-01-09T19:18:17.395733+00:00", + "modified_at": "2026-01-09T19:51:26.704559+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rebecca-pendlebury-78790b133", @@ -112,6 +114,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_REBECCA-PENDLEBURY", + "new_ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_REBECCA-PENDLEBURY", + "changed_at": "2026-01-09T19:51:26.704557+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -126,7 +139,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +188,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.395711+00:00", + "inferred_at": "2026-01-09T19:51:26.691694+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Test Analyst", + "date_range": "Jun 2019 - Mar 2020 • 9 months", + "location": "Canberra, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:26.698701+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:26.704545+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENATA-DYER.json b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_RENATA-DYER.json similarity index 91% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENATA-DYER.json rename to data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_RENATA-DYER.json index 01c1426ee3..e095dba14c 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENATA-DYER.json +++ b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_RENATA-DYER.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENATA-DYER", + "ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_RENATA-DYER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "RENATA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Renata Dyer", @@ -187,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/renatadyer_20251214T103748Z.json" ], - "modified_at": "2026-01-09T19:18:11.678087+00:00", + "modified_at": "2026-01-09T19:51:28.154649+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "renatadyer", @@ -200,6 +202,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENATA-DYER", + "new_ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_RENATA-DYER", + "changed_at": "2026-01-09T19:47:58.767529+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -214,7 +227,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -263,7 +276,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.677945+00:00", + "inferred_at": "2026-01-09T19:51:28.154641+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RHYS-C.json b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_RHYS-C.json similarity index 50% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RHYS-C.json rename to data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_RHYS-C.json index d27c8ccfaf..de30fd96ba 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RHYS-C.json +++ b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_RHYS-C.json @@ -1,17 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RHYS-C", + "ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_RHYS-C", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "RHYS", "C" ], - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Rhys C.", @@ -91,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rhys-c-444929136_20251214T103800Z.json" ], - "modified_at": "2026-01-09T19:18:14.745347+00:00", + "modified_at": "2026-01-09T19:51:04.008120+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rhys-c-444929136", @@ -104,6 +106,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RHYS-C", + "new_ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_RHYS-C", + "changed_at": "2026-01-09T19:51:04.008118+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -112,7 +125,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -153,7 +166,130 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.745313+00:00", + "inferred_at": "2026-01-09T19:51:03.995827+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The Australian National University", + "date_range": "2003 - 2010 • 7 years", + "degree": "Bachelor of Asian Studies (Specialist), Chinese Studies" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The Australian National University", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:04.002447+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:04.008109+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROBYN-HOLMES.json b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ROBYN-HOLMES.json similarity index 61% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROBYN-HOLMES.json rename to data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ROBYN-HOLMES.json index 1aafb5525c..821ce34900 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROBYN-HOLMES.json +++ b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ROBYN-HOLMES.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROBYN-HOLMES", + "ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ROBYN-HOLMES", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "ROBYN", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Robyn Holmes", @@ -104,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robyn-holmes-a126805_20251214T103927Z.json" ], - "modified_at": "2026-01-09T19:18:14.197990+00:00", + "modified_at": "2026-01-09T19:50:58.857331+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robyn-holmes-a126805", @@ -117,6 +119,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROBYN-HOLMES", + "new_ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ROBYN-HOLMES", + "changed_at": "2026-01-09T19:50:58.857328+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -131,7 +144,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +193,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.197974+00:00", + "inferred_at": "2026-01-09T19:50:58.826627+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Senior Curator And Fellowships Secretary, Formerly Curator Of Music", + "date_range": "Jan 2011 - Present • 7 years and 9 months", + "location": "Canberra, ACT, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, ACT, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:58.839694+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:58.857307+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROD-STROUD.json b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ROD-STROUD.json similarity index 54% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROD-STROUD.json rename to data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ROD-STROUD.json index a052d950dc..1192e60b1f 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROD-STROUD.json +++ b/data/person/ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ROD-STROUD.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROD-STROUD", + "ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ROD-STROUD", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "ROD", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Rod Stroud", @@ -91,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rod-stroud-40888533_20251214T103840Z.json" ], - "modified_at": "2026-01-09T19:18:15.688528+00:00", + "modified_at": "2026-01-09T19:51:13.459931+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rod-stroud-40888533", @@ -104,6 +106,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROD-STROUD", + "new_ppid": "ID_AU-01-CAN_198X_AU-01-CAN_XXXX_ROD-STROUD", + "changed_at": "2026-01-09T19:51:13.459912+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -118,7 +131,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +180,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.688513+00:00", + "inferred_at": "2026-01-09T19:51:13.443042+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Australian Institute of Aboriginal and Torres Strait Islander Studies", + "title": "Library Director", + "date_range": "Sep 2004 - Aug 2012 • 7 years and 11 months", + "location": "Canberra, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:13.448984+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:13.459872+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_VEERIN-C.json b/data/person/ID_AU-01-CAN_198X_AU-06-FRA_XXXX_VEERIN-C.json similarity index 76% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_VEERIN-C.json rename to data/person/ID_AU-01-CAN_198X_AU-06-FRA_XXXX_VEERIN-C.json index 71b32e2872..da0525a331 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_VEERIN-C.json +++ b/data/person/ID_AU-01-CAN_198X_AU-06-FRA_XXXX_VEERIN-C.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_VEERIN-C", + "ppid": "ID_AU-01-CAN_198X_AU-06-FRA_XXXX_VEERIN-C", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-06-FRA", "last_date": "XXXX", "name_tokens": [ "VEERIN", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Veerin C.", @@ -233,7 +235,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/veerin-c-312b0716_20251214T103932Z.json" ], - "modified_at": "2026-01-09T19:18:17.214248+00:00", + "modified_at": "2026-01-09T19:51:25.460451+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "veerin-c-312b0716", @@ -246,6 +248,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_VEERIN-C", + "new_ppid": "ID_AU-01-CAN_198X_AU-06-FRA_XXXX_VEERIN-C", + "changed_at": "2026-01-09T19:51:25.460449+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -260,7 +273,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -309,7 +322,140 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.214208+00:00", + "inferred_at": "2026-01-09T19:51:25.391154+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Fortuneplace Apartments Chiangrai, Thailand", + "title": "Co-Owner", + "date_range": "Jun 2010 - Jun 2023 • 13 years", + "location": "Chiangrai" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "JJ Autocar Used Car Dealership, Thailand", + "title": "Business Owner", + "date_range": "Mar 2010 - Nov 2011 • 1 year and 8 months", + "location": "Chiang Rai, Thailand" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Mocca Espresso Lounge", + "title": "Floor Staff", + "date_range": "Mar 2012 - Jun 2013 • 1 year and 3 months", + "location": "Canberra, Australia" + } + }, + { + "step": 4, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 5, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:25.455479+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Franklin", + "formatted": "AU-06-FRA", + "country_code": "AU", + "region_code": "06", + "settlement_code": "FRA", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Franklin, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Franklin, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2166160, + "geonames_name": "Franklin", + "admin1_code": "06", + "admin1_name": "Tasmania", + "feature_code": "PPL", + "latitude": -43.08884, + "longitude": 147.00906 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-06-FRA" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2166160, + "geonames_name": "Franklin", + "admin1_code": "06", + "admin1_name": "Tasmania", + "feature_code": "PPL", + "latitude": -43.08884, + "longitude": 147.00906 + }, + "inferred_at": "2026-01-09T19:51:25.460438+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ADRIA-HU.json b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ADRIA-HU.json similarity index 54% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ADRIA-HU.json rename to data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ADRIA-HU.json index 826516ecd0..dd56a7d660 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ADRIA-HU.json +++ b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ADRIA-HU.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ADRIA-HU", + "ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ADRIA-HU", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "ADRIA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Adria Hu", @@ -91,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/adria-hu-a901701a_20251214T103931Z.json" ], - "modified_at": "2026-01-09T19:18:16.269988+00:00", + "modified_at": "2026-01-09T19:51:18.361059+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "adria-hu-a901701a", @@ -104,6 +106,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ADRIA-HU", + "new_ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ADRIA-HU", + "changed_at": "2026-01-09T19:51:18.361056+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -118,7 +131,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +180,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.269933+00:00", + "inferred_at": "2026-01-09T19:51:18.350149+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Museum of Australia", + "title": "Project Officer", + "date_range": "Jul 2017 - Present • 8 years and 4 months", + "location": "Canberra, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:18.356324+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:18.361050+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ADRIANNA-FULLERTON.json b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ADRIANNA-FULLERTON.json similarity index 61% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ADRIANNA-FULLERTON.json rename to data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ADRIANNA-FULLERTON.json index a3f73210b3..1d47dcd5f9 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ADRIANNA-FULLERTON.json +++ b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ADRIANNA-FULLERTON.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ADRIANNA-FULLERTON", + "ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ADRIANNA-FULLERTON", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "ADRIANNA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Adrianna Fullerton", @@ -130,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/adrianna-fullerton-68074193_20251214T103959Z.json" ], - "modified_at": "2026-01-09T19:18:16.437042+00:00", + "modified_at": "2026-01-09T19:51:18.501651+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "adrianna-fullerton-68074193", @@ -143,6 +145,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ADRIANNA-FULLERTON", + "new_ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ADRIANNA-FULLERTON", + "changed_at": "2026-01-09T19:51:18.501648+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -157,7 +170,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +219,129 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.437020+00:00", + "inferred_at": "2026-01-09T19:51:18.490345+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Manuscripts Acquisitions Team Leader", + "date_range": "Mar 2018 - Jan 2021 • 2 years and 10 months", + "location": "Canberra" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Coordinator, Acquisitions", + "date_range": "Jan 2021 - Jun 2022 • 1 year and 5 months", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:18.495269+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:18.501629+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ALLISTER-MILLS.json b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ALLISTER-MILLS.json similarity index 58% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ALLISTER-MILLS.json rename to data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ALLISTER-MILLS.json index 29190b2bf1..cc8cb44481 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ALLISTER-MILLS.json +++ b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ALLISTER-MILLS.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ALLISTER-MILLS", + "ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ALLISTER-MILLS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "ALLISTER", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Allister Mills", @@ -122,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/allister-mills-180619137_20251214T104004Z.json" ], - "modified_at": "2026-01-09T19:18:14.869757+00:00", + "modified_at": "2026-01-09T19:51:05.252362+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "allister-mills-180619137", @@ -135,6 +137,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ALLISTER-MILLS", + "new_ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ALLISTER-MILLS", + "changed_at": "2026-01-09T19:51:05.252340+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -143,7 +156,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +197,130 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.869717+00:00", + "inferred_at": "2026-01-09T19:51:05.215714+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The Australian National University", + "date_range": "2016 - 2017 • 1 year", + "degree": "Master of museum and heritage studies, Museums and Collections, Commendation" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The Australian National University", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:05.235279+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:05.252194+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANNE-ROWLANDS.json b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ANNE-ROWLANDS.json similarity index 78% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANNE-ROWLANDS.json rename to data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ANNE-ROWLANDS.json index 2848613a06..4bf45798fc 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANNE-ROWLANDS.json +++ b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ANNE-ROWLANDS.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANNE-ROWLANDS", + "ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ANNE-ROWLANDS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "ANNE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Anne Rowlands", @@ -231,7 +233,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-rowlands-3873a451_20251214T103939Z.json" ], - "modified_at": "2026-01-09T19:18:15.577166+00:00", + "modified_at": "2026-01-09T19:51:12.177947+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-rowlands-3873a451", @@ -244,6 +246,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANNE-ROWLANDS", + "new_ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ANNE-ROWLANDS", + "changed_at": "2026-01-09T19:51:12.177945+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -258,7 +271,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -307,7 +320,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.577093+00:00", + "inferred_at": "2026-01-09T19:51:12.123846+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Canberra", + "date_range": "2012 - 2013 • 1 year", + "degree": "Master of Library & Information Science (MLIS), Library and Information Science" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Canberra", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:12.170135+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:12.177926+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BELLE-WILSON.json b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_BELLE-WILSON.json similarity index 58% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BELLE-WILSON.json rename to data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_BELLE-WILSON.json index ce2b5eccb0..9ca728a23f 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BELLE-WILSON.json +++ b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_BELLE-WILSON.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BELLE-WILSON", + "ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_BELLE-WILSON", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "BELLE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Belle Wilson", @@ -119,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/belle-wilson-7163ab195_20251214T103805Z.json" ], - "modified_at": "2026-01-09T19:18:13.600263+00:00", + "modified_at": "2026-01-09T19:50:57.778400+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "belle-wilson-7163ab195", @@ -141,6 +143,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BELLE-WILSON", + "new_ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_BELLE-WILSON", + "changed_at": "2026-01-09T19:50:57.778396+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -155,7 +168,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +217,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.600218+00:00", + "inferred_at": "2026-01-09T19:50:57.750060+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The Australian National University", + "date_range": "2020 - 2021 • 1 year", + "degree": "Master of Art History and Curatorial Studies, 6.75" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The Australian National University", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:57.759754+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:57.778372+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEN-PRATTEN.json b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_BEN-PRATTEN.json similarity index 54% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEN-PRATTEN.json rename to data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_BEN-PRATTEN.json index 8e0617abdb..7d83903a55 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEN-PRATTEN.json +++ b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_BEN-PRATTEN.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEN-PRATTEN", + "ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_BEN-PRATTEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "BEN", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Ben Pratten", @@ -108,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/benpratten_20251214T103901Z.json" ], - "modified_at": "2026-01-09T19:18:18.987058+00:00", + "modified_at": "2026-01-09T19:51:31.857297+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "benpratten", @@ -121,6 +123,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEN-PRATTEN", + "new_ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_BEN-PRATTEN", + "changed_at": "2026-01-09T19:51:31.857295+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -135,7 +148,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +197,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.987022+00:00", + "inferred_at": "2026-01-09T19:51:31.814742+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The Australian National University", + "date_range": "2009 - 2009", + "degree": "Bachelor of Arts (B.A.) Honours, History" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The Australian National University", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:31.852337+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:31.857284+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ISABELLE-SHEPPARD.json b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ISABELLE-SHEPPARD.json similarity index 63% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ISABELLE-SHEPPARD.json rename to data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ISABELLE-SHEPPARD.json index 2d60cbba77..a7cdfb16ae 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ISABELLE-SHEPPARD.json +++ b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ISABELLE-SHEPPARD.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ISABELLE-SHEPPARD", + "ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ISABELLE-SHEPPARD", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "ISABELLE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Isabelle Sheppard", @@ -164,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/isabelle-sheppard-3ab30016b_20251214T104013Z.json" ], - "modified_at": "2026-01-09T19:18:13.621773+00:00", + "modified_at": "2026-01-09T19:50:55.218532+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "isabelle-sheppard-3ab30016b", @@ -177,6 +179,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ISABELLE-SHEPPARD", + "new_ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ISABELLE-SHEPPARD", + "changed_at": "2026-01-09T19:50:55.218530+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -191,7 +204,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +253,128 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.621746+00:00", + "inferred_at": "2026-01-09T19:50:55.199364+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ochre Health", + "title": "Medical Receptionist", + "date_range": "Mar 2017 - Oct 2021 • 4 years and 7 months", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:55.204472+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Hackett, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Project Support Coordinator", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:55.218513+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JONATHAN-GREENSHAW.json b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_JONATHAN-GREENSHAW.json similarity index 54% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JONATHAN-GREENSHAW.json rename to data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_JONATHAN-GREENSHAW.json index 987cfe68cf..77b113e71b 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JONATHAN-GREENSHAW.json +++ b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_JONATHAN-GREENSHAW.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JONATHAN-GREENSHAW", + "ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_JONATHAN-GREENSHAW", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "JONATHAN", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Jonathan Greenshaw", @@ -87,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jonathan-greenshaw-928341113_20251214T103819Z.json" ], - "modified_at": "2026-01-09T19:18:14.285847+00:00", + "modified_at": "2026-01-09T19:50:59.856183+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jonathan-greenshaw-928341113", @@ -100,6 +102,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JONATHAN-GREENSHAW", + "new_ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_JONATHAN-GREENSHAW", + "changed_at": "2026-01-09T19:50:59.856181+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -114,7 +127,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +176,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.285833+00:00", + "inferred_at": "2026-01-09T19:50:59.812305+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "System Administrator", + "date_range": "Apr 2016 - Jan 2023 • 6 years and 9 months", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:59.851053+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:59.856168+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KIM-BRUNORO.json b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_KIM-BRUNORO.json similarity index 55% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KIM-BRUNORO.json rename to data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_KIM-BRUNORO.json index bd386a7ba4..a96542904f 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KIM-BRUNORO.json +++ b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_KIM-BRUNORO.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KIM-BRUNORO", + "ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_KIM-BRUNORO", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "KIM", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Kim Brunoro", @@ -92,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kim-brunoro-ab199a76_20251214T103936Z.json" ], - "modified_at": "2026-01-09T19:18:17.443396+00:00", + "modified_at": "2026-01-09T19:51:28.143574+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kim-brunoro-ab199a76", @@ -105,6 +107,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KIM-BRUNORO", + "new_ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_KIM-BRUNORO", + "changed_at": "2026-01-09T19:51:28.143571+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -119,7 +132,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +181,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.443382+00:00", + "inferred_at": "2026-01-09T19:51:28.102556+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Department of Infrastructure, Transport, Regional Development and Communications", + "title": "Director", + "date_range": "Sep 2017 - Present • 6 years and 10 months", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:28.137855+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:28.143560+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARJORIE-CURRIE.json b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_MARJORIE-CURRIE.json similarity index 61% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARJORIE-CURRIE.json rename to data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_MARJORIE-CURRIE.json index 5ec95f0554..08ac86a07c 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARJORIE-CURRIE.json +++ b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_MARJORIE-CURRIE.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARJORIE-CURRIE", + "ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_MARJORIE-CURRIE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "MARJORIE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Marjorie Currie", @@ -126,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjorie-currie-a4b55a2b_20251214T104013Z.json" ], - "modified_at": "2026-01-09T19:18:17.021945+00:00", + "modified_at": "2026-01-09T19:51:22.980715+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjorie-currie-a4b55a2b", @@ -139,6 +141,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARJORIE-CURRIE", + "new_ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_MARJORIE-CURRIE", + "changed_at": "2026-01-09T19:51:22.980713+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -153,7 +166,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +215,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.021895+00:00", + "inferred_at": "2026-01-09T19:51:22.971004+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Canberra", + "date_range": "2010 - 2014 • 4 years", + "degree": "Bachelor of Cultural Heritage, Heritage, Museums and Conservation" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Canberra", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:22.975898+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:22.980706+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROSALIND-CLARKE.json b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ROSALIND-CLARKE.json similarity index 61% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROSALIND-CLARKE.json rename to data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ROSALIND-CLARKE.json index f23d2fd0b4..b7e10c4a1c 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROSALIND-CLARKE.json +++ b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ROSALIND-CLARKE.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROSALIND-CLARKE", + "ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ROSALIND-CLARKE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "ROSALIND", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Rosalind Clarke", @@ -156,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rosalindclarke378_20251214T103906Z.json" ], - "modified_at": "2026-01-09T19:18:15.171238+00:00", + "modified_at": "2026-01-09T19:51:06.987046+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rosalindclarke378", @@ -169,6 +171,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROSALIND-CLARKE", + "new_ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_ROSALIND-CLARKE", + "changed_at": "2026-01-09T19:51:06.987044+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -183,7 +196,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +245,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.171188+00:00", + "inferred_at": "2026-01-09T19:51:06.977077+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The Australian National University", + "date_range": "2013 - 2014 • 1 year", + "degree": "Masters of Liberal Arts (Museums and Collections), Museology/Museum Studies" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The Australian National University", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:06.982311+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:06.987037+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SARAH-HODGE.json b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_SARAH-HODGE.json similarity index 51% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SARAH-HODGE.json rename to data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_SARAH-HODGE.json index 84ad4f8911..357987f513 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SARAH-HODGE.json +++ b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_SARAH-HODGE.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SARAH-HODGE", + "ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_SARAH-HODGE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "SARAH", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Sarah Hodge", @@ -92,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sarah-hodge-8484791aa_20251214T103847Z.json" ], - "modified_at": "2026-01-09T19:18:16.603584+00:00", + "modified_at": "2026-01-09T19:50:58.594474+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sarah-hodge-8484791aa", @@ -114,6 +116,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SARAH-HODGE", + "new_ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_SARAH-HODGE", + "changed_at": "2026-01-09T19:50:58.594466+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -122,7 +135,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +176,130 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.603553+00:00", + "inferred_at": "2026-01-09T19:50:58.576353+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The Australian National University", + "date_range": "2020 - 2024 • 4 years", + "degree": "Doctor of Philosophy - PhD" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The Australian National University", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:58.584222+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:58.594438+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SONJA-B.json b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_SONJA-B.json similarity index 53% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SONJA-B.json rename to data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_SONJA-B.json index 7da58dafa7..c95bf472ef 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SONJA-B.json +++ b/data/person/ID_AU-01-CAN_199X_AU-01-CAN_XXXX_SONJA-B.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SONJA-B", + "ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_SONJA-B", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "SONJA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Sonja B.", @@ -83,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sonjabarfoed_20251214T103926Z.json" ], - "modified_at": "2026-01-09T19:18:12.796539+00:00", + "modified_at": "2026-01-09T19:50:48.893435+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sonjabarfoed", @@ -96,6 +98,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SONJA-B", + "new_ppid": "ID_AU-01-CAN_199X_AU-01-CAN_XXXX_SONJA-B", + "changed_at": "2026-01-09T19:50:48.893432+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -110,7 +123,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +172,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.796511+00:00", + "inferred_at": "2026-01-09T19:50:48.880237+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Co-ordinator Out Of Hours Operations (part-time After-hours)", + "date_range": "Nov 2020 - Present • 5 years", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:48.885443+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:48.893415+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CELIA-RIDEAUX.json b/data/person/ID_AU-01-CAN_199X_AU-04-COO_XXXX_CELIA-RIDEAUX.json similarity index 64% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CELIA-RIDEAUX.json rename to data/person/ID_AU-01-CAN_199X_AU-04-COO_XXXX_CELIA-RIDEAUX.json index 966ee0aabf..9adc44875d 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CELIA-RIDEAUX.json +++ b/data/person/ID_AU-01-CAN_199X_AU-04-COO_XXXX_CELIA-RIDEAUX.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CELIA-RIDEAUX", + "ppid": "ID_AU-01-CAN_199X_AU-04-COO_XXXX_CELIA-RIDEAUX", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-04-COO", "last_date": "XXXX", "name_tokens": [ "CELIA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Celia Rideaux", @@ -179,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/celia-rideaux-3867b94a_20251214T103844Z.json" ], - "modified_at": "2026-01-09T19:18:16.186785+00:00", + "modified_at": "2026-01-09T19:51:18.267551+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "celia-rideaux-3867b94a", @@ -192,6 +194,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CELIA-RIDEAUX", + "new_ppid": "ID_AU-01-CAN_199X_AU-04-COO_XXXX_CELIA-RIDEAUX", + "changed_at": "2026-01-09T19:51:18.267549+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -206,7 +219,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -255,7 +268,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.186725+00:00", + "inferred_at": "2026-01-09T19:51:18.256026+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Canberra", + "date_range": "2010 - 2012 • 2 years", + "degree": "Bachelor of Public Relations, Public Relations" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Canberra", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:18.261855+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Cooktown", + "formatted": "AU-04-COO", + "country_code": "AU", + "region_code": "04", + "settlement_code": "COO", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Cook, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Cook, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2170658, + "geonames_name": "Cooktown", + "admin1_code": "04", + "admin1_name": "Queensland", + "feature_code": "PPL", + "latitude": -15.4657, + "longitude": 145.24984 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-04-COO" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2170658, + "geonames_name": "Cooktown", + "admin1_code": "04", + "admin1_name": "Queensland", + "feature_code": "PPL", + "latitude": -15.4657, + "longitude": 145.24984 + }, + "inferred_at": "2026-01-09T19:51:18.267538+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JENNIFER-THOMPSON.json b/data/person/ID_AU-01-CAN_199X_AU-05-AP_XXXX_JENNIFER-THOMPSON.json similarity index 68% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JENNIFER-THOMPSON.json rename to data/person/ID_AU-01-CAN_199X_AU-05-AP_XXXX_JENNIFER-THOMPSON.json index fa77b38e37..70bba8e663 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JENNIFER-THOMPSON.json +++ b/data/person/ID_AU-01-CAN_199X_AU-05-AP_XXXX_JENNIFER-THOMPSON.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JENNIFER-THOMPSON", + "ppid": "ID_AU-01-CAN_199X_AU-05-AP_XXXX_JENNIFER-THOMPSON", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-05-AP", "last_date": "XXXX", "name_tokens": [ "JENNIFER", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Jennifer Thompson", @@ -218,7 +220,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jenthompson2020_20251214T103818Z.json" ], - "modified_at": "2026-01-09T19:18:15.534360+00:00", + "modified_at": "2026-01-09T19:50:50.786088+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jenthompson2020", @@ -240,6 +242,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JENNIFER-THOMPSON", + "new_ppid": "ID_AU-01-CAN_199X_AU-05-AP_XXXX_JENNIFER-THOMPSON", + "changed_at": "2026-01-09T19:50:50.786085+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -254,7 +267,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -303,7 +316,151 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.534248+00:00", + "inferred_at": "2026-01-09T19:50:50.624376+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "RMK Voice Productions", + "title": "Casting Agent", + "date_range": "Jan 1994 - Jan 1995 • 1 year", + "location": "Sydney, New South Wales, Australia" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Labsonics", + "title": "Sound Studio Coordinator", + "date_range": "Jan 1999 - Jan 1999", + "location": "Sydney, New South Wales, Australia" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Kids Like Us Productions", + "title": "Production Producer's Assistant, Hi-5 TV Series, Videos And Live Performance", + "date_range": "Jan 1999 - Jan 1999", + "location": "Sydney, New South Wales, Australia" + } + }, + { + "step": 4, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Film and Sound Archive of Australia", + "title": "Various", + "date_range": "Collection Development - Oral History (2000-2002) Collection Preservation - Sound (2002-2004) Collection Access (2004-2006)", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 5, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 6, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:50.780942+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Australia Plains", + "formatted": "AU-05-AP", + "country_code": "AU", + "region_code": "05", + "settlement_code": "AP", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Australia (AU)", + "result": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-05-AP" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + }, + "inferred_at": "2026-01-09T19:50:50.786071+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIRIAM-COVELL.json b/data/person/ID_AU-01-CAN_199X_AU-05-AP_XXXX_MIRIAM-COVELL.json similarity index 57% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIRIAM-COVELL.json rename to data/person/ID_AU-01-CAN_199X_AU-05-AP_XXXX_MIRIAM-COVELL.json index 87c7425c99..742638acc4 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIRIAM-COVELL.json +++ b/data/person/ID_AU-01-CAN_199X_AU-05-AP_XXXX_MIRIAM-COVELL.json @@ -1,17 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIRIAM-COVELL", + "ppid": "ID_AU-01-CAN_199X_AU-05-AP_XXXX_MIRIAM-COVELL", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-05-AP", "last_date": "XXXX", "name_tokens": [ "MIRIAM", "COVELL" ], - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Miriam Covell", @@ -131,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/miriam-covell-8b2515165_20251214T103846Z.json" ], - "modified_at": "2026-01-09T19:18:13.460463+00:00", + "modified_at": "2026-01-09T19:50:54.475860+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "miriam-covell-8b2515165", @@ -144,6 +146,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIRIAM-COVELL", + "new_ppid": "ID_AU-01-CAN_199X_AU-05-AP_XXXX_MIRIAM-COVELL", + "changed_at": "2026-01-09T19:50:54.475858+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -152,7 +165,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +206,130 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.460418+00:00", + "inferred_at": "2026-01-09T19:50:54.464352+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The Australian National University", + "date_range": "2014 - 2018 • 4 years", + "degree": "Bachelor of Arts (Honours), HISTORY" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The Australian National University", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:54.470591+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Australia Plains", + "formatted": "AU-05-AP", + "country_code": "AU", + "region_code": "05", + "settlement_code": "AP", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Australia (AU)", + "result": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-05-AP" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + }, + "inferred_at": "2026-01-09T19:50:54.475849+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_QIANMIN-JIA.json b/data/person/ID_AU-01-CAN_199X_AU-05-AP_XXXX_QIANMIN-JIA.json similarity index 88% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_QIANMIN-JIA.json rename to data/person/ID_AU-01-CAN_199X_AU-05-AP_XXXX_QIANMIN-JIA.json index 9d937fee25..1312c3ec7e 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_QIANMIN-JIA.json +++ b/data/person/ID_AU-01-CAN_199X_AU-05-AP_XXXX_QIANMIN-JIA.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_QIANMIN-JIA", + "ppid": "ID_AU-01-CAN_199X_AU-05-AP_XXXX_QIANMIN-JIA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-05-AP", "last_date": "XXXX", "name_tokens": [ "QIANMIN", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Qianmin Jia", @@ -108,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/qianmin-min-jia-35b1311a4_20251214T103821Z.json" ], - "modified_at": "2026-01-09T19:18:11.315676+00:00", + "modified_at": "2026-01-09T19:51:03.395295+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "qianmin-min-jia-35b1311a4", @@ -121,6 +123,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_QIANMIN-JIA", + "new_ppid": "ID_AU-01-CAN_199X_AU-05-AP_XXXX_QIANMIN-JIA", + "changed_at": "2026-01-09T19:47:58.182271+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -135,7 +148,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.315654+00:00", + "inferred_at": "2026-01-09T19:51:03.395289+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROS-H.json b/data/person/ID_AU-01-CAN_199X_AU-05-AP_XXXX_ROS-H.json similarity index 68% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROS-H.json rename to data/person/ID_AU-01-CAN_199X_AU-05-AP_XXXX_ROS-H.json index f25845224e..4051e26b60 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROS-H.json +++ b/data/person/ID_AU-01-CAN_199X_AU-05-AP_XXXX_ROS-H.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROS-H", + "ppid": "ID_AU-01-CAN_199X_AU-05-AP_XXXX_ROS-H", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-05-AP", "last_date": "XXXX", "name_tokens": [ "ROS", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Ros H.", @@ -139,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ros-h-1b870856_20251214T103751Z.json" ], - "modified_at": "2026-01-09T19:18:13.553731+00:00", + "modified_at": "2026-01-09T19:50:54.649564+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ros-h-1b870856", @@ -152,6 +154,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROS-H", + "new_ppid": "ID_AU-01-CAN_199X_AU-05-AP_XXXX_ROS-H", + "changed_at": "2026-01-09T19:50:54.649562+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -166,7 +179,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +228,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.553708+00:00", + "inferred_at": "2026-01-09T19:50:54.630524+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Australian And Overseas Monographs - Cataloguer", + "date_range": "Jan 2014 - Apr 2015 • 1 year and 3 months", + "location": "Canberra, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:54.635474+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Australia Plains", + "formatted": "AU-05-AP", + "country_code": "AU", + "region_code": "05", + "settlement_code": "AP", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Australia (AU)", + "result": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-05-AP" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + }, + "inferred_at": "2026-01-09T19:50:54.649545+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MADELINE-ONEIL.json b/data/person/ID_AU-01-CAN_199X_AU-07-FLY_XXXX_MADELINE-ONEIL.json similarity index 72% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MADELINE-ONEIL.json rename to data/person/ID_AU-01-CAN_199X_AU-07-FLY_XXXX_MADELINE-ONEIL.json index 995b54c2d7..397a3c876e 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MADELINE-ONEIL.json +++ b/data/person/ID_AU-01-CAN_199X_AU-07-FLY_XXXX_MADELINE-ONEIL.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MADELINE-ONEIL", + "ppid": "ID_AU-01-CAN_199X_AU-07-FLY_XXXX_MADELINE-ONEIL", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-07-FLY", "last_date": "XXXX", "name_tokens": [ "MADELINE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Madeline O'Neil", @@ -135,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/madeline-o-neil-14b714264_20251214T103819Z.json" ], - "modified_at": "2026-01-09T19:18:14.634599+00:00", + "modified_at": "2026-01-09T19:51:03.206334+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "madeline-o-neil-14b714264", @@ -148,6 +150,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MADELINE-ONEIL", + "new_ppid": "ID_AU-01-CAN_199X_AU-07-FLY_XXXX_MADELINE-ONEIL", + "changed_at": "2026-01-09T19:51:03.206331+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -162,7 +175,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +224,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.634563+00:00", + "inferred_at": "2026-01-09T19:51:03.194185+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Australian War Memorial", + "title": "Education Assistant", + "date_range": "Mar 2021 - Jun 2023 • 2 years and 3 months", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:03.201179+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Flynn", + "formatted": "AU-07-FLY", + "country_code": "AU", + "region_code": "07", + "settlement_code": "FLY", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Flynn, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Flynn, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2166389, + "geonames_name": "Flynn", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPL", + "latitude": -38.16667, + "longitude": 146.68333 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-07-FLY" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2166389, + "geonames_name": "Flynn", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPL", + "latitude": -38.16667, + "longitude": 146.68333 + }, + "inferred_at": "2026-01-09T19:51:03.206321+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MAYUKH-DIKSHIT.json b/data/person/ID_AU-01-CAN_199X_AU-08-SB_XXXX_MAYUKH-DIKSHIT.json similarity index 78% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MAYUKH-DIKSHIT.json rename to data/person/ID_AU-01-CAN_199X_AU-08-SB_XXXX_MAYUKH-DIKSHIT.json index 00c72e1937..8d3c634f60 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MAYUKH-DIKSHIT.json +++ b/data/person/ID_AU-01-CAN_199X_AU-08-SB_XXXX_MAYUKH-DIKSHIT.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MAYUKH-DIKSHIT", + "ppid": "ID_AU-01-CAN_199X_AU-08-SB_XXXX_MAYUKH-DIKSHIT", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-08-SB", "last_date": "XXXX", "name_tokens": [ "MAYUKH", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Mayukh Dikshit", @@ -254,7 +256,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mayukh-dikshit-2b03ba117_20251214T103849Z.json" ], - "modified_at": "2026-01-09T19:18:15.077117+00:00", + "modified_at": "2026-01-09T19:51:06.698138+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mayukh-dikshit-2b03ba117", @@ -267,6 +269,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MAYUKH-DIKSHIT", + "new_ppid": "ID_AU-01-CAN_199X_AU-08-SB_XXXX_MAYUKH-DIKSHIT", + "changed_at": "2026-01-09T19:51:06.698135+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -281,7 +294,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -330,7 +343,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.077070+00:00", + "inferred_at": "2026-01-09T19:51:06.684469+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The Australian National University", + "date_range": "2016 - 2018 • 2 years", + "degree": "MBA" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The Australian National University", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:06.690773+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Spencers Brook", + "formatted": "AU-08-SB", + "country_code": "AU", + "region_code": "08", + "settlement_code": "SB", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Spence, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Spence, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2061211, + "geonames_name": "Spencers Brook", + "admin1_code": "08", + "admin1_name": "Western Australia", + "feature_code": "PPL", + "latitude": -31.73655, + "longitude": 116.6306 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-08-SB" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2061211, + "geonames_name": "Spencers Brook", + "admin1_code": "08", + "admin1_name": "Western Australia", + "feature_code": "PPL", + "latitude": -31.73655, + "longitude": 116.6306 + }, + "inferred_at": "2026-01-09T19:51:06.698122+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEN-STEVENS.json b/data/person/ID_AU-01-CAN_199X_XX-XX-XXX_XXXX_BEN-STEVENS.json similarity index 67% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEN-STEVENS.json rename to data/person/ID_AU-01-CAN_199X_XX-XX-XXX_XXXX_BEN-STEVENS.json index 189b459445..8d27d91aed 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEN-STEVENS.json +++ b/data/person/ID_AU-01-CAN_199X_XX-XX-XXX_XXXX_BEN-STEVENS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEN-STEVENS", + "ppid": "ID_AU-01-CAN_199X_XX-XX-XXX_XXXX_BEN-STEVENS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Ben Stevens", @@ -98,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ben-stevens-b0a254246_20251214T103814Z.json" ], - "modified_at": "2026-01-09T19:18:14.994277+00:00", + "modified_at": "2026-01-09T19:51:06.565754+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ben-stevens-b0a254246", @@ -111,6 +112,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEN-STEVENS", + "new_ppid": "ID_AU-01-CAN_199X_XX-XX-XXX_XXXX_BEN-STEVENS", + "changed_at": "2026-01-09T19:51:06.565735+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -125,7 +136,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +185,65 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.994261+00:00", + "inferred_at": "2026-01-09T19:51:06.508306+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Interaction Consulting Group", + "title": "Executive Assistant RTO Admin", + "date_range": "Sep 2022 - Jul 2023 • 10 months", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:06.514616+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JACKY-YANG.json b/data/person/ID_AU-01-CAN_199X_XX-XX-XXX_XXXX_JACKY-YANG.json similarity index 93% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JACKY-YANG.json rename to data/person/ID_AU-01-CAN_199X_XX-XX-XXX_XXXX_JACKY-YANG.json index a5d6f9f82d..d1f81dc414 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JACKY-YANG.json +++ b/data/person/ID_AU-01-CAN_199X_XX-XX-XXX_XXXX_JACKY-YANG.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JACKY-YANG", + "ppid": "ID_AU-01-CAN_199X_XX-XX-XXX_XXXX_JACKY-YANG", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Jacky YANG", @@ -194,7 +195,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jacky-yang-009997149_20251214T103928Z.json" ], - "modified_at": "2026-01-09T19:18:11.317309+00:00", + "modified_at": "2026-01-09T19:51:08.562053+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jacky-yang-009997149", @@ -207,6 +208,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JACKY-YANG", + "new_ppid": "ID_AU-01-CAN_199X_XX-XX-XXX_XXXX_JACKY-YANG", + "changed_at": "2026-01-09T19:47:58.195085+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -221,7 +232,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -270,7 +281,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.317066+00:00", + "inferred_at": "2026-01-09T19:51:08.543341+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BLAKE-SINGLEY.json b/data/person/ID_AU-01-CAN_200X_AU-01-CAN_XXXX_BLAKE-SINGLEY.json similarity index 53% rename from data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BLAKE-SINGLEY.json rename to data/person/ID_AU-01-CAN_200X_AU-01-CAN_XXXX_BLAKE-SINGLEY.json index b5ae794c9f..b239a67d7f 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BLAKE-SINGLEY.json +++ b/data/person/ID_AU-01-CAN_200X_AU-01-CAN_XXXX_BLAKE-SINGLEY.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BLAKE-SINGLEY", + "ppid": "ID_AU-01-CAN_200X_AU-01-CAN_XXXX_BLAKE-SINGLEY", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "200X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "BLAKE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Blake Singley", @@ -84,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/blake-singley-0765a2219_20251214T103810Z.json" ], - "modified_at": "2026-01-09T19:18:13.157253+00:00", + "modified_at": "2026-01-09T19:50:52.991131+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "blake-singley-0765a2219", @@ -97,6 +99,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BLAKE-SINGLEY", + "new_ppid": "ID_AU-01-CAN_200X_AU-01-CAN_XXXX_BLAKE-SINGLEY", + "changed_at": "2026-01-09T19:50:52.991128+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -111,7 +124,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +173,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.157237+00:00", + "inferred_at": "2026-01-09T19:50:52.974725+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Director Rights Management", + "date_range": "Feb 2024 - Present • 2 months", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:52.981782+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:52.991110+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_LILIA-WALSH.json b/data/person/ID_AU-01-CAN_200X_AU-01-CAN_XXXX_LILIA-WALSH.json similarity index 61% rename from data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_LILIA-WALSH.json rename to data/person/ID_AU-01-CAN_200X_AU-01-CAN_XXXX_LILIA-WALSH.json index bd332c1e5e..fb2b2f1253 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_LILIA-WALSH.json +++ b/data/person/ID_AU-01-CAN_200X_AU-01-CAN_XXXX_LILIA-WALSH.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_LILIA-WALSH", + "ppid": "ID_AU-01-CAN_200X_AU-01-CAN_XXXX_LILIA-WALSH", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "200X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "LILIA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Lilia Walsh", @@ -126,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lilia-walsh-311489220_20251214T103948Z.json" ], - "modified_at": "2026-01-09T19:18:15.269494+00:00", + "modified_at": "2026-01-09T19:51:07.877969+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lilia-walsh-311489220", @@ -139,6 +141,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_LILIA-WALSH", + "new_ppid": "ID_AU-01-CAN_200X_AU-01-CAN_XXXX_LILIA-WALSH", + "changed_at": "2026-01-09T19:51:07.877967+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -153,7 +166,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +215,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.269436+00:00", + "inferred_at": "2026-01-09T19:51:07.868109+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The Australian National University", + "date_range": "2018 - 2021 • 3 years", + "degree": "Flexible Double Degree - Bachelor of Arts/Bachelor of Science, Classical and Ancient Studies, Astrophysics, Science Communication" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The Australian National University", + "mapping_result": "Canberra, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN" + }, + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:07.873264+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:07.877959+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_DANIEL-ROSE.json b/data/person/ID_AU-01-CAN_200X_AU-02-PAR_XXXX_DANIEL-ROSE.json similarity index 56% rename from data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_DANIEL-ROSE.json rename to data/person/ID_AU-01-CAN_200X_AU-02-PAR_XXXX_DANIEL-ROSE.json index 83e1f8eb34..7cb7555de1 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_DANIEL-ROSE.json +++ b/data/person/ID_AU-01-CAN_200X_AU-02-PAR_XXXX_DANIEL-ROSE.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_DANIEL-ROSE", + "ppid": "ID_AU-01-CAN_200X_AU-02-PAR_XXXX_DANIEL-ROSE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-01-CAN", "first_date": "200X", - "last_location": "XX-XX-XXX", + "last_location": "AU-02-PAR", "last_date": "XXXX", "name_tokens": [ "DANIEL", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Daniel Rose", @@ -85,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daniel-rose-89bb5bb0_20251214T104003Z.json" ], - "modified_at": "2026-01-09T19:18:13.722164+00:00", + "modified_at": "2026-01-09T19:50:56.039641+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daniel-rose-89bb5bb0", @@ -98,6 +100,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_DANIEL-ROSE", + "new_ppid": "ID_AU-01-CAN_200X_AU-02-PAR_XXXX_DANIEL-ROSE", + "changed_at": "2026-01-09T19:50:56.039638+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -112,7 +125,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -161,7 +174,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.722153+00:00", + "inferred_at": "2026-01-09T19:50:55.992715+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Informatech Pty Ltd", + "title": "Senior Network Engineer", + "date_range": "Jan 2023 - Present • 2 years and 10 months", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:56.034463+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Parkes", + "formatted": "AU-02-PAR", + "country_code": "AU", + "region_code": "02", + "settlement_code": "PAR", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Parkes, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Parkes, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2153778, + "geonames_name": "Parkes", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPL", + "latitude": -33.1372, + "longitude": 148.1759 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-02-PAR" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2153778, + "geonames_name": "Parkes", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPL", + "latitude": -33.1372, + "longitude": 148.1759 + }, + "inferred_at": "2026-01-09T19:50:56.039625+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JESS-DRAKE.json b/data/person/ID_AU-02-BAT_198X_AU-01-CAN_XXXX_JESS-DRAKE.json similarity index 72% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JESS-DRAKE.json rename to data/person/ID_AU-02-BAT_198X_AU-01-CAN_XXXX_JESS-DRAKE.json index 998dcffa30..eb04c66f90 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JESS-DRAKE.json +++ b/data/person/ID_AU-02-BAT_198X_AU-01-CAN_XXXX_JESS-DRAKE.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JESS-DRAKE", + "ppid": "ID_AU-02-BAT_198X_AU-01-CAN_XXXX_JESS-DRAKE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-BAT", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "JESS", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Jess Drake", @@ -182,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jess-drake-618997146_20251214T103858Z.json" ], - "modified_at": "2026-01-09T19:18:17.289685+00:00", + "modified_at": "2026-01-09T19:50:55.192346+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jess-drake-618997146", @@ -204,6 +206,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JESS-DRAKE", + "new_ppid": "ID_AU-02-BAT_198X_AU-01-CAN_XXXX_JESS-DRAKE", + "changed_at": "2026-01-09T19:50:55.192344+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -218,7 +231,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -267,7 +280,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.289618+00:00", + "inferred_at": "2026-01-09T19:50:55.179013+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Bathurst", + "formatted": "AU-02-BAT", + "country_code": "AU", + "region_code": "02", + "settlement_code": "BAT", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Charles Sturt University", + "date_range": "2010 - 2013 • 3 years", + "degree": "Bachelor's degree, Library and Information Science" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Charles Sturt University", + "mapping_result": "Bathurst, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Bathurst, Australia", + "result": { + "geonames_id": 2176632, + "geonames_name": "Bathurst", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA2", + "latitude": -33.41665, + "longitude": 149.5806 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "02", + "settlement_code": "BAT" + }, + "result": "AU-02-BAT" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2176632, + "geonames_name": "Bathurst", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA2", + "latitude": -33.41665, + "longitude": 149.5806 + }, + "inferred_at": "2026-01-09T19:50:55.186999+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:55.192332+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NICOLETTE-S.json b/data/person/ID_AU-02-BAT_198X_AU-01-CAN_XXXX_NICOLETTE-S.json similarity index 56% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NICOLETTE-S.json rename to data/person/ID_AU-02-BAT_198X_AU-01-CAN_XXXX_NICOLETTE-S.json index 817bebb2bf..322ae5be7d 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NICOLETTE-S.json +++ b/data/person/ID_AU-02-BAT_198X_AU-01-CAN_XXXX_NICOLETTE-S.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NICOLETTE-S", + "ppid": "ID_AU-02-BAT_198X_AU-01-CAN_XXXX_NICOLETTE-S", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-BAT", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "NICOLETTE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Nicolette S.", @@ -98,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicolette-s-6a3b23a0_20251214T103809Z.json" ], - "modified_at": "2026-01-09T19:18:13.064600+00:00", + "modified_at": "2026-01-09T19:51:10.676497+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicolette-s-6a3b23a0", @@ -120,6 +122,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NICOLETTE-S", + "new_ppid": "ID_AU-02-BAT_198X_AU-01-CAN_XXXX_NICOLETTE-S", + "changed_at": "2026-01-09T19:51:10.676494+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -134,7 +147,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +196,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.064554+00:00", + "inferred_at": "2026-01-09T19:51:10.613015+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Bathurst", + "formatted": "AU-02-BAT", + "country_code": "AU", + "region_code": "02", + "settlement_code": "BAT", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Charles Sturt University", + "date_range": "2013 - 2018 • 5 years", + "degree": "Masters, Information Studies" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Charles Sturt University", + "mapping_result": "Bathurst, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Bathurst, Australia", + "result": { + "geonames_id": 2176632, + "geonames_name": "Bathurst", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA2", + "latitude": -33.41665, + "longitude": 149.5806 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "02", + "settlement_code": "BAT" + }, + "result": "AU-02-BAT" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2176632, + "geonames_name": "Bathurst", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA2", + "latitude": -33.41665, + "longitude": 149.5806 + }, + "inferred_at": "2026-01-09T19:51:10.669561+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:10.676479+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SUSIE-WATT.json b/data/person/ID_AU-02-BAT_198X_AU-01-CAN_XXXX_SUSIE-WATT.json similarity index 90% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SUSIE-WATT.json rename to data/person/ID_AU-02-BAT_198X_AU-01-CAN_XXXX_SUSIE-WATT.json index 92ac4f9eaf..e8097c68d2 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SUSIE-WATT.json +++ b/data/person/ID_AU-02-BAT_198X_AU-01-CAN_XXXX_SUSIE-WATT.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SUSIE-WATT", + "ppid": "ID_AU-02-BAT_198X_AU-01-CAN_XXXX_SUSIE-WATT", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-BAT", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "SUSIE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Susie Watt", @@ -140,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/susie-watt-853a62121_20251214T103922Z.json" ], - "modified_at": "2026-01-09T19:18:12.388206+00:00", + "modified_at": "2026-01-09T19:51:15.723711+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "susie-watt-853a62121", @@ -153,6 +155,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SUSIE-WATT", + "new_ppid": "ID_AU-02-BAT_198X_AU-01-CAN_XXXX_SUSIE-WATT", + "changed_at": "2026-01-09T19:47:59.603039+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -167,7 +180,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.388139+00:00", + "inferred_at": "2026-01-09T19:51:15.723705+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KASSI-HAYS.json b/data/person/ID_AU-02-BAT_199X_AU-01-CAN_XXXX_KASSI-HAYS.json similarity index 58% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KASSI-HAYS.json rename to data/person/ID_AU-02-BAT_199X_AU-01-CAN_XXXX_KASSI-HAYS.json index c70fb2bc5b..913676d4b2 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KASSI-HAYS.json +++ b/data/person/ID_AU-02-BAT_199X_AU-01-CAN_XXXX_KASSI-HAYS.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KASSI-HAYS", + "ppid": "ID_AU-02-BAT_199X_AU-01-CAN_XXXX_KASSI-HAYS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-BAT", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "KASSI", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Kassi Hays", @@ -135,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kassi-hays-32545789_20251214T103934Z.json" ], - "modified_at": "2026-01-09T19:18:15.153602+00:00", + "modified_at": "2026-01-09T19:51:06.946928+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kassi-hays-32545789", @@ -148,6 +150,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KASSI-HAYS", + "new_ppid": "ID_AU-02-BAT_199X_AU-01-CAN_XXXX_KASSI-HAYS", + "changed_at": "2026-01-09T19:51:06.946925+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -156,7 +169,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +210,130 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.153555+00:00", + "inferred_at": "2026-01-09T19:51:06.927366+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Bathurst", + "formatted": "AU-02-BAT", + "country_code": "AU", + "region_code": "02", + "settlement_code": "BAT", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Charles Sturt University", + "date_range": "2017 - 2020 • 3 years", + "degree": "Bachelor of Information Studies (Librarianship)" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Charles Sturt University", + "mapping_result": "Bathurst, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Bathurst, Australia", + "result": { + "geonames_id": 2176632, + "geonames_name": "Bathurst", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA2", + "latitude": -33.41665, + "longitude": 149.5806 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "02", + "settlement_code": "BAT" + }, + "result": "AU-02-BAT" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2176632, + "geonames_name": "Bathurst", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA2", + "latitude": -33.41665, + "longitude": 149.5806 + }, + "inferred_at": "2026-01-09T19:51:06.941751+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:06.946912+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LINDA-B.json b/data/person/ID_AU-02-BAT_199X_AU-02-PAR_XXXX_LINDA-B.json similarity index 58% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LINDA-B.json rename to data/person/ID_AU-02-BAT_199X_AU-02-PAR_XXXX_LINDA-B.json index 91c9697e67..e19b7f7dec 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LINDA-B.json +++ b/data/person/ID_AU-02-BAT_199X_AU-02-PAR_XXXX_LINDA-B.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LINDA-B", + "ppid": "ID_AU-02-BAT_199X_AU-02-PAR_XXXX_LINDA-B", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-BAT", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-02-PAR", "last_date": "XXXX", "name_tokens": [ "LINDA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Linda B.", @@ -121,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lindabull_20251214T103834Z.json" ], - "modified_at": "2026-01-09T19:18:13.306953+00:00", + "modified_at": "2026-01-09T19:50:50.816050+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lindabull", @@ -143,6 +145,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LINDA-B", + "new_ppid": "ID_AU-02-BAT_199X_AU-02-PAR_XXXX_LINDA-B", + "changed_at": "2026-01-09T19:50:50.816047+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -157,7 +170,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +219,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.306908+00:00", + "inferred_at": "2026-01-09T19:50:50.804943+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Bathurst", + "formatted": "AU-02-BAT", + "country_code": "AU", + "region_code": "02", + "settlement_code": "BAT", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Charles Sturt University", + "date_range": "2023 - 2024 • 1 year", + "degree": "Master of Library & Information Science - MLIS" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Charles Sturt University", + "mapping_result": "Bathurst, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Bathurst, Australia", + "result": { + "geonames_id": 2176632, + "geonames_name": "Bathurst", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA2", + "latitude": -33.41665, + "longitude": 149.5806 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "02", + "settlement_code": "BAT" + }, + "result": "AU-02-BAT" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2176632, + "geonames_name": "Bathurst", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA2", + "latitude": -33.41665, + "longitude": 149.5806 + }, + "inferred_at": "2026-01-09T19:50:50.810868+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Parkes", + "formatted": "AU-02-PAR", + "country_code": "AU", + "region_code": "02", + "settlement_code": "PAR", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Parkes, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Parkes, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2153778, + "geonames_name": "Parkes", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPL", + "latitude": -33.1372, + "longitude": 148.1759 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-02-PAR" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2153778, + "geonames_name": "Parkes", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPL", + "latitude": -33.1372, + "longitude": 148.1759 + }, + "inferred_at": "2026-01-09T19:50:50.816037+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_ANNMARI-JORDENS.json b/data/person/ID_AU-02-SYD_194X_AU-01-CAN_XXXX_ANNMARI-JORDENS.json similarity index 63% rename from data/person/ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_ANNMARI-JORDENS.json rename to data/person/ID_AU-02-SYD_194X_AU-01-CAN_XXXX_ANNMARI-JORDENS.json index 6e813e31d0..cbafd665f5 100644 --- a/data/person/ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_ANNMARI-JORDENS.json +++ b/data/person/ID_AU-02-SYD_194X_AU-01-CAN_XXXX_ANNMARI-JORDENS.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_ANNMARI-JORDENS", + "ppid": "ID_AU-02-SYD_194X_AU-01-CAN_XXXX_ANNMARI-JORDENS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-SYD", "first_date": "194X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "ANNMARI", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "193X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Ann-Mari Jordens", @@ -118,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ann-mari-jordens-a8b9aa56_20251214T103855Z.json" ], - "modified_at": "2026-01-09T19:18:14.990652+00:00", + "modified_at": "2026-01-09T19:51:06.501536+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ann-mari-jordens-a8b9aa56", @@ -131,6 +133,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_ANNMARI-JORDENS", + "new_ppid": "ID_AU-02-SYD_194X_AU-01-CAN_XXXX_ANNMARI-JORDENS", + "changed_at": "2026-01-09T19:51:06.501534+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -145,7 +158,7 @@ "primary_rationale": "1940 is in 194X, but range extends into 193X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +207,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1940 spans decades 193X/194X", - "inferred_at": "2026-01-09T19:18:14.990610+00:00", + "inferred_at": "2026-01-09T19:51:06.460970+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Sydney", + "formatted": "AU-02-SYD", + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Sydney", + "date_range": "1962 - 1963 • 1 year", + "degree": "Master of Arts (MA), History" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Sydney", + "mapping_result": "Sydney, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Sydney, Australia", + "result": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD" + }, + "result": "AU-02-SYD" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + }, + "inferred_at": "2026-01-09T19:51:06.494829+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:06.501515+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_ISOBEL-TRUNDLE.json b/data/person/ID_AU-02-SYD_195X_AU-01-CAN_XXXX_ISOBEL-TRUNDLE.json similarity index 52% rename from data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_ISOBEL-TRUNDLE.json rename to data/person/ID_AU-02-SYD_195X_AU-01-CAN_XXXX_ISOBEL-TRUNDLE.json index 62f8cc9df3..b64ed0f08a 100644 --- a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_ISOBEL-TRUNDLE.json +++ b/data/person/ID_AU-02-SYD_195X_AU-01-CAN_XXXX_ISOBEL-TRUNDLE.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_ISOBEL-TRUNDLE", + "ppid": "ID_AU-02-SYD_195X_AU-01-CAN_XXXX_ISOBEL-TRUNDLE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-SYD", "first_date": "195X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "ISOBEL", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Isobel Trundle", @@ -90,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/isobel-trundle-a2565679_20251214T103842Z.json" ], - "modified_at": "2026-01-09T19:18:13.819348+00:00", + "modified_at": "2026-01-09T19:50:56.622176+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "isobel-trundle-a2565679", @@ -103,6 +105,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_ISOBEL-TRUNDLE", + "new_ppid": "ID_AU-02-SYD_195X_AU-01-CAN_XXXX_ISOBEL-TRUNDLE", + "changed_at": "2026-01-09T19:50:56.622174+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -117,7 +130,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -166,7 +179,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.819319+00:00", + "inferred_at": "2026-01-09T19:50:56.609186+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Sydney", + "formatted": "AU-02-SYD", + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "UNIVERSITY OF SYDNEY (SYDNEY COLLEGE OF THE ARTS)", + "date_range": "1976 - 1980 • 4 years", + "degree": "Bachelor's Degree, VISUAL COMMUNICATION" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "UNIVERSITY OF SYDNEY (SYDNEY COLLEGE OF THE ARTS)", + "mapping_result": "Sydney, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Sydney, Australia", + "result": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD" + }, + "result": "AU-02-SYD" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + }, + "inferred_at": "2026-01-09T19:50:56.616725+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:56.622163+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_CAROLYN-TOW.json b/data/person/ID_AU-02-SYD_196X_AU-01-CAN_XXXX_CAROLYN-TOW.json similarity index 86% rename from data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_CAROLYN-TOW.json rename to data/person/ID_AU-02-SYD_196X_AU-01-CAN_XXXX_CAROLYN-TOW.json index cb367a854b..7f0f9c7ccb 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_CAROLYN-TOW.json +++ b/data/person/ID_AU-02-SYD_196X_AU-01-CAN_XXXX_CAROLYN-TOW.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_CAROLYN-TOW", + "ppid": "ID_AU-02-SYD_196X_AU-01-CAN_XXXX_CAROLYN-TOW", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-SYD", "first_date": "196X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "CAROLYN", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "195X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Carolyn L. S. Tow", @@ -88,7 +90,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carolyn-l-s-tow-9b483b76_20251214T103827Z.json" ], - "modified_at": "2026-01-09T19:18:11.366304+00:00", + "modified_at": "2026-01-09T19:50:54.607457+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carolyn-l-s-tow-9b483b76", @@ -101,6 +103,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_CAROLYN-TOW", + "new_ppid": "ID_AU-02-SYD_196X_AU-01-CAN_XXXX_CAROLYN-TOW", + "changed_at": "2026-01-09T19:47:58.614204+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -115,7 +128,7 @@ "primary_rationale": "1961 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1961 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:11.366265+00:00", + "inferred_at": "2026-01-09T19:50:54.607450+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_EMMA-JOLLEY.json b/data/person/ID_AU-02-SYD_197X_AU-01-CAN_XXXX_EMMA-JOLLEY.json similarity index 71% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_EMMA-JOLLEY.json rename to data/person/ID_AU-02-SYD_197X_AU-01-CAN_XXXX_EMMA-JOLLEY.json index c0bba1834c..eee21c2798 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_EMMA-JOLLEY.json +++ b/data/person/ID_AU-02-SYD_197X_AU-01-CAN_XXXX_EMMA-JOLLEY.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_EMMA-JOLLEY", + "ppid": "ID_AU-02-SYD_197X_AU-01-CAN_XXXX_EMMA-JOLLEY", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-SYD", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "EMMA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Emma Jolley", @@ -180,7 +182,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emma-jolley-2932a174_20251214T103905Z.json" ], - "modified_at": "2026-01-09T19:18:15.080564+00:00", + "modified_at": "2026-01-09T19:51:06.718379+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emma-jolley-2932a174", @@ -193,6 +195,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_EMMA-JOLLEY", + "new_ppid": "ID_AU-02-SYD_197X_AU-01-CAN_XXXX_EMMA-JOLLEY", + "changed_at": "2026-01-09T19:51:06.718377+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -207,7 +220,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -256,7 +269,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.080518+00:00", + "inferred_at": "2026-01-09T19:51:06.708466+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Sydney", + "formatted": "AU-02-SYD", + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "UNSW Australia", + "date_range": "1992 - 1992", + "degree": "Graduate Diploma, Graduate Diploma in Information Management – Archives Administration." + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "UNSW Australia", + "mapping_result": "Sydney, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Sydney, Australia", + "result": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD" + }, + "result": "AU-02-SYD" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + }, + "inferred_at": "2026-01-09T19:51:06.713382+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:06.718369+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIBOR-COUFAL.json b/data/person/ID_AU-02-SYD_197X_AU-01-CAN_XXXX_LIBOR-COUFAL.json similarity index 64% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIBOR-COUFAL.json rename to data/person/ID_AU-02-SYD_197X_AU-01-CAN_XXXX_LIBOR-COUFAL.json index b17a5e0c5b..b6a85ee65e 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIBOR-COUFAL.json +++ b/data/person/ID_AU-02-SYD_197X_AU-01-CAN_XXXX_LIBOR-COUFAL.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIBOR-COUFAL", + "ppid": "ID_AU-02-SYD_197X_AU-01-CAN_XXXX_LIBOR-COUFAL", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-SYD", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "LIBOR", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Libor Coufal", @@ -202,7 +204,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/liborcoufal_20251214T103751Z.json" ], - "modified_at": "2026-01-09T19:18:14.630320+00:00", + "modified_at": "2026-01-09T19:51:03.192230+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "liborcoufal", @@ -215,6 +217,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIBOR-COUFAL", + "new_ppid": "ID_AU-02-SYD_197X_AU-01-CAN_XXXX_LIBOR-COUFAL", + "changed_at": "2026-01-09T19:51:03.192226+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -223,7 +236,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -264,7 +277,129 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.630247+00:00", + "inferred_at": "2026-01-09T19:51:03.098448+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Sydney", + "formatted": "AU-02-SYD", + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Silesian University, School of Business Administration", + "title": "Lecturer", + "date_range": "Jan 1997 - Jan 2000 • 3 years", + "location": "District Karvina, Czech Republic" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "University of Sydney", + "title": "Library Assistant", + "date_range": "Jan 2001 - Jan 2004 • 3 years", + "location": "Sydney, Australia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Sydney, Australia", + "result": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AU-02-SYD" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + }, + "inferred_at": "2026-01-09T19:51:03.179788+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:03.192199+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_TERENCE-INGRAM.json b/data/person/ID_AU-02-SYD_197X_AU-07-DEA_XXXX_TERENCE-INGRAM.json similarity index 63% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_TERENCE-INGRAM.json rename to data/person/ID_AU-02-SYD_197X_AU-07-DEA_XXXX_TERENCE-INGRAM.json index 5504427cb7..d7b0ded1ba 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_TERENCE-INGRAM.json +++ b/data/person/ID_AU-02-SYD_197X_AU-07-DEA_XXXX_TERENCE-INGRAM.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_TERENCE-INGRAM", + "ppid": "ID_AU-02-SYD_197X_AU-07-DEA_XXXX_TERENCE-INGRAM", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-SYD", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-07-DEA", "last_date": "XXXX", "name_tokens": [ "TERENCE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Terence Ingram", @@ -146,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/terence-ingram-1b9a1817_20251214T103848Z.json" ], - "modified_at": "2026-01-09T19:18:13.397952+00:00", + "modified_at": "2026-01-09T19:50:54.027873+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "terence-ingram-1b9a1817", @@ -159,6 +161,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_TERENCE-INGRAM", + "new_ppid": "ID_AU-02-SYD_197X_AU-07-DEA_XXXX_TERENCE-INGRAM", + "changed_at": "2026-01-09T19:50:54.027871+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -173,7 +186,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +235,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.397901+00:00", + "inferred_at": "2026-01-09T19:50:54.017441+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Sydney", + "formatted": "AU-02-SYD", + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Social Change Online", + "title": "Senior Java Developer", + "date_range": "Jan 2000 - Nov 2003 • 3 years and 10 months", + "location": "Sydney, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Sydney, Australia", + "result": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-02-SYD" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + }, + "inferred_at": "2026-01-09T19:50:54.023017+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Deakin", + "formatted": "AU-07-DEA", + "country_code": "AU", + "region_code": "07", + "settlement_code": "DEA", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Deakin, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Deakin, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2169236, + "geonames_name": "Deakin", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPL", + "latitude": -36.3, + "longitude": 144.96667 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-07-DEA" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2169236, + "geonames_name": "Deakin", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPL", + "latitude": -36.3, + "longitude": 144.96667 + }, + "inferred_at": "2026-01-09T19:50:54.027863+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KAVAN-MANCHANAYAKE.json b/data/person/ID_AU-02-SYD_198X_AU-01-CAN_XXXX_KAVAN-MANCHANAYAKE.json similarity index 70% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KAVAN-MANCHANAYAKE.json rename to data/person/ID_AU-02-SYD_198X_AU-01-CAN_XXXX_KAVAN-MANCHANAYAKE.json index e48bfd0160..bf49b4c8e9 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KAVAN-MANCHANAYAKE.json +++ b/data/person/ID_AU-02-SYD_198X_AU-01-CAN_XXXX_KAVAN-MANCHANAYAKE.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KAVAN-MANCHANAYAKE", + "ppid": "ID_AU-02-SYD_198X_AU-01-CAN_XXXX_KAVAN-MANCHANAYAKE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-SYD", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "KAVAN", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Kavan Manchanayake", @@ -201,7 +203,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kavanmanchanayake_20251214T103824Z.json" ], - "modified_at": "2026-01-09T19:18:14.292546+00:00", + "modified_at": "2026-01-09T19:51:00.061661+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kavanmanchanayake", @@ -214,6 +216,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KAVAN-MANCHANAYAKE", + "new_ppid": "ID_AU-02-SYD_198X_AU-01-CAN_XXXX_KAVAN-MANCHANAYAKE", + "changed_at": "2026-01-09T19:51:00.061659+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -228,7 +241,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -277,7 +290,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.292442+00:00", + "inferred_at": "2026-01-09T19:51:00.024584+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Sydney", + "formatted": "AU-02-SYD", + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Sydney", + "date_range": "1999 - 2003 • 4 years", + "degree": "B.E., Bachelor of Software Engineering" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Sydney", + "mapping_result": "Sydney, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Sydney, Australia", + "result": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD" + }, + "result": "AU-02-SYD" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + }, + "inferred_at": "2026-01-09T19:51:00.036481+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:00.061639+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LIHONG-ZHANG.json b/data/person/ID_AU-02-SYD_198X_AU-01-CAN_XXXX_LIHONG-ZHANG.json similarity index 74% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LIHONG-ZHANG.json rename to data/person/ID_AU-02-SYD_198X_AU-01-CAN_XXXX_LIHONG-ZHANG.json index f94a7ad5ed..d3ab0b4dda 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LIHONG-ZHANG.json +++ b/data/person/ID_AU-02-SYD_198X_AU-01-CAN_XXXX_LIHONG-ZHANG.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LIHONG-ZHANG", + "ppid": "ID_AU-02-SYD_198X_AU-01-CAN_XXXX_LIHONG-ZHANG", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-SYD", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "LIHONG", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Lihong Zhang", @@ -194,7 +196,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lihong-zhang-7315227a_20251214T103756Z.json" ], - "modified_at": "2026-01-09T19:18:13.688517+00:00", + "modified_at": "2026-01-09T19:50:55.448747+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lihong-zhang-7315227a", @@ -207,6 +209,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LIHONG-ZHANG", + "new_ppid": "ID_AU-02-SYD_198X_AU-01-CAN_XXXX_LIHONG-ZHANG", + "changed_at": "2026-01-09T19:50:55.448744+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -215,7 +228,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -256,7 +269,130 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.688468+00:00", + "inferred_at": "2026-01-09T19:50:55.432050+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Sydney", + "formatted": "AU-02-SYD", + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Macquarie University", + "date_range": "2006 - 2008 • 2 years", + "degree": "Master’s Degree, Education" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Macquarie University", + "mapping_result": "Sydney, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Sydney, Australia", + "result": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD" + }, + "result": "AU-02-SYD" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + }, + "inferred_at": "2026-01-09T19:50:55.440926+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:55.448732+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CONSTANTINA-YIOMELAKIS.json b/data/person/ID_AU-02-SYD_198X_AU-02-PAR_XXXX_CONSTANTINA-YIOMELAKIS.json similarity index 73% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CONSTANTINA-YIOMELAKIS.json rename to data/person/ID_AU-02-SYD_198X_AU-02-PAR_XXXX_CONSTANTINA-YIOMELAKIS.json index 83be77fb2a..2fbfba38b6 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CONSTANTINA-YIOMELAKIS.json +++ b/data/person/ID_AU-02-SYD_198X_AU-02-PAR_XXXX_CONSTANTINA-YIOMELAKIS.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CONSTANTINA-YIOMELAKIS", + "ppid": "ID_AU-02-SYD_198X_AU-02-PAR_XXXX_CONSTANTINA-YIOMELAKIS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-SYD", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-02-PAR", "last_date": "XXXX", "name_tokens": [ "CONSTANTINA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Constantina Yiomelakis", @@ -256,7 +258,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/constantina-yiomelakis-74b601181_20251214T103933Z.json" ], - "modified_at": "2026-01-09T19:18:13.357269+00:00", + "modified_at": "2026-01-09T19:51:05.097092+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "constantina-yiomelakis-74b601181", @@ -278,6 +280,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CONSTANTINA-YIOMELAKIS", + "new_ppid": "ID_AU-02-SYD_198X_AU-02-PAR_XXXX_CONSTANTINA-YIOMELAKIS", + "changed_at": "2026-01-09T19:51:05.097089+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -286,7 +299,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -327,7 +340,130 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.357195+00:00", + "inferred_at": "2026-01-09T19:51:04.989754+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Sydney", + "formatted": "AU-02-SYD", + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Macquarie University", + "date_range": "2018 - 2021 • 3 years", + "degree": "Bachelor of Archaeology, Specialisation in Egypt & the Near East" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Macquarie University", + "mapping_result": "Sydney, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Sydney, Australia", + "result": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD" + }, + "result": "AU-02-SYD" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + }, + "inferred_at": "2026-01-09T19:51:05.084096+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Parkes", + "formatted": "AU-02-PAR", + "country_code": "AU", + "region_code": "02", + "settlement_code": "PAR", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Parkes, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Parkes, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2153778, + "geonames_name": "Parkes", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPL", + "latitude": -33.1372, + "longitude": 148.1759 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-02-PAR" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2153778, + "geonames_name": "Parkes", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPL", + "latitude": -33.1372, + "longitude": 148.1759 + }, + "inferred_at": "2026-01-09T19:51:05.097070+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GAVIN-B.json b/data/person/ID_AU-02-SYD_199X_XX-XX-XXX_XXXX_GAVIN-B.json similarity index 91% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GAVIN-B.json rename to data/person/ID_AU-02-SYD_199X_XX-XX-XXX_XXXX_GAVIN-B.json index dd7e905632..03da927da6 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GAVIN-B.json +++ b/data/person/ID_AU-02-SYD_199X_XX-XX-XXX_XXXX_GAVIN-B.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GAVIN-B", + "ppid": "ID_AU-02-SYD_199X_XX-XX-XXX_XXXX_GAVIN-B", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-SYD", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Gavin B.", @@ -140,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gavin-b-b72b2596_20251214T103956Z.json" ], - "modified_at": "2026-01-09T19:18:11.547978+00:00", + "modified_at": "2026-01-09T19:51:05.283547+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gavin-b-b72b2596", @@ -153,6 +154,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GAVIN-B", + "new_ppid": "ID_AU-02-SYD_199X_XX-XX-XXX_XXXX_GAVIN-B", + "changed_at": "2026-01-09T19:47:58.726142+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -167,7 +178,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.547875+00:00", + "inferred_at": "2026-01-09T19:51:05.267358+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JAMES-SCHOFIELD.json b/data/person/ID_AU-02-SYD_200X_AU-01-CAN_XXXX_JAMES-SCHOFIELD.json similarity index 61% rename from data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JAMES-SCHOFIELD.json rename to data/person/ID_AU-02-SYD_200X_AU-01-CAN_XXXX_JAMES-SCHOFIELD.json index 9953503b54..b7bcff3e9a 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JAMES-SCHOFIELD.json +++ b/data/person/ID_AU-02-SYD_200X_AU-01-CAN_XXXX_JAMES-SCHOFIELD.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JAMES-SCHOFIELD", + "ppid": "ID_AU-02-SYD_200X_AU-01-CAN_XXXX_JAMES-SCHOFIELD", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-02-SYD", "first_date": "200X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "JAMES", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "James Schofield", @@ -148,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/james-schofield-4b6741208_20251214T103755Z.json" ], - "modified_at": "2026-01-09T19:18:14.781411+00:00", + "modified_at": "2026-01-09T19:50:57.432606+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "james-schofield-4b6741208", @@ -170,6 +172,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JAMES-SCHOFIELD", + "new_ppid": "ID_AU-02-SYD_200X_AU-01-CAN_XXXX_JAMES-SCHOFIELD", + "changed_at": "2026-01-09T19:50:57.432603+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -178,7 +191,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +232,130 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.781366+00:00", + "inferred_at": "2026-01-09T19:50:57.421966+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Sydney", + "formatted": "AU-02-SYD", + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Macquarie University", + "date_range": "2021 - 2022 • 1 year", + "degree": "Graduate certificate in Ancient History, Ancient History" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Macquarie University", + "mapping_result": "Sydney, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Sydney, Australia", + "result": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "02", + "settlement_code": "SYD" + }, + "result": "AU-02-SYD" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2147714, + "geonames_name": "Sydney", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPLA", + "latitude": -33.86785, + "longitude": 151.20732 + }, + "inferred_at": "2026-01-09T19:50:57.427473+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:57.432592+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JO-RITALE.json b/data/person/ID_AU-04-BRI_197X_AU-01-CAN_XXXX_JO-RITALE.json similarity index 58% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JO-RITALE.json rename to data/person/ID_AU-04-BRI_197X_AU-01-CAN_XXXX_JO-RITALE.json index 9d122e28b9..3443aef404 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JO-RITALE.json +++ b/data/person/ID_AU-04-BRI_197X_AU-01-CAN_XXXX_JO-RITALE.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JO-RITALE", + "ppid": "ID_AU-04-BRI_197X_AU-01-CAN_XXXX_JO-RITALE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-04-BRI", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "JO", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Jo Ritale", @@ -129,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jo-ritale-36622466_20251214T103812Z.json" ], - "modified_at": "2026-01-09T19:18:18.076760+00:00", + "modified_at": "2026-01-09T19:50:55.248577+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jo-ritale-36622466", @@ -151,6 +153,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JO-RITALE", + "new_ppid": "ID_AU-04-BRI_197X_AU-01-CAN_XXXX_JO-RITALE", + "changed_at": "2026-01-09T19:50:55.248570+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -165,7 +178,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +227,140 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:18.076685+00:00", + "inferred_at": "2026-01-09T19:50:55.223210+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Brisbane", + "formatted": "AU-04-BRI", + "country_code": "AU", + "region_code": "04", + "settlement_code": "BRI", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The University of Queensland", + "date_range": "1999 - 2000 • 1 year", + "degree": "Bachelor of Arts (Honours), Public/Applied History, First Class" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The University of Queensland", + "mapping_result": "Brisbane, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Brisbane, Australia", + "result": { + "geonames_id": 2174003, + "geonames_name": "Brisbane", + "admin1_code": "04", + "admin1_name": "Queensland", + "feature_code": "PPLA", + "latitude": -27.46794, + "longitude": 153.02809 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "04", + "settlement_code": "BRI" + }, + "result": "AU-04-BRI" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2174003, + "geonames_name": "Brisbane", + "admin1_code": "04", + "admin1_name": "Queensland", + "feature_code": "PPLA", + "latitude": -27.46794, + "longitude": 153.02809 + }, + "inferred_at": "2026-01-09T19:50:55.231078+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Greater Melbourne Area (AU)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Assistant Director-General, Collection", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:55.248524+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARCUS-HUGHES.json b/data/person/ID_AU-04-BRI_197X_AU-01-CAN_XXXX_MARCUS-HUGHES.json similarity index 64% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARCUS-HUGHES.json rename to data/person/ID_AU-04-BRI_197X_AU-01-CAN_XXXX_MARCUS-HUGHES.json index e409db8cae..186b4fe3d5 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARCUS-HUGHES.json +++ b/data/person/ID_AU-04-BRI_197X_AU-01-CAN_XXXX_MARCUS-HUGHES.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARCUS-HUGHES", + "ppid": "ID_AU-04-BRI_197X_AU-01-CAN_XXXX_MARCUS-HUGHES", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-04-BRI", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "MARCUS", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "marcus hughes", @@ -171,7 +173,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marcus-hughes-0454781b_20251214T104016Z.json" ], - "modified_at": "2026-01-09T19:18:13.569319+00:00", + "modified_at": "2026-01-09T19:50:55.093922+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marcus-hughes-0454781b", @@ -184,6 +186,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARCUS-HUGHES", + "new_ppid": "ID_AU-04-BRI_197X_AU-01-CAN_XXXX_MARCUS-HUGHES", + "changed_at": "2026-01-09T19:50:55.093919+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -198,7 +211,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +260,128 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.569277+00:00", + "inferred_at": "2026-01-09T19:50:55.067034+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Brisbane", + "formatted": "AU-04-BRI", + "country_code": "AU", + "region_code": "04", + "settlement_code": "BRI", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "FUSIONS: Australian Network of Clay and Glass Artists", + "title": "Director", + "date_range": "Nov 1998 - Mar 2004 • 5 years and 4 months", + "location": "Brisbane, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Brisbane, Australia", + "result": { + "geonames_id": 2174003, + "geonames_name": "Brisbane", + "admin1_code": "04", + "admin1_name": "Queensland", + "feature_code": "PPLA", + "latitude": -27.46794, + "longitude": 153.02809 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-04-BRI" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2174003, + "geonames_name": "Brisbane", + "admin1_code": "04", + "admin1_name": "Queensland", + "feature_code": "PPLA", + "latitude": -27.46794, + "longitude": 153.02809 + }, + "inferred_at": "2026-01-09T19:50:55.080197+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Greater Sydney Area (AU)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Acting Assistan Director - Philanthropy", + "location": "Canberra, Australia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:55.093905+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROWAN-HENDERSON.json b/data/person/ID_AU-04-BRI_197X_AU-01-CAN_XXXX_ROWAN-HENDERSON.json similarity index 67% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROWAN-HENDERSON.json rename to data/person/ID_AU-04-BRI_197X_AU-01-CAN_XXXX_ROWAN-HENDERSON.json index f44787aa55..86a2aaaac2 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROWAN-HENDERSON.json +++ b/data/person/ID_AU-04-BRI_197X_AU-01-CAN_XXXX_ROWAN-HENDERSON.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROWAN-HENDERSON", + "ppid": "ID_AU-04-BRI_197X_AU-01-CAN_XXXX_ROWAN-HENDERSON", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-04-BRI", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "ROWAN", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Rowan Henderson", @@ -171,7 +173,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rowan-henderson-2a65569_20251214T104016Z.json" ], - "modified_at": "2026-01-09T19:18:17.842450+00:00", + "modified_at": "2026-01-09T19:51:28.820845+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rowan-henderson-2a65569", @@ -184,6 +186,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROWAN-HENDERSON", + "new_ppid": "ID_AU-04-BRI_197X_AU-01-CAN_XXXX_ROWAN-HENDERSON", + "changed_at": "2026-01-09T19:51:28.820843+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -198,7 +211,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +260,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.842355+00:00", + "inferred_at": "2026-01-09T19:51:28.793860+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Brisbane", + "formatted": "AU-04-BRI", + "country_code": "AU", + "region_code": "04", + "settlement_code": "BRI", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The University of Queensland", + "date_range": "1997 - 2003 • 6 years", + "degree": "Bachelor of Arts (Honours)/Laws (Honours), History" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The University of Queensland", + "mapping_result": "Brisbane, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Brisbane, Australia", + "result": { + "geonames_id": 2174003, + "geonames_name": "Brisbane", + "admin1_code": "04", + "admin1_name": "Queensland", + "feature_code": "PPLA", + "latitude": -27.46794, + "longitude": 153.02809 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "04", + "settlement_code": "BRI" + }, + "result": "AU-04-BRI" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2174003, + "geonames_name": "Brisbane", + "admin1_code": "04", + "admin1_name": "Queensland", + "feature_code": "PPLA", + "latitude": -27.46794, + "longitude": 153.02809 + }, + "inferred_at": "2026-01-09T19:51:28.815981+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:28.820835+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KATE-DISHERQUILL.json b/data/person/ID_AU-05-AP_198X_AU-05-AP_XXXX_KATE-DISHERQUILL.json similarity index 61% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KATE-DISHERQUILL.json rename to data/person/ID_AU-05-AP_198X_AU-05-AP_XXXX_KATE-DISHERQUILL.json index 6629c1401b..fb3a161787 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KATE-DISHERQUILL.json +++ b/data/person/ID_AU-05-AP_198X_AU-05-AP_XXXX_KATE-DISHERQUILL.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KATE-DISHERQUILL", + "ppid": "ID_AU-05-AP_198X_AU-05-AP_XXXX_KATE-DISHERQUILL", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-05-AP", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-05-AP", "last_date": "XXXX", "name_tokens": [ "KATE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Kate Disher-Quill", @@ -120,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kate-disher-quill-29249718a_20251214T103845Z.json" ], - "modified_at": "2026-01-09T19:18:13.776075+00:00", + "modified_at": "2026-01-09T19:50:56.480885+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kate-disher-quill-29249718a", @@ -133,6 +135,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_KATE-DISHERQUILL", + "new_ppid": "ID_AU-05-AP_198X_AU-05-AP_XXXX_KATE-DISHERQUILL", + "changed_at": "2026-01-09T19:50:56.480883+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -141,7 +154,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +195,128 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.776027+00:00", + "inferred_at": "2026-01-09T19:50:56.465728+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Australia Plains", + "formatted": "AU-05-AP", + "country_code": "AU", + "region_code": "05", + "settlement_code": "AP", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Kate Disher-Quill (Current)", + "title": "Creative Director Producer Photographer Educator Author", + "date_range": "Jan 2011 - Present • 14 years and 1 month", + "location": "Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Australia", + "result": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-05-AP" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + }, + "inferred_at": "2026-01-09T19:50:56.470987+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Australia Plains", + "formatted": "AU-05-AP", + "country_code": "AU", + "region_code": "05", + "settlement_code": "AP", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Greater Melbourne Area (AU)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Kate Disher-Quill (Current)", + "title": "Creative Director Producer Photographer Educator Author", + "location": "Australia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Australia", + "result": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AU-05-AP" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + }, + "inferred_at": "2026-01-09T19:50:56.480870+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CHERIE-CARTER.json b/data/person/ID_AU-05-AP_199X_AU-01-CAN_XXXX_CHERIE-CARTER.json similarity index 56% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CHERIE-CARTER.json rename to data/person/ID_AU-05-AP_199X_AU-01-CAN_XXXX_CHERIE-CARTER.json index be78bc2a2f..f6df44b31f 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CHERIE-CARTER.json +++ b/data/person/ID_AU-05-AP_199X_AU-01-CAN_XXXX_CHERIE-CARTER.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CHERIE-CARTER", + "ppid": "ID_AU-05-AP_199X_AU-01-CAN_XXXX_CHERIE-CARTER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-05-AP", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "CHERIE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Cherie Carter", @@ -99,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cherie-carter-3588421b4_20251214T103913Z.json" ], - "modified_at": "2026-01-09T19:18:16.391398+00:00", + "modified_at": "2026-01-09T19:51:18.440841+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cherie-carter-3588421b4", @@ -112,6 +114,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CHERIE-CARTER", + "new_ppid": "ID_AU-05-AP_199X_AU-01-CAN_XXXX_CHERIE-CARTER", + "changed_at": "2026-01-09T19:51:18.440839+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -126,7 +139,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +188,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.391375+00:00", + "inferred_at": "2026-01-09T19:51:18.428452+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Australia Plains", + "formatted": "AU-05-AP", + "country_code": "AU", + "region_code": "05", + "settlement_code": "AP", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Senior Advisor, Curatorial", + "date_range": "Oct 2020 - Present • 5 years and 1 month", + "location": "Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Australia", + "result": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-05-AP" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + }, + "inferred_at": "2026-01-09T19:51:18.435459+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:18.440828+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GARRY-STURGESS.json b/data/person/ID_AU-07-MEL_196X_AU-01-CAN_XXXX_GARRY-STURGESS.json similarity index 65% rename from data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GARRY-STURGESS.json rename to data/person/ID_AU-07-MEL_196X_AU-01-CAN_XXXX_GARRY-STURGESS.json index 5479ba1bf9..ec270d070e 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GARRY-STURGESS.json +++ b/data/person/ID_AU-07-MEL_196X_AU-01-CAN_XXXX_GARRY-STURGESS.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GARRY-STURGESS", + "ppid": "ID_AU-07-MEL_196X_AU-01-CAN_XXXX_GARRY-STURGESS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-07-MEL", "first_date": "196X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "GARRY", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "195X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Garry Sturgess", @@ -158,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/garry-sturgess-a35a2a22_20251214T103805Z.json" ], - "modified_at": "2026-01-09T19:18:14.651093+00:00", + "modified_at": "2026-01-09T19:51:03.232759+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "garry-sturgess-a35a2a22", @@ -171,6 +173,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GARRY-STURGESS", + "new_ppid": "ID_AU-07-MEL_196X_AU-01-CAN_XXXX_GARRY-STURGESS", + "changed_at": "2026-01-09T19:51:03.232757+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -185,7 +198,7 @@ "primary_rationale": "1961 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +247,129 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1961 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:14.651065+00:00", + "inferred_at": "2026-01-09T19:51:03.223042+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Melbourne", + "formatted": "AU-07-MEL", + "country_code": "AU", + "region_code": "07", + "settlement_code": "MEL", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Australian Broadcasting Corporation", + "title": "Presenter The Law Report", + "date_range": "Jan 1984 - Jan 1985 • 1 year", + "location": "Melbourne" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Victorian Bar", + "title": "Barrister", + "date_range": "Jan 1985 - Jan 1989 • 4 years", + "location": "Melbourne, Australia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Melbourne, Australia", + "result": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AU-07-MEL" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + }, + "inferred_at": "2026-01-09T19:51:03.227954+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:03.232750+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ALICE-GARNER.json b/data/person/ID_AU-07-MEL_197X_AU-05-AP_XXXX_ALICE-GARNER.json similarity index 74% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ALICE-GARNER.json rename to data/person/ID_AU-07-MEL_197X_AU-05-AP_XXXX_ALICE-GARNER.json index 5e680f6465..417e43625c 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ALICE-GARNER.json +++ b/data/person/ID_AU-07-MEL_197X_AU-05-AP_XXXX_ALICE-GARNER.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ALICE-GARNER", + "ppid": "ID_AU-07-MEL_197X_AU-05-AP_XXXX_ALICE-GARNER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-07-MEL", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-05-AP", "last_date": "XXXX", "name_tokens": [ "ALICE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Alice Garner", @@ -243,7 +245,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alice-garner-9167b11b_20251214T103859Z.json" ], - "modified_at": "2026-01-09T19:18:14.726146+00:00", + "modified_at": "2026-01-09T19:51:03.596480+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alice-garner-9167b11b", @@ -256,6 +258,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ALICE-GARNER", + "new_ppid": "ID_AU-07-MEL_197X_AU-05-AP_XXXX_ALICE-GARNER", + "changed_at": "2026-01-09T19:51:03.596477+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -270,7 +283,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -319,7 +332,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.726050+00:00", + "inferred_at": "2026-01-09T19:51:03.577226+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Melbourne", + "formatted": "AU-07-MEL", + "country_code": "AU", + "region_code": "07", + "settlement_code": "MEL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Melbourne", + "date_range": "1989 - 1993 • 4 years", + "degree": "BA (Hons), History, Fine Arts" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Melbourne", + "mapping_result": "Melbourne, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Melbourne, Australia", + "result": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "07", + "settlement_code": "MEL" + }, + "result": "AU-07-MEL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + }, + "inferred_at": "2026-01-09T19:51:03.590775+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Australia Plains", + "formatted": "AU-05-AP", + "country_code": "AU", + "region_code": "05", + "settlement_code": "AP", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Australia (AU)", + "result": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-05-AP" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + }, + "inferred_at": "2026-01-09T19:51:03.596461+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NIKKI-HENNINGHAM.json b/data/person/ID_AU-07-MEL_197X_AU-05-AP_XXXX_NIKKI-HENNINGHAM.json similarity index 71% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NIKKI-HENNINGHAM.json rename to data/person/ID_AU-07-MEL_197X_AU-05-AP_XXXX_NIKKI-HENNINGHAM.json index b209ae9a94..67ba2c2d87 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NIKKI-HENNINGHAM.json +++ b/data/person/ID_AU-07-MEL_197X_AU-05-AP_XXXX_NIKKI-HENNINGHAM.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NIKKI-HENNINGHAM", + "ppid": "ID_AU-07-MEL_197X_AU-05-AP_XXXX_NIKKI-HENNINGHAM", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-07-MEL", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-05-AP", "last_date": "XXXX", "name_tokens": [ "NIKKI", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Nikki Henningham", @@ -185,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nikki-henningham-66a1833a_20251214T103806Z.json" ], - "modified_at": "2026-01-09T19:18:16.559914+00:00", + "modified_at": "2026-01-09T19:51:19.047061+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nikki-henningham-66a1833a", @@ -198,6 +200,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NIKKI-HENNINGHAM", + "new_ppid": "ID_AU-07-MEL_197X_AU-05-AP_XXXX_NIKKI-HENNINGHAM", + "changed_at": "2026-01-09T19:51:19.047058+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -212,7 +225,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -261,7 +274,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.559860+00:00", + "inferred_at": "2026-01-09T19:51:19.034181+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Melbourne", + "formatted": "AU-07-MEL", + "country_code": "AU", + "region_code": "07", + "settlement_code": "MEL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Melbourne", + "date_range": "1995 - 2000 • 5 years", + "degree": "PhD, History" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Melbourne", + "mapping_result": "Melbourne, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Melbourne, Australia", + "result": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "07", + "settlement_code": "MEL" + }, + "result": "AU-07-MEL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + }, + "inferred_at": "2026-01-09T19:51:19.040309+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Australia Plains", + "formatted": "AU-05-AP", + "country_code": "AU", + "region_code": "05", + "settlement_code": "AP", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Australia (AU)", + "result": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-05-AP" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + }, + "inferred_at": "2026-01-09T19:51:19.047045+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIKE-SHUTTLEWORTH.json b/data/person/ID_AU-07-MEL_197X_XX-XX-XXX_XXXX_MIKE-SHUTTLEWORTH.json similarity index 93% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIKE-SHUTTLEWORTH.json rename to data/person/ID_AU-07-MEL_197X_XX-XX-XXX_XXXX_MIKE-SHUTTLEWORTH.json index fa28424c8a..1aafba3092 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIKE-SHUTTLEWORTH.json +++ b/data/person/ID_AU-07-MEL_197X_XX-XX-XXX_XXXX_MIKE-SHUTTLEWORTH.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIKE-SHUTTLEWORTH", + "ppid": "ID_AU-07-MEL_197X_XX-XX-XXX_XXXX_MIKE-SHUTTLEWORTH", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-07-MEL", "first_date": "197X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Mike Shuttleworth", @@ -155,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mshuttleworth_20251214T103828Z.json" ], - "modified_at": "2026-01-09T19:18:11.747888+00:00", + "modified_at": "2026-01-09T19:51:28.898568+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mshuttleworth", @@ -168,6 +169,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIKE-SHUTTLEWORTH", + "new_ppid": "ID_AU-07-MEL_197X_XX-XX-XXX_XXXX_MIKE-SHUTTLEWORTH", + "changed_at": "2026-01-09T19:47:58.790724+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -182,7 +193,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +242,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.747835+00:00", + "inferred_at": "2026-01-09T19:51:28.892549+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AMELIA-HARTNEY.json b/data/person/ID_AU-07-MEL_198X_AU-01-CAN_XXXX_AMELIA-HARTNEY.json similarity index 62% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AMELIA-HARTNEY.json rename to data/person/ID_AU-07-MEL_198X_AU-01-CAN_XXXX_AMELIA-HARTNEY.json index 03047156c9..3267ebbca1 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AMELIA-HARTNEY.json +++ b/data/person/ID_AU-07-MEL_198X_AU-01-CAN_XXXX_AMELIA-HARTNEY.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AMELIA-HARTNEY", + "ppid": "ID_AU-07-MEL_198X_AU-01-CAN_XXXX_AMELIA-HARTNEY", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-07-MEL", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "AMELIA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Amelia Hartney", @@ -165,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amelia-hartney-38b712111_20251214T103940Z.json" ], - "modified_at": "2026-01-09T19:18:15.684189+00:00", + "modified_at": "2026-01-09T19:51:13.436499+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "amelia-hartney-38b712111", @@ -178,6 +180,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AMELIA-HARTNEY", + "new_ppid": "ID_AU-07-MEL_198X_AU-01-CAN_XXXX_AMELIA-HARTNEY", + "changed_at": "2026-01-09T19:51:13.436496+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -192,7 +205,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +254,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.684132+00:00", + "inferred_at": "2026-01-09T19:51:13.416134+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Melbourne", + "formatted": "AU-07-MEL", + "country_code": "AU", + "region_code": "07", + "settlement_code": "MEL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Melbourne", + "date_range": "2003 - 2003", + "degree": "Graduate Diploma in Education (Secondary: German, TESOL)" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Melbourne", + "mapping_result": "Melbourne, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Melbourne, Australia", + "result": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "07", + "settlement_code": "MEL" + }, + "result": "AU-07-MEL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + }, + "inferred_at": "2026-01-09T19:51:13.429367+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:13.436480+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BARBARA-LEMON.json b/data/person/ID_AU-07-MEL_198X_AU-01-CAN_XXXX_BARBARA-LEMON.json similarity index 73% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BARBARA-LEMON.json rename to data/person/ID_AU-07-MEL_198X_AU-01-CAN_XXXX_BARBARA-LEMON.json index 8156a5df06..a6865977e5 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BARBARA-LEMON.json +++ b/data/person/ID_AU-07-MEL_198X_AU-01-CAN_XXXX_BARBARA-LEMON.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BARBARA-LEMON", + "ppid": "ID_AU-07-MEL_198X_AU-01-CAN_XXXX_BARBARA-LEMON", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-07-MEL", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "BARBARA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Barbara Lemon", @@ -200,7 +202,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/barbara-lemon-aus_20251214T104003Z.json" ], - "modified_at": "2026-01-09T19:18:16.539137+00:00", + "modified_at": "2026-01-09T19:51:18.597888+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "barbara-lemon-aus", @@ -213,6 +215,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BARBARA-LEMON", + "new_ppid": "ID_AU-07-MEL_198X_AU-01-CAN_XXXX_BARBARA-LEMON", + "changed_at": "2026-01-09T19:51:18.597886+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -227,7 +240,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -276,7 +289,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.539061+00:00", + "inferred_at": "2026-01-09T19:51:18.584760+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Melbourne", + "formatted": "AU-07-MEL", + "country_code": "AU", + "region_code": "07", + "settlement_code": "MEL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Melbourne", + "date_range": "1999 - 2003 • 4 years", + "degree": "Bachelor of Arts (Honours), History and French" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Melbourne", + "mapping_result": "Melbourne, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Melbourne, Australia", + "result": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "07", + "settlement_code": "MEL" + }, + "result": "AU-07-MEL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + }, + "inferred_at": "2026-01-09T19:51:18.589722+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:18.597872+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUTH-HAZLETON.json b/data/person/ID_AU-07-MEL_198X_AU-01-CAN_XXXX_RUTH-HAZLETON.json similarity index 68% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUTH-HAZLETON.json rename to data/person/ID_AU-07-MEL_198X_AU-01-CAN_XXXX_RUTH-HAZLETON.json index dc66e0a23b..be6871b543 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUTH-HAZLETON.json +++ b/data/person/ID_AU-07-MEL_198X_AU-01-CAN_XXXX_RUTH-HAZLETON.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUTH-HAZLETON", + "ppid": "ID_AU-07-MEL_198X_AU-01-CAN_XXXX_RUTH-HAZLETON", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-07-MEL", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "RUTH", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Ruth Hazleton", @@ -167,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ruth-hazleton_20251214T103953Z.json" ], - "modified_at": "2026-01-09T19:18:13.649500+00:00", + "modified_at": "2026-01-09T19:51:30.304510+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ruth-hazleton", @@ -189,6 +191,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUTH-HAZLETON", + "new_ppid": "ID_AU-07-MEL_198X_AU-01-CAN_XXXX_RUTH-HAZLETON", + "changed_at": "2026-01-09T19:51:30.304507+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -203,7 +216,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +265,128 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.649458+00:00", + "inferred_at": "2026-01-09T19:51:30.248464+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Melbourne", + "formatted": "AU-07-MEL", + "country_code": "AU", + "region_code": "07", + "settlement_code": "MEL", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Self-employed (Current)", + "title": "Professional Musician", + "date_range": "Jan 1995 - Present • 30 years and 9 months", + "location": "Melbourne, Victoria, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Melbourne, Victoria, Australia", + "result": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-07-MEL" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + }, + "inferred_at": "2026-01-09T19:51:30.292722+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Greater Melbourne Area (AU)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Contractor", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:30.304494+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNA-KENT.json b/data/person/ID_AU-07-MEL_198X_XX-XX-XXX_XXXX_ANNA-KENT.json similarity index 81% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNA-KENT.json rename to data/person/ID_AU-07-MEL_198X_XX-XX-XXX_XXXX_ANNA-KENT.json index 8ea02caa2b..834ddad6f6 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNA-KENT.json +++ b/data/person/ID_AU-07-MEL_198X_XX-XX-XXX_XXXX_ANNA-KENT.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNA-KENT", + "ppid": "ID_AU-07-MEL_198X_XX-XX-XXX_XXXX_ANNA-KENT", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-07-MEL", "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Anna Kent", @@ -181,7 +182,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-kent-99207237_20251214T103925Z.json" ], - "modified_at": "2026-01-09T19:18:15.261141+00:00", + "modified_at": "2026-01-09T19:51:07.658851+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anna-kent-99207237", @@ -194,6 +195,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNA-KENT", + "new_ppid": "ID_AU-07-MEL_198X_XX-XX-XXX_XXXX_ANNA-KENT", + "changed_at": "2026-01-09T19:51:07.658844+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -208,7 +219,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -257,7 +268,65 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.261104+00:00", + "inferred_at": "2026-01-09T19:51:07.644256+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Melbourne", + "formatted": "AU-07-MEL", + "country_code": "AU", + "region_code": "07", + "settlement_code": "MEL", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Victoria University", + "title": "Transnational Projects Manager", + "date_range": "Jan 2008 - Apr 2011 • 3 years and 3 months", + "location": "Melbourne, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Melbourne, Australia", + "result": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-07-MEL" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + }, + "inferred_at": "2026-01-09T19:51:07.653825+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_SALWA-CHAIRUNNISA.json b/data/person/ID_AU-07-MEL_200X_XX-XX-XXX_XXXX_SALWA-CHAIRUNNISA.json similarity index 71% rename from data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_SALWA-CHAIRUNNISA.json rename to data/person/ID_AU-07-MEL_200X_XX-XX-XXX_XXXX_SALWA-CHAIRUNNISA.json index c1fa41b0e2..fc6d8fafbe 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_SALWA-CHAIRUNNISA.json +++ b/data/person/ID_AU-07-MEL_200X_XX-XX-XXX_XXXX_SALWA-CHAIRUNNISA.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_SALWA-CHAIRUNNISA", + "ppid": "ID_AU-07-MEL_200X_XX-XX-XXX_XXXX_SALWA-CHAIRUNNISA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "AU-07-MEL", "first_date": "200X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Salwa Chairunnisa", @@ -124,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/salwa-chairunnisa-179886ba_20251214T111937Z.json" ], - "modified_at": "2026-01-09T19:18:15.149297+00:00", + "modified_at": "2026-01-09T19:51:06.923822+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "salwa-chairunnisa-179886ba", @@ -137,6 +138,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_SALWA-CHAIRUNNISA", + "new_ppid": "ID_AU-07-MEL_200X_XX-XX-XXX_XXXX_SALWA-CHAIRUNNISA", + "changed_at": "2026-01-09T19:51:06.923807+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -151,7 +162,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +211,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.149255+00:00", + "inferred_at": "2026-01-09T19:51:06.760795+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Melbourne", + "formatted": "AU-07-MEL", + "country_code": "AU", + "region_code": "07", + "settlement_code": "MEL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Monash University", + "date_range": "2024 - 2025 • 1 year", + "degree": "Master of Arts - MA, International Sustainable Tourism Management" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Monash University", + "mapping_result": "Melbourne, Australia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Melbourne, Australia", + "result": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "AU", + "region_code": "07", + "settlement_code": "MEL" + }, + "result": "AU-07-MEL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2158177, + "geonames_name": "Melbourne", + "admin1_code": "07", + "admin1_name": "Victoria", + "feature_code": "PPLA", + "latitude": -37.814, + "longitude": 144.96332 + }, + "inferred_at": "2026-01-09T19:51:06.772890+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_BE-BR-BRU_196X_NL-ZH-TH_XXXX_JELLE-BAKKER.json b/data/person/ID_BE-BR-BRU_196X_NL-ZH-TH_XXXX_JELLE-BAKKER.json index 25f3ba233d..eed6d6b314 100644 --- a/data/person/ID_BE-BR-BRU_196X_NL-ZH-TH_XXXX_JELLE-BAKKER.json +++ b/data/person/ID_BE-BR-BRU_196X_NL-ZH-TH_XXXX_JELLE-BAKKER.json @@ -204,7 +204,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bakkerjelle_20251214T103236Z.json" ], - "modified_at": "2026-01-09T19:18:18.384392+00:00", + "modified_at": "2026-01-09T19:50:56.729221+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bakkerjelle", @@ -242,7 +242,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -291,7 +291,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:18.384302+00:00", + "inferred_at": "2026-01-09T19:50:56.729214+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_BE-BR-BRU_197X_XX-XX-XXX_XXXX_NEESHA-AMRISH.json b/data/person/ID_BE-BR-BRU_197X_IN-25-CHE_XXXX_NEESHA-AMRISH.json similarity index 88% rename from data/person/ID_BE-BR-BRU_197X_XX-XX-XXX_XXXX_NEESHA-AMRISH.json rename to data/person/ID_BE-BR-BRU_197X_IN-25-CHE_XXXX_NEESHA-AMRISH.json index 2034700b0b..f5ff0bfa56 100644 --- a/data/person/ID_BE-BR-BRU_197X_XX-XX-XXX_XXXX_NEESHA-AMRISH.json +++ b/data/person/ID_BE-BR-BRU_197X_IN-25-CHE_XXXX_NEESHA-AMRISH.json @@ -1,11 +1,11 @@ { - "ppid": "ID_BE-BR-BRU_197X_XX-XX-XXX_XXXX_NEESHA-AMRISH", + "ppid": "ID_BE-BR-BRU_197X_IN-25-CHE_XXXX_NEESHA-AMRISH", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "BE-BR-BRU", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "IN-25-CHE", "last_date": "XXXX", "name_tokens": [ "NEESHA", @@ -15,7 +15,8 @@ "first_location_source": "inferred_birth_settlement", "first_date_alternatives": [ "198X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Neesha Amrish", @@ -210,7 +211,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/neesha-amrish-925a15172_20251214T110332Z.json" ], - "modified_at": "2026-01-09T19:18:17.204769+00:00", + "modified_at": "2026-01-09T19:51:25.387741+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "neesha-amrish-925a15172", @@ -224,6 +225,16 @@ "inferred_birth_decade", "inferred_birth_settlement" ] + }, + { + "previous_ppid": "ID_BE-BR-BRU_197X_XX-XX-XXX_XXXX_NEESHA-AMRISH", + "new_ppid": "ID_BE-BR-BRU_197X_IN-25-CHE_XXXX_NEESHA-AMRISH", + "changed_at": "2026-01-09T19:51:25.387728+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -232,7 +243,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -273,7 +284,60 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.197153+00:00", + "inferred_at": "2026-01-09T19:51:24.480102+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Chennai", + "formatted": "IN-25-CHE", + "country_code": "IN", + "region_code": "25", + "settlement_code": "CHE", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Chennai, Tamil Nadu, India (IN)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Chennai, Tamil Nadu, India (IN)", + "result": { + "geonames_id": 1264527, + "geonames_name": "Chennai", + "admin1_code": "25", + "admin1_name": "Tamil Nadu", + "feature_code": "PPLA", + "latitude": 13.08784, + "longitude": 80.27847 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "IN-25-CHE" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1264527, + "geonames_name": "Chennai", + "admin1_code": "25", + "admin1_name": "Tamil Nadu", + "feature_code": "PPLA", + "latitude": 13.08784, + "longitude": 80.27847 + }, + "inferred_at": "2026-01-09T19:51:25.387686+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_BE-BR-BRU_197X_NL-NH-AMS_XXXX_PATRICIA-DOCAMPO.json b/data/person/ID_BE-BR-BRU_197X_NL-NH-AMS_XXXX_PATRICIA-DOCAMPO.json index 92d472084b..d45a316f87 100644 --- a/data/person/ID_BE-BR-BRU_197X_NL-NH-AMS_XXXX_PATRICIA-DOCAMPO.json +++ b/data/person/ID_BE-BR-BRU_197X_NL-NH-AMS_XXXX_PATRICIA-DOCAMPO.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/patricialuquero_20251214T111731Z.json" ], - "modified_at": "2026-01-09T19:18:15.825189+00:00", + "modified_at": "2026-01-09T19:51:14.498913+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "patricialuquero", @@ -184,7 +184,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.825185+00:00", + "inferred_at": "2026-01-09T19:51:14.498907+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_BE-BR-BRU_197X_NL-ZH-TH_XXXX_JOSINE-WISKERKE.json b/data/person/ID_BE-BR-BRU_197X_NL-ZH-TH_XXXX_JOSINE-WISKERKE.json index e6c3fd34f1..187aff704c 100644 --- a/data/person/ID_BE-BR-BRU_197X_NL-ZH-TH_XXXX_JOSINE-WISKERKE.json +++ b/data/person/ID_BE-BR-BRU_197X_NL-ZH-TH_XXXX_JOSINE-WISKERKE.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/josine-wiskerke-5243901b_20251214T103140Z.json" ], - "modified_at": "2026-01-09T19:18:16.676631+00:00", + "modified_at": "2026-01-09T19:51:21.404971+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "josine-wiskerke-5243901b", @@ -166,7 +166,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.676626+00:00", + "inferred_at": "2026-01-09T19:51:21.404963+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_BE-BR-BRU_198X_BE-BR-BRU_XXXX_JEROEN-REYNIERS.json b/data/person/ID_BE-BR-BRU_198X_BE-BR-BRU_XXXX_JEROEN-REYNIERS.json index c0a3e9ebc4..1ae47708f5 100644 --- a/data/person/ID_BE-BR-BRU_198X_BE-BR-BRU_XXXX_JEROEN-REYNIERS.json +++ b/data/person/ID_BE-BR-BRU_198X_BE-BR-BRU_XXXX_JEROEN-REYNIERS.json @@ -183,7 +183,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeroen-reyniers_20251214T110444Z.json" ], - "modified_at": "2026-01-09T19:18:14.248468+00:00", + "modified_at": "2026-01-09T19:51:04.047382+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeroen-reyniers", @@ -221,7 +221,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -270,7 +270,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.248456+00:00", + "inferred_at": "2026-01-09T19:51:04.047376+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_BE-BR-BRU_198X_NL-NH-AMS_XXXX_MICK-REEHORST.json b/data/person/ID_BE-BR-BRU_198X_NL-NH-AMS_XXXX_MICK-REEHORST.json index 80afc2ae75..9fbac3ae48 100644 --- a/data/person/ID_BE-BR-BRU_198X_NL-NH-AMS_XXXX_MICK-REEHORST.json +++ b/data/person/ID_BE-BR-BRU_198X_NL-NH-AMS_XXXX_MICK-REEHORST.json @@ -183,7 +183,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mickterreehorst_20251214T110214Z.json" ], - "modified_at": "2026-01-09T19:18:16.613342+00:00", + "modified_at": "2026-01-09T19:51:07.031006+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mickterreehorst", @@ -221,7 +221,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -270,7 +270,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.613336+00:00", + "inferred_at": "2026-01-09T19:51:07.031001+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_BE-BR-BRU_198X_XX-XX-XXX_XXXX_BERTINE-BOS.json b/data/person/ID_BE-BR-BRU_198X_XX-XX-XXX_XXXX_BERTINE-BOS.json index 5b2a61c6b4..c0d878ccd0 100644 --- a/data/person/ID_BE-BR-BRU_198X_XX-XX-XXX_XXXX_BERTINE-BOS.json +++ b/data/person/ID_BE-BR-BRU_198X_XX-XX-XXX_XXXX_BERTINE-BOS.json @@ -176,7 +176,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bertinebos_20251214T103327Z.json" ], - "modified_at": "2026-01-09T19:18:16.829077+00:00", + "modified_at": "2026-01-09T19:51:22.068826+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bertinebos", @@ -204,7 +204,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -253,7 +253,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.827242+00:00", + "inferred_at": "2026-01-09T19:51:22.066944+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_BE-BR-BRU_199X_NL-NH-AMS_XXXX_FARBOD-SAATSAZ.json b/data/person/ID_BE-BR-BRU_199X_NL-NH-AMS_XXXX_FARBOD-SAATSAZ.json index 7d7f51b2c8..24325a7219 100644 --- a/data/person/ID_BE-BR-BRU_199X_NL-NH-AMS_XXXX_FARBOD-SAATSAZ.json +++ b/data/person/ID_BE-BR-BRU_199X_NL-NH-AMS_XXXX_FARBOD-SAATSAZ.json @@ -231,7 +231,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/farbodbio_20251214T103145Z.json" ], - "modified_at": "2026-01-09T19:18:14.767267+00:00", + "modified_at": "2026-01-09T19:51:04.053128+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "farbodbio", @@ -260,7 +260,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -309,7 +309,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.767264+00:00", + "inferred_at": "2026-01-09T19:51:04.053124+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_BE-VL-ANT_198X_BE-VL-ANT_XXXX_FREDERIK-VANMEERT.json b/data/person/ID_BE-VL-ANT_198X_BE-VL-ANT_XXXX_FREDERIK-VANMEERT.json index bf38fa70dc..7b8e74ea5e 100644 --- a/data/person/ID_BE-VL-ANT_198X_BE-VL-ANT_XXXX_FREDERIK-VANMEERT.json +++ b/data/person/ID_BE-VL-ANT_198X_BE-VL-ANT_XXXX_FREDERIK-VANMEERT.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frederik-vanmeert-79874763_20251214T111805Z.json" ], - "modified_at": "2026-01-09T19:18:16.382797+00:00", + "modified_at": "2026-01-09T19:50:54.547578+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frederik-vanmeert-79874763", @@ -171,7 +171,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.382789+00:00", + "inferred_at": "2026-01-09T19:50:54.547572+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LOUIS-SCHEUNEMAN.json b/data/person/ID_BE-VL-ANT_199X_XX-XX-XXX_XXXX_LOUIS-SCHEUNEMAN.json similarity index 67% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LOUIS-SCHEUNEMAN.json rename to data/person/ID_BE-VL-ANT_199X_XX-XX-XXX_XXXX_LOUIS-SCHEUNEMAN.json index 46d06eba0a..1e735981bb 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LOUIS-SCHEUNEMAN.json +++ b/data/person/ID_BE-VL-ANT_199X_XX-XX-XXX_XXXX_LOUIS-SCHEUNEMAN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LOUIS-SCHEUNEMAN", + "ppid": "ID_BE-VL-ANT_199X_XX-XX-XXX_XXXX_LOUIS-SCHEUNEMAN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "BE-VL-ANT", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Louis Scheuneman", @@ -113,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/louis-scheuneman-2029318_20251214T112109Z.json" ], - "modified_at": "2026-01-09T19:18:13.376852+00:00", + "modified_at": "2026-01-09T19:51:15.204202+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "louis-scheuneman-2029318", @@ -135,6 +136,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LOUIS-SCHEUNEMAN", + "new_ppid": "ID_BE-VL-ANT_199X_XX-XX-XXX_XXXX_LOUIS-SCHEUNEMAN", + "changed_at": "2026-01-09T19:51:15.204192+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -149,7 +160,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +209,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.373033+00:00", + "inferred_at": "2026-01-09T19:51:15.192665+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Antwerpen", + "formatted": "BE-VL-ANT", + "country_code": "BE", + "region_code": "VL", + "settlement_code": "ANT", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Universiteit Antwerpen", + "date_range": "2014 - 2016 • 2 years", + "degree": "Postgraduaat, Informatie- en Bibliotheekwetenschap" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Universiteit Antwerpen", + "mapping_result": "Antwerpen, Belgium" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Antwerpen, Belgium", + "result": { + "geonames_id": 2803138, + "geonames_name": "Antwerpen", + "admin1_code": "VLG", + "admin1_name": "Flanders", + "feature_code": "PPL", + "latitude": 51.22047, + "longitude": 4.40026 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "BE", + "region_code": "VL", + "settlement_code": "ANT" + }, + "result": "BE-VL-ANT" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2803138, + "geonames_name": "Antwerpen", + "admin1_code": "VLG", + "admin1_name": "Flanders", + "feature_code": "PPL", + "latitude": 51.22047, + "longitude": 4.40026 + }, + "inferred_at": "2026-01-09T19:51:15.201823+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_BE-VL-HOV_195X_NL-ZH-TH_XXXX_ALEX-MALLEMS.json b/data/person/ID_BE-VL-HOV_195X_NL-ZH-TH_XXXX_ALEX-MALLEMS.json index 7aa897fdec..cbe8c3c10d 100644 --- a/data/person/ID_BE-VL-HOV_195X_NL-ZH-TH_XXXX_ALEX-MALLEMS.json +++ b/data/person/ID_BE-VL-HOV_195X_NL-ZH-TH_XXXX_ALEX-MALLEMS.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alex-mallems-a5586a16_20251214T112502Z.json" ], - "modified_at": "2026-01-09T19:18:19.020702+00:00", + "modified_at": "2026-01-09T19:51:34.515095+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alex-mallems-a5586a16", @@ -199,7 +199,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -248,7 +248,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:19.020693+00:00", + "inferred_at": "2026-01-09T19:51:34.515087+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_BE-VL-LEU_198X_NL-NB-EIN_XXXX_JULIEN-MAILFERT.json b/data/person/ID_BE-VL-LEU_198X_NL-NB-EIN_XXXX_JULIEN-MAILFERT.json index 6cad609510..cf0edae775 100644 --- a/data/person/ID_BE-VL-LEU_198X_NL-NB-EIN_XXXX_JULIEN-MAILFERT.json +++ b/data/person/ID_BE-VL-LEU_198X_NL-NB-EIN_XXXX_JULIEN-MAILFERT.json @@ -222,7 +222,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/julien-mailfert-77292917_20251214T111004Z.json" ], - "modified_at": "2026-01-09T19:18:15.215568+00:00", + "modified_at": "2026-01-09T19:51:13.296883+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "julien-mailfert-77292917", @@ -260,7 +260,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -309,7 +309,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.215562+00:00", + "inferred_at": "2026-01-09T19:51:13.296879+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_BE-VL-LEU_198X_NL-NB-EIN_XXXX_S-AFZAL.json b/data/person/ID_BE-VL-LEU_198X_NL-NB-EIN_XXXX_S-AFZAL.json index b52ce2eb8f..6cbfe37927 100644 --- a/data/person/ID_BE-VL-LEU_198X_NL-NB-EIN_XXXX_S-AFZAL.json +++ b/data/person/ID_BE-VL-LEU_198X_NL-NB-EIN_XXXX_S-AFZAL.json @@ -251,7 +251,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rehanafzal_20251214T110816Z.json" ], - "modified_at": "2026-01-09T19:18:17.449297+00:00", + "modified_at": "2026-01-09T19:51:28.147706+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rehanafzal", @@ -280,7 +280,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -329,7 +329,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.449291+00:00", + "inferred_at": "2026-01-09T19:51:28.147700+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_BE-VL-MEC_199X_NL-NH-AMS_XXXX_EMMA-BENTHEM.json b/data/person/ID_BE-VL-MEC_199X_NL-NH-AMS_XXXX_EMMA-BENTHEM.json index dca4a7f34e..409a42f925 100644 --- a/data/person/ID_BE-VL-MEC_199X_NL-NH-AMS_XXXX_EMMA-BENTHEM.json +++ b/data/person/ID_BE-VL-MEC_199X_NL-NH-AMS_XXXX_EMMA-BENTHEM.json @@ -184,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emma-van-benthem-a603901a1_20251214T110115Z.json" ], - "modified_at": "2026-01-09T19:18:14.036979+00:00", + "modified_at": "2026-01-09T19:50:58.533169+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emma-van-benthem-a603901a1", @@ -213,7 +213,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.036973+00:00", + "inferred_at": "2026-01-09T19:50:58.533158+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_BE-VL-OUD_198X_BE-VL-OUD_XXXX_FREDERIC-LOGGHE.json b/data/person/ID_BE-VL-OUD_198X_BE-VL-OUD_XXXX_FREDERIC-LOGGHE.json index 813bcae9f5..fb11d4e531 100644 --- a/data/person/ID_BE-VL-OUD_198X_BE-VL-OUD_XXXX_FREDERIC-LOGGHE.json +++ b/data/person/ID_BE-VL-OUD_198X_BE-VL-OUD_XXXX_FREDERIC-LOGGHE.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fredericlogghe_20251214T110448Z.json" ], - "modified_at": "2026-01-09T19:18:14.748336+00:00", + "modified_at": "2026-01-09T19:51:04.024087+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fredericlogghe", @@ -138,7 +138,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.748329+00:00", + "inferred_at": "2026-01-09T19:51:04.024082+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_DE-01-GER_198X_NL-NB-EIN_XXXX_ALEXANDER-KLEIN.json b/data/person/ID_DE-01-GER_198X_NL-NB-EIN_XXXX_ALEXANDER-KLEIN.json index f70d2dd700..7cac88cfc8 100644 --- a/data/person/ID_DE-01-GER_198X_NL-NB-EIN_XXXX_ALEXANDER-KLEIN.json +++ b/data/person/ID_DE-01-GER_198X_NL-NB-EIN_XXXX_ALEXANDER-KLEIN.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alexander-ludwig-klein-9a8a1973_20251214T111148Z.json" ], - "modified_at": "2026-01-09T19:18:14.842360+00:00", + "modified_at": "2026-01-09T19:51:04.988617+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alexander-ludwig-klein-9a8a1973", @@ -163,7 +163,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.842356+00:00", + "inferred_at": "2026-01-09T19:51:04.988608+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_DE-01-STU_198X_NL-NB-EIN_XXXX_ANA-RESTREPO.json b/data/person/ID_DE-01-STU_198X_NL-NB-EIN_XXXX_ANA-RESTREPO.json index c5dc700285..0b24de9caf 100644 --- a/data/person/ID_DE-01-STU_198X_NL-NB-EIN_XXXX_ANA-RESTREPO.json +++ b/data/person/ID_DE-01-STU_198X_NL-NB-EIN_XXXX_ANA-RESTREPO.json @@ -197,7 +197,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ana-maria-aristizabal-restrepo-a16104111_20251214T111027Z.json" ], - "modified_at": "2026-01-09T19:18:14.903771+00:00", + "modified_at": "2026-01-09T19:50:55.196058+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ana-maria-aristizabal-restrepo-a16104111", @@ -229,7 +229,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -270,7 +270,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.903766+00:00", + "inferred_at": "2026-01-09T19:50:55.196052+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_DE-01-STU_199X_NL-NB-EIN_XXXX_RUBEN-BORGONJEN.json b/data/person/ID_DE-01-STU_199X_NL-NB-EIN_XXXX_RUBEN-BORGONJEN.json index e24e3ab01b..c39b36580f 100644 --- a/data/person/ID_DE-01-STU_199X_NL-NB-EIN_XXXX_RUBEN-BORGONJEN.json +++ b/data/person/ID_DE-01-STU_199X_NL-NB-EIN_XXXX_RUBEN-BORGONJEN.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ruben-borgonjen-5194b650_20251214T111041Z.json" ], - "modified_at": "2026-01-09T19:18:15.995435+00:00", + "modified_at": "2026-01-09T19:51:15.724343+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ruben-borgonjen-5194b650", @@ -173,7 +173,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.995429+00:00", + "inferred_at": "2026-01-09T19:51:15.724339+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_DE-06-BRA_198X_NL-NB-EIN_XXXX_HENRIQUE-MASINI.json b/data/person/ID_DE-06-BRA_198X_NL-NB-EIN_XXXX_HENRIQUE-MASINI.json index 364e35509a..689b2604e9 100644 --- a/data/person/ID_DE-06-BRA_198X_NL-NB-EIN_XXXX_HENRIQUE-MASINI.json +++ b/data/person/ID_DE-06-BRA_198X_NL-NB-EIN_XXXX_HENRIQUE-MASINI.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henrique-forlani-masini-2852373a_20251214T111148Z.json" ], - "modified_at": "2026-01-09T19:18:16.829678+00:00", + "modified_at": "2026-01-09T19:51:22.069443+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henrique-forlani-masini-2852373a", @@ -164,7 +164,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.829674+00:00", + "inferred_at": "2026-01-09T19:51:22.069439+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_DE-08-STA_199X_NL-NB-EIN_XXXX_LARS-MAXFIELD.json b/data/person/ID_DE-08-STA_199X_NL-NB-EIN_XXXX_LARS-MAXFIELD.json index e869c796e0..576cb1c12d 100644 --- a/data/person/ID_DE-08-STA_199X_NL-NB-EIN_XXXX_LARS-MAXFIELD.json +++ b/data/person/ID_DE-08-STA_199X_NL-NB-EIN_XXXX_LARS-MAXFIELD.json @@ -193,7 +193,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/larsmaxfield_20251214T110018Z.json" ], - "modified_at": "2026-01-09T19:18:13.334590+00:00", + "modified_at": "2026-01-09T19:50:53.887952+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "larsmaxfield", @@ -216,7 +216,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -257,7 +257,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.334566+00:00", + "inferred_at": "2026-01-09T19:50:53.887947+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_DE-13-DRE_199X_NL-NB-VEL_XXXX_ANNALISA-BRODU.json b/data/person/ID_DE-13-DRE_199X_NL-NB-VEL_XXXX_ANNALISA-BRODU.json index 3b36d0246e..500cead6fe 100644 --- a/data/person/ID_DE-13-DRE_199X_NL-NB-VEL_XXXX_ANNALISA-BRODU.json +++ b/data/person/ID_DE-13-DRE_199X_NL-NB-VEL_XXXX_ANNALISA-BRODU.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/brodu_20251214T111051Z.json" ], - "modified_at": "2026-01-09T19:18:11.258820+00:00", + "modified_at": "2026-01-09T19:50:46.703586+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "brodu", @@ -172,7 +172,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.258808+00:00", + "inferred_at": "2026-01-09T19:50:46.703580+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_DE-16-BER_196X_NL-NH-AMS_XXXX_ANDREA-SCHARNHORST.json b/data/person/ID_DE-16-BER_196X_NL-NH-AMS_XXXX_ANDREA-SCHARNHORST.json index f1ecef25ba..78ca823ac0 100644 --- a/data/person/ID_DE-16-BER_196X_NL-NH-AMS_XXXX_ANDREA-SCHARNHORST.json +++ b/data/person/ID_DE-16-BER_196X_NL-NH-AMS_XXXX_ANDREA-SCHARNHORST.json @@ -211,7 +211,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ascharnhorst_20251214T110453Z.json" ], - "modified_at": "2026-01-09T19:18:15.738688+00:00", + "modified_at": "2026-01-09T19:51:14.175337+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ascharnhorst", @@ -240,7 +240,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -289,7 +289,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.738684+00:00", + "inferred_at": "2026-01-09T19:51:14.175330+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_DE-16-BER_198X_NL-NH-AMS_XXXX_LISA-SNOEK.json b/data/person/ID_DE-16-BER_198X_NL-NH-AMS_XXXX_LISA-SNOEK.json index 04209bf618..d325aca054 100644 --- a/data/person/ID_DE-16-BER_198X_NL-NH-AMS_XXXX_LISA-SNOEK.json +++ b/data/person/ID_DE-16-BER_198X_NL-NH-AMS_XXXX_LISA-SNOEK.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lisa-snoek-94782845_20251214T112056Z.json" ], - "modified_at": "2026-01-09T19:18:14.892789+00:00", + "modified_at": "2026-01-09T19:51:14.171651+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lisa-snoek-94782845", @@ -200,7 +200,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -249,7 +249,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.892782+00:00", + "inferred_at": "2026-01-09T19:51:14.171631+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MUHAMMAD-QOSIM.json b/data/person/ID_ES-51-GRA_200X_ID-08-GS_XXXX_MUHAMMAD-QOSIM.json similarity index 62% rename from data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MUHAMMAD-QOSIM.json rename to data/person/ID_ES-51-GRA_200X_ID-08-GS_XXXX_MUHAMMAD-QOSIM.json index f7ae263af2..e92eb93f61 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MUHAMMAD-QOSIM.json +++ b/data/person/ID_ES-51-GRA_200X_ID-08-GS_XXXX_MUHAMMAD-QOSIM.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MUHAMMAD-QOSIM", + "ppid": "ID_ES-51-GRA_200X_ID-08-GS_XXXX_MUHAMMAD-QOSIM", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ES-51-GRA", "first_date": "200X", - "last_location": "XX-XX-XXX", + "last_location": "ID-08-GS", "last_date": "XXXX", "name_tokens": [ "MUHAMMAD", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Muhammad Widya Arjuna Qosim", @@ -145,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/muhammad-widya-arjuna-qosim-8b096a219_20251214T112017Z.json" ], - "modified_at": "2026-01-09T19:18:15.954675+00:00", + "modified_at": "2026-01-09T19:51:15.703815+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "muhammad-widya-arjuna-qosim-8b096a219", @@ -158,6 +160,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MUHAMMAD-QOSIM", + "new_ppid": "ID_ES-51-GRA_200X_ID-08-GS_XXXX_MUHAMMAD-QOSIM", + "changed_at": "2026-01-09T19:51:15.703798+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -172,7 +185,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +234,128 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.954613+00:00", + "inferred_at": "2026-01-09T19:51:15.211424+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Granada", + "formatted": "ES-51-GRA", + "country_code": "ES", + "region_code": "51", + "settlement_code": "GRA", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Indonesian International Student Mobility Awards", + "title": "Co-Student Representative Of IISMA Universidad De Granada 2022", + "date_range": "Sep 2022 - Dec 2022 • 3 months", + "location": "Granada, Andalusia, Spain" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Granada, Andalusia, Spain", + "result": { + "geonames_id": 2517117, + "geonames_name": "Granada", + "admin1_code": "51", + "admin1_name": "Andalusia", + "feature_code": "PPLA2", + "latitude": 37.18817, + "longitude": -3.60667 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ES-51-GRA" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2517117, + "geonames_name": "Granada", + "admin1_code": "51", + "admin1_name": "Andalusia", + "feature_code": "PPLA2", + "latitude": 37.18817, + "longitude": -3.60667 + }, + "inferred_at": "2026-01-09T19:51:15.271520+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Gambiran Satu", + "formatted": "ID-08-GS", + "country_code": "ID", + "region_code": "08", + "settlement_code": "GS", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta Metropolitan Area (ID)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "English Translator", + "location": "Gambir, Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Gambir, Jakarta, Indonesia", + "result": { + "geonames_id": 1644557, + "geonames_name": "Gambiran Satu", + "admin1_code": "08", + "admin1_name": "East Java", + "feature_code": "PPL", + "latitude": -8.3939, + "longitude": 114.1464 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-08-GS" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 1644557, + "geonames_name": "Gambiran Satu", + "admin1_code": "08", + "admin1_name": "East Java", + "feature_code": "PPL", + "latitude": -8.3939, + "longitude": 114.1464 + }, + "inferred_at": "2026-01-09T19:51:15.703634+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WOUTER-VEEN.json b/data/person/ID_FR-44-STR_197X_XX-XX-XXX_XXXX_WOUTER-VEEN.json similarity index 58% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WOUTER-VEEN.json rename to data/person/ID_FR-44-STR_197X_XX-XX-XXX_XXXX_WOUTER-VEEN.json index 6eb9a48717..37708e5f53 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WOUTER-VEEN.json +++ b/data/person/ID_FR-44-STR_197X_XX-XX-XXX_XXXX_WOUTER-VEEN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WOUTER-VEEN", + "ppid": "ID_FR-44-STR_197X_XX-XX-XXX_XXXX_WOUTER-VEEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "FR-44-STR", "first_date": "197X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Wouter van der Veen", @@ -125,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wouter-van-der-veen-49aa505b_20251214T110321Z.json" ], - "modified_at": "2026-01-09T19:18:17.083657+00:00", + "modified_at": "2026-01-09T19:51:23.858253+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wouter-van-der-veen-49aa505b", @@ -138,6 +139,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WOUTER-VEEN", + "new_ppid": "ID_FR-44-STR_197X_XX-XX-XXX_XXXX_WOUTER-VEEN", + "changed_at": "2026-01-09T19:51:23.858250+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -152,7 +163,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +212,109 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.083516+00:00", + "inferred_at": "2026-01-09T19:51:23.685101+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Strasbourg", + "formatted": "FR-44-STR", + "country_code": "FR", + "region_code": "44", + "settlement_code": "STR", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Universiteit Utrecht", + "title": "AIO", + "date_range": "Jan 2001 - Jan 2006 • 5 years", + "location": "Utrecht" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Arthénon (Current)", + "title": "Dirigeant Fondateur", + "date_range": "Oct 2005 - Present • 20 years and 1 month", + "location": "Strasbourg" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Institut Vincent Van Gogh", + "title": "Directeur Scientifique", + "date_range": "Jan 2006 - Feb 2023 • 17 years and 1 month", + "location": "Auvers-sur-Oise" + } + }, + { + "step": 4, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Université de Strasbourg", + "title": "Maître De Conférences", + "date_range": "Sep 2007 - Sep 2015 • 8 years", + "location": "Strasbourg" + } + }, + { + "step": 5, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Boussod, Valadon & Cie (Van Gogh & Van Gogh) (Current)", + "title": "PDG", + "date_range": "La SAS Boussod, Valadon & Cie (Van Gogh & Van Gogh) est le résultat d'une longue et patiente réflexion. Fondée en 1884 en tant que succession de l'entreprise légendaire Goupil & Cie, elle a profondément marqué l'histoire de la diffusion de la peinture et de la gravure au XIXe siècle. Toujours à la pointe du progrès et de l'innovation, cette maison a notamment employé Vincent van Gogh et Theo van Gogh. De façon parfaitement visionnaire, ces deux frères avaient créé, avant d'être rattrapé par la maladie, les conditions nécessaires à l'établissement de leur propre entreprise, destinée à jouer un rôle de premier plan dans l'art de leur temps. Dans cette logique, la renaissance en 2021 de Boussod, Valadon et Cie s'accompagne d'un nom commercial : \"Van Gogh & Van Gogh\" - en hommage à Vincent et Theo. L'objectif de la société est de proposer des reproductions tant imprimées que digitales, des expériences numériques immersives et du conseil au plus haut niveau pour tout ce qui a trait à la diffusion de l'oeuvre de Van Gogh. Elle fait également commerce d'oeuvres historiques, valorisées par l'expertise et la légitimité de Boussod, Valadon & Cie. Show less", + "location": "Strasbourg, Grand Est, France" + } + }, + { + "step": 6, + "geocoding": "GeoNames resolution", + "query": "Strasbourg, Grand Est, France", + "result": { + "geonames_id": 2973783, + "geonames_name": "Strasbourg", + "admin1_code": "44", + "admin1_name": "Grand Est", + "feature_code": "PPLA", + "latitude": 48.58392, + "longitude": 7.74553 + } + }, + { + "step": 7, + "formatting": "CC-RR-PPP generation", + "result": "FR-44-STR" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2973783, + "geonames_name": "Strasbourg", + "admin1_code": "44", + "admin1_name": "Grand Est", + "feature_code": "PPLA", + "latitude": 48.58392, + "longitude": 7.74553 + }, + "inferred_at": "2026-01-09T19:51:23.858195+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VANESSA-JONES.json b/data/person/ID_GB-EN-BRI_199X_GB-EN-LEE_XXXX_VANESSA-JONES.json similarity index 73% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VANESSA-JONES.json rename to data/person/ID_GB-EN-BRI_199X_GB-EN-LEE_XXXX_VANESSA-JONES.json index 46eed82eb2..a9ef55e216 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VANESSA-JONES.json +++ b/data/person/ID_GB-EN-BRI_199X_GB-EN-LEE_XXXX_VANESSA-JONES.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VANESSA-JONES", + "ppid": "ID_GB-EN-BRI_199X_GB-EN-LEE_XXXX_VANESSA-JONES", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "GB-EN-BRI", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "GB-EN-LEE", "last_date": "XXXX", "name_tokens": [ "VANESSA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Vanessa Jones", @@ -225,7 +227,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vanessa-jones-42066453_20251214T111619Z.json" ], - "modified_at": "2026-01-09T19:18:13.784369+00:00", + "modified_at": "2026-01-09T19:50:56.563592+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vanessa-jones-42066453", @@ -238,6 +240,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VANESSA-JONES", + "new_ppid": "ID_GB-EN-BRI_199X_GB-EN-LEE_XXXX_VANESSA-JONES", + "changed_at": "2026-01-09T19:50:56.563588+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -252,7 +265,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -301,7 +314,140 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.784296+00:00", + "inferred_at": "2026-01-09T19:50:56.486783+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Brighton", + "formatted": "GB-EN-BRI", + "country_code": "GB", + "region_code": "EN", + "settlement_code": "BRI", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Trust", + "title": "Conservation Intern And Gallery Assistant", + "date_range": "Nov 2012 - Oct 2013 • 11 months", + "location": "West Sussex, United Kingdom, United Kingdom" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Young Curators'​ Collective", + "title": "Fashion Curator", + "date_range": "Dec 2013 - Oct 2015 • 1 year and 10 months", + "location": "Museum of Farnham" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Regency Town House", + "title": "Volunteer Research Assistant", + "date_range": "Apr 2013 - Nov 2013 • 7 months", + "location": "Brighton, United Kingdom" + } + }, + { + "step": 4, + "geocoding": "GeoNames resolution", + "query": "Brighton, United Kingdom", + "result": { + "geonames_id": 2654710, + "geonames_name": "Brighton", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPL", + "latitude": 50.82838, + "longitude": -0.13947 + } + }, + { + "step": 5, + "formatting": "CC-RR-PPP generation", + "result": "GB-EN-BRI" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2654710, + "geonames_name": "Brighton", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPL", + "latitude": 50.82838, + "longitude": -0.13947 + }, + "inferred_at": "2026-01-09T19:50:56.551989+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Leeds", + "formatted": "GB-EN-LEE", + "country_code": "GB", + "region_code": "EN", + "settlement_code": "LEE", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Leeds, England, United Kingdom (GB)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Leeds, England, United Kingdom (GB)", + "result": { + "geonames_id": 2644688, + "geonames_name": "Leeds", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPLA2", + "latitude": 53.79648, + "longitude": -1.54785 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "GB-EN-LEE" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2644688, + "geonames_name": "Leeds", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPLA2", + "latitude": 53.79648, + "longitude": -1.54785 + }, + "inferred_at": "2026-01-09T19:50:56.563566+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FIONA-MILWAY.json b/data/person/ID_GB-EN-CAM_198X_AU-01-CAN_XXXX_FIONA-MILWAY.json similarity index 56% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FIONA-MILWAY.json rename to data/person/ID_GB-EN-CAM_198X_AU-01-CAN_XXXX_FIONA-MILWAY.json index abb118ceaf..78fde9cda6 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FIONA-MILWAY.json +++ b/data/person/ID_GB-EN-CAM_198X_AU-01-CAN_XXXX_FIONA-MILWAY.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FIONA-MILWAY", + "ppid": "ID_GB-EN-CAM_198X_AU-01-CAN_XXXX_FIONA-MILWAY", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "GB-EN-CAM", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "FIONA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Fiona Milway", @@ -108,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fiona-milway-12618a186_20251214T103946Z.json" ], - "modified_at": "2026-01-09T19:18:11.567379+00:00", + "modified_at": "2026-01-09T19:50:57.451470+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fiona-milway-12618a186", @@ -130,6 +132,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FIONA-MILWAY", + "new_ppid": "ID_GB-EN-CAM_198X_AU-01-CAN_XXXX_FIONA-MILWAY", + "changed_at": "2026-01-09T19:50:57.451468+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -144,7 +157,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +206,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.567323+00:00", + "inferred_at": "2026-01-09T19:50:57.436816+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Cambridge", + "formatted": "GB-EN-CAM", + "country_code": "GB", + "region_code": "EN", + "settlement_code": "CAM", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Cambridge", + "date_range": "2015 - 2016 • 1 year", + "degree": "Master of Philosophy - MPhil, History and Philosophy of Science and Technology" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Cambridge", + "mapping_result": "Cambridge, United Kingdom" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Cambridge, United Kingdom", + "result": { + "geonames_id": 2653941, + "geonames_name": "Cambridge", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPLA2", + "latitude": 52.2, + "longitude": 0.11667 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "GB", + "region_code": "EN", + "settlement_code": "CAM" + }, + "result": "GB-EN-CAM" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2653941, + "geonames_name": "Cambridge", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPLA2", + "latitude": 52.2, + "longitude": 0.11667 + }, + "inferred_at": "2026-01-09T19:50:57.443728+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:57.451458+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_HUGO-PENNING.json b/data/person/ID_GB-EN-LON_198X_NL-NH-AMS_XXXX_HUGO-PENNING.json similarity index 72% rename from data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_HUGO-PENNING.json rename to data/person/ID_GB-EN-LON_198X_NL-NH-AMS_XXXX_HUGO-PENNING.json index e68cd3a516..1c31a91aa2 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_HUGO-PENNING.json +++ b/data/person/ID_GB-EN-LON_198X_NL-NH-AMS_XXXX_HUGO-PENNING.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_HUGO-PENNING", + "ppid": "ID_GB-EN-LON_198X_NL-NH-AMS_XXXX_HUGO-PENNING", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "GB-EN-LON", "first_date": "198X", "last_location": "NL-NH-AMS", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Hugo Penning", @@ -120,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hugo-penning-8a56357_20251214T111521Z.json" ], - "modified_at": "2026-01-09T19:18:14.621227+00:00", + "modified_at": "2026-01-09T19:51:03.086875+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hugo-penning-8a56357", @@ -134,6 +135,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_HUGO-PENNING", + "new_ppid": "ID_GB-EN-LON_198X_NL-NH-AMS_XXXX_HUGO-PENNING", + "changed_at": "2026-01-09T19:51:03.086872+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -148,7 +159,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +208,65 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.619305+00:00", + "inferred_at": "2026-01-09T19:51:03.022704+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "London", + "formatted": "GB-EN-LON", + "country_code": "GB", + "region_code": "EN", + "settlement_code": "LON", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Portrait Gallery", + "title": "Front Of House Manager", + "date_range": "Jan 2000 - Jan 2007 • 7 years", + "location": "London, United Kingdom" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "London, United Kingdom", + "result": { + "geonames_id": 2643743, + "geonames_name": "London", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPLC", + "latitude": 51.50853, + "longitude": -0.12574 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "GB-EN-LON" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2643743, + "geonames_name": "London", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPLC", + "latitude": 51.50853, + "longitude": -0.12574 + }, + "inferred_at": "2026-01-09T19:51:03.086851+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_BENJAMIN-DUERR.json b/data/person/ID_GB-EN-LON_199X_NL-ZH-TH_XXXX_BENJAMIN-DUERR.json similarity index 75% rename from data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_BENJAMIN-DUERR.json rename to data/person/ID_GB-EN-LON_199X_NL-ZH-TH_XXXX_BENJAMIN-DUERR.json index 93c30d0ae7..cd9764d362 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_BENJAMIN-DUERR.json +++ b/data/person/ID_GB-EN-LON_199X_NL-ZH-TH_XXXX_BENJAMIN-DUERR.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_BENJAMIN-DUERR", + "ppid": "ID_GB-EN-LON_199X_NL-ZH-TH_XXXX_BENJAMIN-DUERR", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "GB-EN-LON", "first_date": "199X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Benjamin Duerr", @@ -159,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/benjamindurr_20251214T102801Z.json" ], - "modified_at": "2026-01-09T19:18:15.864332+00:00", + "modified_at": "2026-01-09T19:51:14.933097+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "benjamindurr", @@ -173,6 +174,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_BENJAMIN-DUERR", + "new_ppid": "ID_GB-EN-LON_199X_NL-ZH-TH_XXXX_BENJAMIN-DUERR", + "changed_at": "2026-01-09T19:51:14.933080+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -187,7 +198,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +247,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.858862+00:00", + "inferred_at": "2026-01-09T19:51:14.791404+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "London", + "formatted": "GB-EN-LON", + "country_code": "GB", + "region_code": "EN", + "settlement_code": "LON", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The London School of Economics and Political Science (LSE)", + "date_range": "2018 - 2019 • 1 year", + "degree": "Master of Science - MS, International Relations and Affairs" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The London School of Economics and Political Science (LSE)", + "mapping_result": "London, United Kingdom" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "London, United Kingdom", + "result": { + "geonames_id": 2643743, + "geonames_name": "London", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPLC", + "latitude": 51.50853, + "longitude": -0.12574 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "GB", + "region_code": "EN", + "settlement_code": "LON" + }, + "result": "GB-EN-LON" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2643743, + "geonames_name": "London", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPLC", + "latitude": 51.50853, + "longitude": -0.12574 + }, + "inferred_at": "2026-01-09T19:51:14.933008+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LIV-JONG.json b/data/person/ID_GB-EN-NUT_199X_AU-01-CAN_XXXX_LIV-JONG.json similarity index 58% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LIV-JONG.json rename to data/person/ID_GB-EN-NUT_199X_AU-01-CAN_XXXX_LIV-JONG.json index 08c57731c6..5bee52e58c 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LIV-JONG.json +++ b/data/person/ID_GB-EN-NUT_199X_AU-01-CAN_XXXX_LIV-JONG.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LIV-JONG", + "ppid": "ID_GB-EN-NUT_199X_AU-01-CAN_XXXX_LIV-JONG", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "GB-EN-NUT", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "LIV", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Liv de Jong", @@ -116,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/liv-de-jong-80495b220_20251214T103815Z.json" ], - "modified_at": "2026-01-09T19:18:13.197544+00:00", + "modified_at": "2026-01-09T19:50:53.267824+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "liv-de-jong-80495b220", @@ -129,6 +131,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LIV-JONG", + "new_ppid": "ID_GB-EN-NUT_199X_AU-01-CAN_XXXX_LIV-JONG", + "changed_at": "2026-01-09T19:50:53.267821+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -143,7 +156,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +205,128 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.197505+00:00", + "inferred_at": "2026-01-09T19:50:53.242000+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Newcastle upon Tyne", + "formatted": "GB-EN-NUT", + "country_code": "GB", + "region_code": "EN", + "settlement_code": "NUT", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "BIG W", + "title": "Retail Associate", + "date_range": "Nov 2013 - Dec 2021 • 8 years and 1 month", + "location": "Newcastle, New South Wales, Australia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Newcastle, New South Wales, Australia", + "result": { + "geonames_id": 2641673, + "geonames_name": "Newcastle upon Tyne", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPLA2", + "latitude": 54.97328, + "longitude": -1.61396 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "GB-EN-NUT" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2641673, + "geonames_name": "Newcastle upon Tyne", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPLA2", + "latitude": 54.97328, + "longitude": -1.61396 + }, + "inferred_at": "2026-01-09T19:50:53.251157+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Belconnen, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Project Officer", + "location": "Canberra, Australian Capital Territory, Australia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:53.267802+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_SEAMUS-R.json b/data/person/ID_GB-EN-OXF_195X_CA-08-TOR_XXXX_SEAMUS-R.json similarity index 66% rename from data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_SEAMUS-R.json rename to data/person/ID_GB-EN-OXF_195X_CA-08-TOR_XXXX_SEAMUS-R.json index 2e41d56ce4..2fcd5b5e87 100644 --- a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_SEAMUS-R.json +++ b/data/person/ID_GB-EN-OXF_195X_CA-08-TOR_XXXX_SEAMUS-R.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_SEAMUS-R", + "ppid": "ID_GB-EN-OXF_195X_CA-08-TOR_XXXX_SEAMUS-R", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "GB-EN-OXF", "first_date": "195X", - "last_location": "XX-XX-XXX", + "last_location": "CA-08-TOR", "last_date": "XXXX", "name_tokens": [ "SEAMUS", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Seamus R.", @@ -198,7 +200,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/seamusross_20251214T113121Z.json" ], - "modified_at": "2026-01-09T19:18:13.081056+00:00", + "modified_at": "2026-01-09T19:51:11.239258+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "seamusross", @@ -220,6 +222,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_SEAMUS-R", + "new_ppid": "ID_GB-EN-OXF_195X_CA-08-TOR_XXXX_SEAMUS-R", + "changed_at": "2026-01-09T19:51:11.239255+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -234,7 +247,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -283,7 +296,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.080981+00:00", + "inferred_at": "2026-01-09T19:51:11.092441+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Oxford", + "formatted": "GB-EN-OXF", + "country_code": "GB", + "region_code": "EN", + "settlement_code": "OXF", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Oxford", + "date_range": "1984 - 1992 • 8 years", + "degree": "DPhil, Anthropology and Geography (Archaeology)" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Oxford", + "mapping_result": "Oxford, United Kingdom" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Oxford, United Kingdom", + "result": { + "geonames_id": 2640729, + "geonames_name": "Oxford", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPLA2", + "latitude": 51.75222, + "longitude": -1.25596 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "GB", + "region_code": "EN", + "settlement_code": "OXF" + }, + "result": "GB-EN-OXF" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2640729, + "geonames_name": "Oxford", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPLA2", + "latitude": 51.75222, + "longitude": -1.25596 + }, + "inferred_at": "2026-01-09T19:51:11.200470+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Toronto", + "formatted": "CA-08-TOR", + "country_code": "CA", + "region_code": "08", + "settlement_code": "TOR", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Toronto, Ontario, Canada (CA)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Toronto, Ontario, Canada (CA)", + "result": { + "geonames_id": 6167865, + "geonames_name": "Toronto", + "admin1_code": "08", + "admin1_name": "Ontario", + "feature_code": "PPLA", + "latitude": 43.70643, + "longitude": -79.39864 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "CA-08-TOR" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 6167865, + "geonames_name": "Toronto", + "admin1_code": "08", + "admin1_name": "Ontario", + "feature_code": "PPLA", + "latitude": 43.70643, + "longitude": -79.39864 + }, + "inferred_at": "2026-01-09T19:51:11.239236+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_ID-04-JAK_198X_ID-04-JAK_XXXX_HERLINA-HERLINA.json b/data/person/ID_ID-04-JAK_198X_ID-04-JAK_XXXX_HERLINA-HERLINA.json new file mode 100644 index 0000000000..2a51de7b80 --- /dev/null +++ b/data/person/ID_ID-04-JAK_198X_ID-04-JAK_XXXX_HERLINA-HERLINA.json @@ -0,0 +1,305 @@ +{ + "ppid": "ID_ID-04-JAK_198X_ID-04-JAK_XXXX_HERLINA-HERLINA", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "ID-04-JAK", + "first_date": "198X", + "last_location": "ID-04-JAK", + "last_date": "XXXX", + "name_tokens": [ + "HERLINA", + "HERLINA" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Herlina herlina", + "display_name": "Herlina herlina", + "name_romanized": null, + "name_tokens": [ + "HERLINA", + "HERLINA" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at Ministry of Tourism of the Republic of Indonesia" + }, + "affiliations": [], + "profile_data": { + "name": "Herlina herlina", + "linkedin_url": "https://www.linkedin.com/in/herlina-herlina-b48510a9", + "headline": "Staff for Nature Tourism Development at Ministry of Tourism of the Republic of Indonesia", + "location": "Greater Melbourne Area (AU)", + "connections": "66 connections • 67 followers", + "about": "Total Experience: 16 years and 10 months", + "experience": [ + { + "title": "Staff For The Deputy Assistant For Natural And Man-Made Tourist Destination Development", + "company": "Ministry of Tourism of the Republic of Indonesia (Current)", + "date_range": "Jan 2011 - Present • 14 years and 10 months", + "location": "Jakarta, Indonesia" + }, + { + "title": "Staff For Sub-Directorate Of Nature And And Cultural Tourism Development", + "company": "Ministry of Tourism of the Republic of Indonesia (Current)", + "date_range": "Jan 2011 - Present • 14 years and 10 months", + "location": "Jakarta, Indonesia" + } + ], + "education": [], + "skills": [ + "tourism" + ], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C4E03AQGRFuTPNBeoTA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1517537027552?e=2147483647&v=beta&t=XTnCmCCVJWFDt95r2HYSm8HXhfCBQXEG35xWx6IEo9k" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/herlina-herlina-b48510a9_20251214T112035Z.json", + "observed_on": "2025-12-14T11:20:35.632545+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.519140+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/herlina-herlina-b48510a9_20251214T112035Z.json" + ], + "modified_at": "2026-01-09T19:50:51.595766+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "herlina-herlina-b48510a9", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HERLINA-HERLINA", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HERLINA-HERLINA", + "changed_at": "2026-01-09T17:43:03.500348+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HERLINA-HERLINA", + "new_ppid": "ID_ID-04-JAK_198X_ID-04-JAK_XXXX_HERLINA-HERLINA", + "changed_at": "2026-01-09T19:50:51.595760+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1988 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia (Current)", + "title": "Staff For The Deputy Assistant For Natural And Man-Made Tourist Destination Development", + "date_range": "Jan 2011 - Present • 14 years and 10 months" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2011 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2011 - 23 = 1988", + "result": "Estimated birth year: 1988", + "range": "1983-1993 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1983, + 1993 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:51.126291+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia (Current)", + "title": "Staff For The Deputy Assistant For Natural And Man-Made Tourist Destination Development", + "date_range": "Jan 2011 - Present • 14 years and 10 months", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:51.540360+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Greater Melbourne Area (AU)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia (Current)", + "title": "Staff For The Deputy Assistant For Natural And Man-Made Tourist Destination Development", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:51.595710+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MUHAMAD-HETSAPUTRA.json b/data/person/ID_ID-04-JAK_198X_ID-04-JAK_XXXX_MUHAMAD-HETSAPUTRA.json similarity index 58% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MUHAMAD-HETSAPUTRA.json rename to data/person/ID_ID-04-JAK_198X_ID-04-JAK_XXXX_MUHAMAD-HETSAPUTRA.json index c42373bd67..e5723d1375 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MUHAMAD-HETSAPUTRA.json +++ b/data/person/ID_ID-04-JAK_198X_ID-04-JAK_XXXX_MUHAMAD-HETSAPUTRA.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MUHAMAD-HETSAPUTRA", + "ppid": "ID_ID-04-JAK_198X_ID-04-JAK_XXXX_MUHAMAD-HETSAPUTRA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-04-JAK", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "MUHAMAD", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Muhamad Tidar Hetsaputra", @@ -149,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/muhamad-tidar-hetsaputra-02b231105_20251214T112000Z.json" ], - "modified_at": "2026-01-09T19:18:17.072305+00:00", + "modified_at": "2026-01-09T19:51:23.682083+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "muhamad-tidar-hetsaputra-02b231105", @@ -162,6 +164,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MUHAMAD-HETSAPUTRA", + "new_ppid": "ID_ID-04-JAK_198X_ID-04-JAK_XXXX_MUHAMAD-HETSAPUTRA", + "changed_at": "2026-01-09T19:51:23.682081+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -176,7 +189,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +238,172 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.072083+00:00", + "inferred_at": "2026-01-09T19:51:23.213207+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Planning And Budget Supervisor", + "date_range": "Apr 2012 - Jan 2018 • 5 years and 9 months", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Head Of Finance", + "date_range": "Jan 2018 - Feb 2020 • 2 years and 1 month", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Head Of Sub-Directorate Of Digital Economic Governance II", + "date_range": "Feb 2020 - Jun 2021 • 1 year and 4 months", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 4, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Sustainable Tourism Development Coordinator", + "date_range": "Jun 2021 - Feb 2022 • 8 months", + "location": "Jakarta Metropolitan Area" + } + }, + { + "step": 5, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Creative Economy Infrastructure Coordinator", + "date_range": "Jan 2022 - Present • 3 years and 5 months", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 6, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 7, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:23.599185+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "South Jakarta, Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Creative Economy Infrastructure Coordinator", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:23.682067+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROBBY-HASAN.json b/data/person/ID_ID-04-JAK_198X_ID-04-JAK_XXXX_ROBBY-HASAN.json similarity index 54% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROBBY-HASAN.json rename to data/person/ID_ID-04-JAK_198X_ID-04-JAK_XXXX_ROBBY-HASAN.json index 538b211dfc..d663c015eb 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROBBY-HASAN.json +++ b/data/person/ID_ID-04-JAK_198X_ID-04-JAK_XXXX_ROBBY-HASAN.json @@ -1,17 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROBBY-HASAN", + "ppid": "ID_ID-04-JAK_198X_ID-04-JAK_XXXX_ROBBY-HASAN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-04-JAK", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ROBBY", "HASAN" ], - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Robby Hasan", @@ -94,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robby-hasan-72a40617_20251214T112014Z.json" ], - "modified_at": "2026-01-09T19:18:14.989090+00:00", + "modified_at": "2026-01-09T19:51:06.456939+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robby-hasan-72a40617", @@ -107,6 +109,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROBBY-HASAN", + "new_ppid": "ID_ID-04-JAK_198X_ID-04-JAK_XXXX_ROBBY-HASAN", + "changed_at": "2026-01-09T19:51:06.456936+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -115,7 +128,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -156,7 +169,118 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.989044+00:00", + "inferred_at": "2026-01-09T19:51:06.360189+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism and Creative Economy", + "title": "Head Of Strategic Development For MICE", + "date_range": "Jul 2023 - Jan 2025 • 1 year and 6 months", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:06.410370+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:06.456917+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNELIES-ZWIJNS.json b/data/person/ID_ID-04-JAK_198X_XX-XX-XXX_XXXX_ANNELIES-ZWIJNS.json similarity index 63% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNELIES-ZWIJNS.json rename to data/person/ID_ID-04-JAK_198X_XX-XX-XXX_XXXX_ANNELIES-ZWIJNS.json index b74493de06..4ef0294d16 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNELIES-ZWIJNS.json +++ b/data/person/ID_ID-04-JAK_198X_XX-XX-XXX_XXXX_ANNELIES-ZWIJNS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNELIES-ZWIJNS", + "ppid": "ID_ID-04-JAK_198X_XX-XX-XXX_XXXX_ANNELIES-ZWIJNS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-04-JAK", "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Annelies Zwijns", @@ -93,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annelies-zwijns-a5879548_20251214T111921Z.json" ], - "modified_at": "2026-01-09T19:18:14.263439+00:00", + "modified_at": "2026-01-09T19:51:21.293727+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annelies-zwijns-a5879548", @@ -115,6 +116,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNELIES-ZWIJNS", + "new_ppid": "ID_ID-04-JAK_198X_XX-XX-XXX_XXXX_ANNELIES-ZWIJNS", + "changed_at": "2026-01-09T19:51:21.293715+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -123,7 +134,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +175,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.263407+00:00", + "inferred_at": "2026-01-09T19:51:21.111640+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "national guide SEC / Guidor", + "date_range": "2003 - 2004 • 1 year", + "degree": "Local guide, Dutch art and history" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "national guide SEC / Guidor", + "mapping_result": "Jakarta, Indonesia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK" + }, + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:21.161985+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_ANNISA-FADIAH.json b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_ANNISA-FADIAH.json new file mode 100644 index 0000000000..f31d95198f --- /dev/null +++ b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_ANNISA-FADIAH.json @@ -0,0 +1,358 @@ +{ + "ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_ANNISA-FADIAH", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "ID-04-JAK", + "first_date": "199X", + "last_location": "ID-04-JAK", + "last_date": "XXXX", + "name_tokens": [ + "ANNISA", + "FADIAH" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Annisa Fadiah", + "display_name": "Annisa Fadiah", + "name_romanized": null, + "name_tokens": [ + "ANNISA", + "FADIAH" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "A" + ], + "rationale": "Archivist at ANRI, Indonesia's national archives, which manages significant documentary heritage collections including Dutch colonial records, post-independence archives, and specialized collections on tsunami/disaster documentation and corruption eradication." + }, + "affiliations": [ + { + "custodian_name": "Arsip Nasional Republik Indonesia (ANRI)", + "custodian_slug": "anri", + "role_title": "Archivist", + "heritage_relevant": true, + "heritage_type": "A", + "current": true, + "observed_on": "2025-12-15T10:30:00Z", + "source": "exa_web_search" + } + ], + "profile_data": { + "name": "Annisa Fadiah", + "headline": "Archivist at Arsip Nasional Republik Indonesia (ANRI)", + "linkedin_url": "https://www.linkedin.com/in/ansfadiah", + "location": "Jakarta, Indonesia", + "about": "Professional archivist at the National Archives of the Republic of Indonesia (ANRI), the non-ministerial government institution responsible for records and archives administration in Indonesia. Also works as a freelance Dutch language tutor, reflecting the importance of Dutch colonial archives in Indonesian heritage documentation.", + "experience": [ + { + "title": "Archivist", + "company": "Arsip Nasional Republik Indonesia (ANRI)", + "location": "Jakarta, Indonesia", + "start_date": "2020", + "end_date": null, + "current": true, + "description": "Works as professional archivist at Indonesia's national archives, which manages significant collections spanning colonial and post-independence periods." + }, + { + "title": "Dutch Tutor", + "company": "Freelance", + "location": "Indonesia", + "start_date": "2018", + "end_date": null, + "current": true, + "description": "Provides Dutch language tutoring, a skill valuable for working with Indonesia's extensive Dutch colonial archive collections." + }, + { + "title": "Kindergarten Teacher", + "company": "Mataharikecil Indonesia Foundation", + "location": "Indonesia", + "start_date": "2019", + "end_date": "2020", + "current": false, + "description": "Early childhood education role prior to transitioning to archival work." + } + ], + "education": [], + "skills": [ + "Archival Science", + "Dutch Language", + "Records Management", + "Colonial Archives", + "Indonesian Heritage Documentation" + ], + "languages": [ + { + "language": "Indonesian", + "proficiency": "Native" + }, + { + "language": "Dutch", + "proficiency": "Professional (tutor level)" + }, + { + "language": "English", + "proficiency": "Professional" + } + ] + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/ansfadiah_20251214T115050Z.json", + "observed_on": "2025-12-15T10:30:00Z", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.678992+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/ansfadiah_20251214T115050Z.json" + ], + "modified_at": "2026-01-09T19:51:19.857673+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "ansfadiah", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNISA-FADIAH", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANNISA-FADIAH", + "changed_at": "2026-01-09T19:43:43.066815+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANNISA-FADIAH", + "new_ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_ANNISA-FADIAH", + "changed_at": "2026-01-09T19:51:19.857660+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1995 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Freelance", + "title": "Dutch Tutor", + "date_range": "2018" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2018 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2018 - 23 = 1995", + "result": "Estimated birth year: 1995", + "range": "1990-2000 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1990, + 2000 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:19.070252+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Freelance", + "title": "Dutch Tutor", + "date_range": "2018", + "location": "Indonesia" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Mataharikecil Indonesia Foundation", + "title": "Kindergarten Teacher", + "date_range": "2019 - 2020", + "location": "Indonesia" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Arsip Nasional Republik Indonesia (ANRI)", + "title": "Archivist", + "date_range": "2020", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 4, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 5, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:19.736515+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:19.857600+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ARIESTA-PREAFITRIALLY.json b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_ARIESTA-PREAFITRIALLY.json similarity index 60% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ARIESTA-PREAFITRIALLY.json rename to data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_ARIESTA-PREAFITRIALLY.json index bfabdb5541..593d3c2b24 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ARIESTA-PREAFITRIALLY.json +++ b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_ARIESTA-PREAFITRIALLY.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ARIESTA-PREAFITRIALLY", + "ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_ARIESTA-PREAFITRIALLY", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-04-JAK", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ARIESTA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Ariesta Preafitrially", @@ -139,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ariesta-preafitrially-259b7560_20251214T111929Z.json" ], - "modified_at": "2026-01-09T19:18:16.726938+00:00", + "modified_at": "2026-01-09T19:51:21.770847+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ariesta-preafitrially-259b7560", @@ -152,6 +154,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ARIESTA-PREAFITRIALLY", + "new_ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_ARIESTA-PREAFITRIALLY", + "changed_at": "2026-01-09T19:51:21.770844+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -166,7 +179,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +228,150 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.726906+00:00", + "inferred_at": "2026-01-09T19:51:21.549972+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "CekAja.com", + "title": "Content Writer", + "date_range": "Dec 2015 - Nov 2017 • 1 year and 11 months", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Alodokter", + "title": "Junior SEO Writer", + "date_range": "Alodokter.com is Indonesia's leading online health platform, attracting over 7 million unique visitors every month. Recognized by Forbes as one of the Top 20 Most Promising Startups globally in 2016. Key Contributions: - Crafting engaging and informative healthcare content to educate and inspire readers. - Collaborating with expert medical editors to deliver accurate and reliable health articles tailored for users. - Producing SEO-optimized health articles to enhance visibility and accessibility for online users, ensuring they perform as the number #1 result on Google's search engine. Show less", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Policy Analyst", + "date_range": "Jun 2025 - Present • 5 months", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 4, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 5, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:21.682116+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Indonesia (ID)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Policy Analyst", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:21.770823+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CLARA-P.json b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_CLARA-P.json similarity index 65% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CLARA-P.json rename to data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_CLARA-P.json index eb1c9bf769..0170e0b358 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CLARA-P.json +++ b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_CLARA-P.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CLARA-P", + "ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_CLARA-P", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-04-JAK", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "CLARA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Clara Shanie P.", @@ -161,7 +163,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/clarapranata_20251214T111939Z.json" ], - "modified_at": "2026-01-09T19:18:14.035307+00:00", + "modified_at": "2026-01-09T19:50:58.531231+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "clarapranata", @@ -174,6 +176,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CLARA-P", + "new_ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_CLARA-P", + "changed_at": "2026-01-09T19:50:58.531228+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -188,7 +201,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -237,7 +250,128 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.035273+00:00", + "inferred_at": "2026-01-09T19:50:58.361208+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Jakarta Fashion Week", + "title": "Fashion Designer", + "date_range": "Jan 2017 - Jan 2017", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:58.407537+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta Metropolitan Area (ID)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Expert Staff To The Minister", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:58.531206+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DINDA-ACHYAR.json b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_DINDA-ACHYAR.json similarity index 66% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DINDA-ACHYAR.json rename to data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_DINDA-ACHYAR.json index 627df69be9..d278f3b376 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DINDA-ACHYAR.json +++ b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_DINDA-ACHYAR.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DINDA-ACHYAR", + "ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_DINDA-ACHYAR", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-04-JAK", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "DINDA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Dinda Azzahra Achyar", @@ -209,7 +211,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dindazzahraa_20251214T111939Z.json" ], - "modified_at": "2026-01-09T19:18:15.411068+00:00", + "modified_at": "2026-01-09T19:51:09.515394+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dindazzahraa", @@ -222,6 +224,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DINDA-ACHYAR", + "new_ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_DINDA-ACHYAR", + "changed_at": "2026-01-09T19:51:09.515365+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -236,7 +249,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -285,7 +298,139 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.411016+00:00", + "inferred_at": "2026-01-09T19:51:08.791301+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism and Creative Economy", + "title": "ASEAN Inter-Institutional Relations Intern", + "date_range": "Aug 2022 - Dec 2023 • 1 year and 4 months", + "location": "Central Jakarta, Jakarta, Indonesia" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism and Creative Economy", + "title": "Delegate - The 28th Meeting Of ASEAN Tourism Professional Monitoring Committee Meeting (ATPMC)", + "date_range": "Sep 2022 - Sep 2022", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:08.958576+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Central Jakarta, Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism and Creative Economy", + "title": "Internal Affairs Officer", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:09.515144+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_INDERA-DEWANTHO.json b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_INDERA-DEWANTHO.json similarity index 53% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_INDERA-DEWANTHO.json rename to data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_INDERA-DEWANTHO.json index f68c88a79f..1140be8fcc 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_INDERA-DEWANTHO.json +++ b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_INDERA-DEWANTHO.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_INDERA-DEWANTHO", + "ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_INDERA-DEWANTHO", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-04-JAK", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "INDERA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Indera Dewantho", @@ -169,7 +171,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/indera-dewantho-b5766080_20251214T111941Z.json" ], - "modified_at": "2026-01-09T19:18:17.334313+00:00", + "modified_at": "2026-01-09T19:51:26.290833+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "indera-dewantho-b5766080", @@ -182,6 +184,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_INDERA-DEWANTHO", + "new_ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_INDERA-DEWANTHO", + "changed_at": "2026-01-09T19:51:26.290830+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -190,7 +203,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +244,205 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.334255+00:00", + "inferred_at": "2026-01-09T19:51:25.532831+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism and Creative Economy", + "title": "Section Head For International Tourism Promotion In West Europe", + "date_range": "Apr 2013 - Feb 2015 • 1 year and 10 months", + "location": "Responsible for Indonesia international tourism promotion events in West Europe" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism", + "title": "Assistant Deputy Director For America And Africa Tourism Marketing Strategy", + "date_range": "Dec 2016 - Jan 2018 • 1 year and 1 month", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of Indonesia", + "title": "Official", + "date_range": "Aug 2016 - Nov 2016 • 3 months", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 4, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism", + "title": "Deputy Director Of International Tourism Marketing For Great China Area 1", + "date_range": "Mar 2018 - Feb 2020 • 1 year and 11 months", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 5, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism", + "title": "Deputy Director For Tourism Ecosystem", + "date_range": "Jan 2018 - Feb 2018 • 1 month", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 6, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism and Creative Economy", + "title": "Senior Policy Analyst", + "date_range": "Aug 2020 - Jan 2025 • 4 years and 5 months", + "location": "Indonesia" + } + }, + { + "step": 7, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism and Creative Economy", + "title": "Deputy Director Of International Tourism Marketing For South And Central Asia", + "date_range": "Feb 2020 - Aug 2020 • 6 months", + "location": "Indonesia" + } + }, + { + "step": 8, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Bureau For Data And Information System", + "date_range": "Jan 2025 - Present • 10 months", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 9, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 10, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:26.210565+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Indonesia (ID)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Bureau For Data And Information System", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:26.290814+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MUHAMMAD-ROSYIDI.json b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_MUHAMMAD-ROSYIDI.json similarity index 64% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MUHAMMAD-ROSYIDI.json rename to data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_MUHAMMAD-ROSYIDI.json index eab616d147..6ab0677378 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MUHAMMAD-ROSYIDI.json +++ b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_MUHAMMAD-ROSYIDI.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MUHAMMAD-ROSYIDI", + "ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_MUHAMMAD-ROSYIDI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-04-JAK", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "MUHAMMAD", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Muhammad Iqbal Rosyidi", @@ -157,7 +159,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/iqblrsyd_20251214T112025Z.json" ], - "modified_at": "2026-01-09T19:18:15.416050+00:00", + "modified_at": "2026-01-09T19:51:10.604293+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "iqblrsyd", @@ -170,6 +172,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MUHAMMAD-ROSYIDI", + "new_ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_MUHAMMAD-ROSYIDI", + "changed_at": "2026-01-09T19:51:10.604290+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -184,7 +197,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +246,150 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.416014+00:00", + "inferred_at": "2026-01-09T19:51:09.520593+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Staff", + "date_range": "Mar 2015 - Aug 2018 • 3 years and 5 months", + "location": "- Managed and maintained the tourism database using GIS software and technologies - Collected, processed, and analyzed data related to tourism statistics, trends, and industry developments - Provided data visualization and mapping services to support decision-making and policy development within the Ministry" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Liaison Officer To Deputy Minister For Tourism Institutional Development", + "date_range": "Mar 2016 - Dec 2017 • 1 year and 9 months", + "location": "Indonesia" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism and Creative Economy", + "title": "Policy Analyst", + "date_range": "Aug 2021 - Present • 4 years", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 4, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 5, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:10.510843+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta Metropolitan Area (ID)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Project Manager On Tourism Outlook", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:10.604241+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NOGUS-PAHLIAWAN.json b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_NOGUS-PAHLIAWAN.json similarity index 53% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NOGUS-PAHLIAWAN.json rename to data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_NOGUS-PAHLIAWAN.json index 2633c14ebf..666c097b3c 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NOGUS-PAHLIAWAN.json +++ b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_NOGUS-PAHLIAWAN.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NOGUS-PAHLIAWAN", + "ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_NOGUS-PAHLIAWAN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-04-JAK", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "NOGUS", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Nogus Pahliawan", @@ -97,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/noguspahliawan_20251214T112002Z.json" ], - "modified_at": "2026-01-09T19:18:13.973588+00:00", + "modified_at": "2026-01-09T19:50:57.419583+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "noguspahliawan", @@ -110,6 +112,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NOGUS-PAHLIAWAN", + "new_ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_NOGUS-PAHLIAWAN", + "changed_at": "2026-01-09T19:50:57.419577+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -124,7 +137,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +186,139 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.973570+00:00", + "inferred_at": "2026-01-09T19:50:56.911269+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism, Republic of Indonesia", + "title": "Assistant To Deputy Director Of International Marketing For China Region III B", + "date_range": "Jan 2018 - Oct 2022 • 4 years and 9 months", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Marcomm Team", + "date_range": "Nov 2024 - Present • 4 months", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:57.336954+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Indonesia (ID)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Marcomm Team", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:57.419542+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PAUL-JEMADU.json b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_PAUL-JEMADU.json similarity index 53% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PAUL-JEMADU.json rename to data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_PAUL-JEMADU.json index 1ca813e1d9..78382e2d8a 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PAUL-JEMADU.json +++ b/data/person/ID_ID-04-JAK_199X_ID-04-JAK_XXXX_PAUL-JEMADU.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PAUL-JEMADU", + "ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_PAUL-JEMADU", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-04-JAK", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "PAUL", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Paul Jemadu", @@ -94,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paul-jemadu11_20251214T111933Z.json" ], - "modified_at": "2026-01-09T19:18:14.311199+00:00", + "modified_at": "2026-01-09T19:51:00.359249+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paul-jemadu11", @@ -107,6 +109,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PAUL-JEMADU", + "new_ppid": "ID_ID-04-JAK_199X_ID-04-JAK_XXXX_PAUL-JEMADU", + "changed_at": "2026-01-09T19:51:00.359244+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -121,7 +134,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +183,129 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.311181+00:00", + "inferred_at": "2026-01-09T19:51:00.106043+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "FamilyMart Indonesia", + "title": "Accounts Payable Specialist", + "date_range": "Dec 2016 - Apr 2022 • 5 years and 4 months", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism and Creative Economy", + "title": "Policy Analyst", + "date_range": "Mar 2022 - Oct 2024 • 2 years and 7 months", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:00.296123+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:00.359204+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HANIEF-ASSEGAF.json b/data/person/ID_ID-04-JAK_199X_ID-33-BAN_XXXX_HANIEF-ASSEGAF.json similarity index 55% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HANIEF-ASSEGAF.json rename to data/person/ID_ID-04-JAK_199X_ID-33-BAN_XXXX_HANIEF-ASSEGAF.json index 2d98a823e7..f803a9239a 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HANIEF-ASSEGAF.json +++ b/data/person/ID_ID-04-JAK_199X_ID-33-BAN_XXXX_HANIEF-ASSEGAF.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HANIEF-ASSEGAF", + "ppid": "ID_ID-04-JAK_199X_ID-33-BAN_XXXX_HANIEF-ASSEGAF", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-04-JAK", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-33-BAN", "last_date": "XXXX", "name_tokens": [ "HANIEF", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Hanief Assegaf", @@ -83,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hanief-assegaf-744a38104_20251214T111952Z.json" ], - "modified_at": "2026-01-09T19:18:16.678123+00:00", + "modified_at": "2026-01-09T19:51:21.501549+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hanief-assegaf-744a38104", @@ -96,6 +98,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HANIEF-ASSEGAF", + "new_ppid": "ID_ID-04-JAK_199X_ID-33-BAN_XXXX_HANIEF-ASSEGAF", + "changed_at": "2026-01-09T19:51:21.501547+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -110,7 +123,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +172,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.678109+00:00", + "inferred_at": "2026-01-09T19:51:21.406956+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism,The Republic of Indonesia (Current)", + "title": "Secretariat Of Team For Accelerated Development Of Halal Tourism", + "date_range": "Jan 2018 - Present • 7 years and 10 months", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:21.454605+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Banten", + "formatted": "ID-33-BAN", + "country_code": "ID", + "region_code": "33", + "settlement_code": "BAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Banten, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Banten, Indonesia (ID)", + "result": { + "geonames_id": 1650134, + "geonames_name": "Banten", + "admin1_code": "33", + "admin1_name": "Banten", + "feature_code": "PPL", + "latitude": -6.0307, + "longitude": 106.164 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-33-BAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1650134, + "geonames_name": "Banten", + "admin1_code": "33", + "admin1_name": "Banten", + "feature_code": "PPL", + "latitude": -6.0307, + "longitude": 106.164 + }, + "inferred_at": "2026-01-09T19:51:21.501527+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FAHRI-ALTAKWA.json b/data/person/ID_ID-04-JAK_199X_XX-XX-XXX_XXXX_FAHRI-ALTAKWA.json similarity index 71% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FAHRI-ALTAKWA.json rename to data/person/ID_ID-04-JAK_199X_XX-XX-XXX_XXXX_FAHRI-ALTAKWA.json index c012c3a7d8..7503c955b1 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FAHRI-ALTAKWA.json +++ b/data/person/ID_ID-04-JAK_199X_XX-XX-XXX_XXXX_FAHRI-ALTAKWA.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FAHRI-ALTAKWA", + "ppid": "ID_ID-04-JAK_199X_XX-XX-XXX_XXXX_FAHRI-ALTAKWA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-04-JAK", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Fahri Surya Altakwa", @@ -187,7 +188,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fahri-surya-altakwa_20251214T112030Z.json" ], - "modified_at": "2026-01-09T19:18:14.322362+00:00", + "modified_at": "2026-01-09T19:51:00.697834+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fahri-surya-altakwa", @@ -200,6 +201,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FAHRI-ALTAKWA", + "new_ppid": "ID_ID-04-JAK_199X_XX-XX-XXX_XXXX_FAHRI-ALTAKWA", + "changed_at": "2026-01-09T19:51:00.697818+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -214,7 +225,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -263,7 +274,98 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.322320+00:00", + "inferred_at": "2026-01-09T19:51:00.368513+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Embassy of Republic of Indonesia", + "title": "Student Intern", + "date_range": "Jul 2018 - Jul 2018", + "location": "Manila, Philippines" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "European External Action Service", + "title": "Trainee At The European Union Delegation To Indonesia And Brunei Darussalam", + "date_range": "Three month internship at the political, press and information section where my tasks includes: - Analyzed political reports - Monitored Indonesia's news paper - Analyzed and reported Indonesian political developments, especially the preparation of Indonesian Presidential Election 2019 - Focused on human rights related issues in Indonesia and drafting the report - Contributed to the Delegation's event such as: Women in Bazaar; Indonesia’s Foreign Policy Community Forum", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Mekari", + "title": "Event Management Intern", + "date_range": "Under employer branding, my tasks were: - Assigned to handle Mekari Innovator Lab 2020, app building competition for university students, - Communities and Universities engagement, - Built relations with universities in Indonesia, - Contributed to the internal event of Mekari.", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 4, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "INDEPENDENCE Research Operation", + "title": "Account Executive", + "date_range": "Apr 2021 - Apr 2022 • 1 year", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 5, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 6, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:00.517379+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_AFIFAH-WULANDARI.json b/data/person/ID_ID-07-SEM_200X_XX-XX-XXX_XXXX_AFIFAH-WULANDARI.json similarity index 73% rename from data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_AFIFAH-WULANDARI.json rename to data/person/ID_ID-07-SEM_200X_XX-XX-XXX_XXXX_AFIFAH-WULANDARI.json index cc518a19c9..358a13c28c 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_AFIFAH-WULANDARI.json +++ b/data/person/ID_ID-07-SEM_200X_XX-XX-XXX_XXXX_AFIFAH-WULANDARI.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_AFIFAH-WULANDARI", + "ppid": "ID_ID-07-SEM_200X_XX-XX-XXX_XXXX_AFIFAH-WULANDARI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-07-SEM", "first_date": "200X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Afifah Wulandari", @@ -125,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/afifah-wulandari-648484b2_20251214T111946Z.json" ], - "modified_at": "2026-01-09T19:18:16.170913+00:00", + "modified_at": "2026-01-09T19:51:18.183612+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "afifah-wulandari-648484b2", @@ -138,6 +139,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_AFIFAH-WULANDARI", + "new_ppid": "ID_ID-07-SEM_200X_XX-XX-XXX_XXXX_AFIFAH-WULANDARI", + "changed_at": "2026-01-09T19:51:18.183591+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -152,7 +163,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +212,65 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.170870+00:00", + "inferred_at": "2026-01-09T19:51:17.901278+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Semarang", + "formatted": "ID-07-SEM", + "country_code": "ID", + "region_code": "07", + "settlement_code": "SEM", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "PT Bank Central Asia Tbk", + "title": "Complaints Handler", + "date_range": "Oct 2011 - Dec 2013 • 2 years and 2 months", + "location": "Semarang Area, Central Java, Indonesia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Semarang Area, Central Java, Indonesia", + "result": { + "geonames_id": 1627896, + "geonames_name": "Semarang", + "admin1_code": "07", + "admin1_name": "Central Java", + "feature_code": "PPLA", + "latitude": -6.99306, + "longitude": 110.42083 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-07-SEM" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1627896, + "geonames_name": "Semarang", + "admin1_code": "07", + "admin1_name": "Central Java", + "feature_code": "PPLA", + "latitude": -6.99306, + "longitude": 110.42083 + }, + "inferred_at": "2026-01-09T19:51:18.118683+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VERONICA-HAPSARI.json b/data/person/ID_ID-07-SUR_199X_ID-30-BOG_XXXX_VERONICA-HAPSARI.json similarity index 57% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VERONICA-HAPSARI.json rename to data/person/ID_ID-07-SUR_199X_ID-30-BOG_XXXX_VERONICA-HAPSARI.json index e19b0c6537..d8be530261 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VERONICA-HAPSARI.json +++ b/data/person/ID_ID-07-SUR_199X_ID-30-BOG_XXXX_VERONICA-HAPSARI.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VERONICA-HAPSARI", + "ppid": "ID_ID-07-SUR_199X_ID-30-BOG_XXXX_VERONICA-HAPSARI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-07-SUR", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-30-BOG", "last_date": "XXXX", "name_tokens": [ "VERONICA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Veronica Cintya Hapsari", @@ -111,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/veronica-cintya7788_20251214T111940Z.json" ], - "modified_at": "2026-01-09T19:18:15.762164+00:00", + "modified_at": "2026-01-09T19:51:14.683799+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "veronica-cintya7788", @@ -133,6 +135,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VERONICA-HAPSARI", + "new_ppid": "ID_ID-07-SUR_199X_ID-30-BOG_XXXX_VERONICA-HAPSARI", + "changed_at": "2026-01-09T19:51:14.683796+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -141,7 +154,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +195,118 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.762114+00:00", + "inferred_at": "2026-01-09T19:51:14.524534+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Surakarta", + "formatted": "ID-07-SUR", + "country_code": "ID", + "region_code": "07", + "settlement_code": "SUR", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "PT. Rosalia Express", + "title": "Public Relations Intern", + "date_range": "Rosalia Express is a part of the Rosalia Indah Group business unit that specializes in serving customers in the delivery of goods packages. Rosalia Express started from Rosalia Indah with a bus fleet that often received packages to various destinations that were placed in the trunk of the bus, so that over time and as business progress and development, on March 6, 2004, PT. Rosalia Express which focuses only on package delivery services. Until now, Rosalia Express has a network of 14 Representative Areas and more than 200 Agents spread throughout Java and Sumatra. My roles were as follows: - Social media analyzed engagement data and content management - Created social media content design - Discussed marketing strategies - Made company profile video together with my team Show less", + "location": "Surakarta, Central Java, Indonesia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Surakarta, Central Java, Indonesia", + "result": { + "geonames_id": 1625812, + "geonames_name": "Surakarta", + "admin1_code": "07", + "admin1_name": "Central Java", + "feature_code": "PPL", + "latitude": -7.55611, + "longitude": 110.83167 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-07-SUR" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1625812, + "geonames_name": "Surakarta", + "admin1_code": "07", + "admin1_name": "Central Java", + "feature_code": "PPL", + "latitude": -7.55611, + "longitude": 110.83167 + }, + "inferred_at": "2026-01-09T19:51:14.639233+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Bogor", + "formatted": "ID-30-BOG", + "country_code": "ID", + "region_code": "30", + "settlement_code": "BOG", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Bogor, West Java, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Bogor, West Java, Indonesia (ID)", + "result": { + "geonames_id": 1648473, + "geonames_name": "Bogor", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPL", + "latitude": -6.59444, + "longitude": 106.78917 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-30-BOG" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1648473, + "geonames_name": "Bogor", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPL", + "latitude": -6.59444, + "longitude": 106.78917 + }, + "inferred_at": "2026-01-09T19:51:14.683776+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANDJANI-C.json b/data/person/ID_ID-07-SUR_199X_XX-XX-XXX_XXXX_ANDJANI-C.json similarity index 79% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANDJANI-C.json rename to data/person/ID_ID-07-SUR_199X_XX-XX-XXX_XXXX_ANDJANI-C.json index 2d397b5883..f1622dd57c 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANDJANI-C.json +++ b/data/person/ID_ID-07-SUR_199X_XX-XX-XXX_XXXX_ANDJANI-C.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANDJANI-C", + "ppid": "ID_ID-07-SUR_199X_XX-XX-XXX_XXXX_ANDJANI-C", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-07-SUR", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Andjani Ayu C.", @@ -161,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/andjaniayuct_20251214T111935Z.json" ], - "modified_at": "2026-01-09T19:18:15.252629+00:00", + "modified_at": "2026-01-09T19:51:07.580307+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "andjaniayuct", @@ -174,6 +175,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANDJANI-C", + "new_ppid": "ID_ID-07-SUR_199X_XX-XX-XXX_XXXX_ANDJANI-C", + "changed_at": "2026-01-09T19:51:07.580292+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -188,7 +199,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -237,7 +248,65 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.252602+00:00", + "inferred_at": "2026-01-09T19:51:07.300719+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Surakarta", + "formatted": "ID-07-SUR", + "country_code": "ID", + "region_code": "07", + "settlement_code": "SUR", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "PT. Tiga Serangkai Inti Corpora", + "title": "Motion Graphic", + "date_range": "Jun 2021 - Nov 2021 • 5 months", + "location": "Surakarta, Central Java, Indonesia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Surakarta, Central Java, Indonesia", + "result": { + "geonames_id": 1625812, + "geonames_name": "Surakarta", + "admin1_code": "07", + "admin1_name": "Central Java", + "feature_code": "PPL", + "latitude": -7.55611, + "longitude": 110.83167 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-07-SUR" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1625812, + "geonames_name": "Surakarta", + "admin1_code": "07", + "admin1_name": "Central Java", + "feature_code": "PPL", + "latitude": -7.55611, + "longitude": 110.83167 + }, + "inferred_at": "2026-01-09T19:51:07.488226+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NOVITA-DWIHAPSARI.json b/data/person/ID_ID-10-YOG_198X_ID-10-YOG_XXXX_NOVITA-DWIHAPSARI.json similarity index 52% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NOVITA-DWIHAPSARI.json rename to data/person/ID_ID-10-YOG_198X_ID-10-YOG_XXXX_NOVITA-DWIHAPSARI.json index 3e251a29a3..c56c24abea 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NOVITA-DWIHAPSARI.json +++ b/data/person/ID_ID-10-YOG_198X_ID-10-YOG_XXXX_NOVITA-DWIHAPSARI.json @@ -1,17 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NOVITA-DWIHAPSARI", + "ppid": "ID_ID-10-YOG_198X_ID-10-YOG_XXXX_NOVITA-DWIHAPSARI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-10-YOG", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "ID-10-YOG", "last_date": "XXXX", "name_tokens": [ "NOVITA", "DWIHAPSARI" ], - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Novita Dwihapsari", @@ -83,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/novita-dwihapsari-17983031_20251214T112017Z.json" ], - "modified_at": "2026-01-09T19:18:16.315004+00:00", + "modified_at": "2026-01-09T19:50:54.436678+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "novita-dwihapsari-17983031", @@ -106,6 +108,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NOVITA-DWIHAPSARI", + "new_ppid": "ID_ID-10-YOG_198X_ID-10-YOG_XXXX_NOVITA-DWIHAPSARI", + "changed_at": "2026-01-09T19:50:54.436674+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -114,7 +127,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +168,130 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.314951+00:00", + "inferred_at": "2026-01-09T19:50:54.335802+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Yogyakarta", + "formatted": "ID-10-YOG", + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Universitas Gadjah Mada", + "date_range": "2008 - 2009 • 1 year", + "degree": "Magister, Economic Science" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Universitas Gadjah Mada", + "mapping_result": "Yogyakarta, Indonesia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Yogyakarta, Indonesia", + "result": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG" + }, + "result": "ID-10-YOG" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + }, + "inferred_at": "2026-01-09T19:50:54.382075+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Yogyakarta", + "formatted": "ID-10-YOG", + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Yogyakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Yogyakarta, Indonesia (ID)", + "result": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-10-YOG" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + }, + "inferred_at": "2026-01-09T19:50:54.436651+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DEVI-AZMI.json b/data/person/ID_ID-10-YOG_199X_ID-04-JAK_XXXX_DEVI-AZMI.json similarity index 66% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DEVI-AZMI.json rename to data/person/ID_ID-10-YOG_199X_ID-04-JAK_XXXX_DEVI-AZMI.json index 202feb3464..2490fb0970 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DEVI-AZMI.json +++ b/data/person/ID_ID-10-YOG_199X_ID-04-JAK_XXXX_DEVI-AZMI.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DEVI-AZMI", + "ppid": "ID_ID-10-YOG_199X_ID-04-JAK_XXXX_DEVI-AZMI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-10-YOG", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "DEVI", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Devi Sabrina Azmi", @@ -157,7 +159,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/devi-sabrina-azmi-703202121_20251214T112003Z.json" ], - "modified_at": "2026-01-09T19:18:16.624890+00:00", + "modified_at": "2026-01-09T19:51:10.835632+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "devi-sabrina-azmi-703202121", @@ -179,6 +181,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DEVI-AZMI", + "new_ppid": "ID_ID-10-YOG_199X_ID-04-JAK_XXXX_DEVI-AZMI", + "changed_at": "2026-01-09T19:51:10.835630+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -193,7 +206,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +255,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.624846+00:00", + "inferred_at": "2026-01-09T19:51:10.692573+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Yogyakarta", + "formatted": "ID-10-YOG", + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Universitas Gadjah Mada (UGM)", + "date_range": "2020 - 2022 • 2 years", + "degree": "Master of Science - MS, Tourism Studies, 3.83" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Universitas Gadjah Mada (UGM)", + "mapping_result": "Yogyakarta, Indonesia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Yogyakarta, Indonesia", + "result": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG" + }, + "result": "ID-10-YOG" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + }, + "inferred_at": "2026-01-09T19:51:10.758736+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:10.835614+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELIZA-FITRIANA.json b/data/person/ID_ID-10-YOG_199X_XX-XX-XXX_XXXX_ELIZA-FITRIANA.json similarity index 67% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELIZA-FITRIANA.json rename to data/person/ID_ID-10-YOG_199X_XX-XX-XXX_XXXX_ELIZA-FITRIANA.json index d26e180a17..ad66f8ff45 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELIZA-FITRIANA.json +++ b/data/person/ID_ID-10-YOG_199X_XX-XX-XXX_XXXX_ELIZA-FITRIANA.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELIZA-FITRIANA", + "ppid": "ID_ID-10-YOG_199X_XX-XX-XXX_XXXX_ELIZA-FITRIANA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-10-YOG", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Eliza Nur Fitriana", @@ -113,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eliza-nur-fitriana-b7ab8045_20251214T112013Z.json" ], - "modified_at": "2026-01-09T19:18:16.622601+00:00", + "modified_at": "2026-01-09T19:51:21.090376+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eliza-nur-fitriana-b7ab8045", @@ -126,6 +127,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELIZA-FITRIANA", + "new_ppid": "ID_ID-10-YOG_199X_XX-XX-XXX_XXXX_ELIZA-FITRIANA", + "changed_at": "2026-01-09T19:51:21.090364+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -140,7 +151,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +200,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.622563+00:00", + "inferred_at": "2026-01-09T19:51:20.927494+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Yogyakarta", + "formatted": "ID-10-YOG", + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Universitas Gadjah Mada (UGM)", + "date_range": "2014 - 2017 • 3 years", + "degree": "Master of Public Administration - M.P.A., Public Administration" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Universitas Gadjah Mada (UGM)", + "mapping_result": "Yogyakarta, Indonesia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Yogyakarta, Indonesia", + "result": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG" + }, + "result": "ID-10-YOG" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + }, + "inferred_at": "2026-01-09T19:51:21.034403+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_WIENDYAZKIA-ARIFFA.json b/data/person/ID_ID-10-YOG_199X_XX-XX-XXX_XXXX_WIENDYAZKIA-ARIFFA.json similarity index 70% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_WIENDYAZKIA-ARIFFA.json rename to data/person/ID_ID-10-YOG_199X_XX-XX-XXX_XXXX_WIENDYAZKIA-ARIFFA.json index 909114eeab..f322b4b79d 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_WIENDYAZKIA-ARIFFA.json +++ b/data/person/ID_ID-10-YOG_199X_XX-XX-XXX_XXXX_WIENDYAZKIA-ARIFFA.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_WIENDYAZKIA-ARIFFA", + "ppid": "ID_ID-10-YOG_199X_XX-XX-XXX_XXXX_WIENDYAZKIA-ARIFFA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-10-YOG", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Wiendyazkia Nur Ariffa", @@ -143,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wiendyazkia_20251214T111930Z.json" ], - "modified_at": "2026-01-09T19:18:14.017081+00:00", + "modified_at": "2026-01-09T19:50:58.338125+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wiendyazkia", @@ -156,6 +157,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_WIENDYAZKIA-ARIFFA", + "new_ppid": "ID_ID-10-YOG_199X_XX-XX-XXX_XXXX_WIENDYAZKIA-ARIFFA", + "changed_at": "2026-01-09T19:50:58.338106+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -164,7 +175,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +216,77 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.017025+00:00", + "inferred_at": "2026-01-09T19:50:58.095305+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Yogyakarta", + "formatted": "ID-10-YOG", + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Universitas Gadjah Mada (UGM)", + "date_range": "2023 - 2025 • 2 years", + "degree": "Master of Arts - MA, Linguistics, 3.80" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Universitas Gadjah Mada (UGM)", + "mapping_result": "Yogyakarta, Indonesia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Yogyakarta, Indonesia", + "result": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG" + }, + "result": "ID-10-YOG" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + }, + "inferred_at": "2026-01-09T19:50:58.226359+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ADIMAS-DUMARSEMA.json b/data/person/ID_ID-10-YOG_200X_ID-04-JAK_XXXX_ADIMAS-DUMARSEMA.json similarity index 57% rename from data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ADIMAS-DUMARSEMA.json rename to data/person/ID_ID-10-YOG_200X_ID-04-JAK_XXXX_ADIMAS-DUMARSEMA.json index 52fd50d148..7affebe085 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ADIMAS-DUMARSEMA.json +++ b/data/person/ID_ID-10-YOG_200X_ID-04-JAK_XXXX_ADIMAS-DUMARSEMA.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ADIMAS-DUMARSEMA", + "ppid": "ID_ID-10-YOG_200X_ID-04-JAK_XXXX_ADIMAS-DUMARSEMA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-10-YOG", "first_date": "200X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ADIMAS", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Adimas Raka Dumarsema", @@ -107,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/adimasraka_20251214T112016Z.json" ], - "modified_at": "2026-01-09T19:18:13.708211+00:00", + "modified_at": "2026-01-09T19:50:55.886817+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "adimasraka", @@ -120,6 +122,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ADIMAS-DUMARSEMA", + "new_ppid": "ID_ID-10-YOG_200X_ID-04-JAK_XXXX_ADIMAS-DUMARSEMA", + "changed_at": "2026-01-09T19:50:55.886813+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -134,7 +147,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +196,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.708173+00:00", + "inferred_at": "2026-01-09T19:50:55.781743+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Yogyakarta", + "formatted": "ID-10-YOG", + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Universitas Gadjah Mada / Gadjah Mada University", + "date_range": "2023 - 2025 • 2 years", + "degree": "Master's of Science, Tourism Study, 3.79" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Universitas Gadjah Mada / Gadjah Mada University", + "mapping_result": "Yogyakarta, Indonesia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Yogyakarta, Indonesia", + "result": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG" + }, + "result": "ID-10-YOG" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + }, + "inferred_at": "2026-01-09T19:50:55.834216+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:55.886793+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_TIUR-SITOMPUL.json b/data/person/ID_ID-10-YOG_200X_ID-04-JAK_XXXX_TIUR-SITOMPUL.json similarity index 77% rename from data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_TIUR-SITOMPUL.json rename to data/person/ID_ID-10-YOG_200X_ID-04-JAK_XXXX_TIUR-SITOMPUL.json index af1c45776b..9180a8de14 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_TIUR-SITOMPUL.json +++ b/data/person/ID_ID-10-YOG_200X_ID-04-JAK_XXXX_TIUR-SITOMPUL.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_TIUR-SITOMPUL", + "ppid": "ID_ID-10-YOG_200X_ID-04-JAK_XXXX_TIUR-SITOMPUL", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-10-YOG", "first_date": "200X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "TIUR", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Tiur Maulina Putri Sitompul", @@ -279,7 +281,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tiur-maulina_20251214T111944Z.json" ], - "modified_at": "2026-01-09T19:18:17.893233+00:00", + "modified_at": "2026-01-09T19:51:24.453715+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tiur-maulina", @@ -301,6 +303,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_TIUR-SITOMPUL", + "new_ppid": "ID_ID-10-YOG_200X_ID-04-JAK_XXXX_TIUR-SITOMPUL", + "changed_at": "2026-01-09T19:51:24.453712+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -315,7 +328,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -364,7 +377,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.893112+00:00", + "inferred_at": "2026-01-09T19:51:24.116350+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Yogyakarta", + "formatted": "ID-10-YOG", + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Universitas Gadjah Mada (UGM)", + "date_range": "2019 - 2023 • 4 years", + "degree": "S1, Politik dan Pemerintahan, Cumlaude" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Universitas Gadjah Mada (UGM)", + "mapping_result": "Yogyakarta, Indonesia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Yogyakarta, Indonesia", + "result": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG" + }, + "result": "ID-10-YOG" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + }, + "inferred_at": "2026-01-09T19:51:24.352170+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:24.453687+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_AMARILIS-MARDHIYAH.json b/data/person/ID_ID-10-YOG_200X_XX-XX-XXX_XXXX_AMARILIS-MARDHIYAH.json similarity index 74% rename from data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_AMARILIS-MARDHIYAH.json rename to data/person/ID_ID-10-YOG_200X_XX-XX-XXX_XXXX_AMARILIS-MARDHIYAH.json index c7ed15a8fe..6db7cbb182 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_AMARILIS-MARDHIYAH.json +++ b/data/person/ID_ID-10-YOG_200X_XX-XX-XXX_XXXX_AMARILIS-MARDHIYAH.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_AMARILIS-MARDHIYAH", + "ppid": "ID_ID-10-YOG_200X_XX-XX-XXX_XXXX_AMARILIS-MARDHIYAH", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-10-YOG", "first_date": "200X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Amarilis Khairina Mardhiyah", @@ -156,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amariliskm_20251214T112018Z.json" ], - "modified_at": "2026-01-09T19:18:15.516922+00:00", + "modified_at": "2026-01-09T19:51:11.773467+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "amariliskm", @@ -169,6 +170,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_AMARILIS-MARDHIYAH", + "new_ppid": "ID_ID-10-YOG_200X_XX-XX-XXX_XXXX_AMARILIS-MARDHIYAH", + "changed_at": "2026-01-09T19:51:11.773448+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -183,7 +194,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +243,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.516886+00:00", + "inferred_at": "2026-01-09T19:51:11.280761+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Yogyakarta", + "formatted": "ID-10-YOG", + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Universitas Gadjah Mada (UGM)", + "date_range": "2018 - 2022 • 4 years", + "degree": "Bachelor's degree, Computer Science, 3.66" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Universitas Gadjah Mada (UGM)", + "mapping_result": "Yogyakarta, Indonesia" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Yogyakarta, Indonesia", + "result": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "ID", + "region_code": "10", + "settlement_code": "YOG" + }, + "result": "ID-10-YOG" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 1621177, + "geonames_name": "Yogyakarta", + "admin1_code": "10", + "admin1_name": "Yogyakarta", + "feature_code": "PPLA", + "latitude": -7.80139, + "longitude": 110.36472 + }, + "inferred_at": "2026-01-09T19:51:11.594893+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_FRIDUS-STEIJLEN.json b/data/person/ID_ID-28-AMB_196X_NL-NH-AMS_XXXX_FRIDUS-STEIJLEN.json similarity index 90% rename from data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_FRIDUS-STEIJLEN.json rename to data/person/ID_ID-28-AMB_196X_NL-NH-AMS_XXXX_FRIDUS-STEIJLEN.json index 09909e4c7a..615f5907ce 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_FRIDUS-STEIJLEN.json +++ b/data/person/ID_ID-28-AMB_196X_NL-NH-AMS_XXXX_FRIDUS-STEIJLEN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_FRIDUS-STEIJLEN", + "ppid": "ID_ID-28-AMB_196X_NL-NH-AMS_XXXX_FRIDUS-STEIJLEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-28-AMB", "first_date": "196X", "last_location": "NL-NH-AMS", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "195X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Fridus Steijlen", @@ -113,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fridus-steijlen-5a87a210_20251214T103722Z.json" ], - "modified_at": "2026-01-09T19:18:11.232625+00:00", + "modified_at": "2026-01-09T19:50:59.766903+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fridus-steijlen-5a87a210", @@ -127,6 +128,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_FRIDUS-STEIJLEN", + "new_ppid": "ID_ID-28-AMB_196X_NL-NH-AMS_XXXX_FRIDUS-STEIJLEN", + "changed_at": "2026-01-09T19:47:58.082305+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -141,7 +152,7 @@ "primary_rationale": "1963 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +201,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1963 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:11.232602+00:00", + "inferred_at": "2026-01-09T19:50:59.766894+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SINDY-SETIAWATI.json b/data/person/ID_ID-30-BAN_199X_ID-04-JAK_XXXX_SINDY-SETIAWATI.json similarity index 63% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SINDY-SETIAWATI.json rename to data/person/ID_ID-30-BAN_199X_ID-04-JAK_XXXX_SINDY-SETIAWATI.json index bc78cea0ad..898d820fcf 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SINDY-SETIAWATI.json +++ b/data/person/ID_ID-30-BAN_199X_ID-04-JAK_XXXX_SINDY-SETIAWATI.json @@ -1,17 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SINDY-SETIAWATI", + "ppid": "ID_ID-30-BAN_199X_ID-04-JAK_XXXX_SINDY-SETIAWATI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-30-BAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "SINDY", "SETIAWATI" ], - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Sindy Setiawati", @@ -142,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sindy-setiawati-0970bb117_20251214T111953Z.json" ], - "modified_at": "2026-01-09T19:18:14.727149+00:00", + "modified_at": "2026-01-09T19:51:03.736287+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sindy-setiawati-0970bb117", @@ -155,6 +157,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SINDY-SETIAWATI", + "new_ppid": "ID_ID-30-BAN_199X_ID-04-JAK_XXXX_SINDY-SETIAWATI", + "changed_at": "2026-01-09T19:51:03.736280+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -163,7 +176,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +217,129 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.727108+00:00", + "inferred_at": "2026-01-09T19:51:03.598235+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Bandung", + "formatted": "ID-30-BAN", + "country_code": "ID", + "region_code": "30", + "settlement_code": "BAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of tourism Republic Indonesia", + "title": "On The Job Training", + "date_range": "Aug 2015 - Oct 2015 • 2 months", + "location": "Jakarta" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "PT. Angkasa Pura Solusi (Saphire Lounge)", + "title": "Guest Service Agent", + "date_range": "Dec 2016 - Jan 2017 • 1 month", + "location": "Bandung Area, West Java, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Bandung Area, West Java, Indonesia", + "result": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-30-BAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + }, + "inferred_at": "2026-01-09T19:51:03.655310+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:03.736235+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANANG-SUTONO.json b/data/person/ID_ID-30-BAN_199X_ID-30-BAN_XXXX_ANANG-SUTONO.json similarity index 58% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANANG-SUTONO.json rename to data/person/ID_ID-30-BAN_199X_ID-30-BAN_XXXX_ANANG-SUTONO.json index e35cbbf41c..e89a02e305 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANANG-SUTONO.json +++ b/data/person/ID_ID-30-BAN_199X_ID-30-BAN_XXXX_ANANG-SUTONO.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANANG-SUTONO", + "ppid": "ID_ID-30-BAN_199X_ID-30-BAN_XXXX_ANANG-SUTONO", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-30-BAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-30-BAN", "last_date": "XXXX", "name_tokens": [ "ANANG", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Anang Sutono", @@ -102,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dr-anang-sutono-che-118a71168_20251214T112010Z.json" ], - "modified_at": "2026-01-09T19:18:13.557361+00:00", + "modified_at": "2026-01-09T19:50:55.052969+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dr-anang-sutono-che-118a71168", @@ -115,6 +117,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANANG-SUTONO", + "new_ppid": "ID_ID-30-BAN_199X_ID-30-BAN_XXXX_ANANG-SUTONO", + "changed_at": "2026-01-09T19:50:55.052961+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -129,7 +142,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +191,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.557347+00:00", + "inferred_at": "2026-01-09T19:50:54.655850+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Bandung", + "formatted": "ID-30-BAN", + "country_code": "ID", + "region_code": "30", + "settlement_code": "BAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "STP NHI Bandung", + "title": "President Of STP NHI Bandung Institute", + "date_range": "Jan 2014 - Feb 2018 • 4 years and 1 month", + "location": "Bandung Area, West Java, Indonesia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Bandung Area, West Java, Indonesia", + "result": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-30-BAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + }, + "inferred_at": "2026-01-09T19:50:54.995257+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Bandung", + "formatted": "ID-30-BAN", + "country_code": "ID", + "region_code": "30", + "settlement_code": "BAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Bandung, West Java, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Bandung, West Java, Indonesia (ID)", + "result": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-30-BAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + }, + "inferred_at": "2026-01-09T19:50:55.052919+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_REZA-NURIZKI.json b/data/person/ID_ID-30-BAN_199X_ID-30-BAN_XXXX_REZA-NURIZKI.json similarity index 68% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_REZA-NURIZKI.json rename to data/person/ID_ID-30-BAN_199X_ID-30-BAN_XXXX_REZA-NURIZKI.json index b742f64c01..0022659b32 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_REZA-NURIZKI.json +++ b/data/person/ID_ID-30-BAN_199X_ID-30-BAN_XXXX_REZA-NURIZKI.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_REZA-NURIZKI", + "ppid": "ID_ID-30-BAN_199X_ID-30-BAN_XXXX_REZA-NURIZKI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-30-BAN", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-30-BAN", "last_date": "XXXX", "name_tokens": [ "REZA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Reza Nurizki", @@ -182,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/reza-nurizki-489ba034_20251214T111928Z.json" ], - "modified_at": "2026-01-09T19:18:14.606978+00:00", + "modified_at": "2026-01-09T19:51:02.993568+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "reza-nurizki-489ba034", @@ -195,6 +197,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_REZA-NURIZKI", + "new_ppid": "ID_ID-30-BAN_199X_ID-30-BAN_XXXX_REZA-NURIZKI", + "changed_at": "2026-01-09T19:51:02.993565+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -209,7 +222,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +271,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.606913+00:00", + "inferred_at": "2026-01-09T19:51:02.703565+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Bandung", + "formatted": "ID-30-BAN", + "country_code": "ID", + "region_code": "30", + "settlement_code": "BAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Institut français", + "title": "French Teacher", + "date_range": "Jul 2013 - Dec 2023 • 10 years and 5 months", + "location": "Bandung Area, West Java, Indonesia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Bandung Area, West Java, Indonesia", + "result": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-30-BAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + }, + "inferred_at": "2026-01-09T19:51:02.942927+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Bandung", + "formatted": "ID-30-BAN", + "country_code": "ID", + "region_code": "30", + "settlement_code": "BAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Bandung, West Java, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Bandung, West Java, Indonesia (ID)", + "result": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-30-BAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + }, + "inferred_at": "2026-01-09T19:51:02.993549+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MAULIDA-UMMA.json b/data/person/ID_ID-30-BAN_199X_XX-XX-XXX_XXXX_MAULIDA-UMMA.json similarity index 82% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MAULIDA-UMMA.json rename to data/person/ID_ID-30-BAN_199X_XX-XX-XXX_XXXX_MAULIDA-UMMA.json index 102cf8644f..46e3508531 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MAULIDA-UMMA.json +++ b/data/person/ID_ID-30-BAN_199X_XX-XX-XXX_XXXX_MAULIDA-UMMA.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MAULIDA-UMMA", + "ppid": "ID_ID-30-BAN_199X_XX-XX-XXX_XXXX_MAULIDA-UMMA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-30-BAN", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Maulida Umma", @@ -214,7 +215,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maulida-umma-s_20251214T112019Z.json" ], - "modified_at": "2026-01-09T19:18:14.580171+00:00", + "modified_at": "2026-01-09T19:51:01.934214+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maulida-umma-s", @@ -227,6 +228,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MAULIDA-UMMA", + "new_ppid": "ID_ID-30-BAN_199X_XX-XX-XXX_XXXX_MAULIDA-UMMA", + "changed_at": "2026-01-09T19:51:01.934201+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -241,7 +252,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -290,7 +301,65 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.385720+00:00", + "inferred_at": "2026-01-09T19:51:01.732460+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Bandung", + "formatted": "ID-30-BAN", + "country_code": "ID", + "region_code": "30", + "settlement_code": "BAN", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Jatinangor Language Center", + "title": "Private Tutor", + "date_range": "Nov 2018 - Feb 2020 • 1 year and 3 months", + "location": "Bandung Area, West Java, Indonesia" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Bandung Area, West Java, Indonesia", + "result": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-30-BAN" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + }, + "inferred_at": "2026-01-09T19:51:01.785587+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DEDI-EFFENDI.json b/data/person/ID_ID-30-DEP_199X_ID-04-JAK_XXXX_DEDI-EFFENDI.json similarity index 52% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DEDI-EFFENDI.json rename to data/person/ID_ID-30-DEP_199X_ID-04-JAK_XXXX_DEDI-EFFENDI.json index b36981874a..f583a18dd5 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DEDI-EFFENDI.json +++ b/data/person/ID_ID-30-DEP_199X_ID-04-JAK_XXXX_DEDI-EFFENDI.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DEDI-EFFENDI", + "ppid": "ID_ID-30-DEP_199X_ID-04-JAK_XXXX_DEDI-EFFENDI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ID-30-DEP", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "DEDI", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Dedi Effendi", @@ -125,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dedi-effendi-5aa57a107_20251214T103820Z.json" ], - "modified_at": "2026-01-09T19:18:13.480569+00:00", + "modified_at": "2026-01-09T19:50:56.453613+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dedi-effendi-5aa57a107", @@ -147,6 +149,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DEDI-EFFENDI", + "new_ppid": "ID_ID-30-DEP_199X_ID-04-JAK_XXXX_DEDI-EFFENDI", + "changed_at": "2026-01-09T19:50:56.453610+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -161,7 +174,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +223,173 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.480508+00:00", + "inferred_at": "2026-01-09T19:50:56.098814+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Depok", + "formatted": "ID-30-DEP", + "country_code": "ID", + "region_code": "30", + "settlement_code": "DEP", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Komisi Pemberantasan Korupsi (KPK)", + "title": "Archivist", + "date_range": "Aug 2006 - May 2007 • 9 months", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "YAPPIKA-ActionAid", + "title": "Librarian", + "date_range": "May 2006 - Jul 2006 • 2 months", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "USAID", + "title": "Librarian", + "date_range": "Mar 2006 - May 2006 • 2 months", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 4, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "PT. Truba Alam Manunggal Engineering", + "title": "Corporate Secretary Staff", + "date_range": "Jun 2007 - Nov 2008 • 1 year and 5 months", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 5, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Australia", + "title": "Acquisitions Officer", + "date_range": "Dec 2008 - Present • 16 years and 11 months", + "location": "Greater Jakarta Area, Indonesia" + } + }, + { + "step": 6, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Mele Toast (Current)", + "title": "Business Owner", + "date_range": "Apr 2024 - Present • 1 year and 7 months", + "location": "Depok, West Java, Indonesia" + } + }, + { + "step": 7, + "geocoding": "GeoNames resolution", + "query": "Depok, West Java, Indonesia", + "result": { + "geonames_id": 1645524, + "geonames_name": "Depok", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPL", + "latitude": -6.4, + "longitude": 106.81861 + } + }, + { + "step": 8, + "formatting": "CC-RR-PPP generation", + "result": "ID-30-DEP" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1645524, + "geonames_name": "Depok", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPL", + "latitude": -6.4, + "longitude": 106.81861 + }, + "inferred_at": "2026-01-09T19:50:56.407730+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:56.453588+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_CLARENCE-DSILVA.json b/data/person/ID_IN-16-MUM_198X_NL-NB-VEL_XXXX_CLARENCE-DSILVA.json similarity index 84% rename from data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_CLARENCE-DSILVA.json rename to data/person/ID_IN-16-MUM_198X_NL-NB-VEL_XXXX_CLARENCE-DSILVA.json index d127a71df2..58afe26405 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_CLARENCE-DSILVA.json +++ b/data/person/ID_IN-16-MUM_198X_NL-NB-VEL_XXXX_CLARENCE-DSILVA.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_CLARENCE-DSILVA", + "ppid": "ID_IN-16-MUM_198X_NL-NB-VEL_XXXX_CLARENCE-DSILVA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "IN-16-MUM", "first_date": "198X", "last_location": "NL-NB-VEL", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Clarence D'Silva", @@ -218,7 +219,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/clarencedsilva_20251214T111053Z.json" ], - "modified_at": "2026-01-09T19:18:16.725847+00:00", + "modified_at": "2026-01-09T19:51:27.537956+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "clarencedsilva", @@ -241,6 +242,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_CLARENCE-DSILVA", + "new_ppid": "ID_IN-16-MUM_198X_NL-NB-VEL_XXXX_CLARENCE-DSILVA", + "changed_at": "2026-01-09T19:51:27.537953+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -255,7 +266,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -304,7 +315,65 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.723941+00:00", + "inferred_at": "2026-01-09T19:51:26.709038+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Mumbai", + "formatted": "IN-16-MUM", + "country_code": "IN", + "region_code": "16", + "settlement_code": "MUM", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Accenture", + "title": "Application Development Associate (Project 2 Project Control Tools )", + "date_range": "Dec 2015 - Nov 2016 • 11 months", + "location": "Mumbai Area, India" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Mumbai Area, India", + "result": { + "geonames_id": 1275339, + "geonames_name": "Mumbai", + "admin1_code": "16", + "admin1_name": "Maharashtra", + "feature_code": "PPLA", + "latitude": 19.07283, + "longitude": 72.88261 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "IN-16-MUM" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1275339, + "geonames_name": "Mumbai", + "admin1_code": "16", + "admin1_name": "Maharashtra", + "feature_code": "PPLA", + "latitude": 19.07283, + "longitude": 72.88261 + }, + "inferred_at": "2026-01-09T19:51:27.537933+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RACHEL-MALMBORG.json b/data/person/ID_IN-19-RT_199X_XX-XX-XXX_XXXX_RACHEL-MALMBORG.json similarity index 87% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RACHEL-MALMBORG.json rename to data/person/ID_IN-19-RT_199X_XX-XX-XXX_XXXX_RACHEL-MALMBORG.json index 93fd930ede..cd655124c6 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RACHEL-MALMBORG.json +++ b/data/person/ID_IN-19-RT_199X_XX-XX-XXX_XXXX_RACHEL-MALMBORG.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RACHEL-MALMBORG", + "ppid": "ID_IN-19-RT_199X_XX-XX-XXX_XXXX_RACHEL-MALMBORG", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "IN-19-RT", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Rachel Malmborg", @@ -282,7 +283,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rachel-malmborg-932010109_20251214T112343Z.json" ], - "modified_at": "2026-01-09T19:18:18.950331+00:00", + "modified_at": "2026-01-09T19:51:31.288239+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rachel-malmborg-932010109", @@ -295,6 +296,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RACHEL-MALMBORG", + "new_ppid": "ID_IN-19-RT_199X_XX-XX-XXX_XXXX_RACHEL-MALMBORG", + "changed_at": "2026-01-09T19:51:31.288221+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -309,7 +320,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -358,7 +369,65 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.950210+00:00", + "inferred_at": "2026-01-09T19:51:30.305321+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Richmond Town", + "formatted": "IN-19-RT", + "country_code": "IN", + "region_code": "19", + "settlement_code": "RT", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "International Programs Office, Earlham College", + "title": "International Student Orientation Organizer", + "date_range": "Aug 2009 - Aug 2009", + "location": "Richmond, Indiana" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Richmond, Indiana", + "result": { + "geonames_id": 6692865, + "geonames_name": "Richmond Town", + "admin1_code": "19", + "admin1_name": "Karnataka", + "feature_code": "PPL", + "latitude": 12.96339, + "longitude": 77.60253 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "IN-19-RT" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 6692865, + "geonames_name": "Richmond Town", + "admin1_code": "19", + "admin1_name": "Karnataka", + "feature_code": "PPL", + "latitude": 12.96339, + "longitude": 77.60253 + }, + "inferred_at": "2026-01-09T19:51:31.193093+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NARESH-T.json b/data/person/ID_IN-40-HYD_198X_AU-01-CAN_XXXX_NARESH-T.json similarity index 61% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NARESH-T.json rename to data/person/ID_IN-40-HYD_198X_AU-01-CAN_XXXX_NARESH-T.json index d622ecfba7..b3d4732aa6 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NARESH-T.json +++ b/data/person/ID_IN-40-HYD_198X_AU-01-CAN_XXXX_NARESH-T.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NARESH-T", + "ppid": "ID_IN-40-HYD_198X_AU-01-CAN_XXXX_NARESH-T", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "IN-40-HYD", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "NARESH", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Naresh T.", @@ -137,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/naresh-t-97490717_20251214T103829Z.json" ], - "modified_at": "2026-01-09T19:18:16.016876+00:00", + "modified_at": "2026-01-09T19:51:16.719684+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "naresh-t-97490717", @@ -150,6 +152,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NARESH-T", + "new_ppid": "ID_IN-40-HYD_198X_AU-01-CAN_XXXX_NARESH-T", + "changed_at": "2026-01-09T19:51:16.719677+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -164,7 +177,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +226,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.016841+00:00", + "inferred_at": "2026-01-09T19:51:15.741421+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Hyderabad", + "formatted": "IN-40-HYD", + "country_code": "IN", + "region_code": "40", + "settlement_code": "HYD", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "AppLabs", + "title": "Senior Software Engineer", + "date_range": "Nov 2005 - Nov 2007 • 2 years", + "location": "Hyderabad, Telangana, India" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Hyderabad, Telangana, India", + "result": { + "geonames_id": 1269843, + "geonames_name": "Hyderabad", + "admin1_code": "40", + "admin1_name": "Telangana", + "feature_code": "PPLA", + "latitude": 17.38405, + "longitude": 78.45636 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "IN-40-HYD" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1269843, + "geonames_name": "Hyderabad", + "admin1_code": "40", + "admin1_name": "Telangana", + "feature_code": "PPLA", + "latitude": 17.38405, + "longitude": 78.45636 + }, + "inferred_at": "2026-01-09T19:51:16.661554+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:16.719640+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SANDEEP-E.json b/data/person/ID_IN-40-HYD_198X_XX-XX-XXX_XXXX_SANDEEP-E.json similarity index 66% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SANDEEP-E.json rename to data/person/ID_IN-40-HYD_198X_XX-XX-XXX_XXXX_SANDEEP-E.json index ce20ee757d..1a0f28f2d9 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SANDEEP-E.json +++ b/data/person/ID_IN-40-HYD_198X_XX-XX-XXX_XXXX_SANDEEP-E.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SANDEEP-E", + "ppid": "ID_IN-40-HYD_198X_XX-XX-XXX_XXXX_SANDEEP-E", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "IN-40-HYD", "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Sandeep E", @@ -92,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sandeep-e-04b696316_20251214T111022Z.json" ], - "modified_at": "2026-01-09T19:18:13.138016+00:00", + "modified_at": "2026-01-09T19:50:52.784666+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sandeep-e-04b696316", @@ -105,6 +106,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SANDEEP-E", + "new_ppid": "ID_IN-40-HYD_198X_XX-XX-XXX_XXXX_SANDEEP-E", + "changed_at": "2026-01-09T19:50:52.784617+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -119,7 +130,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +179,65 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.134454+00:00", + "inferred_at": "2026-01-09T19:50:51.779266+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Hyderabad", + "formatted": "IN-40-HYD", + "country_code": "IN", + "region_code": "40", + "settlement_code": "HYD", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "VA Solutions Pvt Ltd", + "title": "Engineer", + "date_range": "Aug 2008 - Jan 2011 • 2 years and 5 months", + "location": "Hyderabad, Telangana, India" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Hyderabad, Telangana, India", + "result": { + "geonames_id": 1269843, + "geonames_name": "Hyderabad", + "admin1_code": "40", + "admin1_name": "Telangana", + "feature_code": "PPLA", + "latitude": 17.38405, + "longitude": 78.45636 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "IN-40-HYD" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 1269843, + "geonames_name": "Hyderabad", + "admin1_code": "40", + "admin1_name": "Telangana", + "feature_code": "PPLA", + "latitude": 17.38405, + "longitude": 78.45636 + }, + "inferred_at": "2026-01-09T19:50:52.751593+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_ERICA-FARINA.json b/data/person/ID_IT-05-MM_199X_NL-NB-EIN_XXXX_ERICA-FARINA.json similarity index 65% rename from data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_ERICA-FARINA.json rename to data/person/ID_IT-05-MM_199X_NL-NB-EIN_XXXX_ERICA-FARINA.json index a2cea77ee3..a906b67ff1 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_ERICA-FARINA.json +++ b/data/person/ID_IT-05-MM_199X_NL-NB-EIN_XXXX_ERICA-FARINA.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_ERICA-FARINA", + "ppid": "ID_IT-05-MM_199X_NL-NB-EIN_XXXX_ERICA-FARINA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "IT-05-MM", "first_date": "199X", "last_location": "NL-NB-EIN", "last_date": "XXXX", @@ -12,7 +12,8 @@ "FARINA" ], "first_date_source": "inferred_birth_decade", - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Erica Farina", @@ -124,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ericafarina_20251214T111026Z.json" ], - "modified_at": "2026-01-09T19:18:13.701101+00:00", + "modified_at": "2026-01-09T19:50:55.561544+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ericafarina", @@ -138,6 +139,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_ERICA-FARINA", + "new_ppid": "ID_IT-05-MM_199X_NL-NB-EIN_XXXX_ERICA-FARINA", + "changed_at": "2026-01-09T19:50:55.561541+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -146,7 +157,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +198,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.693523+00:00", + "inferred_at": "2026-01-09T19:50:55.451871+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Milano Marittima", + "formatted": "IT-05-MM", + "country_code": "IT", + "region_code": "05", + "settlement_code": "MM", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Politecnico di Milano", + "date_range": "2014 - 2018 • 4 years", + "degree": "" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Politecnico di Milano", + "mapping_result": "Milano, Italy" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Milano, Italy", + "result": { + "geonames_id": 3173428, + "geonames_name": "Milano Marittima", + "admin1_code": "05", + "admin1_name": "Emilia-Romagna", + "feature_code": "PPL", + "latitude": 44.27409, + "longitude": 12.35172 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "IT", + "region_code": "05", + "settlement_code": "MM" + }, + "result": "IT-05-MM" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 3173428, + "geonames_name": "Milano Marittima", + "admin1_code": "05", + "admin1_name": "Emilia-Romagna", + "feature_code": "PPL", + "latitude": 44.27409, + "longitude": 12.35172 + }, + "inferred_at": "2026-01-09T19:50:55.561520+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_GIORGIO-PORCARO.json b/data/person/ID_IT-05-MM_199X_NL-NB-EIN_XXXX_GIORGIO-PORCARO.json similarity index 64% rename from data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_GIORGIO-PORCARO.json rename to data/person/ID_IT-05-MM_199X_NL-NB-EIN_XXXX_GIORGIO-PORCARO.json index b107e22982..759944d0bc 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_GIORGIO-PORCARO.json +++ b/data/person/ID_IT-05-MM_199X_NL-NB-EIN_XXXX_GIORGIO-PORCARO.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_GIORGIO-PORCARO", + "ppid": "ID_IT-05-MM_199X_NL-NB-EIN_XXXX_GIORGIO-PORCARO", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "IT-05-MM", "first_date": "199X", "last_location": "NL-NB-EIN", "last_date": "XXXX", @@ -15,7 +15,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Giorgio Porcaro", @@ -82,7 +83,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/giorgio-porcaro-127979194_20251214T110922Z.json" ], - "modified_at": "2026-01-09T19:18:11.293017+00:00", + "modified_at": "2026-01-09T19:51:14.345598+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "giorgio-porcaro-127979194", @@ -104,6 +105,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_GIORGIO-PORCARO", + "new_ppid": "ID_IT-05-MM_199X_NL-NB-EIN_XXXX_GIORGIO-PORCARO", + "changed_at": "2026-01-09T19:51:14.345595+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -118,7 +129,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +178,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.288868+00:00", + "inferred_at": "2026-01-09T19:51:14.203287+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Milano Marittima", + "formatted": "IT-05-MM", + "country_code": "IT", + "region_code": "05", + "settlement_code": "MM", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Politecnico di Milano", + "date_range": "2019 - 2021 • 2 years", + "degree": "Laurea Magistrale LM, Materials Engineering" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Politecnico di Milano", + "mapping_result": "Milano, Italy" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Milano, Italy", + "result": { + "geonames_id": 3173428, + "geonames_name": "Milano Marittima", + "admin1_code": "05", + "admin1_name": "Emilia-Romagna", + "feature_code": "PPL", + "latitude": 44.27409, + "longitude": 12.35172 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "IT", + "region_code": "05", + "settlement_code": "MM" + }, + "result": "IT-05-MM" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 3173428, + "geonames_name": "Milano Marittima", + "admin1_code": "05", + "admin1_name": "Emilia-Romagna", + "feature_code": "PPL", + "latitude": 44.27409, + "longitude": 12.35172 + }, + "inferred_at": "2026-01-09T19:51:14.345577+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-ROT_XXXX_ANNELYNN-KOENDERS.json b/data/person/ID_IT-07-ROM_199X_NL-ZH-ROT_XXXX_ANNELYNN-KOENDERS.json similarity index 75% rename from data/person/ID_XX-XX-XXX_199X_NL-ZH-ROT_XXXX_ANNELYNN-KOENDERS.json rename to data/person/ID_IT-07-ROM_199X_NL-ZH-ROT_XXXX_ANNELYNN-KOENDERS.json index 196ea2825c..7647347544 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-ROT_XXXX_ANNELYNN-KOENDERS.json +++ b/data/person/ID_IT-07-ROM_199X_NL-ZH-ROT_XXXX_ANNELYNN-KOENDERS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-ZH-ROT_XXXX_ANNELYNN-KOENDERS", + "ppid": "ID_IT-07-ROM_199X_NL-ZH-ROT_XXXX_ANNELYNN-KOENDERS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "IT-07-ROM", "first_date": "199X", "last_location": "NL-ZH-ROT", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Annelynn Koenders", @@ -145,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annelynn-koenders-540b38212_20251214T113308Z.json" ], - "modified_at": "2026-01-09T19:18:16.786862+00:00", + "modified_at": "2026-01-09T19:51:21.970407+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annelynn-koenders-540b38212", @@ -159,6 +160,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-ZH-ROT_XXXX_ANNELYNN-KOENDERS", + "new_ppid": "ID_IT-07-ROM_199X_NL-ZH-ROT_XXXX_ANNELYNN-KOENDERS", + "changed_at": "2026-01-09T19:51:21.970405+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -173,7 +184,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +233,65 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.786843+00:00", + "inferred_at": "2026-01-09T19:51:21.960273+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Rome", + "formatted": "IT-07-ROM", + "country_code": "IT", + "region_code": "07", + "settlement_code": "ROM", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "The Royal Netherlands Institute in Rome", + "title": "Mining Library Treasures", + "date_range": "Dec 2021 - Dec 2021", + "location": "Rome, Latium, Italy" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Rome, Latium, Italy", + "result": { + "geonames_id": 3169070, + "geonames_name": "Rome", + "admin1_code": "07", + "admin1_name": "Lazio", + "feature_code": "PPLC", + "latitude": 41.89193, + "longitude": 12.51133 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "IT-07-ROM" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 3169070, + "geonames_name": "Rome", + "admin1_code": "07", + "admin1_name": "Lazio", + "feature_code": "PPLC", + "latitude": 41.89193, + "longitude": 12.51133 + }, + "inferred_at": "2026-01-09T19:51:21.970392+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_AURORA-BELLI.json b/data/person/ID_IT-10-REC_200X_NL-NH-AMS_XXXX_AURORA-BELLI.json similarity index 69% rename from data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_AURORA-BELLI.json rename to data/person/ID_IT-10-REC_200X_NL-NH-AMS_XXXX_AURORA-BELLI.json index 5693a9ad4e..0e765ebc2a 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_AURORA-BELLI.json +++ b/data/person/ID_IT-10-REC_200X_NL-NH-AMS_XXXX_AURORA-BELLI.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_AURORA-BELLI", + "ppid": "ID_IT-10-REC_200X_NL-NH-AMS_XXXX_AURORA-BELLI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "IT-10-REC", "first_date": "200X", "last_location": "NL-NH-AMS", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Aurora Belli", @@ -133,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aurora-belli-2b831421a_20251214T111643Z.json" ], - "modified_at": "2026-01-09T19:18:16.742555+00:00", + "modified_at": "2026-01-09T19:51:21.805187+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aurora-belli-2b831421a", @@ -147,6 +148,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_AURORA-BELLI", + "new_ppid": "ID_IT-10-REC_200X_NL-NH-AMS_XXXX_AURORA-BELLI", + "changed_at": "2026-01-09T19:51:21.805185+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -161,7 +172,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +221,76 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.742535+00:00", + "inferred_at": "2026-01-09T19:51:21.792449+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Recanati", + "formatted": "IT-10-REC", + "country_code": "IT", + "region_code": "10", + "settlement_code": "REC", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Rijksmuseum", + "title": "Research Technician - Watermarks Project", + "date_range": "Nov 2023 - Present • 2 years", + "location": "Amsterdam, Olanda Settentrionale, Paesi Bassi" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Re.Li.C.", + "title": "Paper Conservator", + "date_range": "Sep 2023 - Nov 2023 • 2 months", + "location": "Recanati, Marche, Italia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Recanati, Marche, Italia", + "result": { + "geonames_id": 3169540, + "geonames_name": "Recanati", + "admin1_code": "10", + "admin1_name": "The Marches", + "feature_code": "PPLA3", + "latitude": 43.40381, + "longitude": 13.55379 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "IT-10-REC" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 3169540, + "geonames_name": "Recanati", + "admin1_code": "10", + "admin1_name": "The Marches", + "feature_code": "PPLA3", + "latitude": 43.40381, + "longitude": 13.55379 + }, + "inferred_at": "2026-01-09T19:51:21.805158+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-DR-TYN_200X_NL-GR-GRO_XXXX_DENNIS-RAAF.json b/data/person/ID_NL-DR-TYN_200X_NL-GR-GRO_XXXX_DENNIS-RAAF.json index 731bc22269..5f77414607 100644 --- a/data/person/ID_NL-DR-TYN_200X_NL-GR-GRO_XXXX_DENNIS-RAAF.json +++ b/data/person/ID_NL-DR-TYN_200X_NL-GR-GRO_XXXX_DENNIS-RAAF.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dennis-de-raaf-a4a3a1244_20251214T112204Z.json" ], - "modified_at": "2026-01-09T19:18:17.320592+00:00", + "modified_at": "2026-01-09T19:51:25.527932+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dennis-de-raaf-a4a3a1244", @@ -126,7 +126,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.320588+00:00", + "inferred_at": "2026-01-09T19:51:25.527927+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-FL-AS_197X_XX-XX-XXX_XXXX_ANGELIEK-JONGE.json b/data/person/ID_NL-FL-AS_197X_XX-XX-XXX_XXXX_ANGELIEK-JONGE.json index 0487e7ad3f..45a8effffa 100644 --- a/data/person/ID_NL-FL-AS_197X_XX-XX-XXX_XXXX_ANGELIEK-JONGE.json +++ b/data/person/ID_NL-FL-AS_197X_XX-XX-XXX_XXXX_ANGELIEK-JONGE.json @@ -349,7 +349,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/angeliek-de-jonge-57094211_20251214T104143Z.json" ], - "modified_at": "2026-01-09T19:18:17.178368+00:00", + "modified_at": "2026-01-09T19:51:24.471414+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "angeliek-de-jonge-57094211", @@ -377,7 +377,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -426,7 +426,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.176384+00:00", + "inferred_at": "2026-01-09T19:51:24.456429+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-FL-AS_198X_NL-NH-AMS_XXXX_LESTER-BONN.json b/data/person/ID_NL-FL-AS_198X_NL-NH-AMS_XXXX_LESTER-BONN.json index 957be1fd4e..9bbc4839be 100644 --- a/data/person/ID_NL-FL-AS_198X_NL-NH-AMS_XXXX_LESTER-BONN.json +++ b/data/person/ID_NL-FL-AS_198X_NL-NH-AMS_XXXX_LESTER-BONN.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lester-bonn-a555619_20251214T111530Z.json" ], - "modified_at": "2026-01-09T19:18:16.536353+00:00", + "modified_at": "2026-01-09T19:51:04.981251+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lester-bonn-a555619", @@ -192,7 +192,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.536346+00:00", + "inferred_at": "2026-01-09T19:51:04.981239+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-FL-AS_199X_NL-NH-AMS_XXXX_ROBBIN-VERHOEF.json b/data/person/ID_NL-FL-AS_199X_NL-NH-AMS_XXXX_ROBBIN-VERHOEF.json index 9df08bdaac..121e4d3111 100644 --- a/data/person/ID_NL-FL-AS_199X_NL-NH-AMS_XXXX_ROBBIN-VERHOEF.json +++ b/data/person/ID_NL-FL-AS_199X_NL-NH-AMS_XXXX_ROBBIN-VERHOEF.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robbin-rachelle-verhoef-1987b31ba_20251214T111555Z.json" ], - "modified_at": "2026-01-09T19:18:14.280061+00:00", + "modified_at": "2026-01-09T19:50:59.810317+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robbin-rachelle-verhoef-1987b31ba", @@ -149,7 +149,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.280056+00:00", + "inferred_at": "2026-01-09T19:50:59.810311+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-FL-AS_199X_NL-NH-AMS_XXXX_SERENA-CHIN.json b/data/person/ID_NL-FL-AS_199X_NL-NH-AMS_XXXX_SERENA-CHIN.json index d0fb8f12d8..576f0d06b7 100644 --- a/data/person/ID_NL-FL-AS_199X_NL-NH-AMS_XXXX_SERENA-CHIN.json +++ b/data/person/ID_NL-FL-AS_199X_NL-NH-AMS_XXXX_SERENA-CHIN.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/serena-chin-5620471a8_20251214T110145Z.json" ], - "modified_at": "2026-01-09T19:18:13.785344+00:00", + "modified_at": "2026-01-09T19:51:22.325275+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "serena-chin-5620471a8", @@ -168,7 +168,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.785338+00:00", + "inferred_at": "2026-01-09T19:51:22.325270+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-FL-DRO_199X_NL-FL-DRO_XXXX_TIMO-BROUWER.json b/data/person/ID_NL-FL-DRO_199X_NL-FL-DRO_XXXX_TIMO-BROUWER.json index eb838a91c5..e96851bbee 100644 --- a/data/person/ID_NL-FL-DRO_199X_NL-FL-DRO_XXXX_TIMO-BROUWER.json +++ b/data/person/ID_NL-FL-DRO_199X_NL-FL-DRO_XXXX_TIMO-BROUWER.json @@ -90,7 +90,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/timo-brouwer-90a5001a3_20251214T111545Z.json" ], - "modified_at": "2026-01-09T19:18:15.460531+00:00", + "modified_at": "2026-01-09T19:51:10.884411+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "timo-brouwer-90a5001a3", @@ -119,7 +119,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.460527+00:00", + "inferred_at": "2026-01-09T19:51:10.884407+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-FL-LEL_198X_NL-FL-LEL_XXXX_JANTINE-TINTEREN.json b/data/person/ID_NL-FL-LEL_198X_NL-FL-LEL_XXXX_JANTINE-TINTEREN.json index 3d65bdc386..1f452227bc 100644 --- a/data/person/ID_NL-FL-LEL_198X_NL-FL-LEL_XXXX_JANTINE-TINTEREN.json +++ b/data/person/ID_NL-FL-LEL_198X_NL-FL-LEL_XXXX_JANTINE-TINTEREN.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jantine-van-tinteren-61633b27_20251214T110359Z.json" ], - "modified_at": "2026-01-09T19:18:15.191041+00:00", + "modified_at": "2026-01-09T19:51:06.998741+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jantine-van-tinteren-61633b27", @@ -188,7 +188,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.191036+00:00", + "inferred_at": "2026-01-09T19:51:06.998735+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-FR-LEE_198X_NL-DR-ASS_XXXX_SONJA-DIJKSTRA.json b/data/person/ID_NL-FR-LEE_198X_NL-DR-ASS_XXXX_SONJA-DIJKSTRA.json index bc85674441..96bc4b59f6 100644 --- a/data/person/ID_NL-FR-LEE_198X_NL-DR-ASS_XXXX_SONJA-DIJKSTRA.json +++ b/data/person/ID_NL-FR-LEE_198X_NL-DR-ASS_XXXX_SONJA-DIJKSTRA.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sonja-dijkstra-472517b6_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:16.309093+00:00", + "modified_at": "2026-01-09T19:51:18.386431+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sonja-dijkstra-472517b6", @@ -182,7 +182,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.309065+00:00", + "inferred_at": "2026-01-09T19:51:18.386427+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-FR-LEE_198X_NL-FR-LEE_XXXX_JEROEN-BOER.json b/data/person/ID_NL-FR-LEE_198X_NL-FR-LEE_XXXX_JEROEN-BOER.json index 554b44cd00..a9bc4128c4 100644 --- a/data/person/ID_NL-FR-LEE_198X_NL-FR-LEE_XXXX_JEROEN-BOER.json +++ b/data/person/ID_NL-FR-LEE_198X_NL-FR-LEE_XXXX_JEROEN-BOER.json @@ -305,7 +305,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jtdeboer_20251214T113313Z.json" ], - "modified_at": "2026-01-09T19:18:13.879076+00:00", + "modified_at": "2026-01-09T19:50:56.753012+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jtdeboer", @@ -334,7 +334,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -383,7 +383,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.879071+00:00", + "inferred_at": "2026-01-09T19:50:56.753002+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-FR-LEE_198X_NL-GR-GRO_XXXX_BERT-SMIT.json b/data/person/ID_NL-FR-LEE_198X_NL-GR-GRO_XXXX_BERT-SMIT.json index f55dbafb38..bf6d784639 100644 --- a/data/person/ID_NL-FR-LEE_198X_NL-GR-GRO_XXXX_BERT-SMIT.json +++ b/data/person/ID_NL-FR-LEE_198X_NL-GR-GRO_XXXX_BERT-SMIT.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bert-smit-48008b86_20251214T112151Z.json" ], - "modified_at": "2026-01-09T19:18:13.021458+00:00", + "modified_at": "2026-01-09T19:50:50.595604+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bert-smit-48008b86", @@ -124,7 +124,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.021453+00:00", + "inferred_at": "2026-01-09T19:50:50.595599+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-FR-LEE_199X_NL-GE-ARN_XXXX_SANDER-HULLEMAN.json b/data/person/ID_NL-FR-LEE_199X_NL-GE-ARN_XXXX_SANDER-HULLEMAN.json index 1a2e005aea..4986c34147 100644 --- a/data/person/ID_NL-FR-LEE_199X_NL-GE-ARN_XXXX_SANDER-HULLEMAN.json +++ b/data/person/ID_NL-FR-LEE_199X_NL-GE-ARN_XXXX_SANDER-HULLEMAN.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sander-hulleman-5017b9105_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:18.165405+00:00", + "modified_at": "2026-01-09T19:51:29.002357+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sander-hulleman-5017b9105", @@ -126,7 +126,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.165400+00:00", + "inferred_at": "2026-01-09T19:51:29.002350+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-FR-LEE_199X_NL-ZH-TH_XXXX_KIMBERLY-BRINKHUIS.json b/data/person/ID_NL-FR-LEE_199X_NL-ZH-TH_XXXX_KIMBERLY-BRINKHUIS.json index 296e15d2c0..66353a6135 100644 --- a/data/person/ID_NL-FR-LEE_199X_NL-ZH-TH_XXXX_KIMBERLY-BRINKHUIS.json +++ b/data/person/ID_NL-FR-LEE_199X_NL-ZH-TH_XXXX_KIMBERLY-BRINKHUIS.json @@ -190,7 +190,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kimberly-brinkhuis-28b329223_20251214T113420Z.json" ], - "modified_at": "2026-01-09T19:18:12.599626+00:00", + "modified_at": "2026-01-09T19:51:03.381019+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kimberly-brinkhuis-28b329223", @@ -222,7 +222,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -263,7 +263,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.599619+00:00", + "inferred_at": "2026-01-09T19:51:03.381014+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-APE_196X_NL-GE-APE_XXXX_YVONNE-GRAAF.json b/data/person/ID_NL-GE-APE_196X_NL-GE-APE_XXXX_YVONNE-GRAAF.json index 32875b58da..8d6bf44eec 100644 --- a/data/person/ID_NL-GE-APE_196X_NL-GE-APE_XXXX_YVONNE-GRAAF.json +++ b/data/person/ID_NL-GE-APE_196X_NL-GE-APE_XXXX_YVONNE-GRAAF.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yvonne-de-graaf-9bbb9831_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:13.358523+00:00", + "modified_at": "2026-01-09T19:50:53.919694+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yvonne-de-graaf-9bbb9831", @@ -157,7 +157,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.358517+00:00", + "inferred_at": "2026-01-09T19:50:53.919688+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-APE_196X_NL-NH-AMS_XXXX_BAS-PRONK.json b/data/person/ID_NL-GE-APE_196X_NL-NH-AMS_XXXX_BAS-PRONK.json index bdd06933e1..0824e51f5e 100644 --- a/data/person/ID_NL-GE-APE_196X_NL-NH-AMS_XXXX_BAS-PRONK.json +++ b/data/person/ID_NL-GE-APE_196X_NL-NH-AMS_XXXX_BAS-PRONK.json @@ -195,7 +195,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bas-pronk-17a21713_20251214T103402Z.json" ], - "modified_at": "2026-01-09T19:18:16.873506+00:00", + "modified_at": "2026-01-09T19:50:58.865328+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bas-pronk-17a21713", @@ -233,7 +233,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -282,7 +282,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.873499+00:00", + "inferred_at": "2026-01-09T19:50:58.865317+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-APE_197X_NL-GE-APE_XXXX_OSCAR-DIJK.json b/data/person/ID_NL-GE-APE_197X_NL-GE-APE_XXXX_OSCAR-DIJK.json index baafdca7dc..ab6c524f31 100644 --- a/data/person/ID_NL-GE-APE_197X_NL-GE-APE_XXXX_OSCAR-DIJK.json +++ b/data/person/ID_NL-GE-APE_197X_NL-GE-APE_XXXX_OSCAR-DIJK.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/oscar-van-dijk-9102782a_20251214T110615Z.json" ], - "modified_at": "2026-01-09T19:18:14.217744+00:00", + "modified_at": "2026-01-09T19:51:22.033404+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "oscar-van-dijk-9102782a", @@ -187,7 +187,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.217736+00:00", + "inferred_at": "2026-01-09T19:51:22.033399+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-APE_197X_NL-GE-ARN_XXXX_JASPER-KROPVELD.json b/data/person/ID_NL-GE-APE_197X_NL-GE-ARN_XXXX_JASPER-KROPVELD.json index 002c754441..ddeea5c86b 100644 --- a/data/person/ID_NL-GE-APE_197X_NL-GE-ARN_XXXX_JASPER-KROPVELD.json +++ b/data/person/ID_NL-GE-APE_197X_NL-GE-ARN_XXXX_JASPER-KROPVELD.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jasper-kropveld-b9131b17_20251214T110617Z.json" ], - "modified_at": "2026-01-09T19:18:15.774847+00:00", + "modified_at": "2026-01-09T19:50:54.650611+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jasper-kropveld-b9131b17", @@ -156,7 +156,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.774841+00:00", + "inferred_at": "2026-01-09T19:50:54.650602+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-APE_197X_NL-GE-RHE_XXXX_DORIEKE-LEENDERS.json b/data/person/ID_NL-GE-APE_197X_NL-GE-RHE_XXXX_DORIEKE-LEENDERS.json index 4d5465fc12..53e2de6860 100644 --- a/data/person/ID_NL-GE-APE_197X_NL-GE-RHE_XXXX_DORIEKE-LEENDERS.json +++ b/data/person/ID_NL-GE-APE_197X_NL-GE-RHE_XXXX_DORIEKE-LEENDERS.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dorieke-de-haan-leenders-084724252_20251214T103401Z.json" ], - "modified_at": "2026-01-09T19:18:14.886508+00:00", + "modified_at": "2026-01-09T19:51:05.323364+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dorieke-de-haan-leenders-084724252", @@ -125,7 +125,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.886504+00:00", + "inferred_at": "2026-01-09T19:51:05.323357+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-APE_198X_NL-GE-APE_XXXX_AGNES-MARWA.json b/data/person/ID_NL-GE-APE_198X_NL-GE-APE_XXXX_AGNES-MARWA.json index 011284727e..75c07a5b98 100644 --- a/data/person/ID_NL-GE-APE_198X_NL-GE-APE_XXXX_AGNES-MARWA.json +++ b/data/person/ID_NL-GE-APE_198X_NL-GE-APE_XXXX_AGNES-MARWA.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/agnes-methorst-marwa-6b806b36_20251214T103413Z.json" ], - "modified_at": "2026-01-09T19:18:13.234014+00:00", + "modified_at": "2026-01-09T19:50:53.688301+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "agnes-methorst-marwa-6b806b36", @@ -127,7 +127,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.234009+00:00", + "inferred_at": "2026-01-09T19:50:53.688294+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-APE_198X_NL-GE-ARN_XXXX_ANNE-SALDEN.json b/data/person/ID_NL-GE-APE_198X_NL-GE-ARN_XXXX_ANNE-SALDEN.json index e55cfab0a4..cd99c5b4a5 100644 --- a/data/person/ID_NL-GE-APE_198X_NL-GE-ARN_XXXX_ANNE-SALDEN.json +++ b/data/person/ID_NL-GE-APE_198X_NL-GE-ARN_XXXX_ANNE-SALDEN.json @@ -174,7 +174,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-salden-99454215_20251214T110653Z.json" ], - "modified_at": "2026-01-09T19:18:17.377046+00:00", + "modified_at": "2026-01-09T19:51:26.686848+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-salden-99454215", @@ -203,7 +203,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.377040+00:00", + "inferred_at": "2026-01-09T19:51:26.686844+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-APE_198X_NL-NH-AMS_XXXX_MOHAMED-AMRANI.json b/data/person/ID_NL-GE-APE_198X_NL-NH-AMS_XXXX_MOHAMED-AMRANI.json index 143be348d2..1fe9b7e2e4 100644 --- a/data/person/ID_NL-GE-APE_198X_NL-NH-AMS_XXXX_MOHAMED-AMRANI.json +++ b/data/person/ID_NL-GE-APE_198X_NL-NH-AMS_XXXX_MOHAMED-AMRANI.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mohamed-ben-yacoub-amrani-5779691b_20251214T112845Z.json" ], - "modified_at": "2026-01-09T19:18:13.261900+00:00", + "modified_at": "2026-01-09T19:50:53.717048+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mohamed-ben-yacoub-amrani-5779691b", @@ -161,7 +161,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.261893+00:00", + "inferred_at": "2026-01-09T19:50:53.717042+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-APE_199X_NL-GE-APE_XXXX_JOLIJN-KUURSTRAMUIS.json b/data/person/ID_NL-GE-APE_199X_NL-GE-APE_XXXX_JOLIJN-KUURSTRAMUIS.json index 964a14c270..effb78d0db 100644 --- a/data/person/ID_NL-GE-APE_199X_NL-GE-APE_XXXX_JOLIJN-KUURSTRAMUIS.json +++ b/data/person/ID_NL-GE-APE_199X_NL-GE-APE_XXXX_JOLIJN-KUURSTRAMUIS.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jolijn-kuurstra-muis-4b66044a_20251214T103418Z.json" ], - "modified_at": "2026-01-09T19:18:14.954486+00:00", + "modified_at": "2026-01-09T19:51:05.606903+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jolijn-kuurstra-muis-4b66044a", @@ -167,7 +167,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.954482+00:00", + "inferred_at": "2026-01-09T19:51:05.606881+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-APE_199X_NL-GE-ZUT_XXXX_TIM-PARDIJS.json b/data/person/ID_NL-GE-APE_199X_NL-GE-ZUT_XXXX_TIM-PARDIJS.json index 06b2848be0..7e65380bd4 100644 --- a/data/person/ID_NL-GE-APE_199X_NL-GE-ZUT_XXXX_TIM-PARDIJS.json +++ b/data/person/ID_NL-GE-APE_199X_NL-GE-ZUT_XXXX_TIM-PARDIJS.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tim-pardijs-48a30025_20251214T103420Z.json" ], - "modified_at": "2026-01-09T19:18:16.049631+00:00", + "modified_at": "2026-01-09T19:50:55.987363+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tim-pardijs-48a30025", @@ -213,7 +213,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.049622+00:00", + "inferred_at": "2026-01-09T19:50:55.987356+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-APE_199X_NL-NB-EIN_XXXX_VINAY-S.json b/data/person/ID_NL-GE-APE_199X_NL-NB-EIN_XXXX_VINAY-S.json index 97ff35275d..d5be9fbb0c 100644 --- a/data/person/ID_NL-GE-APE_199X_NL-NB-EIN_XXXX_VINAY-S.json +++ b/data/person/ID_NL-GE-APE_199X_NL-NB-EIN_XXXX_VINAY-S.json @@ -157,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/svinayb_20251214T110921Z.json" ], - "modified_at": "2026-01-09T19:18:17.844629+00:00", + "modified_at": "2026-01-09T19:51:28.822968+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "svinayb", @@ -186,7 +186,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -235,7 +235,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.844625+00:00", + "inferred_at": "2026-01-09T19:51:28.822964+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-APE_200X_NL-GE-APE_XXXX_ABEL-WEERD.json b/data/person/ID_NL-GE-APE_200X_NL-GE-APE_XXXX_ABEL-WEERD.json index a0ea9d3670..547d144499 100644 --- a/data/person/ID_NL-GE-APE_200X_NL-GE-APE_XXXX_ABEL-WEERD.json +++ b/data/person/ID_NL-GE-APE_200X_NL-GE-APE_XXXX_ABEL-WEERD.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/abel-de-weerd-772393225_20251214T103356Z.json" ], - "modified_at": "2026-01-09T19:18:15.545853+00:00", + "modified_at": "2026-01-09T19:51:08.787630+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "abel-de-weerd-772393225", @@ -170,7 +170,7 @@ "primary_rationale": "2007 is in 200X, but range extends into 201X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2007 spans decades 200X/201X", - "inferred_at": "2026-01-09T19:18:15.545846+00:00", + "inferred_at": "2026-01-09T19:51:08.787621+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-APE_200X_NL-GE-APE_XXXX_LARISSA-LANDSTRA.json b/data/person/ID_NL-GE-APE_200X_NL-GE-APE_XXXX_LARISSA-LANDSTRA.json index c4063611b6..dcdc056786 100644 --- a/data/person/ID_NL-GE-APE_200X_NL-GE-APE_XXXX_LARISSA-LANDSTRA.json +++ b/data/person/ID_NL-GE-APE_200X_NL-GE-APE_XXXX_LARISSA-LANDSTRA.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/larissa-landstra-9275862a3_20251214T103359Z.json" ], - "modified_at": "2026-01-09T19:18:17.827294+00:00", + "modified_at": "2026-01-09T19:51:28.782016+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "larissa-landstra-9275862a3", @@ -137,7 +137,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.827290+00:00", + "inferred_at": "2026-01-09T19:51:28.782012+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-APE_200X_NL-NH-ZAA_XXXX_RIK-KROEZE.json b/data/person/ID_NL-GE-APE_200X_NL-NH-ZAA_XXXX_RIK-KROEZE.json index 178483f367..eb6ef79775 100644 --- a/data/person/ID_NL-GE-APE_200X_NL-NH-ZAA_XXXX_RIK-KROEZE.json +++ b/data/person/ID_NL-GE-APE_200X_NL-NH-ZAA_XXXX_RIK-KROEZE.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rik-kroeze-797172122_20251214T111514Z.json" ], - "modified_at": "2026-01-09T19:18:14.028359+00:00", + "modified_at": "2026-01-09T19:51:06.956870+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rik-kroeze-797172122", @@ -180,7 +180,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.028354+00:00", + "inferred_at": "2026-01-09T19:51:06.956863+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_194X_NL-GE-RHE_XXXX_PATRIES-HOEKSTRASWEERS.json b/data/person/ID_NL-GE-ARN_194X_NL-GE-RHE_XXXX_PATRIES-HOEKSTRASWEERS.json index 45d183adc8..f93033b011 100644 --- a/data/person/ID_NL-GE-ARN_194X_NL-GE-RHE_XXXX_PATRIES-HOEKSTRASWEERS.json +++ b/data/person/ID_NL-GE-ARN_194X_NL-GE-RHE_XXXX_PATRIES-HOEKSTRASWEERS.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/patries-hoekstra-sweers-22168758_20251214T110704Z.json" ], - "modified_at": "2026-01-09T19:18:16.272981+00:00", + "modified_at": "2026-01-09T19:51:22.515600+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "patries-hoekstra-sweers-22168758", @@ -148,7 +148,7 @@ "primary_rationale": "1949 is in 194X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1949 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:16.272971+00:00", + "inferred_at": "2026-01-09T19:51:22.515594+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_195X_NL-GE-VEL_XXXX_HANNEKE-ZUTHEM.json b/data/person/ID_NL-GE-ARN_195X_NL-GE-VEL_XXXX_HANNEKE-ZUTHEM.json index 0bd464054c..b76c4f18a7 100644 --- a/data/person/ID_NL-GE-ARN_195X_NL-GE-VEL_XXXX_HANNEKE-ZUTHEM.json +++ b/data/person/ID_NL-GE-ARN_195X_NL-GE-VEL_XXXX_HANNEKE-ZUTHEM.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hanneke-van-zuthem-3065bb11_20251214T110551Z.json" ], - "modified_at": "2026-01-09T19:18:16.053236+00:00", + "modified_at": "2026-01-09T19:51:16.854257+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hanneke-van-zuthem-3065bb11", @@ -162,7 +162,7 @@ "primary_rationale": "1952 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1952 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:16.053231+00:00", + "inferred_at": "2026-01-09T19:51:16.854249+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_195X_XX-XX-XXX_XXXX_KLAAS-BROUWER.json b/data/person/ID_NL-GE-ARN_195X_XX-XX-XXX_XXXX_KLAAS-BROUWER.json index a677f49d0f..21aaaf9562 100644 --- a/data/person/ID_NL-GE-ARN_195X_XX-XX-XXX_XXXX_KLAAS-BROUWER.json +++ b/data/person/ID_NL-GE-ARN_195X_XX-XX-XXX_XXXX_KLAAS-BROUWER.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/klaas-brouwer-08a2946_20251214T110624Z.json" ], - "modified_at": "2026-01-09T19:18:13.407708+00:00", + "modified_at": "2026-01-09T19:50:54.094014+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "klaas-brouwer-08a2946", @@ -135,7 +135,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.407697+00:00", + "inferred_at": "2026-01-09T19:50:54.093992+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_196X_NL-GE-ARN_XXXX_EDWIN-SLUITER.json b/data/person/ID_NL-GE-ARN_196X_NL-GE-ARN_XXXX_EDWIN-SLUITER.json index 589becaffd..1c3826aff7 100644 --- a/data/person/ID_NL-GE-ARN_196X_NL-GE-ARN_XXXX_EDWIN-SLUITER.json +++ b/data/person/ID_NL-GE-ARN_196X_NL-GE-ARN_XXXX_EDWIN-SLUITER.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/edwin-sluiter-302b667a_20251214T110605Z.json" ], - "modified_at": "2026-01-09T19:18:13.410537+00:00", + "modified_at": "2026-01-09T19:50:54.097172+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "edwin-sluiter-302b667a", @@ -131,7 +131,7 @@ "primary_rationale": "1964 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1964 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.410533+00:00", + "inferred_at": "2026-01-09T19:50:54.097167+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_196X_NL-GE-KIL_XXXX_JOHN-DEE.json b/data/person/ID_NL-GE-ARN_196X_NL-GE-KIL_XXXX_JOHN-DEE.json index bf0d3564f2..b078036a0a 100644 --- a/data/person/ID_NL-GE-ARN_196X_NL-GE-KIL_XXXX_JOHN-DEE.json +++ b/data/person/ID_NL-GE-ARN_196X_NL-GE-KIL_XXXX_JOHN-DEE.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/john-dee-64b31aa0_20251214T110711Z.json" ], - "modified_at": "2026-01-09T19:18:16.566836+00:00", + "modified_at": "2026-01-09T19:51:19.064924+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "john-dee-64b31aa0", @@ -137,7 +137,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.566832+00:00", + "inferred_at": "2026-01-09T19:51:19.064918+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_196X_NL-OV-DEV_XXXX_PETER-BROEKHUIZEN.json b/data/person/ID_NL-GE-ARN_196X_NL-OV-DEV_XXXX_PETER-BROEKHUIZEN.json index a4be5dd7db..248dcbb7a7 100644 --- a/data/person/ID_NL-GE-ARN_196X_NL-OV-DEV_XXXX_PETER-BROEKHUIZEN.json +++ b/data/person/ID_NL-GE-ARN_196X_NL-OV-DEV_XXXX_PETER-BROEKHUIZEN.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/peter-broekhuizen-bbb11b78_20251214T110643Z.json" ], - "modified_at": "2026-01-09T19:18:13.611804+00:00", + "modified_at": "2026-01-09T19:50:55.171888+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "peter-broekhuizen-bbb11b78", @@ -187,7 +187,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.611800+00:00", + "inferred_at": "2026-01-09T19:50:55.171873+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_197X_NL-GE-ARN_XXXX_FIONA-BRUIN.json b/data/person/ID_NL-GE-ARN_197X_NL-GE-ARN_XXXX_FIONA-BRUIN.json index bf97f68ce8..00a4cfb328 100644 --- a/data/person/ID_NL-GE-ARN_197X_NL-GE-ARN_XXXX_FIONA-BRUIN.json +++ b/data/person/ID_NL-GE-ARN_197X_NL-GE-ARN_XXXX_FIONA-BRUIN.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fiona-de-bruin-82b520b5_20251214T110724Z.json" ], - "modified_at": "2026-01-09T19:18:16.918537+00:00", + "modified_at": "2026-01-09T19:51:22.512004+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fiona-de-bruin-82b520b5", @@ -113,7 +113,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.918533+00:00", + "inferred_at": "2026-01-09T19:51:22.512001+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_197X_NL-GE-ARN_XXXX_ROB-OOSTENRIJK.json b/data/person/ID_NL-GE-ARN_197X_NL-GE-ARN_XXXX_ROB-OOSTENRIJK.json index 7d3bee1ad0..0921913da4 100644 --- a/data/person/ID_NL-GE-ARN_197X_NL-GE-ARN_XXXX_ROB-OOSTENRIJK.json +++ b/data/person/ID_NL-GE-ARN_197X_NL-GE-ARN_XXXX_ROB-OOSTENRIJK.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rob-van-oostenrijk-ab52b51a_20251214T110644Z.json" ], - "modified_at": "2026-01-09T19:18:14.766515+00:00", + "modified_at": "2026-01-09T19:51:04.050748+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rob-van-oostenrijk-ab52b51a", @@ -120,7 +120,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.766511+00:00", + "inferred_at": "2026-01-09T19:51:04.050742+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_197X_NL-GE-BEN_XXXX_KASIMIR-ENDHOVEN.json b/data/person/ID_NL-GE-ARN_197X_NL-GE-BEN_XXXX_KASIMIR-ENDHOVEN.json index 8fb641e7a1..7f1701e143 100644 --- a/data/person/ID_NL-GE-ARN_197X_NL-GE-BEN_XXXX_KASIMIR-ENDHOVEN.json +++ b/data/person/ID_NL-GE-ARN_197X_NL-GE-BEN_XXXX_KASIMIR-ENDHOVEN.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kasimir-van-endhoven-89536b111_20251214T110628Z.json" ], - "modified_at": "2026-01-09T19:18:12.985212+00:00", + "modified_at": "2026-01-09T19:50:50.143537+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kasimir-van-endhoven-89536b111", @@ -133,7 +133,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.985208+00:00", + "inferred_at": "2026-01-09T19:50:50.143529+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_197X_NL-GE-DIE_XXXX_EVELINE-FOLKERSDIJKSTRA.json b/data/person/ID_NL-GE-ARN_197X_NL-GE-DIE_XXXX_EVELINE-FOLKERSDIJKSTRA.json index 4f1ea7785d..43579f90f6 100644 --- a/data/person/ID_NL-GE-ARN_197X_NL-GE-DIE_XXXX_EVELINE-FOLKERSDIJKSTRA.json +++ b/data/person/ID_NL-GE-ARN_197X_NL-GE-DIE_XXXX_EVELINE-FOLKERSDIJKSTRA.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eveline-folkers-dijkstra-03005712b_20251214T113106Z.json" ], - "modified_at": "2026-01-09T19:18:15.116765+00:00", + "modified_at": "2026-01-09T19:51:06.734372+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eveline-folkers-dijkstra-03005712b", @@ -144,7 +144,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.116758+00:00", + "inferred_at": "2026-01-09T19:51:06.734365+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_197X_NL-GE-DOE_XXXX_ANNEMIEK-PLOKKER.json b/data/person/ID_NL-GE-ARN_197X_NL-GE-DOE_XXXX_ANNEMIEK-PLOKKER.json index a31f153031..e90f4cff30 100644 --- a/data/person/ID_NL-GE-ARN_197X_NL-GE-DOE_XXXX_ANNEMIEK-PLOKKER.json +++ b/data/person/ID_NL-GE-ARN_197X_NL-GE-DOE_XXXX_ANNEMIEK-PLOKKER.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annemiek-plokker-_20251214T113111Z.json" ], - "modified_at": "2026-01-09T19:18:13.568235+00:00", + "modified_at": "2026-01-09T19:50:55.066194+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annemiek-plokker-", @@ -133,7 +133,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.568230+00:00", + "inferred_at": "2026-01-09T19:50:55.066190+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_197X_NL-GE-DOO_XXXX_REGINA-PETREK.json b/data/person/ID_NL-GE-ARN_197X_NL-GE-DOO_XXXX_REGINA-PETREK.json index f93f648d80..6b35642d70 100644 --- a/data/person/ID_NL-GE-ARN_197X_NL-GE-DOO_XXXX_REGINA-PETREK.json +++ b/data/person/ID_NL-GE-ARN_197X_NL-GE-DOO_XXXX_REGINA-PETREK.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/regina-petrek-766692168_20251214T110636Z.json" ], - "modified_at": "2026-01-09T19:18:15.956758+00:00", + "modified_at": "2026-01-09T19:50:47.390809+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "regina-petrek-766692168", @@ -131,7 +131,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.956749+00:00", + "inferred_at": "2026-01-09T19:50:47.390791+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_197X_NL-GE-NIJ_XXXX_SARA-SCHENK.json b/data/person/ID_NL-GE-ARN_197X_NL-GE-NIJ_XXXX_SARA-SCHENK.json index 26b1e1ee82..a95a066887 100644 --- a/data/person/ID_NL-GE-ARN_197X_NL-GE-NIJ_XXXX_SARA-SCHENK.json +++ b/data/person/ID_NL-GE-ARN_197X_NL-GE-NIJ_XXXX_SARA-SCHENK.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sara-schenk-5a0b1516b_20251214T110703Z.json" ], - "modified_at": "2026-01-09T19:18:15.460170+00:00", + "modified_at": "2026-01-09T19:51:10.884086+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sara-schenk-5a0b1516b", @@ -133,7 +133,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.460166+00:00", + "inferred_at": "2026-01-09T19:51:10.884080+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_197X_NL-NB-VUG_XXXX_GODELIEVE-JANSEN.json b/data/person/ID_NL-GE-ARN_197X_NL-NB-VUG_XXXX_GODELIEVE-JANSEN.json index 14a6bf70c0..ddcc9af12d 100644 --- a/data/person/ID_NL-GE-ARN_197X_NL-NB-VUG_XXXX_GODELIEVE-JANSEN.json +++ b/data/person/ID_NL-GE-ARN_197X_NL-NB-VUG_XXXX_GODELIEVE-JANSEN.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/godelieveprinsjansen_20251214T110529Z.json" ], - "modified_at": "2026-01-09T19:18:15.227244+00:00", + "modified_at": "2026-01-09T19:50:47.496032+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "godelieveprinsjansen", @@ -202,7 +202,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -251,7 +251,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.227238+00:00", + "inferred_at": "2026-01-09T19:50:47.496024+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_197X_XX-XX-XXX_XXXX_CORINE-BOONSTRA.json b/data/person/ID_NL-GE-ARN_197X_XX-XX-XXX_XXXX_CORINE-BOONSTRA.json index 326f435ce0..62a48b0165 100644 --- a/data/person/ID_NL-GE-ARN_197X_XX-XX-XXX_XXXX_CORINE-BOONSTRA.json +++ b/data/person/ID_NL-GE-ARN_197X_XX-XX-XXX_XXXX_CORINE-BOONSTRA.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/corine-boonstra-5497971a_20251214T113103Z.json" ], - "modified_at": "2026-01-09T19:18:16.652453+00:00", + "modified_at": "2026-01-09T19:51:21.306774+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "corine-boonstra-5497971a", @@ -148,7 +148,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.652444+00:00", + "inferred_at": "2026-01-09T19:51:21.306751+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_198X_NL-GE-APE_XXXX_HAROLD-SCHEFFER.json b/data/person/ID_NL-GE-ARN_198X_NL-GE-APE_XXXX_HAROLD-SCHEFFER.json index 1b7a8f428c..16aa7db3c1 100644 --- a/data/person/ID_NL-GE-ARN_198X_NL-GE-APE_XXXX_HAROLD-SCHEFFER.json +++ b/data/person/ID_NL-GE-ARN_198X_NL-GE-APE_XXXX_HAROLD-SCHEFFER.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harold-scheffer-97a54b291_20251214T110745Z.json" ], - "modified_at": "2026-01-09T19:18:16.136904+00:00", + "modified_at": "2026-01-09T19:51:17.594724+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harold-scheffer-97a54b291", @@ -127,7 +127,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.136899+00:00", + "inferred_at": "2026-01-09T19:51:17.594716+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_BIANCA-FRANSSEN.json b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_BIANCA-FRANSSEN.json index 418ccce0cc..3a6b004988 100644 --- a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_BIANCA-FRANSSEN.json +++ b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_BIANCA-FRANSSEN.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bianca-franssen-9576637_20251214T110705Z.json" ], - "modified_at": "2026-01-09T19:18:13.707721+00:00", + "modified_at": "2026-01-09T19:50:55.780560+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bianca-franssen-9576637", @@ -145,7 +145,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.707716+00:00", + "inferred_at": "2026-01-09T19:50:55.780553+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_DENNIS-NOORT.json b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_DENNIS-NOORT.json index 2789f62f8d..5192fb2474 100644 --- a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_DENNIS-NOORT.json +++ b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_DENNIS-NOORT.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dennis-van-noort-536b69ab_20251214T113048Z.json" ], - "modified_at": "2026-01-09T19:18:14.779178+00:00", + "modified_at": "2026-01-09T19:51:04.523464+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dennis-van-noort-536b69ab", @@ -159,7 +159,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.779174+00:00", + "inferred_at": "2026-01-09T19:51:04.523444+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_FEMKE-VROOM.json b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_FEMKE-VROOM.json index b1cd4cab5b..2f46df1cff 100644 --- a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_FEMKE-VROOM.json +++ b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_FEMKE-VROOM.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/femkevroom_20251214T110603Z.json" ], - "modified_at": "2026-01-09T19:18:11.455482+00:00", + "modified_at": "2026-01-09T19:51:17.445191+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "femkevroom", @@ -196,7 +196,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +245,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.455474+00:00", + "inferred_at": "2026-01-09T19:51:17.445183+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_MATTY-MAAS.json b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_MATTY-MAAS.json index a685e10410..b4d8bea803 100644 --- a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_MATTY-MAAS.json +++ b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_MATTY-MAAS.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/matty-maas-18970a42_20251214T110719Z.json" ], - "modified_at": "2026-01-09T19:18:13.002547+00:00", + "modified_at": "2026-01-09T19:50:50.278748+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "matty-maas-18970a42", @@ -135,7 +135,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.002541+00:00", + "inferred_at": "2026-01-09T19:50:50.278742+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_NIENKE-JANSEN.json b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_NIENKE-JANSEN.json index b6df2a189e..aae99fe7d1 100644 --- a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_NIENKE-JANSEN.json +++ b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_NIENKE-JANSEN.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nienke-jansen-3a906964_20251214T110634Z.json" ], - "modified_at": "2026-01-09T19:18:16.119589+00:00", + "modified_at": "2026-01-09T19:51:17.564634+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nienke-jansen-3a906964", @@ -150,7 +150,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.119584+00:00", + "inferred_at": "2026-01-09T19:51:17.564630+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_RIAN-VELZING.json b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_RIAN-VELZING.json index a10cabb5df..e0602e5353 100644 --- a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_RIAN-VELZING.json +++ b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_RIAN-VELZING.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rian-velzing-81123a20_20251214T110745Z.json" ], - "modified_at": "2026-01-09T19:18:16.841518+00:00", + "modified_at": "2026-01-09T19:51:22.269050+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rian-velzing-81123a20", @@ -135,7 +135,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.841513+00:00", + "inferred_at": "2026-01-09T19:51:22.269046+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_RONNIE-SILFHOUT.json b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_RONNIE-SILFHOUT.json index 923e88b667..eba06bd6c7 100644 --- a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_RONNIE-SILFHOUT.json +++ b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_RONNIE-SILFHOUT.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ronnie-van-silfhout-71020930_20251214T110543Z.json" ], - "modified_at": "2026-01-09T19:18:11.233335+00:00", + "modified_at": "2026-01-09T19:51:08.646200+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ronnie-van-silfhout-71020930", @@ -162,7 +162,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.233327+00:00", + "inferred_at": "2026-01-09T19:51:08.646187+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_RUUD-TEUNISSEN.json b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_RUUD-TEUNISSEN.json index 074ba88483..558b3c69aa 100644 --- a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_RUUD-TEUNISSEN.json +++ b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_RUUD-TEUNISSEN.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rjmteunissen_20251214T110544Z.json" ], - "modified_at": "2026-01-09T19:18:13.866348+00:00", + "modified_at": "2026-01-09T19:50:56.723019+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rjmteunissen", @@ -153,7 +153,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.866344+00:00", + "inferred_at": "2026-01-09T19:50:56.723014+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_ZACHA-WEERD.json b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_ZACHA-WEERD.json index 94563d381e..749007b896 100644 --- a/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_ZACHA-WEERD.json +++ b/data/person/ID_NL-GE-ARN_198X_NL-GE-ARN_XXXX_ZACHA-WEERD.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/zacha-van-der-weerd-300a6938_20251214T113105Z.json" ], - "modified_at": "2026-01-09T19:18:16.012416+00:00", + "modified_at": "2026-01-09T19:51:15.734432+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "zacha-van-der-weerd-300a6938", @@ -135,7 +135,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.012410+00:00", + "inferred_at": "2026-01-09T19:51:15.734426+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_198X_NL-GE-NIJ_XXXX_MARTIJN-HERMENS.json b/data/person/ID_NL-GE-ARN_198X_NL-GE-NIJ_XXXX_MARTIJN-HERMENS.json index 0740bd53bb..160a7f0773 100644 --- a/data/person/ID_NL-GE-ARN_198X_NL-GE-NIJ_XXXX_MARTIJN-HERMENS.json +++ b/data/person/ID_NL-GE-ARN_198X_NL-GE-NIJ_XXXX_MARTIJN-HERMENS.json @@ -160,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martijnhermens_20251214T113102Z.json" ], - "modified_at": "2026-01-09T19:18:13.497497+00:00", + "modified_at": "2026-01-09T19:50:50.611023+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martijnhermens", @@ -192,7 +192,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.497491+00:00", + "inferred_at": "2026-01-09T19:50:50.611013+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_198X_NL-ZH-TH_XXXX_ROOS-PETERSEN.json b/data/person/ID_NL-GE-ARN_198X_NL-ZH-TH_XXXX_ROOS-PETERSEN.json index ef56be6664..d4cc9d77a6 100644 --- a/data/person/ID_NL-GE-ARN_198X_NL-ZH-TH_XXXX_ROOS-PETERSEN.json +++ b/data/person/ID_NL-GE-ARN_198X_NL-ZH-TH_XXXX_ROOS-PETERSEN.json @@ -176,7 +176,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roos-petersen-8a008a10_20251214T103237Z.json" ], - "modified_at": "2026-01-09T19:18:12.988805+00:00", + "modified_at": "2026-01-09T19:50:53.881253+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "roos-petersen-8a008a10", @@ -214,7 +214,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -263,7 +263,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.988800+00:00", + "inferred_at": "2026-01-09T19:50:53.881226+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_198X_XX-XX-XXX_XXXX_SASKIA-OOSTVEEN.json b/data/person/ID_NL-GE-ARN_198X_XX-XX-XXX_XXXX_SASKIA-OOSTVEEN.json index ca07ba4ce6..ccb65cf891 100644 --- a/data/person/ID_NL-GE-ARN_198X_XX-XX-XXX_XXXX_SASKIA-OOSTVEEN.json +++ b/data/person/ID_NL-GE-ARN_198X_XX-XX-XXX_XXXX_SASKIA-OOSTVEEN.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saskia-van-oostveen-6a765a12_20251214T110748Z.json" ], - "modified_at": "2026-01-09T19:18:11.345596+00:00", + "modified_at": "2026-01-09T19:50:53.676853+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saskia-van-oostveen-6a765a12", @@ -139,7 +139,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.343334+00:00", + "inferred_at": "2026-01-09T19:50:53.674283+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_198X_XX-XX-XXX_XXXX_SIGRID-GRAVE.json b/data/person/ID_NL-GE-ARN_198X_XX-XX-XXX_XXXX_SIGRID-GRAVE.json index 7a04a6127e..8fc6451bc2 100644 --- a/data/person/ID_NL-GE-ARN_198X_XX-XX-XXX_XXXX_SIGRID-GRAVE.json +++ b/data/person/ID_NL-GE-ARN_198X_XX-XX-XXX_XXXX_SIGRID-GRAVE.json @@ -204,7 +204,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sigriddegrave_20251214T104131Z.json" ], - "modified_at": "2026-01-09T19:18:13.852469+00:00", + "modified_at": "2026-01-09T19:50:48.276594+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sigriddegrave", @@ -244,7 +244,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -285,7 +285,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.850669+00:00", + "inferred_at": "2026-01-09T19:50:48.271978+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_199X_NL-FR-LEE_XXXX_SOFIA-GINEVA.json b/data/person/ID_NL-GE-ARN_199X_NL-FR-LEE_XXXX_SOFIA-GINEVA.json index e8e824d395..c8826edf2a 100644 --- a/data/person/ID_NL-GE-ARN_199X_NL-FR-LEE_XXXX_SOFIA-GINEVA.json +++ b/data/person/ID_NL-GE-ARN_199X_NL-FR-LEE_XXXX_SOFIA-GINEVA.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sofia-gineva-440647269_20251214T110706Z.json" ], - "modified_at": "2026-01-09T19:18:16.366254+00:00", + "modified_at": "2026-01-09T19:51:18.410516+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sofia-gineva-440647269", @@ -161,7 +161,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.366245+00:00", + "inferred_at": "2026-01-09T19:51:18.410511+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_199X_NL-GE-APE_XXXX_PONS-VERHEUL.json b/data/person/ID_NL-GE-ARN_199X_NL-GE-APE_XXXX_PONS-VERHEUL.json index d414c5ecc3..87a6ac394f 100644 --- a/data/person/ID_NL-GE-ARN_199X_NL-GE-APE_XXXX_PONS-VERHEUL.json +++ b/data/person/ID_NL-GE-ARN_199X_NL-GE-APE_XXXX_PONS-VERHEUL.json @@ -90,7 +90,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pons-verheul_20251214T103405Z.json" ], - "modified_at": "2026-01-09T19:18:14.780554+00:00", + "modified_at": "2026-01-09T19:51:04.538592+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pons-verheul", @@ -119,7 +119,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.780550+00:00", + "inferred_at": "2026-01-09T19:51:04.538583+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_ANASTASIIA-IVASHCHENKO.json b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_ANASTASIIA-IVASHCHENKO.json index 4fe7b834cf..0b7b4273ed 100644 --- a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_ANASTASIIA-IVASHCHENKO.json +++ b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_ANASTASIIA-IVASHCHENKO.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anastasiia-ivashchenko-087777194_20251214T110723Z.json" ], - "modified_at": "2026-01-09T19:18:13.204408+00:00", + "modified_at": "2026-01-09T19:50:53.284546+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anastasiia-ivashchenko-087777194", @@ -120,7 +120,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.204404+00:00", + "inferred_at": "2026-01-09T19:50:53.284539+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_BRUNO-HOOIJDONK.json b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_BRUNO-HOOIJDONK.json index 64bc3119e8..477c6aa169 100644 --- a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_BRUNO-HOOIJDONK.json +++ b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_BRUNO-HOOIJDONK.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bruno-van-hooijdonk-87339224_20251214T103416Z.json" ], - "modified_at": "2026-01-09T19:18:13.097017+00:00", + "modified_at": "2026-01-09T19:50:51.601414+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bruno-van-hooijdonk-87339224", @@ -144,7 +144,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.097013+00:00", + "inferred_at": "2026-01-09T19:50:51.601394+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_DANIEL-WOLFEREN.json b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_DANIEL-WOLFEREN.json index 6d384aaf3c..e1cc60c97b 100644 --- a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_DANIEL-WOLFEREN.json +++ b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_DANIEL-WOLFEREN.json @@ -88,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daniel-van-wolferen-286081138_20251214T110653Z.json" ], - "modified_at": "2026-01-09T19:18:16.540754+00:00", + "modified_at": "2026-01-09T19:51:18.600449+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daniel-van-wolferen-286081138", @@ -117,7 +117,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -166,7 +166,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.540749+00:00", + "inferred_at": "2026-01-09T19:51:18.600441+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_DIEDERIK-MENTING.json b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_DIEDERIK-MENTING.json index b7df3b0e52..8ec4a8240e 100644 --- a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_DIEDERIK-MENTING.json +++ b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_DIEDERIK-MENTING.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/diederik-menting-07717190_20251214T110616Z.json" ], - "modified_at": "2026-01-09T19:18:14.672527+00:00", + "modified_at": "2026-01-09T19:51:03.403012+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "diederik-menting-07717190", @@ -177,7 +177,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.672519+00:00", + "inferred_at": "2026-01-09T19:51:03.403007+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_EMMA-BERBEN.json b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_EMMA-BERBEN.json index 21f74b8af4..bcd7f57396 100644 --- a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_EMMA-BERBEN.json +++ b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_EMMA-BERBEN.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emma-berben-b81833208_20251214T110555Z.json" ], - "modified_at": "2026-01-09T19:18:15.001640+00:00", + "modified_at": "2026-01-09T19:51:06.579382+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emma-berben-b81833208", @@ -127,7 +127,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.001635+00:00", + "inferred_at": "2026-01-09T19:51:06.579376+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_LOBKE-ROENHORST.json b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_LOBKE-ROENHORST.json index 57847267b5..6834abf883 100644 --- a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_LOBKE-ROENHORST.json +++ b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_LOBKE-ROENHORST.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lobke-roenhorst-0b658221b_20251214T113109Z.json" ], - "modified_at": "2026-01-09T19:18:15.248000+00:00", + "modified_at": "2026-01-09T19:51:07.292616+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lobke-roenhorst-0b658221b", @@ -124,7 +124,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.247995+00:00", + "inferred_at": "2026-01-09T19:51:07.292606+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_MARJOLEIN-GROTENHUIS.json b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_MARJOLEIN-GROTENHUIS.json index 15d54e9197..05a872818c 100644 --- a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_MARJOLEIN-GROTENHUIS.json +++ b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_MARJOLEIN-GROTENHUIS.json @@ -97,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjolein-grotenhuis-7566451b3_20251214T110753Z.json" ], - "modified_at": "2026-01-09T19:18:16.812944+00:00", + "modified_at": "2026-01-09T19:51:22.052718+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjolein-grotenhuis-7566451b3", @@ -126,7 +126,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.812941+00:00", + "inferred_at": "2026-01-09T19:51:22.052712+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_PASCAL-KLOP.json b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_PASCAL-KLOP.json index 4b905cfb3e..b55e65ad1c 100644 --- a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_PASCAL-KLOP.json +++ b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_PASCAL-KLOP.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pascal-klop_20251214T113108Z.json" ], - "modified_at": "2026-01-09T19:18:14.845166+00:00", + "modified_at": "2026-01-09T19:51:05.112911+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pascal-klop", @@ -135,7 +135,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.845162+00:00", + "inferred_at": "2026-01-09T19:51:05.112210+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_WESLEY-NIJENHUIS.json b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_WESLEY-NIJENHUIS.json index dbd65d86fa..b3adfedfb2 100644 --- a/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_WESLEY-NIJENHUIS.json +++ b/data/person/ID_NL-GE-ARN_199X_NL-GE-ARN_XXXX_WESLEY-NIJENHUIS.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wesley-nijenhuis-1854881a1_20251214T110633Z.json" ], - "modified_at": "2026-01-09T19:18:14.279212+00:00", + "modified_at": "2026-01-09T19:50:59.808741+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wesley-nijenhuis-1854881a1", @@ -137,7 +137,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.279207+00:00", + "inferred_at": "2026-01-09T19:50:59.808736+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_199X_NL-GE-DID_XXXX_THIJE-JANSEN.json b/data/person/ID_NL-GE-ARN_199X_NL-GE-DID_XXXX_THIJE-JANSEN.json index 6e89665e69..710dee8552 100644 --- a/data/person/ID_NL-GE-ARN_199X_NL-GE-DID_XXXX_THIJE-JANSEN.json +++ b/data/person/ID_NL-GE-ARN_199X_NL-GE-DID_XXXX_THIJE-JANSEN.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thije-jansen-280a61139_20251214T110610Z.json" ], - "modified_at": "2026-01-09T19:18:16.462740+00:00", + "modified_at": "2026-01-09T19:51:18.538864+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thije-jansen-280a61139", @@ -148,7 +148,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.462737+00:00", + "inferred_at": "2026-01-09T19:51:18.538860+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_199X_NL-NB-WAA_XXXX_ANIRUDH-H.json b/data/person/ID_NL-GE-ARN_199X_NL-NB-WAA_XXXX_ANIRUDH-H.json index b88962bf4c..18a4b45444 100644 --- a/data/person/ID_NL-GE-ARN_199X_NL-NB-WAA_XXXX_ANIRUDH-H.json +++ b/data/person/ID_NL-GE-ARN_199X_NL-NB-WAA_XXXX_ANIRUDH-H.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anirudh-h-85225b66_20251214T111018Z.json" ], - "modified_at": "2026-01-09T19:18:16.233212+00:00", + "modified_at": "2026-01-09T19:51:18.324709+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anirudh-h-85225b66", @@ -138,7 +138,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.233206+00:00", + "inferred_at": "2026-01-09T19:51:18.324705+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_DAAN-WILDEMAN.json b/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_DAAN-WILDEMAN.json index d79000d6a3..2bc911a0c7 100644 --- a/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_DAAN-WILDEMAN.json +++ b/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_DAAN-WILDEMAN.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daan-wildeman-48842a1aa_20251214T110611Z.json" ], - "modified_at": "2026-01-09T19:18:18.042837+00:00", + "modified_at": "2026-01-09T19:51:28.891543+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daan-wildeman-48842a1aa", @@ -156,7 +156,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.042829+00:00", + "inferred_at": "2026-01-09T19:51:28.891538+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_ELVIA-BAKKER.json b/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_ELVIA-BAKKER.json index 976938e709..8f3c3f23f1 100644 --- a/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_ELVIA-BAKKER.json +++ b/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_ELVIA-BAKKER.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elvia-bakker-885953299_20251214T110556Z.json" ], - "modified_at": "2026-01-09T19:18:11.091151+00:00", + "modified_at": "2026-01-09T19:50:46.635237+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elvia-bakker-885953299", @@ -138,7 +138,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.086065+00:00", + "inferred_at": "2026-01-09T19:50:46.635226+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_JAHLIYAH-KOLF.json b/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_JAHLIYAH-KOLF.json index be6fbee8eb..42c4662cf8 100644 --- a/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_JAHLIYAH-KOLF.json +++ b/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_JAHLIYAH-KOLF.json @@ -90,7 +90,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jahliyah-kolf-a384b0281_20251214T110604Z.json" ], - "modified_at": "2026-01-09T19:18:13.544257+00:00", + "modified_at": "2026-01-09T19:50:54.598973+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jahliyah-kolf-a384b0281", @@ -119,7 +119,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.544252+00:00", + "inferred_at": "2026-01-09T19:50:54.598966+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_JORCHINO-G.json b/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_JORCHINO-G.json index a5bd066720..684318bd1b 100644 --- a/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_JORCHINO-G.json +++ b/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_JORCHINO-G.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jorchino-g-aa9948194_20251214T110554Z.json" ], - "modified_at": "2026-01-09T19:18:13.719807+00:00", + "modified_at": "2026-01-09T19:50:56.853373+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jorchino-g-aa9948194", @@ -150,7 +150,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.719802+00:00", + "inferred_at": "2026-01-09T19:50:56.853368+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_MEREL-THANNHAUSER.json b/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_MEREL-THANNHAUSER.json index 4cd0a5ed03..30a5ee115e 100644 --- a/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_MEREL-THANNHAUSER.json +++ b/data/person/ID_NL-GE-ARN_200X_NL-GE-ARN_XXXX_MEREL-THANNHAUSER.json @@ -90,7 +90,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merel-thannhauser-0883711ba_20251214T110610Z.json" ], - "modified_at": "2026-01-09T19:18:12.382166+00:00", + "modified_at": "2026-01-09T19:50:48.268705+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merel-thannhauser-0883711ba", @@ -113,7 +113,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -154,7 +154,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.382148+00:00", + "inferred_at": "2026-01-09T19:50:48.268677+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_200X_NL-GE-DID_XXXX_JILL-S.json b/data/person/ID_NL-GE-ARN_200X_NL-GE-DID_XXXX_JILL-S.json index 879d739bb2..dc206a4fc3 100644 --- a/data/person/ID_NL-GE-ARN_200X_NL-GE-DID_XXXX_JILL-S.json +++ b/data/person/ID_NL-GE-ARN_200X_NL-GE-DID_XXXX_JILL-S.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jill-scheerder_20251214T110543Z.json" ], - "modified_at": "2026-01-09T19:18:17.115273+00:00", + "modified_at": "2026-01-09T19:51:23.913254+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jill-scheerder", @@ -138,7 +138,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.115269+00:00", + "inferred_at": "2026-01-09T19:51:23.913250+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_200X_NL-LI-MOO_XXXX_SIL-HESEN.json b/data/person/ID_NL-GE-ARN_200X_NL-LI-MOO_XXXX_SIL-HESEN.json index 9daecd54c1..d5baa66a47 100644 --- a/data/person/ID_NL-GE-ARN_200X_NL-LI-MOO_XXXX_SIL-HESEN.json +++ b/data/person/ID_NL-GE-ARN_200X_NL-LI-MOO_XXXX_SIL-HESEN.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sil-hesen-24737816_20251214T113103Z.json" ], - "modified_at": "2026-01-09T19:18:13.842327+00:00", + "modified_at": "2026-01-09T19:50:56.687922+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sil-hesen-24737816", @@ -113,7 +113,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.842322+00:00", + "inferred_at": "2026-01-09T19:50:56.687911+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ARN_200X_NL-ZH-ROT_XXXX_PASCALE-WILBRINK.json b/data/person/ID_NL-GE-ARN_200X_NL-ZH-ROT_XXXX_PASCALE-WILBRINK.json index 88d93c5a49..b171084f17 100644 --- a/data/person/ID_NL-GE-ARN_200X_NL-ZH-ROT_XXXX_PASCALE-WILBRINK.json +++ b/data/person/ID_NL-GE-ARN_200X_NL-ZH-ROT_XXXX_PASCALE-WILBRINK.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pascale-wilbrink-5aaa8622b_20251214T110600Z.json" ], - "modified_at": "2026-01-09T19:18:12.121216+00:00", + "modified_at": "2026-01-09T19:50:47.449622+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pascale-wilbrink-5aaa8622b", @@ -129,7 +129,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.121208+00:00", + "inferred_at": "2026-01-09T19:50:47.449615+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-BRU_197X_NL-GE-ARN_XXXX_RUTH-WESTERVELDZWITSERLOOD.json b/data/person/ID_NL-GE-BRU_197X_NL-GE-ARN_XXXX_RUTH-WESTERVELDZWITSERLOOD.json index 3bf689a717..8905d0c182 100644 --- a/data/person/ID_NL-GE-BRU_197X_NL-GE-ARN_XXXX_RUTH-WESTERVELDZWITSERLOOD.json +++ b/data/person/ID_NL-GE-BRU_197X_NL-GE-ARN_XXXX_RUTH-WESTERVELDZWITSERLOOD.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ruth-westerveld-zwitserlood-2184aa209_20251214T110621Z.json" ], - "modified_at": "2026-01-09T19:18:12.524667+00:00", + "modified_at": "2026-01-09T19:50:48.498494+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ruth-westerveld-zwitserlood-2184aa209", @@ -165,7 +165,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.524649+00:00", + "inferred_at": "2026-01-09T19:50:48.498490+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-DOE_195X_NL-GE-APE_XXXX_HAN-SNIJDERS.json b/data/person/ID_NL-GE-DOE_195X_NL-GE-APE_XXXX_HAN-SNIJDERS.json index 8e2bb3cf4b..b81d14ad7e 100644 --- a/data/person/ID_NL-GE-DOE_195X_NL-GE-APE_XXXX_HAN-SNIJDERS.json +++ b/data/person/ID_NL-GE-DOE_195X_NL-GE-APE_XXXX_HAN-SNIJDERS.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/han-snijders-20789031_20251214T110725Z.json" ], - "modified_at": "2026-01-09T19:18:17.553822+00:00", + "modified_at": "2026-01-09T19:51:28.401504+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "han-snijders-20789031", @@ -180,7 +180,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:17.553818+00:00", + "inferred_at": "2026-01-09T19:51:28.401500+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-DOE_198X_NL-GE-DOE_XXXX_DANA-NIJKAMP.json b/data/person/ID_NL-GE-DOE_198X_NL-GE-DOE_XXXX_DANA-NIJKAMP.json index 84e9db0de6..da79e5f5f5 100644 --- a/data/person/ID_NL-GE-DOE_198X_NL-GE-DOE_XXXX_DANA-NIJKAMP.json +++ b/data/person/ID_NL-GE-DOE_198X_NL-GE-DOE_XXXX_DANA-NIJKAMP.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dana-nijkamp-817b9a62_20251214T111542Z.json" ], - "modified_at": "2026-01-09T19:18:13.532276+00:00", + "modified_at": "2026-01-09T19:51:06.604762+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dana-nijkamp-817b9a62", @@ -180,7 +180,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.532268+00:00", + "inferred_at": "2026-01-09T19:51:06.604754+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-DOE_199X_NL-GE-ARN_XXXX_ALEX-SMEENK.json b/data/person/ID_NL-GE-DOE_199X_NL-GE-ARN_XXXX_ALEX-SMEENK.json index c23d5fc8d2..63a9e4c017 100644 --- a/data/person/ID_NL-GE-DOE_199X_NL-GE-ARN_XXXX_ALEX-SMEENK.json +++ b/data/person/ID_NL-GE-DOE_199X_NL-GE-ARN_XXXX_ALEX-SMEENK.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alexsmeenk_20251214T113114Z.json" ], - "modified_at": "2026-01-09T19:18:17.119718+00:00", + "modified_at": "2026-01-09T19:51:23.919835+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alexsmeenk", @@ -155,7 +155,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.119713+00:00", + "inferred_at": "2026-01-09T19:51:23.919828+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-DUI_197X_NL-GE-ARN_XXXX_LY-LY.json b/data/person/ID_NL-GE-DUI_197X_NL-GE-ARN_XXXX_LY-LY.json index 4f94458ee7..ef52f67137 100644 --- a/data/person/ID_NL-GE-DUI_197X_NL-GE-ARN_XXXX_LY-LY.json +++ b/data/person/ID_NL-GE-DUI_197X_NL-GE-ARN_XXXX_LY-LY.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ly-le-7b8301225_20251214T113110Z.json" ], - "modified_at": "2026-01-09T19:18:16.624015+00:00", + "modified_at": "2026-01-09T19:51:21.092095+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ly-le-7b8301225", @@ -141,7 +141,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.624011+00:00", + "inferred_at": "2026-01-09T19:51:21.092091+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-DUI_200X_NL-FR-FRA_XXXX_JAN-TASMA.json b/data/person/ID_NL-GE-DUI_200X_NL-FR-FRA_XXXX_JAN-TASMA.json index 08bbda0b31..de07233245 100644 --- a/data/person/ID_NL-GE-DUI_200X_NL-FR-FRA_XXXX_JAN-TASMA.json +++ b/data/person/ID_NL-GE-DUI_200X_NL-FR-FRA_XXXX_JAN-TASMA.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-tasma-8279a61ab_20251214T110654Z.json" ], - "modified_at": "2026-01-09T19:18:17.550119+00:00", + "modified_at": "2026-01-09T19:51:28.400711+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-tasma-8279a61ab", @@ -138,7 +138,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.550112+00:00", + "inferred_at": "2026-01-09T19:51:28.400707+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-EDE_197X_NL-NH-AMS_XXXX_ANNABELLE-ARNTZ.json b/data/person/ID_NL-GE-EDE_197X_NL-NH-AMS_XXXX_ANNABELLE-ARNTZ.json index bed3234e78..11cb8225c0 100644 --- a/data/person/ID_NL-GE-EDE_197X_NL-NH-AMS_XXXX_ANNABELLE-ARNTZ.json +++ b/data/person/ID_NL-GE-EDE_197X_NL-NH-AMS_XXXX_ANNABELLE-ARNTZ.json @@ -233,7 +233,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annabelle-arntz-18903057_20251214T102713Z.json" ], - "modified_at": "2026-01-09T19:18:14.208408+00:00", + "modified_at": "2026-01-09T19:51:18.735295+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annabelle-arntz-18903057", @@ -274,7 +274,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -315,7 +315,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.208399+00:00", + "inferred_at": "2026-01-09T19:51:18.735289+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-EDE_197X_NL-ZH-TH_XXXX_BERTA-BUURMAN.json b/data/person/ID_NL-GE-EDE_197X_NL-ZH-TH_XXXX_BERTA-BUURMAN.json index 5d651cb737..4905b932ac 100644 --- a/data/person/ID_NL-GE-EDE_197X_NL-ZH-TH_XXXX_BERTA-BUURMAN.json +++ b/data/person/ID_NL-GE-EDE_197X_NL-ZH-TH_XXXX_BERTA-BUURMAN.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bertabuurman_20251214T112422Z.json" ], - "modified_at": "2026-01-09T19:18:13.544673+00:00", + "modified_at": "2026-01-09T19:50:50.829695+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bertabuurman", @@ -179,7 +179,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.544666+00:00", + "inferred_at": "2026-01-09T19:50:50.829687+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-EDE_197X_XX-XX-XXX_XXXX_UTE-BRUININGNIEMANN.json b/data/person/ID_NL-GE-EDE_197X_XX-XX-XXX_XXXX_UTE-BRUININGNIEMANN.json index 6ce9530f50..facd7cffbc 100644 --- a/data/person/ID_NL-GE-EDE_197X_XX-XX-XXX_XXXX_UTE-BRUININGNIEMANN.json +++ b/data/person/ID_NL-GE-EDE_197X_XX-XX-XXX_XXXX_UTE-BRUININGNIEMANN.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mr-ute-bruining-niemann-024944179_20251212T182000Z.json" ], - "modified_at": "2026-01-09T19:18:13.141042+00:00", + "modified_at": "2026-01-09T19:50:58.640959+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mr-ute-bruining-niemann-024944179", @@ -183,7 +183,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.139148+00:00", + "inferred_at": "2026-01-09T19:50:58.636027+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-EDE_198X_NL-NB-EIN_XXXX_VOLHA-SHCHETNIKAVA.json b/data/person/ID_NL-GE-EDE_198X_NL-NB-EIN_XXXX_VOLHA-SHCHETNIKAVA.json index 12e94759ce..777a6b5e34 100644 --- a/data/person/ID_NL-GE-EDE_198X_NL-NB-EIN_XXXX_VOLHA-SHCHETNIKAVA.json +++ b/data/person/ID_NL-GE-EDE_198X_NL-NB-EIN_XXXX_VOLHA-SHCHETNIKAVA.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/volha-shchetnikava-32887a5b_20251214T111053Z.json" ], - "modified_at": "2026-01-09T19:18:15.699299+00:00", + "modified_at": "2026-01-09T19:51:13.472290+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "volha-shchetnikava-32887a5b", @@ -153,7 +153,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.699295+00:00", + "inferred_at": "2026-01-09T19:51:13.472284+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-EDE_198X_NL-ZH-SCH_XXXX_HENK-SCHRIEK.json b/data/person/ID_NL-GE-EDE_198X_NL-ZH-SCH_XXXX_HENK-SCHRIEK.json index 0bc40fe4ef..10c8d688a0 100644 --- a/data/person/ID_NL-GE-EDE_198X_NL-ZH-SCH_XXXX_HENK-SCHRIEK.json +++ b/data/person/ID_NL-GE-EDE_198X_NL-ZH-SCH_XXXX_HENK-SCHRIEK.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henk-schriek-3558b9119_20251214T112940Z.json" ], - "modified_at": "2026-01-09T19:18:11.281370+00:00", + "modified_at": "2026-01-09T19:50:55.986676+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henk-schriek-3558b9119", @@ -142,7 +142,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.281357+00:00", + "inferred_at": "2026-01-09T19:50:55.986669+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-EDE_199X_XX-XX-XXX_XXXX_TIRANA-ADISUNA.json b/data/person/ID_NL-GE-EDE_199X_ID-04-JAK_XXXX_TIRANA-ADISUNA.json similarity index 71% rename from data/person/ID_NL-GE-EDE_199X_XX-XX-XXX_XXXX_TIRANA-ADISUNA.json rename to data/person/ID_NL-GE-EDE_199X_ID-04-JAK_XXXX_TIRANA-ADISUNA.json index 3a207a2e14..28d8195390 100644 --- a/data/person/ID_NL-GE-EDE_199X_XX-XX-XXX_XXXX_TIRANA-ADISUNA.json +++ b/data/person/ID_NL-GE-EDE_199X_ID-04-JAK_XXXX_TIRANA-ADISUNA.json @@ -1,11 +1,11 @@ { - "ppid": "ID_NL-GE-EDE_199X_XX-XX-XXX_XXXX_TIRANA-ADISUNA", + "ppid": "ID_NL-GE-EDE_199X_ID-04-JAK_XXXX_TIRANA-ADISUNA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "NL-GE-EDE", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "TIRANA", @@ -15,7 +15,8 @@ "first_date_alternatives": [ "200X" ], - "first_location_source": "inferred_birth_settlement" + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Tirana Adisuna", @@ -122,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tirana-adisuna-3807b054_20251214T111957Z.json" ], - "modified_at": "2026-01-09T19:18:17.434193+00:00", + "modified_at": "2026-01-09T19:51:28.092327+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tirana-adisuna-3807b054", @@ -145,6 +146,16 @@ "inferred_birth_decade", "inferred_birth_settlement" ] + }, + { + "previous_ppid": "ID_NL-GE-EDE_199X_XX-XX-XXX_XXXX_TIRANA-ADISUNA", + "new_ppid": "ID_NL-GE-EDE_199X_ID-04-JAK_XXXX_TIRANA-ADISUNA", + "changed_at": "2026-01-09T19:51:28.092324+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -153,7 +164,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +205,70 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.434179+00:00", + "inferred_at": "2026-01-09T19:51:28.007182+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Indonesia (ID)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism and Creative Economy (Current)", + "title": "Head Of Bilateral Interagency Relations In Creative Economy Sub-directorate", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:28.092306+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-EDE_199X_NL-FL-AS_XXXX_EGBERT-IJZER.json b/data/person/ID_NL-GE-EDE_199X_NL-FL-AS_XXXX_EGBERT-IJZER.json index 8e0143facd..08503f9f0c 100644 --- a/data/person/ID_NL-GE-EDE_199X_NL-FL-AS_XXXX_EGBERT-IJZER.json +++ b/data/person/ID_NL-GE-EDE_199X_NL-FL-AS_XXXX_EGBERT-IJZER.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/egbert-ijzer-2b588385_20251214T111553Z.json" ], - "modified_at": "2026-01-09T19:18:15.446233+00:00", + "modified_at": "2026-01-09T19:51:10.867502+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "egbert-ijzer-2b588385", @@ -133,7 +133,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.446230+00:00", + "inferred_at": "2026-01-09T19:51:10.867495+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-EDE_199X_NL-UT-VEE_XXXX_MARTINA-WALLET.json b/data/person/ID_NL-GE-EDE_199X_NL-UT-VEE_XXXX_MARTINA-WALLET.json index bded059379..54eaa445dc 100644 --- a/data/person/ID_NL-GE-EDE_199X_NL-UT-VEE_XXXX_MARTINA-WALLET.json +++ b/data/person/ID_NL-GE-EDE_199X_NL-UT-VEE_XXXX_MARTINA-WALLET.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martinahidding_20251214T103258Z.json" ], - "modified_at": "2026-01-09T19:18:13.767031+00:00", + "modified_at": "2026-01-09T19:51:14.447673+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martinahidding", @@ -204,7 +204,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -253,7 +253,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.767025+00:00", + "inferred_at": "2026-01-09T19:51:14.447666+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-EER_196X_NL-NH-AMS_XXXX_TEUS-EENKHOORN.json b/data/person/ID_NL-GE-EER_196X_NL-NH-AMS_XXXX_TEUS-EENKHOORN.json index c128a247fa..20f22538a0 100644 --- a/data/person/ID_NL-GE-EER_196X_NL-NH-AMS_XXXX_TEUS-EENKHOORN.json +++ b/data/person/ID_NL-GE-EER_196X_NL-NH-AMS_XXXX_TEUS-EENKHOORN.json @@ -384,7 +384,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/teus-eenkhoorn-b041356_20251214T110536Z.json" ], - "modified_at": "2026-01-09T19:18:13.990101+00:00", + "modified_at": "2026-01-09T19:50:57.748362+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "teus-eenkhoorn-b041356", @@ -413,7 +413,7 @@ "primary_rationale": "1965 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -462,7 +462,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1965 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.990095+00:00", + "inferred_at": "2026-01-09T19:50:57.748357+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-HAR_198X_NL-NB-EIN_XXXX_CARLOS-CARDENAS.json b/data/person/ID_NL-GE-HAR_198X_NL-NB-EIN_XXXX_CARLOS-CARDENAS.json index 535a17bded..25047c4c8e 100644 --- a/data/person/ID_NL-GE-HAR_198X_NL-NB-EIN_XXXX_CARLOS-CARDENAS.json +++ b/data/person/ID_NL-GE-HAR_198X_NL-NB-EIN_XXXX_CARLOS-CARDENAS.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carloscardenasv_20251214T111112Z.json" ], - "modified_at": "2026-01-09T19:18:14.603211+00:00", + "modified_at": "2026-01-09T19:51:02.695642+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carloscardenasv", @@ -193,7 +193,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.603206+00:00", + "inferred_at": "2026-01-09T19:51:02.695636+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-HED_195X_NL-GE-HED_XXXX_JAN-BUYLINCKX.json b/data/person/ID_NL-GE-HED_195X_NL-GE-HED_XXXX_JAN-BUYLINCKX.json index 29bbab417f..80805b0516 100644 --- a/data/person/ID_NL-GE-HED_195X_NL-GE-HED_XXXX_JAN-BUYLINCKX.json +++ b/data/person/ID_NL-GE-HED_195X_NL-GE-HED_XXXX_JAN-BUYLINCKX.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-buylinckx-43991660_20251214T110337Z.json" ], - "modified_at": "2026-01-09T19:18:15.528293+00:00", + "modified_at": "2026-01-09T19:51:11.839833+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-buylinckx-43991660", @@ -145,7 +145,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.528290+00:00", + "inferred_at": "2026-01-09T19:51:11.839801+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-LEU_198X_XX-XX-XXX_XXXX_LATOYA-CHARLES.json b/data/person/ID_NL-GE-LEU_198X_XX-XX-XXX_XXXX_LATOYA-CHARLES.json index a466e2f83f..85084d6d5d 100644 --- a/data/person/ID_NL-GE-LEU_198X_XX-XX-XXX_XXXX_LATOYA-CHARLES.json +++ b/data/person/ID_NL-GE-LEU_198X_XX-XX-XXX_XXXX_LATOYA-CHARLES.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/la-toya-charles-35548a111_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:14.672105+00:00", + "modified_at": "2026-01-09T19:51:03.346764+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "la-toya-charles-35548a111", @@ -138,7 +138,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.670204+00:00", + "inferred_at": "2026-01-09T19:51:03.342534+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-LEU_199X_NL-OV-DAL_XXXX_GERWIN-MELENHORST.json b/data/person/ID_NL-GE-LEU_199X_NL-OV-DAL_XXXX_GERWIN-MELENHORST.json index 02f5547023..4c3b08332d 100644 --- a/data/person/ID_NL-GE-LEU_199X_NL-OV-DAL_XXXX_GERWIN-MELENHORST.json +++ b/data/person/ID_NL-GE-LEU_199X_NL-OV-DAL_XXXX_GERWIN-MELENHORST.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerwin-melenhorst-ma-2bbab1a1_20251214T113050Z.json" ], - "modified_at": "2026-01-09T19:18:15.304612+00:00", + "modified_at": "2026-01-09T19:51:08.436176+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerwin-melenhorst-ma-2bbab1a1", @@ -162,7 +162,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.304609+00:00", + "inferred_at": "2026-01-09T19:51:08.436172+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_194X_NL-GE-APE_XXXX_JAN-RUITER.json b/data/person/ID_NL-GE-NIJ_194X_NL-GE-APE_XXXX_JAN-RUITER.json index a9ce6928b7..023cbc7211 100644 --- a/data/person/ID_NL-GE-NIJ_194X_NL-GE-APE_XXXX_JAN-RUITER.json +++ b/data/person/ID_NL-GE-NIJ_194X_NL-GE-APE_XXXX_JAN-RUITER.json @@ -183,7 +183,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-de-ruiter-74235b18_20251214T103404Z.json" ], - "modified_at": "2026-01-09T19:18:13.630134+00:00", + "modified_at": "2026-01-09T19:51:24.476540+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-de-ruiter-74235b18", @@ -215,7 +215,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -256,7 +256,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.630129+00:00", + "inferred_at": "2026-01-09T19:51:24.476533+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_195X_NL-NB-EIN_XXXX_WIM-MAAS.json b/data/person/ID_NL-GE-NIJ_195X_NL-NB-EIN_XXXX_WIM-MAAS.json index e6f78e110c..d0d216ea30 100644 --- a/data/person/ID_NL-GE-NIJ_195X_NL-NB-EIN_XXXX_WIM-MAAS.json +++ b/data/person/ID_NL-GE-NIJ_195X_NL-NB-EIN_XXXX_WIM-MAAS.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wimmaas1_20251214T112953Z.json" ], - "modified_at": "2026-01-09T19:18:15.690711+00:00", + "modified_at": "2026-01-09T19:50:47.140796+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wimmaas1", @@ -132,7 +132,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.690706+00:00", + "inferred_at": "2026-01-09T19:50:47.140778+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_195X_NL-NB-HEL_XXXX_ARTHUR-DIJK.json b/data/person/ID_NL-GE-NIJ_195X_NL-NB-HEL_XXXX_ARTHUR-DIJK.json index 86956a2e04..206766460b 100644 --- a/data/person/ID_NL-GE-NIJ_195X_NL-NB-HEL_XXXX_ARTHUR-DIJK.json +++ b/data/person/ID_NL-GE-NIJ_195X_NL-NB-HEL_XXXX_ARTHUR-DIJK.json @@ -283,7 +283,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ahvandijk_20251214T112532Z.json" ], - "modified_at": "2026-01-09T19:18:13.625966+00:00", + "modified_at": "2026-01-09T19:50:58.960745+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ahvandijk", @@ -321,7 +321,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -370,7 +370,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.625960+00:00", + "inferred_at": "2026-01-09T19:50:58.960736+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_196X_NL-GE-ARN_XXXX_MARC-HOOGEN.json b/data/person/ID_NL-GE-NIJ_196X_NL-GE-ARN_XXXX_MARC-HOOGEN.json index a3724215f3..0a6c6f31db 100644 --- a/data/person/ID_NL-GE-NIJ_196X_NL-GE-ARN_XXXX_MARC-HOOGEN.json +++ b/data/person/ID_NL-GE-NIJ_196X_NL-GE-ARN_XXXX_MARC-HOOGEN.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marcvandenhoogen_20251214T113043Z.json" ], - "modified_at": "2026-01-09T19:18:17.240294+00:00", + "modified_at": "2026-01-09T19:50:58.344239+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marcvandenhoogen", @@ -208,7 +208,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -257,7 +257,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.240285+00:00", + "inferred_at": "2026-01-09T19:50:58.344234+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_196X_NL-LI-MAA_XXXX_SUZANNE-BOGMAN.json b/data/person/ID_NL-GE-NIJ_196X_NL-LI-MAA_XXXX_SUZANNE-BOGMAN.json index 5801a4bbbb..b86dbe42ee 100644 --- a/data/person/ID_NL-GE-NIJ_196X_NL-LI-MAA_XXXX_SUZANNE-BOGMAN.json +++ b/data/person/ID_NL-GE-NIJ_196X_NL-LI-MAA_XXXX_SUZANNE-BOGMAN.json @@ -218,7 +218,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/suzanne-bogman-10781b13_20251214T110441Z.json" ], - "modified_at": "2026-01-09T19:18:15.644509+00:00", + "modified_at": "2026-01-09T19:51:12.756191+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "suzanne-bogman-10781b13", @@ -241,7 +241,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -282,7 +282,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.644505+00:00", + "inferred_at": "2026-01-09T19:51:12.756147+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_196X_NL-NB-TIL_XXXX_INGRID-VEEKE.json b/data/person/ID_NL-GE-NIJ_196X_NL-NB-TIL_XXXX_INGRID-VEEKE.json index df82ed68cf..b4c2db7969 100644 --- a/data/person/ID_NL-GE-NIJ_196X_NL-NB-TIL_XXXX_INGRID-VEEKE.json +++ b/data/person/ID_NL-GE-NIJ_196X_NL-NB-TIL_XXXX_INGRID-VEEKE.json @@ -192,7 +192,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ingrid-veeke-28b56811_20251212T230200Z.json" ], - "modified_at": "2026-01-09T19:18:11.432110+00:00", + "modified_at": "2026-01-09T19:50:55.269101+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ingrid-veeke-28b56811", @@ -237,7 +237,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -286,7 +286,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:11.432101+00:00", + "inferred_at": "2026-01-09T19:50:55.269094+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_196X_NL-NB-VEL_XXXX_RICHARD-ENGELN.json b/data/person/ID_NL-GE-NIJ_196X_NL-NB-VEL_XXXX_RICHARD-ENGELN.json index 9dc5d306ca..b22db7ce0b 100644 --- a/data/person/ID_NL-GE-NIJ_196X_NL-NB-VEL_XXXX_RICHARD-ENGELN.json +++ b/data/person/ID_NL-GE-NIJ_196X_NL-NB-VEL_XXXX_RICHARD-ENGELN.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/richard-engeln-769037b_20251214T110920Z.json" ], - "modified_at": "2026-01-09T19:18:15.464887+00:00", + "modified_at": "2026-01-09T19:51:11.028132+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "richard-engeln-769037b", @@ -167,7 +167,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.464883+00:00", + "inferred_at": "2026-01-09T19:51:11.028123+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_196X_NL-UT-MAA_XXXX_CHANTAL-KEIJSPER.json b/data/person/ID_NL-GE-NIJ_196X_NL-UT-MAA_XXXX_CHANTAL-KEIJSPER.json index 827ac2ee01..7a922b8323 100644 --- a/data/person/ID_NL-GE-NIJ_196X_NL-UT-MAA_XXXX_CHANTAL-KEIJSPER.json +++ b/data/person/ID_NL-GE-NIJ_196X_NL-UT-MAA_XXXX_CHANTAL-KEIJSPER.json @@ -301,7 +301,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chantal-keijsper-b3b9056_20251214T104129Z.json" ], - "modified_at": "2026-01-09T19:18:13.657202+00:00", + "modified_at": "2026-01-09T19:50:56.090286+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "chantal-keijsper-b3b9056", @@ -333,7 +333,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -374,7 +374,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.657197+00:00", + "inferred_at": "2026-01-09T19:50:56.090276+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_196X_NL-ZH-TH_XXXX_RIEN-FRAANJE.json b/data/person/ID_NL-GE-NIJ_196X_NL-ZH-TH_XXXX_RIEN-FRAANJE.json index 4674ffe3c3..518f327a35 100644 --- a/data/person/ID_NL-GE-NIJ_196X_NL-ZH-TH_XXXX_RIEN-FRAANJE.json +++ b/data/person/ID_NL-GE-NIJ_196X_NL-ZH-TH_XXXX_RIEN-FRAANJE.json @@ -227,7 +227,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rienfraanje_20251214T112505Z.json" ], - "modified_at": "2026-01-09T19:18:12.144958+00:00", + "modified_at": "2026-01-09T19:51:18.325467+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rienfraanje", @@ -265,7 +265,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -314,7 +314,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.144945+00:00", + "inferred_at": "2026-01-09T19:51:18.325461+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_196X_NL-ZH-TH_XXXX_WIM-GEERTS.json b/data/person/ID_NL-GE-NIJ_196X_NL-ZH-TH_XXXX_WIM-GEERTS.json index 217ae73583..206dbe34e4 100644 --- a/data/person/ID_NL-GE-NIJ_196X_NL-ZH-TH_XXXX_WIM-GEERTS.json +++ b/data/person/ID_NL-GE-NIJ_196X_NL-ZH-TH_XXXX_WIM-GEERTS.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/geertswim_20251214T102953Z.json" ], - "modified_at": "2026-01-09T19:18:13.922890+00:00", + "modified_at": "2026-01-09T19:50:56.847918+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "geertswim", @@ -189,7 +189,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.922885+00:00", + "inferred_at": "2026-01-09T19:50:56.847911+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_ALFRED-ROOS.json b/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_ALFRED-ROOS.json index 6c51b0cf00..cd441def72 100644 --- a/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_ALFRED-ROOS.json +++ b/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_ALFRED-ROOS.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alfred-roos-7b13651a_20251214T112416Z.json" ], - "modified_at": "2026-01-09T19:18:13.314730+00:00", + "modified_at": "2026-01-09T19:50:53.874336+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alfred-roos-7b13651a", @@ -198,7 +198,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +247,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.310686+00:00", + "inferred_at": "2026-01-09T19:50:53.868370+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_ANNE-B.json b/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_ANNE-B.json index 7877586019..28f50058f5 100644 --- a/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_ANNE-B.json +++ b/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_ANNE-B.json @@ -185,7 +185,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-b-a6023522_20251212T221000Z.json" ], - "modified_at": "2026-01-09T19:18:12.690031+00:00", + "modified_at": "2026-01-09T19:50:48.655277+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-b-a6023522", @@ -214,7 +214,7 @@ "primary_rationale": "1960 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -263,7 +263,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1960 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:12.687956+00:00", + "inferred_at": "2026-01-09T19:50:48.653196+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_JOS-HANSEN.json b/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_JOS-HANSEN.json index d0409cfa33..b4e15a8ea2 100644 --- a/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_JOS-HANSEN.json +++ b/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_JOS-HANSEN.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jos-hansen-15041028_20251214T112311Z.json" ], - "modified_at": "2026-01-09T19:18:17.113407+00:00", + "modified_at": "2026-01-09T19:51:11.251549+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jos-hansen-15041028", @@ -116,7 +116,7 @@ "primary_rationale": "1960 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1960 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:17.111496+00:00", + "inferred_at": "2026-01-09T19:51:11.249024+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_MARIELLE-KLERKS.json b/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_MARIELLE-KLERKS.json index ef7dea2c06..8da8ff9a06 100644 --- a/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_MARIELLE-KLERKS.json +++ b/data/person/ID_NL-GE-NIJ_196X_XX-XX-XXX_XXXX_MARIELLE-KLERKS.json @@ -230,7 +230,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marielle-klerks-80a04412_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:18.074015+00:00", + "modified_at": "2026-01-09T19:51:28.908936+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marielle-klerks-80a04412", @@ -252,7 +252,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -293,7 +293,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.071023+00:00", + "inferred_at": "2026-01-09T19:51:28.907061+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_197X_NL-DR-ASS_XXXX_WILLI-KLIJNSTRA.json b/data/person/ID_NL-GE-NIJ_197X_NL-DR-ASS_XXXX_WILLI-KLIJNSTRA.json index 13ee9777a2..cb352e71cb 100644 --- a/data/person/ID_NL-GE-NIJ_197X_NL-DR-ASS_XXXX_WILLI-KLIJNSTRA.json +++ b/data/person/ID_NL-GE-NIJ_197X_NL-DR-ASS_XXXX_WILLI-KLIJNSTRA.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/willi-klijnstra-4508a33_20251214T112136Z.json" ], - "modified_at": "2026-01-09T19:18:15.447475+00:00", + "modified_at": "2026-01-09T19:51:10.868753+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "willi-klijnstra-4508a33", @@ -168,7 +168,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.447471+00:00", + "inferred_at": "2026-01-09T19:51:10.868749+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_197X_NL-GE-ARN_XXXX_ELSE-GOOTJES.json b/data/person/ID_NL-GE-NIJ_197X_NL-GE-ARN_XXXX_ELSE-GOOTJES.json index 9050337521..f346e4a376 100644 --- a/data/person/ID_NL-GE-NIJ_197X_NL-GE-ARN_XXXX_ELSE-GOOTJES.json +++ b/data/person/ID_NL-GE-NIJ_197X_NL-GE-ARN_XXXX_ELSE-GOOTJES.json @@ -217,7 +217,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/else-gootjes-298390b_20251214T110526Z.json" ], - "modified_at": "2026-01-09T19:18:14.825993+00:00", + "modified_at": "2026-01-09T19:50:58.666596+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "else-gootjes-298390b", @@ -255,7 +255,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -304,7 +304,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.825983+00:00", + "inferred_at": "2026-01-09T19:50:58.666588+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_197X_NL-GE-NIJ_XXXX_ALBERT-REIJNEN.json b/data/person/ID_NL-GE-NIJ_197X_NL-GE-NIJ_XXXX_ALBERT-REIJNEN.json new file mode 100644 index 0000000000..10fc12cb82 --- /dev/null +++ b/data/person/ID_NL-GE-NIJ_197X_NL-GE-NIJ_XXXX_ALBERT-REIJNEN.json @@ -0,0 +1,177 @@ +{ + "ppid": "ID_NL-GE-NIJ_197X_NL-GE-NIJ_XXXX_ALBERT-REIJNEN", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "NL-GE-NIJ", + "first_date": "197X", + "last_location": "NL-GE-NIJ", + "last_date": "XXXX", + "name_tokens": [ + "ALBERT", + "REIJNEN" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Albert Reijnen", + "display_name": "Albert Reijnen", + "name_romanized": null, + "name_tokens": [ + "ALBERT", + "REIJNEN" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "E" + ], + "rationale": "Education sector professional at government education inspectorate" + }, + "affiliations": [], + "profile_data": { + "name": "Albert Reijnen", + "linkedin_url": "https://www.linkedin.com/in/albert-reijnen-a2629517", + "headline": "School Auditor at 2 klv Schooladvies", + "location": "The Randstad, Netherlands", + "connections": "179 connections • 179 followers", + "about": null, + "experience": [ + { + "title": "School Auditor", + "company": "2 klv Schooladvies", + "dates": "Jul 2021 - Present", + "location": "Nijmegen, Gelderland, Netherlands" + }, + { + "title": "Inspecteur Basisonderwijs", + "company": "Inspectorate of Education", + "dates": "Jan 1999 - Present" + }, + { + "title": "Inspecteur Basisonderwijs", + "company": "Inspectie van het Onderwijs", + "dates": "May 2001 - Jun 2021" + } + ], + "education": [], + "skills": [], + "languages": [], + "profile_image_url": null + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/albert-reijnen-a2629517_20251212T220000Z.json", + "observed_on": "2025-12-12T22:00:00Z", + "extraction_agent": "claude-opus-4.5" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.713120+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/albert-reijnen-a2629517_20251212T220000Z.json" + ], + "modified_at": "2026-01-09T19:51:28.001065+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "albert-reijnen-a2629517", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALBERT-REIJNEN", + "new_ppid": "ID_NL-GE-NIJ_197X_NL-GE-NIJ_XXXX_ALBERT-REIJNEN", + "changed_at": "2026-01-09T19:43:40.530132+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1976 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Inspectorate of Education", + "title": "Inspecteur Basisonderwijs", + "date_range": "Jan 1999 - Present" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1999 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1999 - 23 = 1976", + "result": "Estimated birth year: 1976", + "range": "1971-1981 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1971, + 1981 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:28.001059+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_NL-GE-NIJ_197X_NL-NB-CUI_XXXX_MICHAEL-MAESSEN.json b/data/person/ID_NL-GE-NIJ_197X_NL-NB-CUI_XXXX_MICHAEL-MAESSEN.json index 53c715586b..d5015e2759 100644 --- a/data/person/ID_NL-GE-NIJ_197X_NL-NB-CUI_XXXX_MICHAEL-MAESSEN.json +++ b/data/person/ID_NL-GE-NIJ_197X_NL-NB-CUI_XXXX_MICHAEL-MAESSEN.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michael-maessen-42a9a6b_20251214T111104Z.json" ], - "modified_at": "2026-01-09T19:18:13.458560+00:00", + "modified_at": "2026-01-09T19:50:54.440898+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michael-maessen-42a9a6b", @@ -184,7 +184,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.458556+00:00", + "inferred_at": "2026-01-09T19:50:54.440891+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_197X_NL-NB-SA_XXXX_ERWIN-DAVERVELD.json b/data/person/ID_NL-GE-NIJ_197X_NL-NB-SA_XXXX_ERWIN-DAVERVELD.json index c3f7b95e14..3b82b44abd 100644 --- a/data/person/ID_NL-GE-NIJ_197X_NL-NB-SA_XXXX_ERWIN-DAVERVELD.json +++ b/data/person/ID_NL-GE-NIJ_197X_NL-NB-SA_XXXX_ERWIN-DAVERVELD.json @@ -191,7 +191,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erwin-daverveld-028806b_20251214T112819Z.json" ], - "modified_at": "2026-01-09T19:18:17.050535+00:00", + "modified_at": "2026-01-09T19:51:23.194419+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erwin-daverveld-028806b", @@ -220,7 +220,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -269,7 +269,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.050531+00:00", + "inferred_at": "2026-01-09T19:51:23.194415+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_197X_NL-NH-AMS_XXXX_ANNA-KOLDEWEIJ.json b/data/person/ID_NL-GE-NIJ_197X_NL-NH-AMS_XXXX_ANNA-KOLDEWEIJ.json index e50ee56e7f..8612a13383 100644 --- a/data/person/ID_NL-GE-NIJ_197X_NL-NH-AMS_XXXX_ANNA-KOLDEWEIJ.json +++ b/data/person/ID_NL-GE-NIJ_197X_NL-NH-AMS_XXXX_ANNA-KOLDEWEIJ.json @@ -347,7 +347,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-koldeweij-a787918b_20251214T111431Z.json" ], - "modified_at": "2026-01-09T19:18:12.974257+00:00", + "modified_at": "2026-01-09T19:50:46.692657+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anna-koldeweij-a787918b", @@ -385,7 +385,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -434,7 +434,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.974250+00:00", + "inferred_at": "2026-01-09T19:50:46.692652+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_197X_NL-NH-BLA_XXXX_MIEKE-DIEPEN.json b/data/person/ID_NL-GE-NIJ_197X_NL-NH-BLA_XXXX_MIEKE-DIEPEN.json index edb7d37f85..d7de933972 100644 --- a/data/person/ID_NL-GE-NIJ_197X_NL-NH-BLA_XXXX_MIEKE-DIEPEN.json +++ b/data/person/ID_NL-GE-NIJ_197X_NL-NH-BLA_XXXX_MIEKE-DIEPEN.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mieke-van-diepen-3a916085_20251212T221700Z.json" ], - "modified_at": "2026-01-09T19:18:16.837251+00:00", + "modified_at": "2026-01-09T19:51:22.264840+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mieke-van-diepen-3a916085", @@ -189,7 +189,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.837245+00:00", + "inferred_at": "2026-01-09T19:51:22.264834+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_197X_NL-ZH-TH_XXXX_ELIF-BAGCI.json b/data/person/ID_NL-GE-NIJ_197X_NL-ZH-TH_XXXX_ELIF-BAGCI.json index 688eab1732..4048c7d01b 100644 --- a/data/person/ID_NL-GE-NIJ_197X_NL-ZH-TH_XXXX_ELIF-BAGCI.json +++ b/data/person/ID_NL-GE-NIJ_197X_NL-ZH-TH_XXXX_ELIF-BAGCI.json @@ -200,7 +200,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elif-bagci-491415a_20251214T112434Z.json" ], - "modified_at": "2026-01-09T19:18:15.641293+00:00", + "modified_at": "2026-01-09T19:51:03.378494+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elif-bagci-491415a", @@ -238,7 +238,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -287,7 +287,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.641287+00:00", + "inferred_at": "2026-01-09T19:51:03.378471+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_197X_NL-ZH-TH_XXXX_THIJS-DEBEIJ.json b/data/person/ID_NL-GE-NIJ_197X_NL-ZH-TH_XXXX_THIJS-DEBEIJ.json index 82347652a7..aa05ad34bd 100644 --- a/data/person/ID_NL-GE-NIJ_197X_NL-ZH-TH_XXXX_THIJS-DEBEIJ.json +++ b/data/person/ID_NL-GE-NIJ_197X_NL-ZH-TH_XXXX_THIJS-DEBEIJ.json @@ -163,7 +163,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thijs-debeij-95a1a71_20251214T102915Z.json" ], - "modified_at": "2026-01-09T19:18:15.693555+00:00", + "modified_at": "2026-01-09T19:51:13.469791+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thijs-debeij-95a1a71", @@ -192,7 +192,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.693552+00:00", + "inferred_at": "2026-01-09T19:51:13.469784+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_197X_NL-ZH-TH_XXXX_WILLEMIJN-BLOTTCAPPENBERG.json b/data/person/ID_NL-GE-NIJ_197X_NL-ZH-TH_XXXX_WILLEMIJN-BLOTTCAPPENBERG.json index eef415c27a..da2587ce75 100644 --- a/data/person/ID_NL-GE-NIJ_197X_NL-ZH-TH_XXXX_WILLEMIJN-BLOTTCAPPENBERG.json +++ b/data/person/ID_NL-GE-NIJ_197X_NL-ZH-TH_XXXX_WILLEMIJN-BLOTTCAPPENBERG.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/willemijn-blott-cappenberg_20251214T103218Z.json" ], - "modified_at": "2026-01-09T19:18:16.221123+00:00", + "modified_at": "2026-01-09T19:51:18.317368+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "willemijn-blott-cappenberg", @@ -179,7 +179,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.221118+00:00", + "inferred_at": "2026-01-09T19:51:18.317362+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_197X_XX-XX-XXX_XXXX_ANGELIQUE-EERENBEEMD.json b/data/person/ID_NL-GE-NIJ_197X_XX-XX-XXX_XXXX_ANGELIQUE-EERENBEEMD.json index e5591dad5f..d474cae918 100644 --- a/data/person/ID_NL-GE-NIJ_197X_XX-XX-XXX_XXXX_ANGELIQUE-EERENBEEMD.json +++ b/data/person/ID_NL-GE-NIJ_197X_XX-XX-XXX_XXXX_ANGELIQUE-EERENBEEMD.json @@ -76,7 +76,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/angelique-van-den-eerenbeemd-b754248_20251214T111812Z.json" ], - "modified_at": "2026-01-09T19:18:14.964974+00:00", + "modified_at": "2026-01-09T19:51:15.181406+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "angelique-van-den-eerenbeemd-b754248", @@ -107,7 +107,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -148,7 +148,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.964968+00:00", + "inferred_at": "2026-01-09T19:51:15.181399+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_197X_XX-XX-XXX_XXXX_MIEL-JACOBS.json b/data/person/ID_NL-GE-NIJ_197X_XX-XX-XXX_XXXX_MIEL-JACOBS.json index 76bf760180..14622c52f4 100644 --- a/data/person/ID_NL-GE-NIJ_197X_XX-XX-XXX_XXXX_MIEL-JACOBS.json +++ b/data/person/ID_NL-GE-NIJ_197X_XX-XX-XXX_XXXX_MIEL-JACOBS.json @@ -199,7 +199,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/miel-jacobs-aa3a4239_20251214T112412Z.json" ], - "modified_at": "2026-01-09T19:18:16.820203+00:00", + "modified_at": "2026-01-09T19:51:11.034989+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "miel-jacobs-aa3a4239", @@ -236,7 +236,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -285,7 +285,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.818270+00:00", + "inferred_at": "2026-01-09T19:51:11.031184+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-GE-ARN_XXXX_ANNE-OOSTERVEER.json b/data/person/ID_NL-GE-NIJ_198X_NL-GE-ARN_XXXX_ANNE-OOSTERVEER.json index 866470bbfb..f9e6cbda95 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-GE-ARN_XXXX_ANNE-OOSTERVEER.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-GE-ARN_XXXX_ANNE-OOSTERVEER.json @@ -265,7 +265,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anneoosterveer_20251214T110734Z.json" ], - "modified_at": "2026-01-09T19:18:15.640727+00:00", + "modified_at": "2026-01-09T19:51:12.744953+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anneoosterveer", @@ -294,7 +294,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -343,7 +343,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.640722+00:00", + "inferred_at": "2026-01-09T19:51:12.744949+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-GE-ARN_XXXX_LIESBETH-ARKEL.json b/data/person/ID_NL-GE-NIJ_198X_NL-GE-ARN_XXXX_LIESBETH-ARKEL.json index 87cf31898c..768d70f17f 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-GE-ARN_XXXX_LIESBETH-ARKEL.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-GE-ARN_XXXX_LIESBETH-ARKEL.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/liesbethvanarkel_20251214T110628Z.json" ], - "modified_at": "2026-01-09T19:18:13.399012+00:00", + "modified_at": "2026-01-09T19:50:54.029031+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "liesbethvanarkel", @@ -159,7 +159,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.399008+00:00", + "inferred_at": "2026-01-09T19:50:54.029024+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-GE-ARN_XXXX_MARJOLEIN-JOCHEMS.json b/data/person/ID_NL-GE-NIJ_198X_NL-GE-ARN_XXXX_MARJOLEIN-JOCHEMS.json index 39f5d0b989..5c4eb6498d 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-GE-ARN_XXXX_MARJOLEIN-JOCHEMS.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-GE-ARN_XXXX_MARJOLEIN-JOCHEMS.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjoleinjochems_20251214T110627Z.json" ], - "modified_at": "2026-01-09T19:18:15.143319+00:00", + "modified_at": "2026-01-09T19:51:06.743954+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjoleinjochems", @@ -157,7 +157,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.143313+00:00", + "inferred_at": "2026-01-09T19:51:06.743950+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-GE-NIJ_XXXX_FABRIZIA-CANFORA.json b/data/person/ID_NL-GE-NIJ_198X_NL-GE-NIJ_XXXX_FABRIZIA-CANFORA.json index f563c133d8..e88478d462 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-GE-NIJ_XXXX_FABRIZIA-CANFORA.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-GE-NIJ_XXXX_FABRIZIA-CANFORA.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fabrizia-canfora-4a3622153_20251214T111239Z.json" ], - "modified_at": "2026-01-09T19:18:14.321196+00:00", + "modified_at": "2026-01-09T19:51:02.678954+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fabrizia-canfora-4a3622153", @@ -150,7 +150,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.321190+00:00", + "inferred_at": "2026-01-09T19:51:02.678948+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-GE-NIJ_XXXX_KOR-BOSCH.json b/data/person/ID_NL-GE-NIJ_198X_NL-GE-NIJ_XXXX_KOR-BOSCH.json index 6ec9019e43..79c59f6be3 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-GE-NIJ_XXXX_KOR-BOSCH.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-GE-NIJ_XXXX_KOR-BOSCH.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kor-bosch-b07a9616_20251214T113046Z.json" ], - "modified_at": "2026-01-09T19:18:17.149174+00:00", + "modified_at": "2026-01-09T19:51:23.924502+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kor-bosch-b07a9616", @@ -197,7 +197,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +246,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.149138+00:00", + "inferred_at": "2026-01-09T19:51:23.924498+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-GE-NIJ_XXXX_MYRNA-EPPINGS.json b/data/person/ID_NL-GE-NIJ_198X_NL-GE-NIJ_XXXX_MYRNA-EPPINGS.json index 0a844dd3cb..27f994eab2 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-GE-NIJ_XXXX_MYRNA-EPPINGS.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-GE-NIJ_XXXX_MYRNA-EPPINGS.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/myrna-eppings-38464526_20251214T110751Z.json" ], - "modified_at": "2026-01-09T19:18:17.340534+00:00", + "modified_at": "2026-01-09T19:51:26.638481+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "myrna-eppings-38464526", @@ -210,7 +210,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.340528+00:00", + "inferred_at": "2026-01-09T19:51:26.638474+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-GR-GRO_XXXX_MARIJ-DERKSEN.json b/data/person/ID_NL-GE-NIJ_198X_NL-GR-GRO_XXXX_MARIJ-DERKSEN.json index 5b848523d4..eb89eba0b2 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-GR-GRO_XXXX_MARIJ-DERKSEN.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-GR-GRO_XXXX_MARIJ-DERKSEN.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marij-derksen-59192812_20251214T112140Z.json" ], - "modified_at": "2026-01-09T19:18:18.158410+00:00", + "modified_at": "2026-01-09T19:51:17.561827+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marij-derksen-59192812", @@ -196,7 +196,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +245,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.158399+00:00", + "inferred_at": "2026-01-09T19:51:17.561821+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-LI-ROE_XXXX_CHRIS-DOLS.json b/data/person/ID_NL-GE-NIJ_198X_NL-LI-ROE_XXXX_CHRIS-DOLS.json index e7b3242da4..2cd355ab31 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-LI-ROE_XXXX_CHRIS-DOLS.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-LI-ROE_XXXX_CHRIS-DOLS.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chrisdols_20251214T110437Z.json" ], - "modified_at": "2026-01-09T19:18:15.445406+00:00", + "modified_at": "2026-01-09T19:51:10.866389+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "chrisdols", @@ -177,7 +177,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +218,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.445402+00:00", + "inferred_at": "2026-01-09T19:51:10.866385+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-NB-BOZ_XXXX_LINDA-PRINS.json b/data/person/ID_NL-GE-NIJ_198X_NL-NB-BOZ_XXXX_LINDA-PRINS.json index 414fb5e73d..974dba5dd0 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-NB-BOZ_XXXX_LINDA-PRINS.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-NB-BOZ_XXXX_LINDA-PRINS.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/linda-prins-6a23b7205_20251214T104038Z.json" ], - "modified_at": "2026-01-09T19:18:15.375208+00:00", + "modified_at": "2026-01-09T19:50:51.081169+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "linda-prins-6a23b7205", @@ -141,7 +141,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.375203+00:00", + "inferred_at": "2026-01-09T19:50:51.081162+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-NB-EIN_XXXX_SO-PHAM.json b/data/person/ID_NL-GE-NIJ_198X_NL-NB-EIN_XXXX_SO-PHAM.json index 2165e5796e..e62c66ba7d 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-NB-EIN_XXXX_SO-PHAM.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-NB-EIN_XXXX_SO-PHAM.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/phamvanso_20251214T111050Z.json" ], - "modified_at": "2026-01-09T19:18:12.766122+00:00", + "modified_at": "2026-01-09T19:50:48.876872+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "phamvanso", @@ -207,7 +207,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -256,7 +256,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.766115+00:00", + "inferred_at": "2026-01-09T19:50:48.876859+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-NH-ALK_XXXX_MARIEKE-RAVESLOOT.json b/data/person/ID_NL-GE-NIJ_198X_NL-NH-ALK_XXXX_MARIEKE-RAVESLOOT.json index a6f61a146c..4eaf455cd4 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-NH-ALK_XXXX_MARIEKE-RAVESLOOT.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-NH-ALK_XXXX_MARIEKE-RAVESLOOT.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marieke-ravesloot-37494b2a_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:15.332605+00:00", + "modified_at": "2026-01-09T19:51:08.569776+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marieke-ravesloot-37494b2a", @@ -189,7 +189,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.332601+00:00", + "inferred_at": "2026-01-09T19:51:08.569771+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-NH-AMS_XXXX_JOYCE-ZELEN.json b/data/person/ID_NL-GE-NIJ_198X_NL-NH-AMS_XXXX_JOYCE-ZELEN.json index 6c0746d06d..5b50f440b3 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-NH-AMS_XXXX_JOYCE-ZELEN.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-NH-AMS_XXXX_JOYCE-ZELEN.json @@ -206,7 +206,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joycezelen_20251214T111321Z.json" ], - "modified_at": "2026-01-09T19:18:18.319467+00:00", + "modified_at": "2026-01-09T19:50:56.771063+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joycezelen", @@ -244,7 +244,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -293,7 +293,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.319459+00:00", + "inferred_at": "2026-01-09T19:50:56.771053+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-UT-HOU_XXXX_JUDITH-SCHMIDT.json b/data/person/ID_NL-GE-NIJ_198X_NL-UT-HOU_XXXX_JUDITH-SCHMIDT.json index f95f9f8e1e..8553c23a34 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-UT-HOU_XXXX_JUDITH-SCHMIDT.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-UT-HOU_XXXX_JUDITH-SCHMIDT.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/judith-schmidt-74b1092a_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:17.014348+00:00", + "modified_at": "2026-01-09T19:51:22.961014+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "judith-schmidt-74b1092a", @@ -157,7 +157,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.014343+00:00", + "inferred_at": "2026-01-09T19:51:22.961010+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-UT-UTR_XXXX_LIES-WIJNTERP.json b/data/person/ID_NL-GE-NIJ_198X_NL-UT-UTR_XXXX_LIES-WIJNTERP.json index 06e87805d7..c4ecb0c8ec 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-UT-UTR_XXXX_LIES-WIJNTERP.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-UT-UTR_XXXX_LIES-WIJNTERP.json @@ -202,7 +202,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lieswijnterp_20251214T112518Z.json" ], - "modified_at": "2026-01-09T19:18:15.407285+00:00", + "modified_at": "2026-01-09T19:51:08.783883+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lieswijnterp", @@ -231,7 +231,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -280,7 +280,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.407276+00:00", + "inferred_at": "2026-01-09T19:51:08.783875+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-ZH-BER_XXXX_SUSANNE-HOEFNAGEL.json b/data/person/ID_NL-GE-NIJ_198X_NL-ZH-BER_XXXX_SUSANNE-HOEFNAGEL.json index 895be3e2a4..5e981719e7 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-ZH-BER_XXXX_SUSANNE-HOEFNAGEL.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-ZH-BER_XXXX_SUSANNE-HOEFNAGEL.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/susanne-hoefnagel-9aa477121_20251214T103316Z.json" ], - "modified_at": "2026-01-09T19:18:13.093225+00:00", + "modified_at": "2026-01-09T19:50:51.085896+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "susanne-hoefnagel-9aa477121", @@ -151,7 +151,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.093220+00:00", + "inferred_at": "2026-01-09T19:50:51.085891+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_ANGELIQUE-MADE.json b/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_ANGELIQUE-MADE.json index 065e13e436..c7c9ab19f5 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_ANGELIQUE-MADE.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_ANGELIQUE-MADE.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/angelique-van-der-made-b71b0069_20251214T103035Z.json" ], - "modified_at": "2026-01-09T19:18:18.341808+00:00", + "modified_at": "2026-01-09T19:51:18.186889+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "angelique-van-der-made-b71b0069", @@ -147,7 +147,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.341797+00:00", + "inferred_at": "2026-01-09T19:51:18.186875+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_MINKE-SAR.json b/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_MINKE-SAR.json index 8de0c7662a..e00073efe6 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_MINKE-SAR.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_MINKE-SAR.json @@ -199,7 +199,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/minkevandersar_20251214T102755Z.json" ], - "modified_at": "2026-01-09T19:18:16.312800+00:00", + "modified_at": "2026-01-09T19:51:18.387766+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "minkevandersar", @@ -228,7 +228,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -277,7 +277,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.312793+00:00", + "inferred_at": "2026-01-09T19:51:18.387760+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_RUTGER-VEN.json b/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_RUTGER-VEN.json index 8a59d9bc82..41b73fcc32 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_RUTGER-VEN.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_RUTGER-VEN.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rutger-van-der-ven-2026a923_20251212T180000Z.json" ], - "modified_at": "2026-01-09T19:18:13.164783+00:00", + "modified_at": "2026-01-09T19:50:52.998635+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rutger-van-der-ven-2026a923", @@ -171,7 +171,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.164779+00:00", + "inferred_at": "2026-01-09T19:50:52.998630+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_TIM-SCHEERDER.json b/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_TIM-SCHEERDER.json index fcda1a5169..e16591458e 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_TIM-SCHEERDER.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_TIM-SCHEERDER.json @@ -167,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/timscheerder_20251214T102931Z.json" ], - "modified_at": "2026-01-09T19:18:14.303612+00:00", + "modified_at": "2026-01-09T19:51:00.096665+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "timscheerder", @@ -196,7 +196,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +245,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.303608+00:00", + "inferred_at": "2026-01-09T19:51:00.096658+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_WOUTER-SCHROER.json b/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_WOUTER-SCHROER.json index d7d2cb3e5e..4f307c8d82 100644 --- a/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_WOUTER-SCHROER.json +++ b/data/person/ID_NL-GE-NIJ_198X_NL-ZH-TH_XXXX_WOUTER-SCHROER.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wschroer_20251214T103046Z.json" ], - "modified_at": "2026-01-09T19:18:13.566787+00:00", + "modified_at": "2026-01-09T19:51:05.542942+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wschroer", @@ -181,7 +181,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.566780+00:00", + "inferred_at": "2026-01-09T19:51:05.542932+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_BARBARA-VISSER.json b/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_BARBARA-VISSER.json index bf2074e79b..4473baf646 100644 --- a/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_BARBARA-VISSER.json +++ b/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_BARBARA-VISSER.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/barbara-visser-3037b631_20251214T112135Z.json" ], - "modified_at": "2026-01-09T19:18:15.537317+00:00", + "modified_at": "2026-01-09T19:50:49.069698+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "barbara-visser-3037b631", @@ -142,7 +142,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.535342+00:00", + "inferred_at": "2026-01-09T19:50:49.065984+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_ELLEN-GEBOERS.json b/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_ELLEN-GEBOERS.json index ae589feaa5..36517da25c 100644 --- a/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_ELLEN-GEBOERS.json +++ b/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_ELLEN-GEBOERS.json @@ -196,7 +196,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ellen-geboers-36a4b824_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:16.801442+00:00", + "modified_at": "2026-01-09T19:51:22.044192+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ellen-geboers-36a4b824", @@ -224,7 +224,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -273,7 +273,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.797481+00:00", + "inferred_at": "2026-01-09T19:51:22.040392+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_JELENA-ZIVKOVIC.json b/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_JELENA-ZIVKOVIC.json index 918bccc4df..f4c6361621 100644 --- a/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_JELENA-ZIVKOVIC.json +++ b/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_JELENA-ZIVKOVIC.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jelena-zivkovic-a55a3411_20251214T111230Z.json" ], - "modified_at": "2026-01-09T19:18:13.642073+00:00", + "modified_at": "2026-01-09T19:50:55.275607+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jelena-zivkovic-a55a3411", @@ -155,7 +155,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.640234+00:00", + "inferred_at": "2026-01-09T19:50:55.270524+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_MAAIKE-MEE.json b/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_MAAIKE-MEE.json index 92b46ab70b..050a044249 100644 --- a/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_MAAIKE-MEE.json +++ b/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_MAAIKE-MEE.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maaike-van-der-mee-5850a0132_20251212T182000Z.json" ], - "modified_at": "2026-01-09T19:18:16.955660+00:00", + "modified_at": "2026-01-09T19:51:22.800055+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maaike-van-der-mee-5850a0132", @@ -165,7 +165,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.950725+00:00", + "inferred_at": "2026-01-09T19:51:22.798310+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_SUSANNE-LEEUW.json b/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_SUSANNE-LEEUW.json index 2e2d584547..ca14aa8caa 100644 --- a/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_SUSANNE-LEEUW.json +++ b/data/person/ID_NL-GE-NIJ_198X_XX-XX-XXX_XXXX_SUSANNE-LEEUW.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/susanne-de-leeuw-6086a657_20251214T110538Z.json" ], - "modified_at": "2026-01-09T19:18:15.644081+00:00", + "modified_at": "2026-01-09T19:51:12.755484+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "susanne-de-leeuw-6086a657", @@ -146,7 +146,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.644069+00:00", + "inferred_at": "2026-01-09T19:51:12.755453+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_KRYSTAL-ZHANG.json b/data/person/ID_NL-GE-NIJ_199X_AU-01-CAN_XXXX_KRYSTAL-ZHANG.json similarity index 78% rename from data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_KRYSTAL-ZHANG.json rename to data/person/ID_NL-GE-NIJ_199X_AU-01-CAN_XXXX_KRYSTAL-ZHANG.json index dc606543b9..7f207a1ff9 100644 --- a/data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_KRYSTAL-ZHANG.json +++ b/data/person/ID_NL-GE-NIJ_199X_AU-01-CAN_XXXX_KRYSTAL-ZHANG.json @@ -1,18 +1,19 @@ { - "ppid": "ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_KRYSTAL-ZHANG", + "ppid": "ID_NL-GE-NIJ_199X_AU-01-CAN_XXXX_KRYSTAL-ZHANG", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "NL-GE-NIJ", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "KRYSTAL", "ZHANG" ], "first_date_source": "inferred_birth_decade", - "first_location_source": "inferred_birth_settlement" + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Krystal Zhang", @@ -134,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/shanghua-krystal-zhang_20251214T103949Z.json" ], - "modified_at": "2026-01-09T19:18:16.787990+00:00", + "modified_at": "2026-01-09T19:51:22.022111+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "shanghua-krystal-zhang", @@ -157,6 +158,16 @@ "inferred_birth_decade", "inferred_birth_settlement" ] + }, + { + "previous_ppid": "ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_KRYSTAL-ZHANG", + "new_ppid": "ID_NL-GE-NIJ_199X_AU-01-CAN_XXXX_KRYSTAL-ZHANG", + "changed_at": "2026-01-09T19:51:22.022109+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -165,7 +176,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +217,60 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.787981+00:00", + "inferred_at": "2026-01-09T19:51:22.017185+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:22.022101+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-FR-HEE_XXXX_SASKIA-ZANDSTRA.json b/data/person/ID_NL-GE-NIJ_199X_NL-FR-HEE_XXXX_SASKIA-ZANDSTRA.json index e35015a006..ae7e812dc1 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-FR-HEE_XXXX_SASKIA-ZANDSTRA.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-FR-HEE_XXXX_SASKIA-ZANDSTRA.json @@ -186,7 +186,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saskiavanameijden_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:15.575990+00:00", + "modified_at": "2026-01-09T19:51:12.122304+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saskiavanameijden", @@ -223,7 +223,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -272,7 +272,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.575984+00:00", + "inferred_at": "2026-01-09T19:51:12.122300+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-GE-ARN_XXXX_JOON-KOSMAN.json b/data/person/ID_NL-GE-NIJ_199X_NL-GE-ARN_XXXX_JOON-KOSMAN.json index 4a55799c91..ab193d8ca3 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-GE-ARN_XXXX_JOON-KOSMAN.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-GE-ARN_XXXX_JOON-KOSMAN.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joon-kosman-00bbba117_20251214T110417Z.json" ], - "modified_at": "2026-01-09T19:18:15.707207+00:00", + "modified_at": "2026-01-09T19:51:13.480434+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joon-kosman-00bbba117", @@ -130,7 +130,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -171,7 +171,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.707203+00:00", + "inferred_at": "2026-01-09T19:51:13.480427+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-GE-ARN_XXXX_MICHA-VINK.json b/data/person/ID_NL-GE-NIJ_199X_NL-GE-ARN_XXXX_MICHA-VINK.json index b55937544f..97492c7ea9 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-GE-ARN_XXXX_MICHA-VINK.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-GE-ARN_XXXX_MICHA-VINK.json @@ -150,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/micha-vink_20251214T110540Z.json" ], - "modified_at": "2026-01-09T19:18:16.728391+00:00", + "modified_at": "2026-01-09T19:51:21.774078+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "micha-vink", @@ -173,7 +173,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.728388+00:00", + "inferred_at": "2026-01-09T19:51:21.774051+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-GE-ARN_XXXX_WOUTER-ZANTINGE.json b/data/person/ID_NL-GE-NIJ_199X_NL-GE-ARN_XXXX_WOUTER-ZANTINGE.json index ab93d11cc9..7263e7cdc5 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-GE-ARN_XXXX_WOUTER-ZANTINGE.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-GE-ARN_XXXX_WOUTER-ZANTINGE.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wouterzantinge_20251214T110525Z.json" ], - "modified_at": "2026-01-09T19:18:15.233899+00:00", + "modified_at": "2026-01-09T19:51:07.271100+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wouterzantinge", @@ -159,7 +159,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.233894+00:00", + "inferred_at": "2026-01-09T19:51:07.271095+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_AUKE-VEEN.json b/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_AUKE-VEEN.json index 94eef96bd1..5441eb8837 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_AUKE-VEEN.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_AUKE-VEEN.json @@ -220,7 +220,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/auke-van-der-veen-45734311a_20251214T112602Z.json" ], - "modified_at": "2026-01-09T19:18:15.618603+00:00", + "modified_at": "2026-01-09T19:51:12.715426+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "auke-van-der-veen-45734311a", @@ -243,7 +243,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -284,7 +284,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.618599+00:00", + "inferred_at": "2026-01-09T19:51:12.715420+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_ELINE-ABBINK.json b/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_ELINE-ABBINK.json index 97275aa6cd..85770f5858 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_ELINE-ABBINK.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_ELINE-ABBINK.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eline-abbink-812450131_20251214T113047Z.json" ], - "modified_at": "2026-01-09T19:18:13.126280+00:00", + "modified_at": "2026-01-09T19:50:51.772757+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eline-abbink-812450131", @@ -191,7 +191,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.126275+00:00", + "inferred_at": "2026-01-09T19:50:51.772753+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_MAHDIYEH-GHAFFARI.json b/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_MAHDIYEH-GHAFFARI.json index 1d8a503dea..fbdfb8e47b 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_MAHDIYEH-GHAFFARI.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_MAHDIYEH-GHAFFARI.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mahdiyeh-ghaffari-0b5525203_20251214T111857Z.json" ], - "modified_at": "2026-01-09T19:18:15.378036+00:00", + "modified_at": "2026-01-09T19:51:08.627708+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mahdiyeh-ghaffari-0b5525203", @@ -144,7 +144,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.378031+00:00", + "inferred_at": "2026-01-09T19:51:08.627701+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_NAOMI-BISPING.json b/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_NAOMI-BISPING.json index faf022c921..a73b89aa0b 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_NAOMI-BISPING.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_NAOMI-BISPING.json @@ -187,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/naomi-bisping-634541b8_20251214T111620Z.json" ], - "modified_at": "2026-01-09T19:18:16.915532+00:00", + "modified_at": "2026-01-09T19:51:22.509434+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "naomi-bisping-634541b8", @@ -210,7 +210,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -251,7 +251,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.915528+00:00", + "inferred_at": "2026-01-09T19:51:22.509429+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_TONNY-GARIC.json b/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_TONNY-GARIC.json index b94f1bcf92..ac7ff3b775 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_TONNY-GARIC.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-GE-NIJ_XXXX_TONNY-GARIC.json @@ -254,7 +254,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tonnygaric_20251214T113405Z.json" ], - "modified_at": "2026-01-09T19:18:14.086100+00:00", + "modified_at": "2026-01-09T19:50:58.574187+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tonnygaric", @@ -283,7 +283,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -332,7 +332,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.086094+00:00", + "inferred_at": "2026-01-09T19:50:58.574181+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-LI-MAA_XXXX_AFRA-MARS.json b/data/person/ID_NL-GE-NIJ_199X_NL-LI-MAA_XXXX_AFRA-MARS.json index 94d524683a..ace9111652 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-LI-MAA_XXXX_AFRA-MARS.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-LI-MAA_XXXX_AFRA-MARS.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/afra-de-mars-711510187_20251214T110440Z.json" ], - "modified_at": "2026-01-09T19:18:14.360649+00:00", + "modified_at": "2026-01-09T19:51:01.593529+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "afra-de-mars-711510187", @@ -193,7 +193,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +242,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.360645+00:00", + "inferred_at": "2026-01-09T19:51:01.593520+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-NB-BOE_XXXX_LAURA-DAMEN.json b/data/person/ID_NL-GE-NIJ_199X_NL-NB-BOE_XXXX_LAURA-DAMEN.json index cc16e54f75..f4f0fcf41a 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-NB-BOE_XXXX_LAURA-DAMEN.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-NB-BOE_XXXX_LAURA-DAMEN.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laura-damen-78a986186_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:17.608449+00:00", + "modified_at": "2026-01-09T19:51:05.206685+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laura-damen-78a986186", @@ -191,7 +191,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.608441+00:00", + "inferred_at": "2026-01-09T19:51:05.206677+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-NB-EIN_XXXX_QIN-ONG.json b/data/person/ID_NL-GE-NIJ_199X_NL-NB-EIN_XXXX_QIN-ONG.json index b88384bec9..8e069c6ac2 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-NB-EIN_XXXX_QIN-ONG.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-NB-EIN_XXXX_QIN-ONG.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/qinong_20251214T111045Z.json" ], - "modified_at": "2026-01-09T19:18:17.599451+00:00", + "modified_at": "2026-01-09T19:51:28.443593+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "qinong", @@ -162,7 +162,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.599446+00:00", + "inferred_at": "2026-01-09T19:51:28.443590+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-NB-EIN_XXXX_SREEPRIYA-SREEKUMAR.json b/data/person/ID_NL-GE-NIJ_199X_NL-NB-EIN_XXXX_SREEPRIYA-SREEKUMAR.json index 48b42e340a..e36c2abb98 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-NB-EIN_XXXX_SREEPRIYA-SREEKUMAR.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-NB-EIN_XXXX_SREEPRIYA-SREEKUMAR.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sreepriya-sreekumar-0b892858_20251214T111103Z.json" ], - "modified_at": "2026-01-09T19:18:15.173880+00:00", + "modified_at": "2026-01-09T19:51:06.991881+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sreepriya-sreekumar-0b892858", @@ -164,7 +164,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.173877+00:00", + "inferred_at": "2026-01-09T19:51:06.991875+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-NB-OSS_XXXX_BAS-ROOIJ.json b/data/person/ID_NL-GE-NIJ_199X_NL-NB-OSS_XXXX_BAS-ROOIJ.json index 345f77d093..fa16e37ddd 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-NB-OSS_XXXX_BAS-ROOIJ.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-NB-OSS_XXXX_BAS-ROOIJ.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bas-van-rooij-267109136_20251214T110948Z.json" ], - "modified_at": "2026-01-09T19:18:14.010268+00:00", + "modified_at": "2026-01-09T19:50:58.068414+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bas-van-rooij-267109136", @@ -188,7 +188,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.010265+00:00", + "inferred_at": "2026-01-09T19:50:58.068406+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-NH-AMS_XXXX_MYRTHE-KROM.json b/data/person/ID_NL-GE-NIJ_199X_NL-NH-AMS_XXXX_MYRTHE-KROM.json index 1dc40e7f20..882ca42393 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-NH-AMS_XXXX_MYRTHE-KROM.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-NH-AMS_XXXX_MYRTHE-KROM.json @@ -306,7 +306,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/myrthe-krom-33005b68_20251214T102725Z.json" ], - "modified_at": "2026-01-09T19:18:13.240216+00:00", + "modified_at": "2026-01-09T19:50:53.696068+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "myrthe-krom-33005b68", @@ -329,7 +329,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -370,7 +370,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.240213+00:00", + "inferred_at": "2026-01-09T19:50:53.696062+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-NH-AMS_XXXX_TEUN-KROSENBRINK.json b/data/person/ID_NL-GE-NIJ_199X_NL-NH-AMS_XXXX_TEUN-KROSENBRINK.json index 9e607437fd..5c56ebc6f7 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-NH-AMS_XXXX_TEUN-KROSENBRINK.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-NH-AMS_XXXX_TEUN-KROSENBRINK.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/teun-krosenbrink-960526236_20251214T111905Z.json" ], - "modified_at": "2026-01-09T19:18:17.886645+00:00", + "modified_at": "2026-01-09T19:51:28.835810+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "teun-krosenbrink-960526236", @@ -121,7 +121,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.886639+00:00", + "inferred_at": "2026-01-09T19:51:28.835804+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-OV-ZWO_XXXX_KRIS-AAR.json b/data/person/ID_NL-GE-NIJ_199X_NL-OV-ZWO_XXXX_KRIS-AAR.json index c4d4911219..db81258f24 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-OV-ZWO_XXXX_KRIS-AAR.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-OV-ZWO_XXXX_KRIS-AAR.json @@ -191,7 +191,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kris-van-der-aar-aa0501178_20251214T110404Z.json" ], - "modified_at": "2026-01-09T19:18:13.181168+00:00", + "modified_at": "2026-01-09T19:50:53.222233+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kris-van-der-aar-aa0501178", @@ -220,7 +220,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -269,7 +269,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.181161+00:00", + "inferred_at": "2026-01-09T19:50:53.222226+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-UT-AME_XXXX_WIETSE-BAKKER.json b/data/person/ID_NL-GE-NIJ_199X_NL-UT-AME_XXXX_WIETSE-BAKKER.json index 7af607f00b..f61002ef20 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-UT-AME_XXXX_WIETSE-BAKKER.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-UT-AME_XXXX_WIETSE-BAKKER.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wabakker_20251214T110428Z.json" ], - "modified_at": "2026-01-09T19:18:18.331050+00:00", + "modified_at": "2026-01-09T19:51:29.277836+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wabakker", @@ -194,7 +194,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.331043+00:00", + "inferred_at": "2026-01-09T19:51:29.277830+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-UT-UTR_XXXX_JANNE-HULSCHER.json b/data/person/ID_NL-GE-NIJ_199X_NL-UT-UTR_XXXX_JANNE-HULSCHER.json index 85013640df..0c353947aa 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-UT-UTR_XXXX_JANNE-HULSCHER.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-UT-UTR_XXXX_JANNE-HULSCHER.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janne-hulscher-960747193_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:13.565131+00:00", + "modified_at": "2026-01-09T19:50:55.064823+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janne-hulscher-960747193", @@ -140,7 +140,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.565127+00:00", + "inferred_at": "2026-01-09T19:50:55.064817+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_BJORN-SCHRIJEN.json b/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_BJORN-SCHRIJEN.json index 733d5be47a..f1e006de6e 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_BJORN-SCHRIJEN.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_BJORN-SCHRIJEN.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bjornschrijen_20251214T113259Z.json" ], - "modified_at": "2026-01-09T19:18:12.963604+00:00", + "modified_at": "2026-01-09T19:50:49.607491+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bjornschrijen", @@ -187,7 +187,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.963600+00:00", + "inferred_at": "2026-01-09T19:50:49.607438+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_EVELIEN-DIJK.json b/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_EVELIEN-DIJK.json index cfb488dc1d..59a02ad1d2 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_EVELIEN-DIJK.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_EVELIEN-DIJK.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/evelienvdijk_20251214T112600Z.json" ], - "modified_at": "2026-01-09T19:18:17.967647+00:00", + "modified_at": "2026-01-09T19:51:28.869650+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "evelienvdijk", @@ -149,7 +149,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.967572+00:00", + "inferred_at": "2026-01-09T19:51:28.869645+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_HJA-SIEPEL.json b/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_HJA-SIEPEL.json index 5eb0ce8fb1..fd92c99ebc 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_HJA-SIEPEL.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_HJA-SIEPEL.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/h-j-a-rik-siepel-a35572180_20251214T103051Z.json" ], - "modified_at": "2026-01-09T19:18:15.443405+00:00", + "modified_at": "2026-01-09T19:51:10.864112+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "h-j-a-rik-siepel-a35572180", @@ -178,7 +178,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.443401+00:00", + "inferred_at": "2026-01-09T19:51:10.864107+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_JEROEN-ROMEIJN.json b/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_JEROEN-ROMEIJN.json index a43193b06c..f8f46131fc 100644 --- a/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_JEROEN-ROMEIJN.json +++ b/data/person/ID_NL-GE-NIJ_199X_NL-ZH-TH_XXXX_JEROEN-ROMEIJN.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeroen-romeijn-3817b37a_20251214T103232Z.json" ], - "modified_at": "2026-01-09T19:18:12.860079+00:00", + "modified_at": "2026-01-09T19:50:49.079242+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeroen-romeijn-3817b37a", @@ -210,7 +210,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.860073+00:00", + "inferred_at": "2026-01-09T19:50:49.079235+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_CASPER-SOETEKOUW.json b/data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_CASPER-SOETEKOUW.json index 026af3a064..08e29f35ed 100644 --- a/data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_CASPER-SOETEKOUW.json +++ b/data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_CASPER-SOETEKOUW.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/casper-soetekouw-93059896_20251214T102847Z.json" ], - "modified_at": "2026-01-09T19:18:15.757033+00:00", + "modified_at": "2026-01-09T19:51:14.191808+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "casper-soetekouw-93059896", @@ -140,7 +140,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.753334+00:00", + "inferred_at": "2026-01-09T19:51:14.186853+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_JAN-MARKHORST.json b/data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_JAN-MARKHORST.json index e2a192db4c..ed1f53711f 100644 --- a/data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_JAN-MARKHORST.json +++ b/data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_JAN-MARKHORST.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janmarkhorst_20251214T112431Z.json" ], - "modified_at": "2026-01-09T19:18:13.455320+00:00", + "modified_at": "2026-01-09T19:51:04.808856+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janmarkhorst", @@ -174,7 +174,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.451500+00:00", + "inferred_at": "2026-01-09T19:51:04.788385+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_ROSANNE-RIETVELDTERPSTRA.json b/data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_ROSANNE-RIETVELDTERPSTRA.json index 7a58f79a76..62437be28f 100644 --- a/data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_ROSANNE-RIETVELDTERPSTRA.json +++ b/data/person/ID_NL-GE-NIJ_199X_XX-XX-XXX_XXXX_ROSANNE-RIETVELDTERPSTRA.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rosanne-rietveld-terpstra-74561574_20251214T113055Z.json" ], - "modified_at": "2026-01-09T19:18:15.215050+00:00", + "modified_at": "2026-01-09T19:51:07.018974+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rosanne-rietveld-terpstra-74561574", @@ -150,7 +150,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.215045+00:00", + "inferred_at": "2026-01-09T19:51:07.018966+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_200X_NL-GE-APE_XXXX_IRIS-NEIJHOF.json b/data/person/ID_NL-GE-NIJ_200X_NL-GE-APE_XXXX_IRIS-NEIJHOF.json index b4737ac4ca..7944804f25 100644 --- a/data/person/ID_NL-GE-NIJ_200X_NL-GE-APE_XXXX_IRIS-NEIJHOF.json +++ b/data/person/ID_NL-GE-NIJ_200X_NL-GE-APE_XXXX_IRIS-NEIJHOF.json @@ -97,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/iris-van-neijhof-3a2603259_20251214T103406Z.json" ], - "modified_at": "2026-01-09T19:18:17.411386+00:00", + "modified_at": "2026-01-09T19:51:28.000650+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "iris-van-neijhof-3a2603259", @@ -126,7 +126,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.411341+00:00", + "inferred_at": "2026-01-09T19:51:28.000642+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NIJ_200X_NL-NB-BOZ_XXXX_GABY-CRANINCKX.json b/data/person/ID_NL-GE-NIJ_200X_NL-NB-BOZ_XXXX_GABY-CRANINCKX.json index 601617cec2..94ce0100ee 100644 --- a/data/person/ID_NL-GE-NIJ_200X_NL-NB-BOZ_XXXX_GABY-CRANINCKX.json +++ b/data/person/ID_NL-GE-NIJ_200X_NL-NB-BOZ_XXXX_GABY-CRANINCKX.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gaby-craninckx-834831182_20251214T104035Z.json" ], - "modified_at": "2026-01-09T19:18:15.469307+00:00", + "modified_at": "2026-01-09T19:51:11.039346+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gaby-craninckx-834831182", @@ -154,7 +154,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.469304+00:00", + "inferred_at": "2026-01-09T19:51:11.039340+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-NUN_194X_NL-GE-APE_XXXX_HARM-MUIS.json b/data/person/ID_NL-GE-NUN_194X_NL-GE-APE_XXXX_HARM-MUIS.json index 580d942efe..a97bd717fc 100644 --- a/data/person/ID_NL-GE-NUN_194X_NL-GE-APE_XXXX_HARM-MUIS.json +++ b/data/person/ID_NL-GE-NUN_194X_NL-GE-APE_XXXX_HARM-MUIS.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harm-muis-057501260_20251214T110642Z.json" ], - "modified_at": "2026-01-09T19:18:15.479571+00:00", + "modified_at": "2026-01-09T19:51:11.058989+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harm-muis-057501260", @@ -145,7 +145,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.479568+00:00", + "inferred_at": "2026-01-09T19:51:11.058983+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-OPH_199X_NL-GE-OPH_XXXX_MARIEN-KLEIN.json b/data/person/ID_NL-GE-OPH_199X_NL-GE-OPH_XXXX_MARIEN-KLEIN.json index fef1158319..525d233d1f 100644 --- a/data/person/ID_NL-GE-OPH_199X_NL-GE-OPH_XXXX_MARIEN-KLEIN.json +++ b/data/person/ID_NL-GE-OPH_199X_NL-GE-OPH_XXXX_MARIEN-KLEIN.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marienklein_20251214T110343Z.json" ], - "modified_at": "2026-01-09T19:18:14.991414+00:00", + "modified_at": "2026-01-09T19:50:50.615197+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marienklein", @@ -176,7 +176,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.991409+00:00", + "inferred_at": "2026-01-09T19:50:50.615192+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-OTT_XXXX_BAS-MUHREN.json b/data/person/ID_NL-GE-OTT_197X_NL-GE-OTT_XXXX_BAS-MUHREN.json similarity index 64% rename from data/person/ID_XX-XX-XXX_XXXX_NL-GE-OTT_XXXX_BAS-MUHREN.json rename to data/person/ID_NL-GE-OTT_197X_NL-GE-OTT_XXXX_BAS-MUHREN.json index 9dfdb08a27..5e5f32e7f2 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-OTT_XXXX_BAS-MUHREN.json +++ b/data/person/ID_NL-GE-OTT_197X_NL-GE-OTT_XXXX_BAS-MUHREN.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-GE-OTT_XXXX_BAS-MUHREN", + "ppid": "ID_NL-GE-OTT_197X_NL-GE-OTT_XXXX_BAS-MUHREN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-GE-OTT", + "first_date": "197X", "last_location": "NL-GE-OTT", "last_date": "XXXX", "name_tokens": [ "BAS", "MUHREN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Bas Mühren", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -110,73 +116,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bas-m%C3%BChren-05b5099_20251214T115050Z.json" ], - "modified_at": "2026-01-09T18:58:13.355372+00:00", + "modified_at": "2026-01-09T19:51:04.049034+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bas-mühren-05b5099", - "inferred_current_settlement": { - "value": "Otterlo", - "formatted": "NL-GE-OTT", - "country_code": "NL", - "region_code": "GE", - "settlement_code": "OTT", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Arnhem-Nijmegen Metropolitan Area, Netherlands" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "Kröller-Müller Museum", - "title": "Medewerker Collectie en Onderzoek / Curator", - "location": "Otterlo, Netherlands" - } - }, - { - "step": 3, - "geocoding": "GeoNames resolution", - "query": "Otterlo, Netherlands", - "result": { - "geonames_id": 2749203, - "geonames_name": "Otterlo", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPL", - "latitude": 52.1, - "longitude": 5.77222 - } - }, - { - "step": 4, - "formatting": "CC-RR-PPP generation", - "result": "NL-GE-OTT" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2749203, - "geonames_name": "Otterlo", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPL", - "latitude": 52.1, - "longitude": 5.77222 - }, - "inferred_at": "2026-01-09T18:58:13.355362+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAS-MUHREN", @@ -186,6 +129,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-OTT_XXXX_BAS-MUHREN", + "new_ppid": "ID_NL-GE-OTT_197X_NL-GE-OTT_XXXX_BAS-MUHREN", + "changed_at": "2026-01-09T19:43:39.982871+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1977 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Kröller-Müller Museum", + "title": "Wetenschappelijk medewerker", + "date_range": "2000 - 2015" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2000 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2000 - 23 = 1977", + "result": "Estimated birth year: 1977", + "range": "1972-1982 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1972, + 1982 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:04.049029+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-GE-TIE_196X_NL-GE-TIE_XXXX_JOLANDA-HAAS.json b/data/person/ID_NL-GE-TIE_196X_NL-GE-TIE_XXXX_JOLANDA-HAAS.json index e857afa2d0..9fa2a24682 100644 --- a/data/person/ID_NL-GE-TIE_196X_NL-GE-TIE_XXXX_JOLANDA-HAAS.json +++ b/data/person/ID_NL-GE-TIE_196X_NL-GE-TIE_XXXX_JOLANDA-HAAS.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jolanda-de-haas-57595321_20251214T110345Z.json" ], - "modified_at": "2026-01-09T19:18:12.972890+00:00", + "modified_at": "2026-01-09T19:51:00.098902+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jolanda-de-haas-57595321", @@ -185,7 +185,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.972883+00:00", + "inferred_at": "2026-01-09T19:51:00.098896+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-TIE_199X_NL-GE-TIE_XXXX_JELLE-SOELEN.json b/data/person/ID_NL-GE-TIE_199X_NL-GE-TIE_XXXX_JELLE-SOELEN.json index afddef09c9..432d6af12a 100644 --- a/data/person/ID_NL-GE-TIE_199X_NL-GE-TIE_XXXX_JELLE-SOELEN.json +++ b/data/person/ID_NL-GE-TIE_199X_NL-GE-TIE_XXXX_JELLE-SOELEN.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jelle-van-soelen-b1391669_20251214T110335Z.json" ], - "modified_at": "2026-01-09T19:18:14.714199+00:00", + "modified_at": "2026-01-09T19:50:53.693299+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jelle-van-soelen-b1391669", @@ -142,7 +142,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.714194+00:00", + "inferred_at": "2026-01-09T19:50:53.693295+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-TIE_199X_NL-GE-TIE_XXXX_MEREL-ELENBAAS.json b/data/person/ID_NL-GE-TIE_199X_NL-GE-TIE_XXXX_MEREL-ELENBAAS.json index 3ab7483db0..2d7ff3e68e 100644 --- a/data/person/ID_NL-GE-TIE_199X_NL-GE-TIE_XXXX_MEREL-ELENBAAS.json +++ b/data/person/ID_NL-GE-TIE_199X_NL-GE-TIE_XXXX_MEREL-ELENBAAS.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merel-elenbaas-331728a2_20251214T110344Z.json" ], - "modified_at": "2026-01-09T19:18:13.654755+00:00", + "modified_at": "2026-01-09T19:50:55.390734+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merel-elenbaas-331728a2", @@ -174,7 +174,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.654751+00:00", + "inferred_at": "2026-01-09T19:50:55.390727+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_196X_NL-FL-AS_XXXX_ALEXANDER-COENEN.json b/data/person/ID_NL-GE-WAG_196X_NL-FL-AS_XXXX_ALEXANDER-COENEN.json index 0ba485c7c0..183c5a36d8 100644 --- a/data/person/ID_NL-GE-WAG_196X_NL-FL-AS_XXXX_ALEXANDER-COENEN.json +++ b/data/person/ID_NL-GE-WAG_196X_NL-FL-AS_XXXX_ALEXANDER-COENEN.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alexander-coenen-80826312a_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:15.597240+00:00", + "modified_at": "2026-01-09T19:51:12.692693+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alexander-coenen-80826312a", @@ -186,7 +186,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -235,7 +235,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.597235+00:00", + "inferred_at": "2026-01-09T19:51:12.692686+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_196X_NL-NB-VEL_XXXX_ERROL-ZALMIJN.json b/data/person/ID_NL-GE-WAG_196X_NL-NB-VEL_XXXX_ERROL-ZALMIJN.json index 7248356885..4ffdaf1a61 100644 --- a/data/person/ID_NL-GE-WAG_196X_NL-NB-VEL_XXXX_ERROL-ZALMIJN.json +++ b/data/person/ID_NL-GE-WAG_196X_NL-NB-VEL_XXXX_ERROL-ZALMIJN.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/errol-zalmijn-0252528_20251214T110805Z.json" ], - "modified_at": "2026-01-09T19:18:15.586360+00:00", + "modified_at": "2026-01-09T19:51:12.222454+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "errol-zalmijn-0252528", @@ -160,7 +160,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.586356+00:00", + "inferred_at": "2026-01-09T19:51:12.222445+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_196X_NL-NH-HAA_XXXX_AMITO-HAARHUIS.json b/data/person/ID_NL-GE-WAG_196X_NL-NH-HAA_XXXX_AMITO-HAARHUIS.json index 1ee45738f7..901b45e915 100644 --- a/data/person/ID_NL-GE-WAG_196X_NL-NH-HAA_XXXX_AMITO-HAARHUIS.json +++ b/data/person/ID_NL-GE-WAG_196X_NL-NH-HAA_XXXX_AMITO-HAARHUIS.json @@ -29,9 +29,9 @@ "source": "linkedin_profile" }, "birth_date": { - "edtf": "XXXX", - "precision": "unknown", - "note": "See inferred_birth_decade for heuristic estimate" + "edtf": "1967", + "precision": "year", + "note": "Verified from monumentaal.com article dated 2025-01-08" }, "is_living": true, "heritage_relevance": { @@ -184,7 +184,23 @@ "languages": [], "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" }, - "web_claims": [], + "web_claims": [ + { + "claim_type": "birth_date", + "claim_value": "1967", + "claim_value_raw": "Haarhuis (1967)", + "source_url": "https://www.monumentaal.com/haarhuis-directeur-openluchtmuseum/", + "retrieved_on": "2025-01-10T01:00:00Z", + "retrieval_agent": "exa_web_search_exa", + "confidence": "high", + "provenance": { + "statement_created_at": "2025-01-10T01:05:00Z", + "source_archived_at": "2025-01-10T01:00:00Z", + "retrieval_method": "exa_web_search_exa", + "search_query": "\"Amito Haarhuis\" director \"Nederlands Openluchtmuseum\" born birthday biography" + } + } + ], "source_observations": [ { "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/amito-haarhuis-a932988_20251214T110527Z.json", @@ -194,8 +210,13 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T01:00:00Z", + "search_queries": [ + "\"Amito Haarhuis\" director \"Nederlands Openluchtmuseum\" born birthday biography" + ], + "result": "found", + "notes": "Birth year found in MONUMENTAAL magazine article about appointment as director of Nederlands Openluchtmuseum" } }, "provenance": { @@ -204,7 +225,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amito-haarhuis-a932988_20251214T110527Z.json" ], - "modified_at": "2026-01-09T19:18:14.365269+00:00", + "modified_at": "2026-01-09T19:51:01.708829+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "amito-haarhuis-a932988", @@ -227,7 +248,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -268,7 +289,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.365265+00:00", + "inferred_at": "2026-01-09T19:51:01.708824+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_197X_NL-GE-ARN_XXXX_ANNA-HAANSTRA.json b/data/person/ID_NL-GE-WAG_197X_NL-GE-ARN_XXXX_ANNA-HAANSTRA.json index e72ef5920a..31924d8f7b 100644 --- a/data/person/ID_NL-GE-WAG_197X_NL-GE-ARN_XXXX_ANNA-HAANSTRA.json +++ b/data/person/ID_NL-GE-WAG_197X_NL-GE-ARN_XXXX_ANNA-HAANSTRA.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-haanstra-ba9a1b62_20251214T110608Z.json" ], - "modified_at": "2026-01-09T19:18:14.699317+00:00", + "modified_at": "2026-01-09T19:51:03.373590+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anna-haanstra-ba9a1b62", @@ -124,7 +124,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.699314+00:00", + "inferred_at": "2026-01-09T19:51:03.373585+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_197X_NL-GE-ARN_XXXX_WIETEKE-KAMPS.json b/data/person/ID_NL-GE-WAG_197X_NL-GE-ARN_XXXX_WIETEKE-KAMPS.json index b4882ef4fb..5c8b11aecf 100644 --- a/data/person/ID_NL-GE-WAG_197X_NL-GE-ARN_XXXX_WIETEKE-KAMPS.json +++ b/data/person/ID_NL-GE-WAG_197X_NL-GE-ARN_XXXX_WIETEKE-KAMPS.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wieteke-kamps-40554020_20251214T113101Z.json" ], - "modified_at": "2026-01-09T19:18:17.533664+00:00", + "modified_at": "2026-01-09T19:50:58.603331+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wieteke-kamps-40554020", @@ -177,7 +177,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +218,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.533656+00:00", + "inferred_at": "2026-01-09T19:50:58.603324+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_197X_NL-GE-WAG_XXXX_FENNY-EGMOND.json b/data/person/ID_NL-GE-WAG_197X_NL-GE-WAG_XXXX_FENNY-EGMOND.json index 6f3d4b5d6e..618764727d 100644 --- a/data/person/ID_NL-GE-WAG_197X_NL-GE-WAG_XXXX_FENNY-EGMOND.json +++ b/data/person/ID_NL-GE-WAG_197X_NL-GE-WAG_XXXX_FENNY-EGMOND.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fenny-van-egmond-66000b6_20251214T104205Z.json" ], - "modified_at": "2026-01-09T19:18:15.659616+00:00", + "modified_at": "2026-01-09T19:51:13.291572+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fenny-van-egmond-66000b6", @@ -161,7 +161,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.659612+00:00", + "inferred_at": "2026-01-09T19:51:13.291565+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_197X_NL-GE-WAG_XXXX_LEO-LAHTI.json b/data/person/ID_NL-GE-WAG_197X_NL-GE-WAG_XXXX_LEO-LAHTI.json index bf83976951..122a585fc8 100644 --- a/data/person/ID_NL-GE-WAG_197X_NL-GE-WAG_XXXX_LEO-LAHTI.json +++ b/data/person/ID_NL-GE-WAG_197X_NL-GE-WAG_XXXX_LEO-LAHTI.json @@ -223,8 +223,10 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T00:28:00Z", + "result": "not_found", + "notes": "Exa search found detailed academic profile but no birth date. Search query: \"Leo Lahti\" Turku professor born birthday biography" } }, "provenance": { @@ -233,7 +235,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/leo-lahti-b942ba3_20251214T104211Z.json" ], - "modified_at": "2026-01-09T19:18:17.359974+00:00", + "modified_at": "2026-01-09T19:50:53.862590+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "leo-lahti-b942ba3", @@ -265,7 +267,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -306,7 +308,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.359967+00:00", + "inferred_at": "2026-01-09T19:50:53.862585+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_197X_NL-OV-DEV_XXXX_RUDY-JONKER.json b/data/person/ID_NL-GE-WAG_197X_NL-OV-DEV_XXXX_RUDY-JONKER.json index 6711556942..9d478f573e 100644 --- a/data/person/ID_NL-GE-WAG_197X_NL-OV-DEV_XXXX_RUDY-JONKER.json +++ b/data/person/ID_NL-GE-WAG_197X_NL-OV-DEV_XXXX_RUDY-JONKER.json @@ -409,7 +409,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rudy-jonker-b4963b5_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:13.042933+00:00", + "modified_at": "2026-01-09T19:50:59.811161+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rudy-jonker-b4963b5", @@ -455,7 +455,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -504,7 +504,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.042926+00:00", + "inferred_at": "2026-01-09T19:50:59.811156+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_197X_XX-XX-XXX_XXXX_ARNOUT-SCHUUR.json b/data/person/ID_NL-GE-WAG_197X_XX-XX-XXX_XXXX_ARNOUT-SCHUUR.json index a19463b6a2..6112aba7d8 100644 --- a/data/person/ID_NL-GE-WAG_197X_XX-XX-XXX_XXXX_ARNOUT-SCHUUR.json +++ b/data/person/ID_NL-GE-WAG_197X_XX-XX-XXX_XXXX_ARNOUT-SCHUUR.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/agterschuur_20251214T110351Z.json" ], - "modified_at": "2026-01-09T19:18:15.271900+00:00", + "modified_at": "2026-01-09T19:50:53.998267+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "agterschuur", @@ -184,7 +184,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.270082+00:00", + "inferred_at": "2026-01-09T19:50:53.996193+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_197X_XX-XX-XXX_XXXX_MARIJN-N.json b/data/person/ID_NL-GE-WAG_197X_XX-XX-XXX_XXXX_MARIJN-N.json index e4ab0c6e4c..fa24b23f01 100644 --- a/data/person/ID_NL-GE-WAG_197X_XX-XX-XXX_XXXX_MARIJN-N.json +++ b/data/person/ID_NL-GE-WAG_197X_XX-XX-XXX_XXXX_MARIJN-N.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marijn-n-2761b54_20251214T103056Z.json" ], - "modified_at": "2026-01-09T19:18:16.823709+00:00", + "modified_at": "2026-01-09T19:51:22.062744+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marijn-n-2761b54", @@ -174,7 +174,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.821841+00:00", + "inferred_at": "2026-01-09T19:51:22.060780+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_198X_NL-ZH-DEL_XXXX_HALFORD-DACE.json b/data/person/ID_NL-GE-WAG_198X_NL-ZH-DEL_XXXX_HALFORD-DACE.json index e6bcd31e4e..62ba7463d8 100644 --- a/data/person/ID_NL-GE-WAG_198X_NL-ZH-DEL_XXXX_HALFORD-DACE.json +++ b/data/person/ID_NL-GE-WAG_198X_NL-ZH-DEL_XXXX_HALFORD-DACE.json @@ -194,7 +194,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/halford-dace-a400425_20251214T104109Z.json" ], - "modified_at": "2026-01-09T19:18:13.870954+00:00", + "modified_at": "2026-01-09T19:50:47.417942+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "halford-dace-a400425", @@ -232,7 +232,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -281,7 +281,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.870946+00:00", + "inferred_at": "2026-01-09T19:50:47.417894+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_198X_NL-ZH-TH_XXXX_NASIM-HAMIDIAN.json b/data/person/ID_NL-GE-WAG_198X_NL-ZH-TH_XXXX_NASIM-HAMIDIAN.json index cc4f5c8806..b16348300b 100644 --- a/data/person/ID_NL-GE-WAG_198X_NL-ZH-TH_XXXX_NASIM-HAMIDIAN.json +++ b/data/person/ID_NL-GE-WAG_198X_NL-ZH-TH_XXXX_NASIM-HAMIDIAN.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nasimhamidian_20251214T113335Z.json" ], - "modified_at": "2026-01-09T19:18:14.345519+00:00", + "modified_at": "2026-01-09T19:50:51.737188+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nasimhamidian", @@ -150,7 +150,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.345513+00:00", + "inferred_at": "2026-01-09T19:50:51.737183+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_198X_NL-ZH-TH_XXXX_RUTGER-POL.json b/data/person/ID_NL-GE-WAG_198X_NL-ZH-TH_XXXX_RUTGER-POL.json index 3904629915..1f01a7d317 100644 --- a/data/person/ID_NL-GE-WAG_198X_NL-ZH-TH_XXXX_RUTGER-POL.json +++ b/data/person/ID_NL-GE-WAG_198X_NL-ZH-TH_XXXX_RUTGER-POL.json @@ -188,7 +188,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rutger-pol-6483118_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:17.046899+00:00", + "modified_at": "2026-01-09T19:50:49.064597+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rutger-pol-6483118", @@ -226,7 +226,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -275,7 +275,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.046892+00:00", + "inferred_at": "2026-01-09T19:50:49.064589+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_198X_NL-ZH-TH_XXXX_SILVANA-SUMMA.json b/data/person/ID_NL-GE-WAG_198X_NL-ZH-TH_XXXX_SILVANA-SUMMA.json index d7033cea2c..dc08727f1f 100644 --- a/data/person/ID_NL-GE-WAG_198X_NL-ZH-TH_XXXX_SILVANA-SUMMA.json +++ b/data/person/ID_NL-GE-WAG_198X_NL-ZH-TH_XXXX_SILVANA-SUMMA.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/silvanasumma_20251214T104207Z.json" ], - "modified_at": "2026-01-09T19:18:17.320039+00:00", + "modified_at": "2026-01-09T19:51:13.292530+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "silvanasumma", @@ -174,7 +174,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.320031+00:00", + "inferred_at": "2026-01-09T19:51:13.292524+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_199X_NL-GE-ARN_XXXX_JURGEN-UFFINK.json b/data/person/ID_NL-GE-WAG_199X_NL-GE-ARN_XXXX_JURGEN-UFFINK.json index 4137b720e2..896c297be8 100644 --- a/data/person/ID_NL-GE-WAG_199X_NL-GE-ARN_XXXX_JURGEN-UFFINK.json +++ b/data/person/ID_NL-GE-WAG_199X_NL-GE-ARN_XXXX_JURGEN-UFFINK.json @@ -192,7 +192,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jurgen-uffink-248115ab_20251214T110629Z.json" ], - "modified_at": "2026-01-09T19:18:14.367587+00:00", + "modified_at": "2026-01-09T19:51:01.711768+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jurgen-uffink-248115ab", @@ -221,7 +221,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -270,7 +270,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.367582+00:00", + "inferred_at": "2026-01-09T19:51:01.711761+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_199X_NL-GE-WAG_XXXX_CHANTAL-WIECKARDT.json b/data/person/ID_NL-GE-WAG_199X_NL-GE-WAG_XXXX_CHANTAL-WIECKARDT.json index 3391a1e21a..0eb2306cde 100644 --- a/data/person/ID_NL-GE-WAG_199X_NL-GE-WAG_XXXX_CHANTAL-WIECKARDT.json +++ b/data/person/ID_NL-GE-WAG_199X_NL-GE-WAG_XXXX_CHANTAL-WIECKARDT.json @@ -223,7 +223,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chantal-wieckardt_20251214T103208Z.json" ], - "modified_at": "2026-01-09T19:18:15.780490+00:00", + "modified_at": "2026-01-09T19:51:14.425004+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "chantal-wieckardt", @@ -246,7 +246,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -287,7 +287,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.780486+00:00", + "inferred_at": "2026-01-09T19:51:14.424999+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_199X_NL-GE-WAG_XXXX_JELLE-MSC.json b/data/person/ID_NL-GE-WAG_199X_NL-GE-WAG_XXXX_JELLE-MSC.json index d8bab83481..d56e8fbae1 100644 --- a/data/person/ID_NL-GE-WAG_199X_NL-GE-WAG_XXXX_JELLE-MSC.json +++ b/data/person/ID_NL-GE-WAG_199X_NL-GE-WAG_XXXX_JELLE-MSC.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janssen-jelle_20251214T104212Z.json" ], - "modified_at": "2026-01-09T19:18:17.426364+00:00", + "modified_at": "2026-01-09T19:51:28.005550+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janssen-jelle", @@ -135,7 +135,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.426354+00:00", + "inferred_at": "2026-01-09T19:51:28.005544+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_199X_NL-NH-AMS_XXXX_ANNA-KNOL.json b/data/person/ID_NL-GE-WAG_199X_NL-NH-AMS_XXXX_ANNA-KNOL.json index 5d297f4e8a..adaaf84997 100644 --- a/data/person/ID_NL-GE-WAG_199X_NL-NH-AMS_XXXX_ANNA-KNOL.json +++ b/data/person/ID_NL-GE-WAG_199X_NL-NH-AMS_XXXX_ANNA-KNOL.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-knol-852219251_20251214T110156Z.json" ], - "modified_at": "2026-01-09T19:18:13.918909+00:00", + "modified_at": "2026-01-09T19:50:56.841446+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anna-knol-852219251", @@ -187,7 +187,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.918904+00:00", + "inferred_at": "2026-01-09T19:50:56.841438+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_199X_NL-UT-NIE_XXXX_JUDITH-KIKKERT.json b/data/person/ID_NL-GE-WAG_199X_NL-UT-NIE_XXXX_JUDITH-KIKKERT.json index 2bdaeac7d5..5285627da0 100644 --- a/data/person/ID_NL-GE-WAG_199X_NL-UT-NIE_XXXX_JUDITH-KIKKERT.json +++ b/data/person/ID_NL-GE-WAG_199X_NL-UT-NIE_XXXX_JUDITH-KIKKERT.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/judith-kikkert-6aab451bb_20251214T102906Z.json" ], - "modified_at": "2026-01-09T19:18:16.034780+00:00", + "modified_at": "2026-01-09T19:50:59.808126+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "judith-kikkert-6aab451bb", @@ -169,7 +169,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +218,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.034773+00:00", + "inferred_at": "2026-01-09T19:50:59.808120+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_199X_NL-UT-UTR_XXXX_KIM-FERGUSON.json b/data/person/ID_NL-GE-WAG_199X_NL-UT-UTR_XXXX_KIM-FERGUSON.json index 8965b92591..73df92ef53 100644 --- a/data/person/ID_NL-GE-WAG_199X_NL-UT-UTR_XXXX_KIM-FERGUSON.json +++ b/data/person/ID_NL-GE-WAG_199X_NL-UT-UTR_XXXX_KIM-FERGUSON.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kbfergus_20251214T110508Z.json" ], - "modified_at": "2026-01-09T19:18:13.205658+00:00", + "modified_at": "2026-01-09T19:50:53.284988+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kbfergus", @@ -180,7 +180,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.205655+00:00", + "inferred_at": "2026-01-09T19:50:53.284983+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_199X_NL-UT-VEE_XXXX_EDDIE-K.json b/data/person/ID_NL-GE-WAG_199X_NL-UT-VEE_XXXX_EDDIE-K.json index b596cfbafd..a336f9d1eb 100644 --- a/data/person/ID_NL-GE-WAG_199X_NL-UT-VEE_XXXX_EDDIE-K.json +++ b/data/person/ID_NL-GE-WAG_199X_NL-UT-VEE_XXXX_EDDIE-K.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eddie-krooneman_20251214T102749Z.json" ], - "modified_at": "2026-01-09T19:18:14.984760+00:00", + "modified_at": "2026-01-09T19:51:06.350745+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eddie-krooneman", @@ -183,7 +183,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.984755+00:00", + "inferred_at": "2026-01-09T19:51:06.350740+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_199X_NL-UT-VEE_XXXX_MARK-JONG.json b/data/person/ID_NL-GE-WAG_199X_NL-UT-VEE_XXXX_MARK-JONG.json index ec8121f030..ef54edf4ce 100644 --- a/data/person/ID_NL-GE-WAG_199X_NL-UT-VEE_XXXX_MARK-JONG.json +++ b/data/person/ID_NL-GE-WAG_199X_NL-UT-VEE_XXXX_MARK-JONG.json @@ -150,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mark-de-jong-942663222_20251214T104019Z.json" ], - "modified_at": "2026-01-09T19:18:14.261823+00:00", + "modified_at": "2026-01-09T19:50:59.326593+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mark-de-jong-942663222", @@ -174,7 +174,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.261819+00:00", + "inferred_at": "2026-01-09T19:50:59.326585+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_199X_NL-ZH-TH_XXXX_JOPY-WILLEMS.json b/data/person/ID_NL-GE-WAG_199X_NL-ZH-TH_XXXX_JOPY-WILLEMS.json index 90d3484c69..2a75194709 100644 --- a/data/person/ID_NL-GE-WAG_199X_NL-ZH-TH_XXXX_JOPY-WILLEMS.json +++ b/data/person/ID_NL-GE-WAG_199X_NL-ZH-TH_XXXX_JOPY-WILLEMS.json @@ -186,7 +186,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jopywillems_20251214T103124Z.json" ], - "modified_at": "2026-01-09T19:18:15.076585+00:00", + "modified_at": "2026-01-09T19:51:06.683695+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jopywillems", @@ -215,7 +215,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -264,7 +264,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.076580+00:00", + "inferred_at": "2026-01-09T19:51:06.683689+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_199X_XX-XX-XXX_XXXX_SITA-DJELANTIK.json b/data/person/ID_NL-GE-WAG_199X_XX-XX-XXX_XXXX_SITA-DJELANTIK.json index 35d0757a74..934d7e62c7 100644 --- a/data/person/ID_NL-GE-WAG_199X_XX-XX-XXX_XXXX_SITA-DJELANTIK.json +++ b/data/person/ID_NL-GE-WAG_199X_XX-XX-XXX_XXXX_SITA-DJELANTIK.json @@ -185,7 +185,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sita-djelantik-435a3957_20251214T103117Z.json" ], - "modified_at": "2026-01-09T19:18:17.516408+00:00", + "modified_at": "2026-01-09T19:51:28.390446+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sita-djelantik-435a3957", @@ -213,7 +213,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.512299+00:00", + "inferred_at": "2026-01-09T19:51:28.386631+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-WAG_200X_NL-UT-UTR_XXXX_JURRE-HEES.json b/data/person/ID_NL-GE-WAG_200X_NL-UT-UTR_XXXX_JURRE-HEES.json index 27bf8c3e8f..f714e37526 100644 --- a/data/person/ID_NL-GE-WAG_200X_NL-UT-UTR_XXXX_JURRE-HEES.json +++ b/data/person/ID_NL-GE-WAG_200X_NL-UT-UTR_XXXX_JURRE-HEES.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jurre-van-hees-6422a1194_20251214T103323Z.json" ], - "modified_at": "2026-01-09T19:18:17.239104+00:00", + "modified_at": "2026-01-09T19:51:25.474962+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jurre-van-hees-6422a1194", @@ -178,7 +178,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.239090+00:00", + "inferred_at": "2026-01-09T19:51:25.474953+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GE-ZUT_199X_NL-GE-EDE_XXXX_PAULINE-V.json b/data/person/ID_NL-GE-ZUT_199X_NL-GE-EDE_XXXX_PAULINE-V.json index fb36c8a12f..4dedb4c6f0 100644 --- a/data/person/ID_NL-GE-ZUT_199X_NL-GE-EDE_XXXX_PAULINE-V.json +++ b/data/person/ID_NL-GE-ZUT_199X_NL-GE-EDE_XXXX_PAULINE-V.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pauline-v-413b2686_20251214T113059Z.json" ], - "modified_at": "2026-01-09T19:18:14.677357+00:00", + "modified_at": "2026-01-09T19:51:03.352787+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pauline-v-413b2686", @@ -176,7 +176,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.677353+00:00", + "inferred_at": "2026-01-09T19:51:03.352782+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_194X_NL-ZH-TH_XXXX_GERRIT-VISSER.json b/data/person/ID_NL-GR-GRO_194X_NL-ZH-TH_XXXX_GERRIT-VISSER.json index 5490e9ab83..930891b07d 100644 --- a/data/person/ID_NL-GR-GRO_194X_NL-ZH-TH_XXXX_GERRIT-VISSER.json +++ b/data/person/ID_NL-GR-GRO_194X_NL-ZH-TH_XXXX_GERRIT-VISSER.json @@ -237,7 +237,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerritvisser_20251214T102854Z.json" ], - "modified_at": "2026-01-09T19:18:18.006373+00:00", + "modified_at": "2026-01-09T19:51:16.876522+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerritvisser", @@ -275,7 +275,7 @@ "primary_rationale": "1948 is in 194X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -324,7 +324,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1948 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:18.006357+00:00", + "inferred_at": "2026-01-09T19:51:16.876517+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_195X_NL-GR-GRO_XXXX_CHRIS-STAM.json b/data/person/ID_NL-GR-GRO_195X_NL-GR-GRO_XXXX_CHRIS-STAM.json index 0327d010fb..c0a36d2d00 100644 --- a/data/person/ID_NL-GR-GRO_195X_NL-GR-GRO_XXXX_CHRIS-STAM.json +++ b/data/person/ID_NL-GR-GRO_195X_NL-GR-GRO_XXXX_CHRIS-STAM.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chrisstamduo_20251214T112135Z.json" ], - "modified_at": "2026-01-09T19:18:18.454860+00:00", + "modified_at": "2026-01-09T19:51:29.327762+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "chrisstamduo", @@ -159,7 +159,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:18.454613+00:00", + "inferred_at": "2026-01-09T19:51:29.327757+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_195X_NL-GR-GRO_XXXX_PETER-ELSINGA.json b/data/person/ID_NL-GR-GRO_195X_NL-GR-GRO_XXXX_PETER-ELSINGA.json index 9a68e7d4e2..9453bb395f 100644 --- a/data/person/ID_NL-GR-GRO_195X_NL-GR-GRO_XXXX_PETER-ELSINGA.json +++ b/data/person/ID_NL-GR-GRO_195X_NL-GR-GRO_XXXX_PETER-ELSINGA.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/peter-elsinga-31777380_20251214T112200Z.json" ], - "modified_at": "2026-01-09T19:18:15.147658+00:00", + "modified_at": "2026-01-09T19:51:06.759405+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "peter-elsinga-31777380", @@ -121,7 +121,7 @@ "primary_rationale": "1954 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1954 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:15.147652+00:00", + "inferred_at": "2026-01-09T19:51:06.759397+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_195X_NL-NH-AMS_XXXX_GIJS-HAM.json b/data/person/ID_NL-GR-GRO_195X_NL-NH-AMS_XXXX_GIJS-HAM.json index d7ce415eaf..dd40970012 100644 --- a/data/person/ID_NL-GR-GRO_195X_NL-NH-AMS_XXXX_GIJS-HAM.json +++ b/data/person/ID_NL-GR-GRO_195X_NL-NH-AMS_XXXX_GIJS-HAM.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gijsvanderham_20251214T111327Z.json" ], - "modified_at": "2026-01-09T19:18:13.063451+00:00", + "modified_at": "2026-01-09T19:51:18.485054+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gijsvanderham", @@ -208,7 +208,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -257,7 +257,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.063445+00:00", + "inferred_at": "2026-01-09T19:51:18.485049+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_195X_NL-NH-AMS_XXXX_TEIO-MEEDENDORP.json b/data/person/ID_NL-GR-GRO_195X_NL-NH-AMS_XXXX_TEIO-MEEDENDORP.json index e84353a86c..df37a1cd7f 100644 --- a/data/person/ID_NL-GR-GRO_195X_NL-NH-AMS_XXXX_TEIO-MEEDENDORP.json +++ b/data/person/ID_NL-GR-GRO_195X_NL-NH-AMS_XXXX_TEIO-MEEDENDORP.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/teio-meedendorp-2ab21519_20251214T110008Z.json" ], - "modified_at": "2026-01-09T19:18:11.471631+00:00", + "modified_at": "2026-01-09T19:51:04.561851+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "teio-meedendorp-2ab21519", @@ -131,7 +131,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:11.471623+00:00", + "inferred_at": "2026-01-09T19:51:04.561841+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-DR-HOO_XXXX_JOKE-TOP.json b/data/person/ID_NL-GR-GRO_196X_NL-DR-HOO_XXXX_JOKE-TOP.json index 0380d5611f..39c04e4e2d 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-DR-HOO_XXXX_JOKE-TOP.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-DR-HOO_XXXX_JOKE-TOP.json @@ -180,7 +180,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/topjoke_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:15.478396+00:00", + "modified_at": "2026-01-09T19:50:53.918754+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "topjoke", @@ -225,7 +225,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -274,7 +274,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.478391+00:00", + "inferred_at": "2026-01-09T19:50:53.918748+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_ANNALIES-TULP.json b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_ANNALIES-TULP.json index 499e177a50..faca4ad2e1 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_ANNALIES-TULP.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_ANNALIES-TULP.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annaliestulp_20251214T112320Z.json" ], - "modified_at": "2026-01-09T19:18:15.387997+00:00", + "modified_at": "2026-01-09T19:51:21.780449+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annaliestulp", @@ -207,7 +207,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -256,7 +256,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.387991+00:00", + "inferred_at": "2026-01-09T19:51:21.780442+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_GERT-HELDER.json b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_GERT-HELDER.json index 09abecced3..34b9a4e66b 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_GERT-HELDER.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_GERT-HELDER.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gert-jan-helder-2768a735_20251214T112137Z.json" ], - "modified_at": "2026-01-09T19:18:13.604070+00:00", + "modified_at": "2026-01-09T19:50:55.144603+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gert-jan-helder-2768a735", @@ -198,7 +198,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +247,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.604065+00:00", + "inferred_at": "2026-01-09T19:50:55.144597+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_HANS-KAMPHUIS.json b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_HANS-KAMPHUIS.json index 164fd55f36..d26e90795d 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_HANS-KAMPHUIS.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_HANS-KAMPHUIS.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hans-kamphuis-45514a58_20251214T112234Z.json" ], - "modified_at": "2026-01-09T19:18:16.211163+00:00", + "modified_at": "2026-01-09T19:51:34.143404+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hans-kamphuis-45514a58", @@ -143,7 +143,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.211156+00:00", + "inferred_at": "2026-01-09T19:51:34.143401+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_JAN-HOFSTEE.json b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_JAN-HOFSTEE.json index 0035dc9ab9..b8766c3684 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_JAN-HOFSTEE.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_JAN-HOFSTEE.json @@ -172,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-hofstee-38b9a516b_20251214T113158Z.json" ], - "modified_at": "2026-01-09T19:18:13.426832+00:00", + "modified_at": "2026-01-09T19:50:54.124321+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-hofstee-38b9a516b", @@ -201,7 +201,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -250,7 +250,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.426827+00:00", + "inferred_at": "2026-01-09T19:50:54.124311+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_JEANINE-BOER.json b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_JEANINE-BOER.json index 79e1fa139e..39b3863aa5 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_JEANINE-BOER.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_JEANINE-BOER.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeanine-de-boer-7b70525_20251214T113208Z.json" ], - "modified_at": "2026-01-09T19:18:17.210906+00:00", + "modified_at": "2026-01-09T19:51:14.176634+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeanine-de-boer-7b70525", @@ -161,7 +161,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.210896+00:00", + "inferred_at": "2026-01-09T19:51:14.176628+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_PAM-VOORT.json b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_PAM-VOORT.json index 54a213f4d4..b7087af044 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_PAM-VOORT.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_PAM-VOORT.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pam-van-de-voort-4a1ab551_20251214T112232Z.json" ], - "modified_at": "2026-01-09T19:18:16.221732+00:00", + "modified_at": "2026-01-09T19:51:18.318026+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pam-van-de-voort-4a1ab551", @@ -121,7 +121,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.221728+00:00", + "inferred_at": "2026-01-09T19:51:18.318021+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_PETER-BUURMAN.json b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_PETER-BUURMAN.json index 3f3f76eb7a..5fc0bb7fe2 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_PETER-BUURMAN.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_PETER-BUURMAN.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pbuurman_20251214T112221Z.json" ], - "modified_at": "2026-01-09T19:18:17.338977+00:00", + "modified_at": "2026-01-09T19:51:26.293041+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pbuurman", @@ -140,7 +140,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.338970+00:00", + "inferred_at": "2026-01-09T19:51:26.293034+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_STEPHANIE-BOOSMAN.json b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_STEPHANIE-BOOSMAN.json index ffcb3115e4..2ac471bb7a 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_STEPHANIE-BOOSMAN.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-GR-GRO_XXXX_STEPHANIE-BOOSMAN.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stephanie-boosman-b239462b_20251214T112216Z.json" ], - "modified_at": "2026-01-09T19:18:11.521482+00:00", + "modified_at": "2026-01-09T19:50:47.122602+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stephanie-boosman-b239462b", @@ -179,7 +179,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.521474+00:00", + "inferred_at": "2026-01-09T19:50:47.122578+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-GR-LET_XXXX_SIEMONA-HELLINGA.json b/data/person/ID_NL-GR-GRO_196X_NL-GR-LET_XXXX_SIEMONA-HELLINGA.json index 898e09a155..eafe32eb58 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-GR-LET_XXXX_SIEMONA-HELLINGA.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-GR-LET_XXXX_SIEMONA-HELLINGA.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/siemona-hellinga-1aab5b15_20251214T112117Z.json" ], - "modified_at": "2026-01-09T19:18:17.140423+00:00", + "modified_at": "2026-01-09T19:51:23.920936+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "siemona-hellinga-1aab5b15", @@ -181,7 +181,7 @@ "primary_rationale": "1960 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1960 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:17.140407+00:00", + "inferred_at": "2026-01-09T19:51:23.920932+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-GR-TRI_XXXX_HARRY-DRAGSTRA.json b/data/person/ID_NL-GR-GRO_196X_NL-GR-TRI_XXXX_HARRY-DRAGSTRA.json index 45b6dfa286..9829fa436f 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-GR-TRI_XXXX_HARRY-DRAGSTRA.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-GR-TRI_XXXX_HARRY-DRAGSTRA.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harry-dragstra-424889158_20251214T112159Z.json" ], - "modified_at": "2026-01-09T19:18:14.631247+00:00", + "modified_at": "2026-01-09T19:51:03.193583+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harry-dragstra-424889158", @@ -130,7 +130,7 @@ "primary_rationale": "1963 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1963 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:14.631241+00:00", + "inferred_at": "2026-01-09T19:51:03.193572+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-NH-AMS_XXXX_LIJSBETH-HOLVAST.json b/data/person/ID_NL-GR-GRO_196X_NL-NH-AMS_XXXX_LIJSBETH-HOLVAST.json index 2fb5757058..dfd3c8b842 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-NH-AMS_XXXX_LIJSBETH-HOLVAST.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-NH-AMS_XXXX_LIJSBETH-HOLVAST.json @@ -133,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lijsbeth-holvast-a0484399_20251214T112808Z.json" ], - "modified_at": "2026-01-09T19:18:14.783765+00:00", + "modified_at": "2026-01-09T19:51:29.173560+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lijsbeth-holvast-a0484399", @@ -171,7 +171,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.783757+00:00", + "inferred_at": "2026-01-09T19:51:29.173552+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-NH-HAA_XXXX_NICOLE-BROEK.json b/data/person/ID_NL-GR-GRO_196X_NL-NH-HAA_XXXX_NICOLE-BROEK.json index 6ffb6d95fe..4960fd56ae 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-NH-HAA_XXXX_NICOLE-BROEK.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-NH-HAA_XXXX_NICOLE-BROEK.json @@ -239,7 +239,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicole-broek-14646b1b0_20251214T102659Z.json" ], - "modified_at": "2026-01-09T19:18:15.517380+00:00", + "modified_at": "2026-01-09T19:51:22.928268+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicole-broek-14646b1b0", @@ -271,7 +271,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -312,7 +312,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.517374+00:00", + "inferred_at": "2026-01-09T19:51:22.928263+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-OV-ZWO_XXXX_ROY-RAPPA.json b/data/person/ID_NL-GR-GRO_196X_NL-OV-ZWO_XXXX_ROY-RAPPA.json index c30ca5b187..fe641e508b 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-OV-ZWO_XXXX_ROY-RAPPA.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-OV-ZWO_XXXX_ROY-RAPPA.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roy-rappa-44189b29_20251214T112241Z.json" ], - "modified_at": "2026-01-09T19:18:13.130501+00:00", + "modified_at": "2026-01-09T19:50:51.775968+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "roy-rappa-44189b29", @@ -143,7 +143,7 @@ "primary_rationale": "1961 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1961 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.130498+00:00", + "inferred_at": "2026-01-09T19:50:51.775963+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-UT-UTR_XXXX_ANNET-NIENHUIS.json b/data/person/ID_NL-GR-GRO_196X_NL-UT-UTR_XXXX_ANNET-NIENHUIS.json index ff9ca9de60..b22b1fbbf6 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-UT-UTR_XXXX_ANNET-NIENHUIS.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-UT-UTR_XXXX_ANNET-NIENHUIS.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annet-nienhuis-299a5039_20251212T181500Z.json" ], - "modified_at": "2026-01-09T19:18:15.491895+00:00", + "modified_at": "2026-01-09T19:50:47.228454+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annet-nienhuis-299a5039", @@ -175,7 +175,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.491890+00:00", + "inferred_at": "2026-01-09T19:50:47.228445+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-ZH-TH_XXXX_ELLEN-STEENDAM.json b/data/person/ID_NL-GR-GRO_196X_NL-ZH-TH_XXXX_ELLEN-STEENDAM.json index 2300563f08..0994cf1e6e 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-ZH-TH_XXXX_ELLEN-STEENDAM.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-ZH-TH_XXXX_ELLEN-STEENDAM.json @@ -140,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ellen-steendam-67922b10_20251214T112348Z.json" ], - "modified_at": "2026-01-09T19:18:15.381626+00:00", + "modified_at": "2026-01-09T19:51:22.023123+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ellen-steendam-67922b10", @@ -172,7 +172,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.381621+00:00", + "inferred_at": "2026-01-09T19:51:22.023118+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_NL-ZH-TH_XXXX_FREEK-KEPPELS.json b/data/person/ID_NL-GR-GRO_196X_NL-ZH-TH_XXXX_FREEK-KEPPELS.json index d23cba904d..8be09923b4 100644 --- a/data/person/ID_NL-GR-GRO_196X_NL-ZH-TH_XXXX_FREEK-KEPPELS.json +++ b/data/person/ID_NL-GR-GRO_196X_NL-ZH-TH_XXXX_FREEK-KEPPELS.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/freekkeppels_20251214T103235Z.json" ], - "modified_at": "2026-01-09T19:18:13.682650+00:00", + "modified_at": "2026-01-09T19:50:55.428993+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "freekkeppels", @@ -161,7 +161,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.682646+00:00", + "inferred_at": "2026-01-09T19:50:55.428846+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_CARLA-HARTMAN.json b/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_CARLA-HARTMAN.json index bdb6ed31c0..f3ce57a664 100644 --- a/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_CARLA-HARTMAN.json +++ b/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_CARLA-HARTMAN.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carla-hartman-a2a9b05_20251214T112122Z.json" ], - "modified_at": "2026-01-09T19:18:12.669741+00:00", + "modified_at": "2026-01-09T19:50:58.081902+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carla-hartman-a2a9b05", @@ -153,7 +153,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.667293+00:00", + "inferred_at": "2026-01-09T19:50:58.070593+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_CENTINA-D.json b/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_CENTINA-D.json index 18b0270279..e4a4b365f3 100644 --- a/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_CENTINA-D.json +++ b/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_CENTINA-D.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/centina-d-b39a6620_20251214T112249Z.json" ], - "modified_at": "2026-01-09T19:18:13.996183+00:00", + "modified_at": "2026-01-09T19:50:57.993195+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "centina-d-b39a6620", @@ -158,7 +158,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.994368+00:00", + "inferred_at": "2026-01-09T19:50:57.990517+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_ENRICO-BEEKMANS.json b/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_ENRICO-BEEKMANS.json index 1f15309acb..a20270c2f8 100644 --- a/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_ENRICO-BEEKMANS.json +++ b/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_ENRICO-BEEKMANS.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/enrico-beekmans-48336967_20251214T112314Z.json" ], - "modified_at": "2026-01-09T19:18:17.876422+00:00", + "modified_at": "2026-01-09T19:51:22.555857+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "enrico-beekmans-48336967", @@ -165,7 +165,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.874512+00:00", + "inferred_at": "2026-01-09T19:51:22.553961+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_JAN-RINZEMA.json b/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_JAN-RINZEMA.json index da018e1784..b7d01543cf 100644 --- a/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_JAN-RINZEMA.json +++ b/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_JAN-RINZEMA.json @@ -178,7 +178,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-rinzema-3853239_20251214T103323Z.json" ], - "modified_at": "2026-01-09T19:18:13.778452+00:00", + "modified_at": "2026-01-09T19:50:56.484006+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-rinzema-3853239", @@ -200,7 +200,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.776596+00:00", + "inferred_at": "2026-01-09T19:50:56.482027+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_LOUWINA-BOOMSMA.json b/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_LOUWINA-BOOMSMA.json index b425a3604c..609be3ef18 100644 --- a/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_LOUWINA-BOOMSMA.json +++ b/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_LOUWINA-BOOMSMA.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/louwina-boomsma-07b89449_20251212T181500Z.json" ], - "modified_at": "2026-01-09T19:18:13.293871+00:00", + "modified_at": "2026-01-09T19:50:47.051079+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "louwina-boomsma-07b89449", @@ -172,7 +172,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.292007+00:00", + "inferred_at": "2026-01-09T19:50:47.043717+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_THEO-WITTE.json b/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_THEO-WITTE.json index c592b99a0c..9daec4744e 100644 --- a/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_THEO-WITTE.json +++ b/data/person/ID_NL-GR-GRO_196X_XX-XX-XXX_XXXX_THEO-WITTE.json @@ -172,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/theowitte_20251214T113429Z.json" ], - "modified_at": "2026-01-09T19:18:15.381187+00:00", + "modified_at": "2026-01-09T19:51:08.632427+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "theowitte", @@ -200,7 +200,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -249,7 +249,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.379267+00:00", + "inferred_at": "2026-01-09T19:51:08.629257+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-GE-APE_XXXX_MATTHIJS-TERPSTRA.json b/data/person/ID_NL-GR-GRO_197X_NL-GE-APE_XXXX_MATTHIJS-TERPSTRA.json index 460deb8c23..ba5c77dc67 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-GE-APE_XXXX_MATTHIJS-TERPSTRA.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-GE-APE_XXXX_MATTHIJS-TERPSTRA.json @@ -157,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/matthijsterpstra_20251214T103419Z.json" ], - "modified_at": "2026-01-09T19:18:17.289079+00:00", + "modified_at": "2026-01-09T19:51:25.488847+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "matthijsterpstra", @@ -180,7 +180,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.289074+00:00", + "inferred_at": "2026-01-09T19:51:25.488843+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-GE-APE_XXXX_OTTO-BERG.json b/data/person/ID_NL-GR-GRO_197X_NL-GE-APE_XXXX_OTTO-BERG.json index 1db7f449f0..69a4233048 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-GE-APE_XXXX_OTTO-BERG.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-GE-APE_XXXX_OTTO-BERG.json @@ -227,7 +227,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/otto-berg-30686410_20251214T112522Z.json" ], - "modified_at": "2026-01-09T19:18:16.067288+00:00", + "modified_at": "2026-01-09T19:51:16.857759+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "otto-berg-30686410", @@ -250,7 +250,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -291,7 +291,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.067282+00:00", + "inferred_at": "2026-01-09T19:51:16.857754+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-GE-NIJ_XXXX_MARIEKE-HEIJDEN.json b/data/person/ID_NL-GR-GRO_197X_NL-GE-NIJ_XXXX_MARIEKE-HEIJDEN.json index 45b1e4585f..fd8211a858 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-GE-NIJ_XXXX_MARIEKE-HEIJDEN.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-GE-NIJ_XXXX_MARIEKE-HEIJDEN.json @@ -146,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marieke-van-der-heijden-76651659_20251214T110559Z.json" ], - "modified_at": "2026-01-09T19:18:14.771807+00:00", + "modified_at": "2026-01-09T19:51:24.455858+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marieke-van-der-heijden-76651659", @@ -178,7 +178,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.771801+00:00", + "inferred_at": "2026-01-09T19:51:24.455850+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-GE-ZUT_XXXX_MARJAN-HARTSUIKER.json b/data/person/ID_NL-GR-GRO_197X_NL-GE-ZUT_XXXX_MARJAN-HARTSUIKER.json index 86f10238a8..82b91af1a4 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-GE-ZUT_XXXX_MARJAN-HARTSUIKER.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-GE-ZUT_XXXX_MARJAN-HARTSUIKER.json @@ -184,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjanhartsuiker_20251214T113132Z.json" ], - "modified_at": "2026-01-09T19:18:14.784729+00:00", + "modified_at": "2026-01-09T19:50:46.698479+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjanhartsuiker", @@ -222,7 +222,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -271,7 +271,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.784687+00:00", + "inferred_at": "2026-01-09T19:50:46.698474+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_ALBERT-WESTERHOFF.json b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_ALBERT-WESTERHOFF.json index 21e534ef02..d1e32ea649 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_ALBERT-WESTERHOFF.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_ALBERT-WESTERHOFF.json @@ -190,7 +190,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/albert-westerhoff-99a6a51b4_20251214T113200Z.json" ], - "modified_at": "2026-01-09T19:18:13.148808+00:00", + "modified_at": "2026-01-09T19:50:52.963489+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "albert-westerhoff-99a6a51b4", @@ -219,7 +219,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -268,7 +268,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.148803+00:00", + "inferred_at": "2026-01-09T19:50:52.963481+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_DENNIS-BREED.json b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_DENNIS-BREED.json index ae292db6fb..d0ea4513c5 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_DENNIS-BREED.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_DENNIS-BREED.json @@ -178,7 +178,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dennis-breed-818037135_20251214T112329Z.json" ], - "modified_at": "2026-01-09T19:18:13.526436+00:00", + "modified_at": "2026-01-09T19:50:50.803236+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dennis-breed-818037135", @@ -210,7 +210,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -251,7 +251,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.526428+00:00", + "inferred_at": "2026-01-09T19:50:50.803230+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_DICK-VRIES.json b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_DICK-VRIES.json index d9c203cc6f..6998f6a068 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_DICK-VRIES.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_DICK-VRIES.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dick-de-vries-20b71996_20251214T112237Z.json" ], - "modified_at": "2026-01-09T19:18:13.617798+00:00", + "modified_at": "2026-01-09T19:50:55.194296+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dick-de-vries-20b71996", @@ -138,7 +138,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.617793+00:00", + "inferred_at": "2026-01-09T19:50:55.194287+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_ERICA-SCHEPER.json b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_ERICA-SCHEPER.json index 944bf98bb6..9cb8a244e8 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_ERICA-SCHEPER.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_ERICA-SCHEPER.json @@ -195,7 +195,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erica-scheper-b35444a_20251214T113207Z.json" ], - "modified_at": "2026-01-09T19:18:14.989978+00:00", + "modified_at": "2026-01-09T19:51:06.460342+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erica-scheper-b35444a", @@ -218,7 +218,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.989975+00:00", + "inferred_at": "2026-01-09T19:51:06.460333+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_JELMER-SPIEKSTRA.json b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_JELMER-SPIEKSTRA.json index 97e23bae1b..444b5ee4c5 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_JELMER-SPIEKSTRA.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_JELMER-SPIEKSTRA.json @@ -182,7 +182,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jelmer-spiekstra_20251214T112142Z.json" ], - "modified_at": "2026-01-09T19:18:13.545919+00:00", + "modified_at": "2026-01-09T19:50:54.600237+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jelmer-spiekstra", @@ -211,7 +211,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -260,7 +260,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.545915+00:00", + "inferred_at": "2026-01-09T19:50:54.600231+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_NICO-MULDER.json b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_NICO-MULDER.json index d41d0b4897..5fc196566e 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_NICO-MULDER.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_NICO-MULDER.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nico-mulder-0998a295_20251214T112239Z.json" ], - "modified_at": "2026-01-09T19:18:15.488192+00:00", + "modified_at": "2026-01-09T19:50:53.719288+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nico-mulder-0998a295", @@ -190,7 +190,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.488186+00:00", + "inferred_at": "2026-01-09T19:50:53.719282+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_RAYMUNDO-RANCHOR.json b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_RAYMUNDO-RANCHOR.json index ba0374aa52..e2c841d0bf 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_RAYMUNDO-RANCHOR.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_RAYMUNDO-RANCHOR.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/raymundo-ranchor-61a00b22_20251214T112134Z.json" ], - "modified_at": "2026-01-09T19:18:13.572438+00:00", + "modified_at": "2026-01-09T19:50:55.097006+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "raymundo-ranchor-61a00b22", @@ -168,7 +168,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.572434+00:00", + "inferred_at": "2026-01-09T19:50:55.096998+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_RICHARD-RUITINGA.json b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_RICHARD-RUITINGA.json index 8c0e482f51..00c933658e 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_RICHARD-RUITINGA.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-GR-GRO_XXXX_RICHARD-RUITINGA.json @@ -280,7 +280,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/richardruitinga_20251214T112230Z.json" ], - "modified_at": "2026-01-09T19:18:15.633381+00:00", + "modified_at": "2026-01-09T19:51:12.736806+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "richardruitinga", @@ -303,7 +303,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -344,7 +344,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.633377+00:00", + "inferred_at": "2026-01-09T19:51:12.736773+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-GR-NIE_XXXX_EWOUT-CLARENBURG.json b/data/person/ID_NL-GR-GRO_197X_NL-GR-NIE_XXXX_EWOUT-CLARENBURG.json index a5235542a7..185e09ee09 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-GR-NIE_XXXX_EWOUT-CLARENBURG.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-GR-NIE_XXXX_EWOUT-CLARENBURG.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ewout-clarenburg-0a403512b_20251214T113401Z.json" ], - "modified_at": "2026-01-09T19:18:15.311333+00:00", + "modified_at": "2026-01-09T19:51:08.510680+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ewout-clarenburg-0a403512b", @@ -141,7 +141,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.311329+00:00", + "inferred_at": "2026-01-09T19:51:08.510672+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-NB-EIN_XXXX_EDITA-MUJOVIC.json b/data/person/ID_NL-GR-GRO_197X_NL-NB-EIN_XXXX_EDITA-MUJOVIC.json index dfc79ab993..b1d7b2e4d2 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-NB-EIN_XXXX_EDITA-MUJOVIC.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-NB-EIN_XXXX_EDITA-MUJOVIC.json @@ -196,7 +196,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/editamujovic_20251214T110843Z.json" ], - "modified_at": "2026-01-09T19:18:13.655678+00:00", + "modified_at": "2026-01-09T19:50:55.392381+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "editamujovic", @@ -225,7 +225,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -274,7 +274,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.655674+00:00", + "inferred_at": "2026-01-09T19:50:55.392375+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-NH-AMS_XXXX_JASPER-FAASE.json b/data/person/ID_NL-GR-GRO_197X_NL-NH-AMS_XXXX_JASPER-FAASE.json index 14af2fe18e..8f30e79cfe 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-NH-AMS_XXXX_JASPER-FAASE.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-NH-AMS_XXXX_JASPER-FAASE.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jasperfaase_20251214T113234Z.json" ], - "modified_at": "2026-01-09T19:18:15.513622+00:00", + "modified_at": "2026-01-09T19:51:11.274805+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jasperfaase", @@ -151,7 +151,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.513618+00:00", + "inferred_at": "2026-01-09T19:51:11.274799+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_MARC-JONG.json b/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_MARC-JONG.json index 9761bc1beb..b8fb975805 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_MARC-JONG.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_MARC-JONG.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marc-de-jong-427b58b7_20251214T112206Z.json" ], - "modified_at": "2026-01-09T19:18:15.660159+00:00", + "modified_at": "2026-01-09T19:51:13.292142+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marc-de-jong-427b58b7", @@ -165,7 +165,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.660154+00:00", + "inferred_at": "2026-01-09T19:51:13.292135+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_SONJA-PAAUW.json b/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_SONJA-PAAUW.json index 712493f765..3d5c795a34 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_SONJA-PAAUW.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_SONJA-PAAUW.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sonjapaauw_20251214T103358Z.json" ], - "modified_at": "2026-01-09T19:18:15.323098+00:00", + "modified_at": "2026-01-09T19:51:08.542250+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sonjapaauw", @@ -185,7 +185,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.323094+00:00", + "inferred_at": "2026-01-09T19:51:08.542245+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_VINCENT-ROBIJN.json b/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_VINCENT-ROBIJN.json index ce3ae28dad..1d8a8133c6 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_VINCENT-ROBIJN.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_VINCENT-ROBIJN.json @@ -178,7 +178,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vincent-robijn-7b22a220_20251214T110407Z.json" ], - "modified_at": "2026-01-09T19:18:15.488781+00:00", + "modified_at": "2026-01-09T19:51:11.077811+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vincent-robijn-7b22a220", @@ -201,7 +201,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +242,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.488777+00:00", + "inferred_at": "2026-01-09T19:51:11.077804+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_WOUTER-GEERLING.json b/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_WOUTER-GEERLING.json index 979406c29f..42e914d4f0 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_WOUTER-GEERLING.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_WOUTER-GEERLING.json @@ -184,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wfgeerling_20251214T110416Z.json" ], - "modified_at": "2026-01-09T19:18:14.345997+00:00", + "modified_at": "2026-01-09T19:51:28.847438+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wfgeerling", @@ -222,7 +222,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -271,7 +271,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.345991+00:00", + "inferred_at": "2026-01-09T19:51:28.847433+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-UT-BAA_XXXX_HILDE-VEENSTRA.json b/data/person/ID_NL-GR-GRO_197X_NL-UT-BAA_XXXX_HILDE-VEENSTRA.json index 8f54bf7560..e9a0d00c53 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-UT-BAA_XXXX_HILDE-VEENSTRA.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-UT-BAA_XXXX_HILDE-VEENSTRA.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hilde-m-veenstra-97a4851a_20251212T230200Z.json" ], - "modified_at": "2026-01-09T19:18:12.249538+00:00", + "modified_at": "2026-01-09T19:50:48.504390+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hilde-m-veenstra-97a4851a", @@ -173,7 +173,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.249530+00:00", + "inferred_at": "2026-01-09T19:50:48.504383+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-UT-DRI_XXXX_MARIEKE-JEPMA.json b/data/person/ID_NL-GR-GRO_197X_NL-UT-DRI_XXXX_MARIEKE-JEPMA.json index a9048ff06f..186c7d4914 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-UT-DRI_XXXX_MARIEKE-JEPMA.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-UT-DRI_XXXX_MARIEKE-JEPMA.json @@ -111,8 +111,10 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T00:34:00Z", + "result": "not_found", + "notes": "Exa search found UvA researcher profile but no birth date. Search query: \"Marieke Jepma\" UvA researcher born birthday biography" } }, "provenance": { @@ -121,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marieke-jepma-21984017b_20251212T233000Z.json" ], - "modified_at": "2026-01-09T19:18:14.384983+00:00", + "modified_at": "2026-01-09T19:51:22.355587+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marieke-jepma-21984017b", @@ -167,7 +169,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +218,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.384977+00:00", + "inferred_at": "2026-01-09T19:51:22.355583+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-ZH-DEL_XXXX_MARTIJN-PRONK.json b/data/person/ID_NL-GR-GRO_197X_NL-ZH-DEL_XXXX_MARTIJN-PRONK.json index 461e4b6c6a..e7b2cd8fa1 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-ZH-DEL_XXXX_MARTIJN-PRONK.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-ZH-DEL_XXXX_MARTIJN-PRONK.json @@ -178,7 +178,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/phmpronk_20251214T110022Z.json" ], - "modified_at": "2026-01-09T19:18:15.283497+00:00", + "modified_at": "2026-01-09T19:51:08.351836+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "phmpronk", @@ -207,7 +207,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -256,7 +256,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.283493+00:00", + "inferred_at": "2026-01-09T19:51:08.351821+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-ZH-TH_XXXX_JEROEN-DOMMELEN.json b/data/person/ID_NL-GR-GRO_197X_NL-ZH-TH_XXXX_JEROEN-DOMMELEN.json index 085b4a49ee..4f51b4eb5d 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-ZH-TH_XXXX_JEROEN-DOMMELEN.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-ZH-TH_XXXX_JEROEN-DOMMELEN.json @@ -186,7 +186,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeroenvandommelen_20251214T103125Z.json" ], - "modified_at": "2026-01-09T19:18:14.198763+00:00", + "modified_at": "2026-01-09T19:50:58.864275+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeroenvandommelen", @@ -215,7 +215,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -264,7 +264,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.198757+00:00", + "inferred_at": "2026-01-09T19:50:58.864262+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-ZH-TH_XXXX_MARK-SARFO.json b/data/person/ID_NL-GR-GRO_197X_NL-ZH-TH_XXXX_MARK-SARFO.json index 8139637dc6..915003f787 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-ZH-TH_XXXX_MARK-SARFO.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-ZH-TH_XXXX_MARK-SARFO.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mark-sarfo-81462684_20251214T103226Z.json" ], - "modified_at": "2026-01-09T19:18:16.143593+00:00", + "modified_at": "2026-01-09T19:51:04.546611+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mark-sarfo-81462684", @@ -219,7 +219,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -268,7 +268,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.143587+00:00", + "inferred_at": "2026-01-09T19:51:04.546603+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-ZH-TH_XXXX_SILVIA-EUWEMA.json b/data/person/ID_NL-GR-GRO_197X_NL-ZH-TH_XXXX_SILVIA-EUWEMA.json index 82b248e420..f829c34d3c 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-ZH-TH_XXXX_SILVIA-EUWEMA.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-ZH-TH_XXXX_SILVIA-EUWEMA.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/silvia-euwema-4b19b76_20251214T112754Z.json" ], - "modified_at": "2026-01-09T19:18:14.270374+00:00", + "modified_at": "2026-01-09T19:50:59.789759+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "silvia-euwema-4b19b76", @@ -187,7 +187,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.270369+00:00", + "inferred_at": "2026-01-09T19:50:59.789749+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_NL-ZH-VOO_XXXX_ERIK-PETERSEN.json b/data/person/ID_NL-GR-GRO_197X_NL-ZH-VOO_XXXX_ERIK-PETERSEN.json index d465683077..41bb15af1b 100644 --- a/data/person/ID_NL-GR-GRO_197X_NL-ZH-VOO_XXXX_ERIK-PETERSEN.json +++ b/data/person/ID_NL-GR-GRO_197X_NL-ZH-VOO_XXXX_ERIK-PETERSEN.json @@ -268,7 +268,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ewpetersen_20251214T103133Z.json" ], - "modified_at": "2026-01-09T19:18:13.411773+00:00", + "modified_at": "2026-01-09T19:51:08.430905+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ewpetersen", @@ -306,7 +306,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -355,7 +355,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.411767+00:00", + "inferred_at": "2026-01-09T19:51:08.430899+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_EMMY-STRIJKER.json b/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_EMMY-STRIJKER.json index 7adf3af0ac..cad2680b4d 100644 --- a/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_EMMY-STRIJKER.json +++ b/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_EMMY-STRIJKER.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emmystrijker_20251212T180000Z.json" ], - "modified_at": "2026-01-09T19:18:15.624874+00:00", + "modified_at": "2026-01-09T19:51:03.573533+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emmystrijker", @@ -167,7 +167,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.622938+00:00", + "inferred_at": "2026-01-09T19:51:03.571476+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_GERARD-SMEENK.json b/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_GERARD-SMEENK.json index 631a11d051..fe2f66336d 100644 --- a/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_GERARD-SMEENK.json +++ b/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_GERARD-SMEENK.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerard-smeenk-13ba35182_20251214T112156Z.json" ], - "modified_at": "2026-01-09T19:18:14.775575+00:00", + "modified_at": "2026-01-09T19:51:08.422568+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerard-smeenk-13ba35182", @@ -128,7 +128,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.773684+00:00", + "inferred_at": "2026-01-09T19:51:08.420427+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_JACQUELIEN-NIENHUIS.json b/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_JACQUELIEN-NIENHUIS.json index 03661233e0..dca50ed936 100644 --- a/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_JACQUELIEN-NIENHUIS.json +++ b/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_JACQUELIEN-NIENHUIS.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jacqueliennienhuis_20251214T102930Z.json" ], - "modified_at": "2026-01-09T19:18:16.106866+00:00", + "modified_at": "2026-01-09T19:51:17.474438+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jacqueliennienhuis", @@ -194,7 +194,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.103197+00:00", + "inferred_at": "2026-01-09T19:51:17.470437+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_PAMELA-KELLOGG.json b/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_PAMELA-KELLOGG.json index c84e9cfacb..93a572346d 100644 --- a/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_PAMELA-KELLOGG.json +++ b/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_PAMELA-KELLOGG.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pamela-kellogg-70078620_20251214T111241Z.json" ], - "modified_at": "2026-01-09T19:18:13.913404+00:00", + "modified_at": "2026-01-09T19:50:56.789694+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pamela-kellogg-70078620", @@ -133,7 +133,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.910526+00:00", + "inferred_at": "2026-01-09T19:50:56.787664+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_WILFRED-HAM.json b/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_WILFRED-HAM.json index 42caec6f57..4921b8d492 100644 --- a/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_WILFRED-HAM.json +++ b/data/person/ID_NL-GR-GRO_197X_XX-XX-XXX_XXXX_WILFRED-HAM.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wilfred-ham-6452937b_20251214T112116Z.json" ], - "modified_at": "2026-01-09T19:18:11.361113+00:00", + "modified_at": "2026-01-09T19:51:28.921032+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wilfred-ham-6452937b", @@ -192,7 +192,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.358666+00:00", + "inferred_at": "2026-01-09T19:51:28.918996+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-DR-ASS_XXXX_AGNES-RUTGERS.json b/data/person/ID_NL-GR-GRO_198X_NL-DR-ASS_XXXX_AGNES-RUTGERS.json index df29f5596d..21368e53ba 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-DR-ASS_XXXX_AGNES-RUTGERS.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-DR-ASS_XXXX_AGNES-RUTGERS.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/agnes-rutgers-b692b05_20251214T112208Z.json" ], - "modified_at": "2026-01-09T19:18:16.682904+00:00", + "modified_at": "2026-01-09T19:51:21.507207+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "agnes-rutgers-b692b05", @@ -190,7 +190,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.682899+00:00", + "inferred_at": "2026-01-09T19:51:21.507201+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-GE-APE_XXXX_ANNELOT-O.json b/data/person/ID_NL-GR-GRO_198X_NL-GE-APE_XXXX_ANNELOT-O.json index acaa910f30..3004107835 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-GE-APE_XXXX_ANNELOT-O.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-GE-APE_XXXX_ANNELOT-O.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annelot-drees_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:15.518130+00:00", + "modified_at": "2026-01-09T19:51:11.776784+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annelot-drees", @@ -154,7 +154,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.518126+00:00", + "inferred_at": "2026-01-09T19:51:11.776768+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-GE-WAG_XXXX_INGE-SCHRIEMER.json b/data/person/ID_NL-GR-GRO_198X_NL-GE-WAG_XXXX_INGE-SCHRIEMER.json index b1e96f0b2b..5e82c24eaa 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-GE-WAG_XXXX_INGE-SCHRIEMER.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-GE-WAG_XXXX_INGE-SCHRIEMER.json @@ -212,7 +212,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ingeschriemer_20251214T110522Z.json" ], - "modified_at": "2026-01-09T19:18:18.303676+00:00", + "modified_at": "2026-01-09T19:51:29.261938+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ingeschriemer", @@ -241,7 +241,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -290,7 +290,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.303665+00:00", + "inferred_at": "2026-01-09T19:51:29.261933+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_DAAN-JANSEN.json b/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_DAAN-JANSEN.json index c21d991c57..ea07491992 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_DAAN-JANSEN.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_DAAN-JANSEN.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daan-jansen-85278640_20251214T112147Z.json" ], - "modified_at": "2026-01-09T19:18:16.807013+00:00", + "modified_at": "2026-01-09T19:51:22.047365+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daan-jansen-85278640", @@ -122,7 +122,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -171,7 +171,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.807009+00:00", + "inferred_at": "2026-01-09T19:51:22.047360+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_DORIEN-DONKER.json b/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_DORIEN-DONKER.json index 2e63818ecb..0cb96b7a4e 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_DORIEN-DONKER.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_DORIEN-DONKER.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dorien-donker-b719645_20251214T112131Z.json" ], - "modified_at": "2026-01-09T19:18:15.752487+00:00", + "modified_at": "2026-01-09T19:51:14.185742+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dorien-donker-b719645", @@ -138,7 +138,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.752482+00:00", + "inferred_at": "2026-01-09T19:51:14.185735+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_ELISA-VERVOORT.json b/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_ELISA-VERVOORT.json index 4f9b1b448a..d89685ce74 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_ELISA-VERVOORT.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_ELISA-VERVOORT.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elisa-vervoort-17579159_20251214T112146Z.json" ], - "modified_at": "2026-01-09T19:18:16.116018+00:00", + "modified_at": "2026-01-09T19:51:17.562507+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elisa-vervoort-17579159", @@ -124,7 +124,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.116014+00:00", + "inferred_at": "2026-01-09T19:51:17.562500+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_HELMA-KAMMEN.json b/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_HELMA-KAMMEN.json index 8353e64b13..37ea204d77 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_HELMA-KAMMEN.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_HELMA-KAMMEN.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/helmavankammen_20251214T112333Z.json" ], - "modified_at": "2026-01-09T19:18:14.830505+00:00", + "modified_at": "2026-01-09T19:51:04.570721+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "helmavankammen", @@ -111,7 +111,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.830500+00:00", + "inferred_at": "2026-01-09T19:51:04.570715+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_HENK-KATOEN.json b/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_HENK-KATOEN.json index b08be9ff28..32e299e90e 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_HENK-KATOEN.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_HENK-KATOEN.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henk-katoen-a5267b33_20251214T112235Z.json" ], - "modified_at": "2026-01-09T19:18:16.214118+00:00", + "modified_at": "2026-01-09T19:51:18.309354+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henk-katoen-a5267b33", @@ -124,7 +124,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.214115+00:00", + "inferred_at": "2026-01-09T19:51:18.309348+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_RONALD-MIK.json b/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_RONALD-MIK.json index ef428f9dfc..38f8d1cab4 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_RONALD-MIK.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_RONALD-MIK.json @@ -94,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ronald-mik-62a01a27_20251214T112224Z.json" ], - "modified_at": "2026-01-09T19:18:19.023736+00:00", + "modified_at": "2026-01-09T19:51:34.572901+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ronald-mik-62a01a27", @@ -123,7 +123,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:19.023731+00:00", + "inferred_at": "2026-01-09T19:51:34.572891+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_SANDER-VERMEULEN.json b/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_SANDER-VERMEULEN.json index 913a379a5e..c3717c6c1f 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_SANDER-VERMEULEN.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-GR-GRO_XXXX_SANDER-VERMEULEN.json @@ -245,7 +245,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sander-jorn-vermeulen-27a15211_20251214T113206Z.json" ], - "modified_at": "2026-01-09T19:18:15.929690+00:00", + "modified_at": "2026-01-09T19:51:15.183936+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sander-jorn-vermeulen-27a15211", @@ -274,7 +274,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -323,7 +323,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.929686+00:00", + "inferred_at": "2026-01-09T19:51:15.183932+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-NB-EIN_XXXX_SIDDHARTHA-OMAR.json b/data/person/ID_NL-GR-GRO_198X_NL-NB-EIN_XXXX_SIDDHARTHA-OMAR.json index 5d7ef7c259..4676220a5f 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-NB-EIN_XXXX_SIDDHARTHA-OMAR.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-NB-EIN_XXXX_SIDDHARTHA-OMAR.json @@ -178,7 +178,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sidomar_20251214T110947Z.json" ], - "modified_at": "2026-01-09T19:18:15.236052+00:00", + "modified_at": "2026-01-09T19:51:12.741349+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sidomar", @@ -216,7 +216,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -265,7 +265,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.236047+00:00", + "inferred_at": "2026-01-09T19:51:12.741341+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-NB-EIN_XXXX_THOMAS-MARTINSSON.json b/data/person/ID_NL-GR-GRO_198X_NL-NB-EIN_XXXX_THOMAS-MARTINSSON.json index b6f95a2b74..818cd292a3 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-NB-EIN_XXXX_THOMAS-MARTINSSON.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-NB-EIN_XXXX_THOMAS-MARTINSSON.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martinsson_20251214T111042Z.json" ], - "modified_at": "2026-01-09T19:18:14.751795+00:00", + "modified_at": "2026-01-09T19:51:04.032219+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martinsson", @@ -168,7 +168,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.751792+00:00", + "inferred_at": "2026-01-09T19:51:04.032215+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-NB-VEL_XXXX_MORTEN-BAKKER.json b/data/person/ID_NL-GR-GRO_198X_NL-NB-VEL_XXXX_MORTEN-BAKKER.json index ba2251a393..bd38612125 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-NB-VEL_XXXX_MORTEN-BAKKER.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-NB-VEL_XXXX_MORTEN-BAKKER.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mortenpbakker_20251214T111212Z.json" ], - "modified_at": "2026-01-09T19:18:12.792828+00:00", + "modified_at": "2026-01-09T19:50:48.879375+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mortenpbakker", @@ -166,7 +166,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +207,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.792813+00:00", + "inferred_at": "2026-01-09T19:50:48.879367+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-NH-AMS_XXXX_CARLIJN-SPAENDONCK.json b/data/person/ID_NL-GR-GRO_198X_NL-NH-AMS_XXXX_CARLIJN-SPAENDONCK.json index 8f2cd4cc94..0853ec1f5d 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-NH-AMS_XXXX_CARLIJN-SPAENDONCK.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-NH-AMS_XXXX_CARLIJN-SPAENDONCK.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carlijnvanspaendonck_20251214T111344Z.json" ], - "modified_at": "2026-01-09T19:18:13.791034+00:00", + "modified_at": "2026-01-09T19:50:56.583985+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carlijnvanspaendonck", @@ -188,7 +188,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.791031+00:00", + "inferred_at": "2026-01-09T19:50:56.583980+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-NH-AMS_XXXX_FRANCESCA-GABRIELI.json b/data/person/ID_NL-GR-GRO_198X_NL-NH-AMS_XXXX_FRANCESCA-GABRIELI.json index 323a1710ee..31fbf0771e 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-NH-AMS_XXXX_FRANCESCA-GABRIELI.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-NH-AMS_XXXX_FRANCESCA-GABRIELI.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/francesca-gabrieli-561aa9112_20251214T111301Z.json" ], - "modified_at": "2026-01-09T19:18:13.713908+00:00", + "modified_at": "2026-01-09T19:50:59.790598+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "francesca-gabrieli-561aa9112", @@ -177,7 +177,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.713902+00:00", + "inferred_at": "2026-01-09T19:50:59.790591+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-NH-HAA_XXXX_RICK-BUSSCHER.json b/data/person/ID_NL-GR-GRO_198X_NL-NH-HAA_XXXX_RICK-BUSSCHER.json index 2b03184bd2..2b4f90150c 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-NH-HAA_XXXX_RICK-BUSSCHER.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-NH-HAA_XXXX_RICK-BUSSCHER.json @@ -282,7 +282,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rick-busscher-744b5273_20251214T112451Z.json" ], - "modified_at": "2026-01-09T19:18:17.007434+00:00", + "modified_at": "2026-01-09T19:51:22.959713+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rick-busscher-744b5273", @@ -311,7 +311,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -360,7 +360,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.007429+00:00", + "inferred_at": "2026-01-09T19:51:22.959708+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-NH-HAA_XXXX_SUSAN-SMELT.json b/data/person/ID_NL-GR-GRO_198X_NL-NH-HAA_XXXX_SUSAN-SMELT.json index a5b52c0c7e..681586380a 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-NH-HAA_XXXX_SUSAN-SMELT.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-NH-HAA_XXXX_SUSAN-SMELT.json @@ -207,7 +207,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/susan-smelt-b394512a_20251214T111536Z.json" ], - "modified_at": "2026-01-09T19:18:12.967256+00:00", + "modified_at": "2026-01-09T19:50:49.613032+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "susan-smelt-b394512a", @@ -230,7 +230,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -271,7 +271,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.967249+00:00", + "inferred_at": "2026-01-09T19:50:49.613026+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-UT-UTR_XXXX_JULIA-DRISSEN.json b/data/person/ID_NL-GR-GRO_198X_NL-UT-UTR_XXXX_JULIA-DRISSEN.json index 40fa0198a6..ee1904a996 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-UT-UTR_XXXX_JULIA-DRISSEN.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-UT-UTR_XXXX_JULIA-DRISSEN.json @@ -178,7 +178,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/juliadrissen_20251214T103026Z.json" ], - "modified_at": "2026-01-09T19:18:12.846773+00:00", + "modified_at": "2026-01-09T19:50:49.073859+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "juliadrissen", @@ -207,7 +207,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -256,7 +256,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.846767+00:00", + "inferred_at": "2026-01-09T19:50:49.073855+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-ZH-RIJ_XXXX_ARJEN-NAUTA.json b/data/person/ID_NL-GR-GRO_198X_NL-ZH-RIJ_XXXX_ARJEN-NAUTA.json index f86cc06d50..58f903ab62 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-ZH-RIJ_XXXX_ARJEN-NAUTA.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-ZH-RIJ_XXXX_ARJEN-NAUTA.json @@ -222,7 +222,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arjen-nauta-bb81b370_20251214T102903Z.json" ], - "modified_at": "2026-01-09T19:18:14.704774+00:00", + "modified_at": "2026-01-09T19:51:03.383943+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arjen-nauta-bb81b370", @@ -251,7 +251,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -300,7 +300,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.704770+00:00", + "inferred_at": "2026-01-09T19:51:03.383937+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_ALEXANDER-SMITS.json b/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_ALEXANDER-SMITS.json index 3ec1ae55fd..9cf758f770 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_ALEXANDER-SMITS.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_ALEXANDER-SMITS.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alexander-smits-3064b632_20251214T102916Z.json" ], - "modified_at": "2026-01-09T19:18:15.444254+00:00", + "modified_at": "2026-01-09T19:51:10.865346+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alexander-smits-3064b632", @@ -137,7 +137,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.444247+00:00", + "inferred_at": "2026-01-09T19:51:10.865339+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_FEDERICA-FANTONE.json b/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_FEDERICA-FANTONE.json index b8ca30c522..46bc421f03 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_FEDERICA-FANTONE.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_FEDERICA-FANTONE.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/federica-fantone-0a2531116_20251214T112412Z.json" ], - "modified_at": "2026-01-09T19:18:13.205156+00:00", + "modified_at": "2026-01-09T19:50:46.722890+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "federica-fantone-0a2531116", @@ -175,7 +175,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.205147+00:00", + "inferred_at": "2026-01-09T19:50:46.722884+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_LIESBETH-MULDER.json b/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_LIESBETH-MULDER.json index 96e518395b..c68fe89a94 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_LIESBETH-MULDER.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_LIESBETH-MULDER.json @@ -210,7 +210,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/liesbeth-mulder-447506a3_20251214T112856Z.json" ], - "modified_at": "2026-01-09T19:18:18.998675+00:00", + "modified_at": "2026-01-09T19:51:34.112918+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "liesbeth-mulder-447506a3", @@ -239,7 +239,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -288,7 +288,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.998664+00:00", + "inferred_at": "2026-01-09T19:51:34.112911+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_ROBBERT-HEUVEN.json b/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_ROBBERT-HEUVEN.json index 6e142f79aa..2c7cb5e764 100644 --- a/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_ROBBERT-HEUVEN.json +++ b/data/person/ID_NL-GR-GRO_198X_NL-ZH-TH_XXXX_ROBBERT-HEUVEN.json @@ -188,7 +188,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robbert-van-heuven-2880a8b_20251214T112445Z.json" ], - "modified_at": "2026-01-09T19:18:15.425415+00:00", + "modified_at": "2026-01-09T19:51:10.850509+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robbert-van-heuven-2880a8b", @@ -217,7 +217,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -266,7 +266,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.425410+00:00", + "inferred_at": "2026-01-09T19:51:10.850505+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_XX-XX-XXX_XXXX_JAN-KRUIDHOF.json b/data/person/ID_NL-GR-GRO_198X_XX-XX-XXX_XXXX_JAN-KRUIDHOF.json index 7ecfb707f4..107ca6aa0e 100644 --- a/data/person/ID_NL-GR-GRO_198X_XX-XX-XXX_XXXX_JAN-KRUIDHOF.json +++ b/data/person/ID_NL-GR-GRO_198X_XX-XX-XXX_XXXX_JAN-KRUIDHOF.json @@ -264,7 +264,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kruidhof_20251214T102705Z.json" ], - "modified_at": "2026-01-09T19:18:13.601844+00:00", + "modified_at": "2026-01-09T19:51:05.609515+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kruidhof", @@ -301,7 +301,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -350,7 +350,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.601832+00:00", + "inferred_at": "2026-01-09T19:51:05.609473+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_198X_XX-XX-XXX_XXXX_THESSA-MEIJLIS.json b/data/person/ID_NL-GR-GRO_198X_XX-XX-XXX_XXXX_THESSA-MEIJLIS.json index 409472e374..e263bd1243 100644 --- a/data/person/ID_NL-GR-GRO_198X_XX-XX-XXX_XXXX_THESSA-MEIJLIS.json +++ b/data/person/ID_NL-GR-GRO_198X_XX-XX-XXX_XXXX_THESSA-MEIJLIS.json @@ -90,7 +90,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thessameijlis_20251214T112408Z.json" ], - "modified_at": "2026-01-09T19:18:18.284041+00:00", + "modified_at": "2026-01-09T19:51:29.258899+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thessameijlis", @@ -118,7 +118,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.281850+00:00", + "inferred_at": "2026-01-09T19:51:29.256756+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-FR-LEE_XXXX_MAURICE-MEIJER.json b/data/person/ID_NL-GR-GRO_199X_NL-FR-LEE_XXXX_MAURICE-MEIJER.json index 2c78e2fb9a..e4ba44cd92 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-FR-LEE_XXXX_MAURICE-MEIJER.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-FR-LEE_XXXX_MAURICE-MEIJER.json @@ -201,7 +201,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mauricemeijerm_20251214T112210Z.json" ], - "modified_at": "2026-01-09T19:18:13.491945+00:00", + "modified_at": "2026-01-09T19:50:54.536736+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mauricemeijerm", @@ -230,7 +230,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -279,7 +279,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.491940+00:00", + "inferred_at": "2026-01-09T19:50:54.536729+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_EFE-SIRIN.json b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_EFE-SIRIN.json index a8c720342b..9ea57fb2d1 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_EFE-SIRIN.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_EFE-SIRIN.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/efesirin_20251214T111122Z.json" ], - "modified_at": "2026-01-09T19:18:15.645931+00:00", + "modified_at": "2026-01-09T19:51:13.253494+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "efesirin", @@ -162,7 +162,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.645927+00:00", + "inferred_at": "2026-01-09T19:51:13.253482+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_ELKE-BOER.json b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_ELKE-BOER.json index 7915f30b28..5581ab836b 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_ELKE-BOER.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_ELKE-BOER.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elke-de-boer-77aa16b4_20251214T113203Z.json" ], - "modified_at": "2026-01-09T19:18:15.635249+00:00", + "modified_at": "2026-01-09T19:51:12.740457+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elke-de-boer-77aa16b4", @@ -188,7 +188,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.635245+00:00", + "inferred_at": "2026-01-09T19:51:12.740448+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_FRANK-DANENS.json b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_FRANK-DANENS.json index 93e447031b..c4e0e1595f 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_FRANK-DANENS.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_FRANK-DANENS.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frank-danens-40723334_20251214T112232Z.json" ], - "modified_at": "2026-01-09T19:18:16.203370+00:00", + "modified_at": "2026-01-09T19:51:18.296235+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frank-danens-40723334", @@ -125,7 +125,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.203367+00:00", + "inferred_at": "2026-01-09T19:51:18.296229+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_JENTE-WESTERHOF.json b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_JENTE-WESTERHOF.json index 6716dfc97e..c5ef5e8f31 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_JENTE-WESTERHOF.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_JENTE-WESTERHOF.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jente-westerhof-1a0359202_20251214T113200Z.json" ], - "modified_at": "2026-01-09T19:18:15.581838+00:00", + "modified_at": "2026-01-09T19:51:12.186515+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jente-westerhof-1a0359202", @@ -151,7 +151,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.581833+00:00", + "inferred_at": "2026-01-09T19:51:12.186508+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_KIM-VERMEULEN.json b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_KIM-VERMEULEN.json index 87cd34805c..6a3c8a169f 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_KIM-VERMEULEN.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_KIM-VERMEULEN.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kim-vermeulen-652299205_20251214T113158Z.json" ], - "modified_at": "2026-01-09T19:18:12.686625+00:00", + "modified_at": "2026-01-09T19:50:46.714245+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kim-vermeulen-652299205", @@ -194,7 +194,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.686611+00:00", + "inferred_at": "2026-01-09T19:50:46.714239+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_LEIDA-BERNDT.json b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_LEIDA-BERNDT.json index be889cb5e1..65b53fddd9 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_LEIDA-BERNDT.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_LEIDA-BERNDT.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/leidaberndt_20251214T112238Z.json" ], - "modified_at": "2026-01-09T19:18:16.409271+00:00", + "modified_at": "2026-01-09T19:51:18.465196+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "leidaberndt", @@ -155,7 +155,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.409267+00:00", + "inferred_at": "2026-01-09T19:51:18.465190+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_LIESELOT-DAMME.json b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_LIESELOT-DAMME.json index 415e719754..8315b94b53 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_LIESELOT-DAMME.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_LIESELOT-DAMME.json @@ -269,7 +269,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lieselot-van-damme-69230537_20251214T113205Z.json" ], - "modified_at": "2026-01-09T19:18:14.128515+00:00", + "modified_at": "2026-01-09T19:50:58.667307+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lieselot-van-damme-69230537", @@ -298,7 +298,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -347,7 +347,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.128510+00:00", + "inferred_at": "2026-01-09T19:50:58.667301+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_NANCY-SCHWUNK.json b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_NANCY-SCHWUNK.json index 67af8707b4..b9ba1b9cf1 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_NANCY-SCHWUNK.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_NANCY-SCHWUNK.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nancy-schwunk-012648151_20251214T113204Z.json" ], - "modified_at": "2026-01-09T19:18:13.547404+00:00", + "modified_at": "2026-01-09T19:50:54.602011+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nancy-schwunk-012648151", @@ -176,7 +176,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.547401+00:00", + "inferred_at": "2026-01-09T19:50:54.602005+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_RUHI-MAHADESHWAR.json b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_RUHI-MAHADESHWAR.json index 149a3d0531..0c93b96812 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_RUHI-MAHADESHWAR.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_RUHI-MAHADESHWAR.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ruhi-mahadeshwar-433aa81a7_20251214T110520Z.json" ], - "modified_at": "2026-01-09T19:18:18.924014+00:00", + "modified_at": "2026-01-09T19:51:29.501904+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ruhi-mahadeshwar-433aa81a7", @@ -146,7 +146,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.924005+00:00", + "inferred_at": "2026-01-09T19:51:29.501900+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_SIETA-HOUTMAN.json b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_SIETA-HOUTMAN.json index 450d7684ef..aa17097bc1 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_SIETA-HOUTMAN.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_SIETA-HOUTMAN.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sieta-houtman-2590789a_20251214T112223Z.json" ], - "modified_at": "2026-01-09T19:18:14.173960+00:00", + "modified_at": "2026-01-09T19:51:14.184759+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sieta-houtman-2590789a", @@ -139,7 +139,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.173953+00:00", + "inferred_at": "2026-01-09T19:51:14.184754+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_SJOERD-SCHOUTEN.json b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_SJOERD-SCHOUTEN.json index bb8498b78e..2f8e52593b 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_SJOERD-SCHOUTEN.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_SJOERD-SCHOUTEN.json @@ -186,7 +186,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sjoerdschouten_20251214T112236Z.json" ], - "modified_at": "2026-01-09T19:18:15.770591+00:00", + "modified_at": "2026-01-09T19:51:14.353428+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sjoerdschouten", @@ -215,7 +215,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -264,7 +264,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.770588+00:00", + "inferred_at": "2026-01-09T19:51:14.353423+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_YORAM-POOT.json b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_YORAM-POOT.json index fafe897c6c..620a010250 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_YORAM-POOT.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-GR-GRO_XXXX_YORAM-POOT.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yorampoot_20251214T110441Z.json" ], - "modified_at": "2026-01-09T19:18:15.209215+00:00", + "modified_at": "2026-01-09T19:51:07.012835+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yorampoot", @@ -162,7 +162,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.209211+00:00", + "inferred_at": "2026-01-09T19:51:07.012794+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-NB-BRE_XXXX_JULIEANNE-BERG.json b/data/person/ID_NL-GR-GRO_199X_NL-NB-BRE_XXXX_JULIEANNE-BERG.json index e313a698e3..9beec5e70c 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-NB-BRE_XXXX_JULIEANNE-BERG.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-NB-BRE_XXXX_JULIEANNE-BERG.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/julie-anne-van-den-berg-a32434135_20251214T112753Z.json" ], - "modified_at": "2026-01-09T19:18:13.745713+00:00", + "modified_at": "2026-01-09T19:51:14.417197+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "julie-anne-van-den-berg-a32434135", @@ -208,7 +208,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -257,7 +257,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.745705+00:00", + "inferred_at": "2026-01-09T19:51:14.417188+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-NB-EIN_XXXX_ANUP-KS.json b/data/person/ID_NL-GR-GRO_199X_NL-NB-EIN_XXXX_ANUP-KS.json index d4f5eb4702..344eb97f1b 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-NB-EIN_XXXX_ANUP-KS.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-NB-EIN_XXXX_ANUP-KS.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anup-ks-146326161_20251214T111135Z.json" ], - "modified_at": "2026-01-09T19:18:15.543760+00:00", + "modified_at": "2026-01-09T19:51:14.446775+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anup-ks-146326161", @@ -199,7 +199,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -248,7 +248,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.543751+00:00", + "inferred_at": "2026-01-09T19:51:14.446767+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_ANNE-KNIPPING.json b/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_ANNE-KNIPPING.json index e669cf90ee..a13bbe157b 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_ANNE-KNIPPING.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_ANNE-KNIPPING.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-knipping-08772a96_20251214T111648Z.json" ], - "modified_at": "2026-01-09T19:18:13.163111+00:00", + "modified_at": "2026-01-09T19:51:01.941531+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-knipping-08772a96", @@ -200,7 +200,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -249,7 +249,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.163104+00:00", + "inferred_at": "2026-01-09T19:51:01.941524+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_CHARLOTTE-BRAAM.json b/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_CHARLOTTE-BRAAM.json index dd9d3f4133..ffd07a6ef6 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_CHARLOTTE-BRAAM.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_CHARLOTTE-BRAAM.json @@ -222,7 +222,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/charlotte-van-braam_20251214T112548Z.json" ], - "modified_at": "2026-01-09T19:18:12.571645+00:00", + "modified_at": "2026-01-09T19:50:48.508244+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "charlotte-van-braam", @@ -251,7 +251,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -300,7 +300,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.571637+00:00", + "inferred_at": "2026-01-09T19:50:48.508239+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_FATIMA-ABDICHE.json b/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_FATIMA-ABDICHE.json index ac8c0cc198..568b010c0b 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_FATIMA-ABDICHE.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_FATIMA-ABDICHE.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fatima-abdiche-9a5a11124_20251214T110255Z.json" ], - "modified_at": "2026-01-09T19:18:16.432910+00:00", + "modified_at": "2026-01-09T19:51:18.482421+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fatima-abdiche-9a5a11124", @@ -137,7 +137,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.432904+00:00", + "inferred_at": "2026-01-09T19:51:18.482415+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_JULIETTE-UHM.json b/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_JULIETTE-UHM.json index bd940e5538..76b1564b9c 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_JULIETTE-UHM.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_JULIETTE-UHM.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/juliette-van-uhm-2064681a6_20251214T110047Z.json" ], - "modified_at": "2026-01-09T19:18:13.602984+00:00", + "modified_at": "2026-01-09T19:50:57.686434+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "juliette-van-uhm-2064681a6", @@ -145,7 +145,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.602976+00:00", + "inferred_at": "2026-01-09T19:50:57.686428+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_NAFTHALI-BROOS.json b/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_NAFTHALI-BROOS.json index 49357e8291..a59a97a65b 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_NAFTHALI-BROOS.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_NAFTHALI-BROOS.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nafthali-broos-1bb47019b_20251214T102843Z.json" ], - "modified_at": "2026-01-09T19:18:16.655624+00:00", + "modified_at": "2026-01-09T19:50:51.071461+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nafthali-broos-1bb47019b", @@ -177,7 +177,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.655618+00:00", + "inferred_at": "2026-01-09T19:50:51.071456+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_NIELS-KOHNSTAMM.json b/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_NIELS-KOHNSTAMM.json index ac8d0421a0..59c7a0bd92 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_NIELS-KOHNSTAMM.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_NIELS-KOHNSTAMM.json @@ -133,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/niels-kohnstamm-754b25152_20251214T112627Z.json" ], - "modified_at": "2026-01-09T19:18:17.902673+00:00", + "modified_at": "2026-01-09T19:51:28.844526+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "niels-kohnstamm-754b25152", @@ -156,7 +156,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.902668+00:00", + "inferred_at": "2026-01-09T19:51:28.844521+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_TESSA-KLIMP.json b/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_TESSA-KLIMP.json index 99f80b586a..74e6594833 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_TESSA-KLIMP.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-NH-AMS_XXXX_TESSA-KLIMP.json @@ -157,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tessa-klimp-501296183_20251214T103253Z.json" ], - "modified_at": "2026-01-09T19:18:13.051135+00:00", + "modified_at": "2026-01-09T19:50:50.827877+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tessa-klimp-501296183", @@ -186,7 +186,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -235,7 +235,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.051131+00:00", + "inferred_at": "2026-01-09T19:50:50.827869+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-OV-ZWO_XXXX_CELYNA-KEATES.json b/data/person/ID_NL-GR-GRO_199X_NL-OV-ZWO_XXXX_CELYNA-KEATES.json index b48beeed25..ec0b7340a0 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-OV-ZWO_XXXX_CELYNA-KEATES.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-OV-ZWO_XXXX_CELYNA-KEATES.json @@ -193,7 +193,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/celyna-keates-aa192867_20251214T111246Z.json" ], - "modified_at": "2026-01-09T19:18:16.554354+00:00", + "modified_at": "2026-01-09T19:51:18.624982+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "celyna-keates-aa192867", @@ -222,7 +222,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -271,7 +271,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.554350+00:00", + "inferred_at": "2026-01-09T19:51:18.624970+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-OV-ZWO_XXXX_MARTINE-BOER.json b/data/person/ID_NL-GR-GRO_199X_NL-OV-ZWO_XXXX_MARTINE-BOER.json index 4bacc67a0a..c797b919be 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-OV-ZWO_XXXX_MARTINE-BOER.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-OV-ZWO_XXXX_MARTINE-BOER.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martine-de-boer-3aa5b553_20251214T110403Z.json" ], - "modified_at": "2026-01-09T19:18:11.425252+00:00", + "modified_at": "2026-01-09T19:50:46.850489+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martine-de-boer-3aa5b553", @@ -167,7 +167,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.425243+00:00", + "inferred_at": "2026-01-09T19:50:46.850479+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-OV-ZWO_XXXX_RIXT-ZUIDEMA.json b/data/person/ID_NL-GR-GRO_199X_NL-OV-ZWO_XXXX_RIXT-ZUIDEMA.json index 654adc67d9..9f285ab575 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-OV-ZWO_XXXX_RIXT-ZUIDEMA.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-OV-ZWO_XXXX_RIXT-ZUIDEMA.json @@ -173,7 +173,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rixtzuidema_20251214T110407Z.json" ], - "modified_at": "2026-01-09T19:18:18.320538+00:00", + "modified_at": "2026-01-09T19:51:29.272335+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rixtzuidema", @@ -202,7 +202,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -251,7 +251,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.320464+00:00", + "inferred_at": "2026-01-09T19:51:29.272329+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-UT-LIN_XXXX_HENK-KIKKERT.json b/data/person/ID_NL-GR-GRO_199X_NL-UT-LIN_XXXX_HENK-KIKKERT.json index 177c511ec1..f89c3f3f6c 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-UT-LIN_XXXX_HENK-KIKKERT.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-UT-LIN_XXXX_HENK-KIKKERT.json @@ -240,7 +240,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henkkikkert_20251214T103106Z.json" ], - "modified_at": "2026-01-09T19:18:17.740093+00:00", + "modified_at": "2026-01-09T19:51:08.364198+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henkkikkert", @@ -272,7 +272,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -313,7 +313,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.740079+00:00", + "inferred_at": "2026-01-09T19:51:08.364193+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_EMMA-WAL.json b/data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_EMMA-WAL.json index f9da1435fc..1e709ad479 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_EMMA-WAL.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_EMMA-WAL.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emma-van-der-wal_20251214T112822Z.json" ], - "modified_at": "2026-01-09T19:18:14.181541+00:00", + "modified_at": "2026-01-09T19:50:58.807471+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emma-van-der-wal", @@ -156,7 +156,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.181536+00:00", + "inferred_at": "2026-01-09T19:50:58.807461+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_LAURA-VEEN.json b/data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_LAURA-VEEN.json similarity index 71% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_LAURA-VEEN.json rename to data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_LAURA-VEEN.json index cf0c1619d6..e190af2a11 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_LAURA-VEEN.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_LAURA-VEEN.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_LAURA-VEEN", + "ppid": "ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_LAURA-VEEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-GR-GRO", + "first_date": "199X", "last_location": "NL-UT-UTR", "last_date": "XXXX", "name_tokens": [ "LAURA", "VEEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Laura van Veen", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -190,63 +196,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laura-van-veen-a820b548_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:43:04.831365+00:00", + "modified_at": "2026-01-09T19:50:46.733589+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laura-van-veen-a820b548", - "inferred_current_settlement": { - "value": "Utrecht", - "formatted": "NL-UT-UTR", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "UTR", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Utrecht, Utrecht, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Utrecht, Utrecht, Netherlands", - "result": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-UTR" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - }, - "inferred_at": "2026-01-09T17:43:04.831359+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LAURA-VEEN", @@ -256,6 +209,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_LAURA-VEEN", + "new_ppid": "ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_LAURA-VEEN", + "changed_at": "2026-01-09T19:43:42.181849+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1992 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Walli", + "title": "Eigenaar", + "date_range": "Jul 2015 - Dec 2015" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2015 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2015 - 23 = 1992", + "result": "Estimated birth year: 1992", + "range": "1987-1997 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1987, + 1997 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:46.733584+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_LEON-D.json b/data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_LEON-D.json index 5c00a8cce2..d9d2ec4a2b 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_LEON-D.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_LEON-D.json @@ -146,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/leon-d-58537591_20251214T112757Z.json" ], - "modified_at": "2026-01-09T19:18:17.945868+00:00", + "modified_at": "2026-01-09T19:51:28.860004+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "leon-d-58537591", @@ -175,7 +175,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.945862+00:00", + "inferred_at": "2026-01-09T19:51:28.859999+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_LOTTE-LOON.json b/data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_LOTTE-LOON.json index 96e7fcaf44..5f32b214f6 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_LOTTE-LOON.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-UT-UTR_XXXX_LOTTE-LOON.json @@ -185,7 +185,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lotte-van-loon_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:13.815942+00:00", + "modified_at": "2026-01-09T19:50:56.604804+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lotte-van-loon", @@ -222,7 +222,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -271,7 +271,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.815938+00:00", + "inferred_at": "2026-01-09T19:50:56.604799+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-ZH-DEL_XXXX_KORNELIS-FRAGAKIS.json b/data/person/ID_NL-GR-GRO_199X_NL-ZH-DEL_XXXX_KORNELIS-FRAGAKIS.json index 07ae90d511..176bef96b5 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-ZH-DEL_XXXX_KORNELIS-FRAGAKIS.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-ZH-DEL_XXXX_KORNELIS-FRAGAKIS.json @@ -146,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kornelis-fragakis-3237a083_20251214T104050Z.json" ], - "modified_at": "2026-01-09T19:18:13.415811+00:00", + "modified_at": "2026-01-09T19:50:54.103919+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kornelis-fragakis-3237a083", @@ -169,7 +169,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.415808+00:00", + "inferred_at": "2026-01-09T19:50:54.103914+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-ZH-GOU_XXXX_SJORS-AKEN.json b/data/person/ID_NL-GR-GRO_199X_NL-ZH-GOU_XXXX_SJORS-AKEN.json index cd151fb11b..81f57db9e6 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-ZH-GOU_XXXX_SJORS-AKEN.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-ZH-GOU_XXXX_SJORS-AKEN.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sjors-van-aken_20251214T112737Z.json" ], - "modified_at": "2026-01-09T19:18:14.863041+00:00", + "modified_at": "2026-01-09T19:51:05.200654+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sjors-van-aken", @@ -141,7 +141,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.863035+00:00", + "inferred_at": "2026-01-09T19:51:05.200626+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-ZH-ROT_XXXX_JONATHAN-ELLEN.json b/data/person/ID_NL-GR-GRO_199X_NL-ZH-ROT_XXXX_JONATHAN-ELLEN.json index 30fc49f391..7258e19c44 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-ZH-ROT_XXXX_JONATHAN-ELLEN.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-ZH-ROT_XXXX_JONATHAN-ELLEN.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jonathan-ellen-7889bb15b_20251214T112752Z.json" ], - "modified_at": "2026-01-09T19:18:12.970976+00:00", + "modified_at": "2026-01-09T19:50:49.614770+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jonathan-ellen-7889bb15b", @@ -138,7 +138,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.970971+00:00", + "inferred_at": "2026-01-09T19:50:49.614764+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_HEINE-LAGEVEEN.json b/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_HEINE-LAGEVEEN.json index 6c1f8a99f6..297e9b381d 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_HEINE-LAGEVEEN.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_HEINE-LAGEVEEN.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/heine-lageveen-a369bb45_20251214T102921Z.json" ], - "modified_at": "2026-01-09T19:18:16.565619+00:00", + "modified_at": "2026-01-09T19:51:19.063163+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "heine-lageveen-a369bb45", @@ -150,7 +150,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.565613+00:00", + "inferred_at": "2026-01-09T19:51:19.063156+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_IDS-IEST.json b/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_IDS-IEST.json index c189c23002..440fac5189 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_IDS-IEST.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_IDS-IEST.json @@ -187,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ids-van-der-iest-609818113_20251214T102915Z.json" ], - "modified_at": "2026-01-09T19:18:16.511853+00:00", + "modified_at": "2026-01-09T19:51:18.558612+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ids-van-der-iest-609818113", @@ -210,7 +210,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -251,7 +251,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.511844+00:00", + "inferred_at": "2026-01-09T19:51:18.558607+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_JORIS-VOS.json b/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_JORIS-VOS.json index de1df984f8..295c409075 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_JORIS-VOS.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_JORIS-VOS.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joris-vos-b8b64a116_20251214T112811Z.json" ], - "modified_at": "2026-01-09T19:18:15.661169+00:00", + "modified_at": "2026-01-09T19:51:13.294321+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joris-vos-b8b64a116", @@ -192,7 +192,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.661164+00:00", + "inferred_at": "2026-01-09T19:51:13.294315+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_SANNE-BARZILAY.json b/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_SANNE-BARZILAY.json index c012bd88f5..4e9effacfe 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_SANNE-BARZILAY.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_SANNE-BARZILAY.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sannebarzilay_20251214T112745Z.json" ], - "modified_at": "2026-01-09T19:18:13.923416+00:00", + "modified_at": "2026-01-09T19:50:56.850020+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sannebarzilay", @@ -157,7 +157,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.923411+00:00", + "inferred_at": "2026-01-09T19:50:56.850013+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_SILKE-REMMITS.json b/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_SILKE-REMMITS.json index ed83e336a6..36b66698d7 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_SILKE-REMMITS.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_SILKE-REMMITS.json @@ -188,7 +188,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/silke-remmits-b909a0119_20251214T103030Z.json" ], - "modified_at": "2026-01-09T19:18:13.561139+00:00", + "modified_at": "2026-01-09T19:50:55.061025+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "silke-remmits-b909a0119", @@ -211,7 +211,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.561136+00:00", + "inferred_at": "2026-01-09T19:50:55.061019+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_XIAO-XU.json b/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_XIAO-XU.json index 574ff99bea..e66e1e3149 100644 --- a/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_XIAO-XU.json +++ b/data/person/ID_NL-GR-GRO_199X_NL-ZH-TH_XXXX_XIAO-XU.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/willskywalker_20251214T113117Z.json" ], - "modified_at": "2026-01-09T19:18:14.734995+00:00", + "modified_at": "2026-01-09T19:51:22.030208+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "willskywalker", @@ -183,7 +183,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.734990+00:00", + "inferred_at": "2026-01-09T19:51:22.030203+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_ANNA-HOUCK.json b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_ANNA-HOUCK.json index 9c5b1c0fc5..e12e74f651 100644 --- a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_ANNA-HOUCK.json +++ b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_ANNA-HOUCK.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annahouck_20251214T102741Z.json" ], - "modified_at": "2026-01-09T19:18:13.306481+00:00", + "modified_at": "2026-01-09T19:50:53.860354+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annahouck", @@ -166,7 +166,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.304585+00:00", + "inferred_at": "2026-01-09T19:50:53.857786+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_ARISKA-BOSCH.json b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_ARISKA-BOSCH.json index ba51945cf2..450a79de07 100644 --- a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_ARISKA-BOSCH.json +++ b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_ARISKA-BOSCH.json @@ -183,7 +183,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ariska-bosch_20251214T102901Z.json" ], - "modified_at": "2026-01-09T19:18:17.959940+00:00", + "modified_at": "2026-01-09T19:51:28.868742+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ariska-bosch", @@ -205,7 +205,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +246,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.954914+00:00", + "inferred_at": "2026-01-09T19:51:28.863938+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_AUDREY-KOENDERS.json b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_AUDREY-KOENDERS.json similarity index 92% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_AUDREY-KOENDERS.json rename to data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_AUDREY-KOENDERS.json index e52e2ba011..2ee7c1a757 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_AUDREY-KOENDERS.json +++ b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_AUDREY-KOENDERS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_AUDREY-KOENDERS", + "ppid": "ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_AUDREY-KOENDERS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-GR-GRO", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Audrey Koenders", @@ -170,7 +171,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/audrey-koenders-9920a070_20251214T113032Z.json" ], - "modified_at": "2026-01-09T19:18:14.733011+00:00", + "modified_at": "2026-01-09T19:51:17.589233+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "audrey-koenders-9920a070", @@ -192,6 +193,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_AUDREY-KOENDERS", + "new_ppid": "ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_AUDREY-KOENDERS", + "changed_at": "2026-01-09T19:43:39.266691+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -200,7 +211,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +252,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.731052+00:00", + "inferred_at": "2026-01-09T19:51:17.587245+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_BOUDEWIEN-GOSLINGS.json b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_BOUDEWIEN-GOSLINGS.json index 8f3b71b0b6..06e9399365 100644 --- a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_BOUDEWIEN-GOSLINGS.json +++ b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_BOUDEWIEN-GOSLINGS.json @@ -159,7 +159,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/boudewien-goslings-b53a93174_20251214T111750Z.json" ], - "modified_at": "2026-01-09T19:18:18.335287+00:00", + "modified_at": "2026-01-09T19:51:29.280178+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "boudewien-goslings-b53a93174", @@ -187,7 +187,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.332790+00:00", + "inferred_at": "2026-01-09T19:51:29.278322+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_ELSBETH-WOLRICH.json b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_ELSBETH-WOLRICH.json index 005af59773..ab3e6e63a9 100644 --- a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_ELSBETH-WOLRICH.json +++ b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_ELSBETH-WOLRICH.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elsbethwolrich_20251214T103203Z.json" ], - "modified_at": "2026-01-09T19:18:18.423986+00:00", + "modified_at": "2026-01-09T19:51:18.517027+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elsbethwolrich", @@ -157,7 +157,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.421774+00:00", + "inferred_at": "2026-01-09T19:51:18.514639+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_EMILIE-HOVEN.json b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_EMILIE-HOVEN.json index 0eabb85b25..1f8a0bc8e0 100644 --- a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_EMILIE-HOVEN.json +++ b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_EMILIE-HOVEN.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emilie-van-den-hoven-366a80122_20251214T112806Z.json" ], - "modified_at": "2026-01-09T19:18:11.418450+00:00", + "modified_at": "2026-01-09T19:50:46.844095+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emilie-van-den-hoven-366a80122", @@ -186,7 +186,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.372522+00:00", + "inferred_at": "2026-01-09T19:50:46.735861+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_EMMA-LINDERS.json b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_EMMA-LINDERS.json index eed7eb311a..24da79a904 100644 --- a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_EMMA-LINDERS.json +++ b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_EMMA-LINDERS.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emmalinders_20251214T103014Z.json" ], - "modified_at": "2026-01-09T19:18:13.581082+00:00", + "modified_at": "2026-01-09T19:50:55.110832+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emmalinders", @@ -151,7 +151,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.579060+00:00", + "inferred_at": "2026-01-09T19:50:55.106621+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_HANNAH-BIJLSMA.json b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_HANNAH-BIJLSMA.json index 4cd0c96852..3905a179f7 100644 --- a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_HANNAH-BIJLSMA.json +++ b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_HANNAH-BIJLSMA.json @@ -270,7 +270,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hannah-bijlsma-73372465_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:17.448507+00:00", + "modified_at": "2026-01-09T19:51:28.147044+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hannah-bijlsma-73372465", @@ -298,7 +298,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -347,7 +347,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.446324+00:00", + "inferred_at": "2026-01-09T19:51:28.145011+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_WOUTER-STAAIJ.json b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_WOUTER-STAAIJ.json index 3ac7e5b137..f095d0b9d8 100644 --- a/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_WOUTER-STAAIJ.json +++ b/data/person/ID_NL-GR-GRO_199X_XX-XX-XXX_XXXX_WOUTER-STAAIJ.json @@ -226,7 +226,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/woutervandestaaij_20251214T102849Z.json" ], - "modified_at": "2026-01-09T19:18:15.219767+00:00", + "modified_at": "2026-01-09T19:51:07.030259+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "woutervandestaaij", @@ -254,7 +254,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -303,7 +303,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.217795+00:00", + "inferred_at": "2026-01-09T19:51:07.028315+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_200X_NL-GR-GRO_XXXX_ERIK-OTZEN.json b/data/person/ID_NL-GR-GRO_200X_NL-GR-GRO_XXXX_ERIK-OTZEN.json index fed10c0eb4..757345e0c0 100644 --- a/data/person/ID_NL-GR-GRO_200X_NL-GR-GRO_XXXX_ERIK-OTZEN.json +++ b/data/person/ID_NL-GR-GRO_200X_NL-GR-GRO_XXXX_ERIK-OTZEN.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erikotzen_20251214T112205Z.json" ], - "modified_at": "2026-01-09T19:18:15.081135+00:00", + "modified_at": "2026-01-09T19:51:06.720112+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erikotzen", @@ -111,7 +111,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.081130+00:00", + "inferred_at": "2026-01-09T19:51:06.720106+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_200X_NL-GR-GRO_XXXX_INGEBORG-STRUYK.json b/data/person/ID_NL-GR-GRO_200X_NL-GR-GRO_XXXX_INGEBORG-STRUYK.json index b31e62bf0c..7775131d21 100644 --- a/data/person/ID_NL-GR-GRO_200X_NL-GR-GRO_XXXX_INGEBORG-STRUYK.json +++ b/data/person/ID_NL-GR-GRO_200X_NL-GR-GRO_XXXX_INGEBORG-STRUYK.json @@ -171,7 +171,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ingeborgstruyk_20251214T112540Z.json" ], - "modified_at": "2026-01-09T19:18:16.761285+00:00", + "modified_at": "2026-01-09T19:51:06.353367+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ingeborgstruyk", @@ -203,7 +203,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -244,7 +244,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.761279+00:00", + "inferred_at": "2026-01-09T19:51:06.353364+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-GR-GRO_200X_NL-GR-GRO_XXXX_WOUTER-HEIJERMAN.json b/data/person/ID_NL-GR-GRO_200X_NL-GR-GRO_XXXX_WOUTER-HEIJERMAN.json index 606482dc48..b66d170edb 100644 --- a/data/person/ID_NL-GR-GRO_200X_NL-GR-GRO_XXXX_WOUTER-HEIJERMAN.json +++ b/data/person/ID_NL-GR-GRO_200X_NL-GR-GRO_XXXX_WOUTER-HEIJERMAN.json @@ -133,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wouter-heijerman-618ba5a_20251214T112259Z.json" ], - "modified_at": "2026-01-09T19:18:16.767620+00:00", + "modified_at": "2026-01-09T19:50:53.685525+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wouter-heijerman-618ba5a", @@ -165,7 +165,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.767615+00:00", + "inferred_at": "2026-01-09T19:50:53.685518+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-UT-UTR_XXXX_WIJNT-MA.json b/data/person/ID_NL-LI-HEE_196X_NL-UT-UTR_XXXX_WIJNT-MA.json similarity index 66% rename from data/person/ID_XX-XX-XXX_196X_NL-UT-UTR_XXXX_WIJNT-MA.json rename to data/person/ID_NL-LI-HEE_196X_NL-UT-UTR_XXXX_WIJNT-MA.json index 94ca439c04..778be431aa 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-UT-UTR_XXXX_WIJNT-MA.json +++ b/data/person/ID_NL-LI-HEE_196X_NL-UT-UTR_XXXX_WIJNT-MA.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_NL-UT-UTR_XXXX_WIJNT-MA", + "ppid": "ID_NL-LI-HEE_196X_NL-UT-UTR_XXXX_WIJNT-MA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-LI-HEE", "first_date": "196X", "last_location": "NL-UT-UTR", "last_date": "XXXX", @@ -12,7 +12,8 @@ "MA" ], "first_date_source": "inferred_birth_decade", - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Wijnt van Asselt Ma", @@ -110,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wijnt-van-asselt-ma-a240a438_20251214T113128Z.json" ], - "modified_at": "2026-01-09T19:18:13.182183+00:00", + "modified_at": "2026-01-09T19:50:53.225297+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wijnt-van-asselt-ma-a240a438", @@ -124,6 +125,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_NL-UT-UTR_XXXX_WIJNT-MA", + "new_ppid": "ID_NL-LI-HEE_196X_NL-UT-UTR_XXXX_WIJNT-MA", + "changed_at": "2026-01-09T19:50:53.225294+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -132,7 +143,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +184,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.182106+00:00", + "inferred_at": "2026-01-09T19:50:53.223151+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Heerlen", + "formatted": "NL-LI-HEE", + "country_code": "NL", + "region_code": "LI", + "settlement_code": "HEE", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Open Universiteit", + "date_range": "2011 - 2017 • 6 years", + "degree": "Bachelor of Arts - BA, wo Algemene Cultuurwetenschappen" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Open Universiteit", + "mapping_result": "Heerlen, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Heerlen, Netherlands", + "result": { + "geonames_id": 2754652, + "geonames_name": "Heerlen", + "admin1_code": "05", + "admin1_name": "Limburg", + "feature_code": "PPL", + "latitude": 50.88365, + "longitude": 5.98154 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "LI", + "settlement_code": "HEE" + }, + "result": "NL-LI-HEE" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2754652, + "geonames_name": "Heerlen", + "admin1_code": "05", + "admin1_name": "Limburg", + "feature_code": "PPL", + "latitude": 50.88365, + "longitude": 5.98154 + }, + "inferred_at": "2026-01-09T19:50:53.225288+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-WIN_XXXX_MARIEKE-UBBINK.json b/data/person/ID_NL-LI-HEE_198X_NL-GE-WIN_XXXX_MARIEKE-UBBINK.json similarity index 75% rename from data/person/ID_XX-XX-XXX_198X_NL-GE-WIN_XXXX_MARIEKE-UBBINK.json rename to data/person/ID_NL-LI-HEE_198X_NL-GE-WIN_XXXX_MARIEKE-UBBINK.json index f4430e0be4..a4b831e99c 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-WIN_XXXX_MARIEKE-UBBINK.json +++ b/data/person/ID_NL-LI-HEE_198X_NL-GE-WIN_XXXX_MARIEKE-UBBINK.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-GE-WIN_XXXX_MARIEKE-UBBINK", + "ppid": "ID_NL-LI-HEE_198X_NL-GE-WIN_XXXX_MARIEKE-UBBINK", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-LI-HEE", "first_date": "198X", "last_location": "NL-GE-WIN", "last_date": "XXXX", @@ -15,7 +15,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Marieke Ubbink", @@ -185,7 +186,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marieke-ubbink-7119a3167_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:14.770933+00:00", + "modified_at": "2026-01-09T19:51:04.059338+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marieke-ubbink-7119a3167", @@ -207,6 +208,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-GE-WIN_XXXX_MARIEKE-UBBINK", + "new_ppid": "ID_NL-LI-HEE_198X_NL-GE-WIN_XXXX_MARIEKE-UBBINK", + "changed_at": "2026-01-09T19:51:04.059337+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -221,7 +232,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -270,7 +281,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.770898+00:00", + "inferred_at": "2026-01-09T19:51:04.057393+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Heerlen", + "formatted": "NL-LI-HEE", + "country_code": "NL", + "region_code": "LI", + "settlement_code": "HEE", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Open Universiteit", + "date_range": "2014 - 2018", + "degree": "MSc, Master Management" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Open Universiteit", + "mapping_result": "Heerlen, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Heerlen, Netherlands", + "result": { + "geonames_id": 2754652, + "geonames_name": "Heerlen", + "admin1_code": "05", + "admin1_name": "Limburg", + "feature_code": "PPL", + "latitude": 50.88365, + "longitude": 5.98154 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "LI", + "settlement_code": "HEE" + }, + "result": "NL-LI-HEE" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2754652, + "geonames_name": "Heerlen", + "admin1_code": "05", + "admin1_name": "Limburg", + "feature_code": "PPL", + "latitude": 50.88365, + "longitude": 5.98154 + }, + "inferred_at": "2026-01-09T19:51:04.059331+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MELIKE-YENIAY.json b/data/person/ID_NL-LI-HEE_200X_XX-XX-XXX_XXXX_MELIKE-YENIAY.json similarity index 63% rename from data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MELIKE-YENIAY.json rename to data/person/ID_NL-LI-HEE_200X_XX-XX-XXX_XXXX_MELIKE-YENIAY.json index 4d749acc39..cc741135e5 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MELIKE-YENIAY.json +++ b/data/person/ID_NL-LI-HEE_200X_XX-XX-XXX_XXXX_MELIKE-YENIAY.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MELIKE-YENIAY", + "ppid": "ID_NL-LI-HEE_200X_XX-XX-XXX_XXXX_MELIKE-YENIAY", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-LI-HEE", "first_date": "200X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "201X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Melike Yeniay", @@ -98,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/melike-yeniay-a787b7231_20251214T112644Z.json" ], - "modified_at": "2026-01-09T19:18:13.433567+00:00", + "modified_at": "2026-01-09T19:50:54.174910+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "melike-yeniay-a787b7231", @@ -111,6 +112,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MELIKE-YENIAY", + "new_ppid": "ID_NL-LI-HEE_200X_XX-XX-XXX_XXXX_MELIKE-YENIAY", + "changed_at": "2026-01-09T19:50:54.174897+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -119,7 +130,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +171,77 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.427904+00:00", + "inferred_at": "2026-01-09T19:50:54.159457+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Heerlen", + "formatted": "NL-LI-HEE", + "country_code": "NL", + "region_code": "LI", + "settlement_code": "HEE", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Open Universiteit", + "date_range": "2025 - 2025", + "degree": "Pre-master, Law" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Open Universiteit", + "mapping_result": "Heerlen, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Heerlen, Netherlands", + "result": { + "geonames_id": 2754652, + "geonames_name": "Heerlen", + "admin1_code": "05", + "admin1_name": "Limburg", + "feature_code": "PPL", + "latitude": 50.88365, + "longitude": 5.98154 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "LI", + "settlement_code": "HEE" + }, + "result": "NL-LI-HEE" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2754652, + "geonames_name": "Heerlen", + "admin1_code": "05", + "admin1_name": "Limburg", + "feature_code": "PPL", + "latitude": 50.88365, + "longitude": 5.98154 + }, + "inferred_at": "2026-01-09T19:50:54.166602+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_195X_NL-NB-BOZ_XXXX_RONALD-GOOSSENS.json b/data/person/ID_NL-LI-MAA_195X_NL-NB-BOZ_XXXX_RONALD-GOOSSENS.json index 0e37c6f415..21df13519a 100644 --- a/data/person/ID_NL-LI-MAA_195X_NL-NB-BOZ_XXXX_RONALD-GOOSSENS.json +++ b/data/person/ID_NL-LI-MAA_195X_NL-NB-BOZ_XXXX_RONALD-GOOSSENS.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ronald-goossens-44611023_20251214T104031Z.json" ], - "modified_at": "2026-01-09T19:18:15.300481+00:00", + "modified_at": "2026-01-09T19:51:08.432182+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ronald-goossens-44611023", @@ -174,7 +174,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.300478+00:00", + "inferred_at": "2026-01-09T19:51:08.432178+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_195X_NL-ZH-MAA_XXXX_PETER-SMIT.json b/data/person/ID_NL-LI-MAA_195X_NL-ZH-MAA_XXXX_PETER-SMIT.json index 48d0815df9..75acbb7c4e 100644 --- a/data/person/ID_NL-LI-MAA_195X_NL-ZH-MAA_XXXX_PETER-SMIT.json +++ b/data/person/ID_NL-LI-MAA_195X_NL-ZH-MAA_XXXX_PETER-SMIT.json @@ -340,7 +340,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/peter-smit-b38405114_20251214T112355Z.json" ], - "modified_at": "2026-01-09T19:18:11.652547+00:00", + "modified_at": "2026-01-09T19:50:47.259837+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "peter-smit-b38405114", @@ -369,7 +369,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -418,7 +418,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:11.652540+00:00", + "inferred_at": "2026-01-09T19:50:47.259829+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARNO-LODDER.json b/data/person/ID_NL-LI-MAA_196X_NL-NH-AMS_XXXX_ARNO-LODDER.json similarity index 75% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARNO-LODDER.json rename to data/person/ID_NL-LI-MAA_196X_NL-NH-AMS_XXXX_ARNO-LODDER.json index 3f25b28224..fd8889e83b 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARNO-LODDER.json +++ b/data/person/ID_NL-LI-MAA_196X_NL-NH-AMS_XXXX_ARNO-LODDER.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARNO-LODDER", + "ppid": "ID_NL-LI-MAA_196X_NL-NH-AMS_XXXX_ARNO-LODDER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-LI-MAA", + "first_date": "196X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ARNO", "LODDER" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Arno R. Lodder", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -218,63 +224,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arlodder_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:06.299329+00:00", + "modified_at": "2026-01-09T19:51:34.573799+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arlodder", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:06.299321+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNO-LODDER", @@ -284,6 +237,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARNO-LODDER", + "new_ppid": "ID_NL-LI-MAA_196X_NL-NH-AMS_XXXX_ARNO-LODDER", + "changed_at": "2026-01-09T19:43:42.583578+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "196X", + "primary_rationale": "1969 is in 196X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Maastricht University", + "title": "Lecturer in Law, Ph.D Researcher, Coordinator Computer-assisted Education", + "date_range": "1992 - 1998" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1992 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1992 - 23 = 1969", + "result": "Estimated birth year: 1969", + "range": "1964-1974 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1964, + 1974 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:51:34.573794+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-LI-MAA_196X_NL-ZH-TH_XXXX_DAISY-G.json b/data/person/ID_NL-LI-MAA_196X_NL-ZH-TH_XXXX_DAISY-G.json index 01e9064444..d2c5a95b69 100644 --- a/data/person/ID_NL-LI-MAA_196X_NL-ZH-TH_XXXX_DAISY-G.json +++ b/data/person/ID_NL-LI-MAA_196X_NL-ZH-TH_XXXX_DAISY-G.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daisygeurts_20251214T103007Z.json" ], - "modified_at": "2026-01-09T19:18:15.708367+00:00", + "modified_at": "2026-01-09T19:51:28.918036+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daisygeurts", @@ -191,7 +191,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.708360+00:00", + "inferred_at": "2026-01-09T19:51:28.918032+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_196X_NL-ZH-TH_XXXX_DEWI-WEERD.json b/data/person/ID_NL-LI-MAA_196X_NL-ZH-TH_XXXX_DEWI-WEERD.json index e54f8b668d..9daab04d5c 100644 --- a/data/person/ID_NL-LI-MAA_196X_NL-ZH-TH_XXXX_DEWI-WEERD.json +++ b/data/person/ID_NL-LI-MAA_196X_NL-ZH-TH_XXXX_DEWI-WEERD.json @@ -184,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dewi-van-de-weerd-ba55542b_20251214T102953Z.json" ], - "modified_at": "2026-01-09T19:18:17.656944+00:00", + "modified_at": "2026-01-09T19:51:14.180479+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dewi-van-de-weerd-ba55542b", @@ -222,7 +222,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -271,7 +271,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.656937+00:00", + "inferred_at": "2026-01-09T19:51:14.180474+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_196X_NL-ZH-TH_XXXX_RICHARD-JANSEN.json b/data/person/ID_NL-LI-MAA_196X_NL-ZH-TH_XXXX_RICHARD-JANSEN.json index 52d8fcb828..48a624a348 100644 --- a/data/person/ID_NL-LI-MAA_196X_NL-ZH-TH_XXXX_RICHARD-JANSEN.json +++ b/data/person/ID_NL-LI-MAA_196X_NL-ZH-TH_XXXX_RICHARD-JANSEN.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/richardjansenhinttech_20251214T112708Z.json" ], - "modified_at": "2026-01-09T19:18:16.583649+00:00", + "modified_at": "2026-01-09T19:51:07.002026+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "richardjansenhinttech", @@ -162,7 +162,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.583640+00:00", + "inferred_at": "2026-01-09T19:51:07.002019+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_197X_NL-LI-MAA_XXXX_CHEQUITA-NAHAR.json b/data/person/ID_NL-LI-MAA_197X_NL-LI-MAA_XXXX_CHEQUITA-NAHAR.json index efc1a05ca6..458f03317c 100644 --- a/data/person/ID_NL-LI-MAA_197X_NL-LI-MAA_XXXX_CHEQUITA-NAHAR.json +++ b/data/person/ID_NL-LI-MAA_197X_NL-LI-MAA_XXXX_CHEQUITA-NAHAR.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chequita-nahar-446313b_20251214T112544Z.json" ], - "modified_at": "2026-01-09T19:18:15.366936+00:00", + "modified_at": "2026-01-09T19:51:08.609680+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "chequita-nahar-446313b", @@ -159,7 +159,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.366933+00:00", + "inferred_at": "2026-01-09T19:51:08.609675+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_197X_NL-NB-TIL_XXXX_DANIELLE-ARETS.json b/data/person/ID_NL-LI-MAA_197X_NL-NB-TIL_XXXX_DANIELLE-ARETS.json index e08fb689fd..dcd26b7712 100644 --- a/data/person/ID_NL-LI-MAA_197X_NL-NB-TIL_XXXX_DANIELLE-ARETS.json +++ b/data/person/ID_NL-LI-MAA_197X_NL-NB-TIL_XXXX_DANIELLE-ARETS.json @@ -222,8 +222,10 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T00:33:00Z", + "result": "not_found", + "notes": "Exa search found Fontys professor profile but no birth date. Search query: \"Daniëlle Arets\" Fontys professor born birthday biography" } }, "provenance": { @@ -232,7 +234,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/darets_20251214T112457Z.json" ], - "modified_at": "2026-01-09T19:18:11.561934+00:00", + "modified_at": "2026-01-09T19:51:04.567599+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "darets", @@ -264,7 +266,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -305,7 +307,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.561924+00:00", + "inferred_at": "2026-01-09T19:51:04.567594+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_197X_NL-NH-VIJ_XXXX_VALENTIJN-WORTELBOER.json b/data/person/ID_NL-LI-MAA_197X_NL-NH-VIJ_XXXX_VALENTIJN-WORTELBOER.json index 86100c815a..774a630656 100644 --- a/data/person/ID_NL-LI-MAA_197X_NL-NH-VIJ_XXXX_VALENTIJN-WORTELBOER.json +++ b/data/person/ID_NL-LI-MAA_197X_NL-NH-VIJ_XXXX_VALENTIJN-WORTELBOER.json @@ -199,7 +199,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/valentijn-wortelboer-00037477_20251214T103258Z.json" ], - "modified_at": "2026-01-09T19:18:15.962942+00:00", + "modified_at": "2026-01-09T19:51:34.513428+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "valentijn-wortelboer-00037477", @@ -237,7 +237,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -286,7 +286,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.962935+00:00", + "inferred_at": "2026-01-09T19:51:34.513395+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_197X_NL-ZH-TH_XXXX_CATHELIJNE-KUITERS.json b/data/person/ID_NL-LI-MAA_197X_NL-ZH-TH_XXXX_CATHELIJNE-KUITERS.json index dbed330731..3a55e1c0eb 100644 --- a/data/person/ID_NL-LI-MAA_197X_NL-ZH-TH_XXXX_CATHELIJNE-KUITERS.json +++ b/data/person/ID_NL-LI-MAA_197X_NL-ZH-TH_XXXX_CATHELIJNE-KUITERS.json @@ -241,7 +241,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cathelijnekuiters_20251214T113331Z.json" ], - "modified_at": "2026-01-09T19:18:17.655592+00:00", + "modified_at": "2026-01-09T19:51:12.696012+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cathelijnekuiters", @@ -273,7 +273,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -314,7 +314,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.655585+00:00", + "inferred_at": "2026-01-09T19:51:12.696006+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_198X_BE-BR-BRU_XXXX_LOUISE-BICKNESE.json b/data/person/ID_NL-LI-MAA_198X_BE-BR-BRU_XXXX_LOUISE-BICKNESE.json index cf86830ea2..d4c9096503 100644 --- a/data/person/ID_NL-LI-MAA_198X_BE-BR-BRU_XXXX_LOUISE-BICKNESE.json +++ b/data/person/ID_NL-LI-MAA_198X_BE-BR-BRU_XXXX_LOUISE-BICKNESE.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/louisebicknese_20251214T103215Z.json" ], - "modified_at": "2026-01-09T19:18:14.299489+00:00", + "modified_at": "2026-01-09T19:51:05.135035+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "louisebicknese", @@ -133,7 +133,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.299484+00:00", + "inferred_at": "2026-01-09T19:51:05.135026+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_198X_NL-LI-MAA_XXXX_BART-ZWEGERS.json b/data/person/ID_NL-LI-MAA_198X_NL-LI-MAA_XXXX_BART-ZWEGERS.json index 0ff37826c5..9cb1fbabda 100644 --- a/data/person/ID_NL-LI-MAA_198X_NL-LI-MAA_XXXX_BART-ZWEGERS.json +++ b/data/person/ID_NL-LI-MAA_198X_NL-LI-MAA_XXXX_BART-ZWEGERS.json @@ -146,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bart-zwegers_20251214T110438Z.json" ], - "modified_at": "2026-01-09T19:18:13.416736+00:00", + "modified_at": "2026-01-09T19:50:54.105338+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bart-zwegers", @@ -175,7 +175,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.416733+00:00", + "inferred_at": "2026-01-09T19:50:54.105330+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_198X_NL-LI-MAA_XXXX_JOEP-VOSSEBELD.json b/data/person/ID_NL-LI-MAA_198X_NL-LI-MAA_XXXX_JOEP-VOSSEBELD.json index 5b47fafc19..6d83be5c39 100644 --- a/data/person/ID_NL-LI-MAA_198X_NL-LI-MAA_XXXX_JOEP-VOSSEBELD.json +++ b/data/person/ID_NL-LI-MAA_198X_NL-LI-MAA_XXXX_JOEP-VOSSEBELD.json @@ -231,7 +231,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joepvossebeld_20251214T112526Z.json" ], - "modified_at": "2026-01-09T19:18:15.472126+00:00", + "modified_at": "2026-01-09T19:51:11.043523+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joepvossebeld", @@ -260,7 +260,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -309,7 +309,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.472121+00:00", + "inferred_at": "2026-01-09T19:51:11.043515+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_198X_NL-NH-AMS_XXXX_LORENA-REGUERA.json b/data/person/ID_NL-LI-MAA_198X_NL-NH-AMS_XXXX_LORENA-REGUERA.json index 248e76f793..dcec754f01 100644 --- a/data/person/ID_NL-LI-MAA_198X_NL-NH-AMS_XXXX_LORENA-REGUERA.json +++ b/data/person/ID_NL-LI-MAA_198X_NL-NH-AMS_XXXX_LORENA-REGUERA.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lorena-reguera-88a25560_20251214T110316Z.json" ], - "modified_at": "2026-01-09T19:18:18.197028+00:00", + "modified_at": "2026-01-09T19:51:05.485182+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lorena-reguera-88a25560", @@ -183,7 +183,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.197018+00:00", + "inferred_at": "2026-01-09T19:51:05.485172+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_198X_NL-ZH-DEL_XXXX_JULIE-IDES.json b/data/person/ID_NL-LI-MAA_198X_NL-ZH-DEL_XXXX_JULIE-IDES.json index 13701b5edf..8c361449bb 100644 --- a/data/person/ID_NL-LI-MAA_198X_NL-ZH-DEL_XXXX_JULIE-IDES.json +++ b/data/person/ID_NL-LI-MAA_198X_NL-ZH-DEL_XXXX_JULIE-IDES.json @@ -221,7 +221,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/julieseuront_20251214T104046Z.json" ], - "modified_at": "2026-01-09T19:18:17.901886+00:00", + "modified_at": "2026-01-09T19:51:28.839350+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "julieseuront", @@ -250,7 +250,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -299,7 +299,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.901880+00:00", + "inferred_at": "2026-01-09T19:51:28.839345+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_198X_NL-ZH-KAZ_XXXX_MELANIE-TUIJL.json b/data/person/ID_NL-LI-MAA_198X_NL-ZH-KAZ_XXXX_MELANIE-TUIJL.json index b84ae319fd..2b5b97f4fb 100644 --- a/data/person/ID_NL-LI-MAA_198X_NL-ZH-KAZ_XXXX_MELANIE-TUIJL.json +++ b/data/person/ID_NL-LI-MAA_198X_NL-ZH-KAZ_XXXX_MELANIE-TUIJL.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/melanie-van-tuijl-2a6396103_20251212T221600Z.json" ], - "modified_at": "2026-01-09T19:18:15.447947+00:00", + "modified_at": "2026-01-09T19:51:10.869154+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "melanie-van-tuijl-2a6396103", @@ -152,7 +152,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.447944+00:00", + "inferred_at": "2026-01-09T19:51:10.869149+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_198X_NL-ZH-TH_XXXX_IONA-EBBEN.json b/data/person/ID_NL-LI-MAA_198X_NL-ZH-TH_XXXX_IONA-EBBEN.json index 32ee8789cb..48b558dab2 100644 --- a/data/person/ID_NL-LI-MAA_198X_NL-ZH-TH_XXXX_IONA-EBBEN.json +++ b/data/person/ID_NL-LI-MAA_198X_NL-ZH-TH_XXXX_IONA-EBBEN.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/iona-ebben-b7581542_20251214T102944Z.json" ], - "modified_at": "2026-01-09T19:18:16.756829+00:00", + "modified_at": "2026-01-09T19:51:21.816215+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "iona-ebben-b7581542", @@ -195,7 +195,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -244,7 +244,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.756825+00:00", + "inferred_at": "2026-01-09T19:51:21.816209+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_198X_NL-ZH-TH_XXXX_JURRIAAN-MIDDELHOFF.json b/data/person/ID_NL-LI-MAA_198X_NL-ZH-TH_XXXX_JURRIAAN-MIDDELHOFF.json index 5da8cf8078..668534b43c 100644 --- a/data/person/ID_NL-LI-MAA_198X_NL-ZH-TH_XXXX_JURRIAAN-MIDDELHOFF.json +++ b/data/person/ID_NL-LI-MAA_198X_NL-ZH-TH_XXXX_JURRIAAN-MIDDELHOFF.json @@ -203,7 +203,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jurriaan-middelhoff-4a44278_20251214T102935Z.json" ], - "modified_at": "2026-01-09T19:18:14.147850+00:00", + "modified_at": "2026-01-09T19:50:58.717957+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jurriaan-middelhoff-4a44278", @@ -232,7 +232,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -281,7 +281,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.147846+00:00", + "inferred_at": "2026-01-09T19:50:58.717951+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_198X_XX-XX-XXX_XXXX_JESPER-SAMAN.json b/data/person/ID_NL-LI-MAA_198X_XX-XX-XXX_XXXX_JESPER-SAMAN.json index 6691456e4f..d8b7c66d11 100644 --- a/data/person/ID_NL-LI-MAA_198X_XX-XX-XXX_XXXX_JESPER-SAMAN.json +++ b/data/person/ID_NL-LI-MAA_198X_XX-XX-XXX_XXXX_JESPER-SAMAN.json @@ -211,7 +211,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jesper-daniek-saman-14910460_20251214T102950Z.json" ], - "modified_at": "2026-01-09T19:18:14.348871+00:00", + "modified_at": "2026-01-09T19:50:53.219828+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jesper-daniek-saman-14910460", @@ -248,7 +248,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -297,7 +297,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.346829+00:00", + "inferred_at": "2026-01-09T19:50:53.217739+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_199X_XX-XX-XXX_XXXX_BEN-BRADLY.json b/data/person/ID_NL-LI-MAA_199X_AU-01-CAN_XXXX_BEN-BRADLY.json similarity index 77% rename from data/person/ID_NL-LI-MAA_199X_XX-XX-XXX_XXXX_BEN-BRADLY.json rename to data/person/ID_NL-LI-MAA_199X_AU-01-CAN_XXXX_BEN-BRADLY.json index 9889d095d0..afc9382097 100644 --- a/data/person/ID_NL-LI-MAA_199X_XX-XX-XXX_XXXX_BEN-BRADLY.json +++ b/data/person/ID_NL-LI-MAA_199X_AU-01-CAN_XXXX_BEN-BRADLY.json @@ -1,11 +1,11 @@ { - "ppid": "ID_NL-LI-MAA_199X_XX-XX-XXX_XXXX_BEN-BRADLY", + "ppid": "ID_NL-LI-MAA_199X_AU-01-CAN_XXXX_BEN-BRADLY", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "NL-LI-MAA", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "BEN", @@ -15,7 +15,8 @@ "first_location_source": "inferred_birth_settlement", "first_date_alternatives": [ "200X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Ben Bradly", @@ -137,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ben-bradly-314054127_20251214T103919Z.json" ], - "modified_at": "2026-01-09T19:18:14.779820+00:00", + "modified_at": "2026-01-09T19:51:04.537197+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ben-bradly-314054127", @@ -151,6 +152,16 @@ "inferred_birth_decade", "inferred_birth_settlement" ] + }, + { + "previous_ppid": "ID_NL-LI-MAA_199X_XX-XX-XXX_XXXX_BEN-BRADLY", + "new_ppid": "ID_NL-LI-MAA_199X_AU-01-CAN_XXXX_BEN-BRADLY", + "changed_at": "2026-01-09T19:51:04.537194+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -159,7 +170,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +211,60 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.779813+00:00", + "inferred_at": "2026-01-09T19:51:04.524664+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:04.537183+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_199X_BE-VL-LEU_XXXX_JUDITH-PUYVELDE.json b/data/person/ID_NL-LI-MAA_199X_BE-VL-LEU_XXXX_JUDITH-PUYVELDE.json index 2243f7a314..ad5b60acac 100644 --- a/data/person/ID_NL-LI-MAA_199X_BE-VL-LEU_XXXX_JUDITH-PUYVELDE.json +++ b/data/person/ID_NL-LI-MAA_199X_BE-VL-LEU_XXXX_JUDITH-PUYVELDE.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/judith-van-puyvelde_20251214T110443Z.json" ], - "modified_at": "2026-01-09T19:18:17.055064+00:00", + "modified_at": "2026-01-09T19:51:25.484531+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "judith-van-puyvelde", @@ -139,7 +139,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.055057+00:00", + "inferred_at": "2026-01-09T19:51:25.484524+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_199X_DE-16-BER_XXXX_DELPHINE-BOKAY.json b/data/person/ID_NL-LI-MAA_199X_DE-16-BER_XXXX_DELPHINE-BOKAY.json index 16d67fcef7..81629fd380 100644 --- a/data/person/ID_NL-LI-MAA_199X_DE-16-BER_XXXX_DELPHINE-BOKAY.json +++ b/data/person/ID_NL-LI-MAA_199X_DE-16-BER_XXXX_DELPHINE-BOKAY.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/delphine-de-bokay-2574a827b_20251214T110028Z.json" ], - "modified_at": "2026-01-09T19:18:17.658650+00:00", + "modified_at": "2026-01-09T19:50:46.705950+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "delphine-de-bokay-2574a827b", @@ -186,7 +186,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.658639+00:00", + "inferred_at": "2026-01-09T19:50:46.705942+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_199X_NL-GE-ARN_XXXX_LYNN-SALENTIJN.json b/data/person/ID_NL-LI-MAA_199X_NL-GE-ARN_XXXX_LYNN-SALENTIJN.json index 0920591089..f42081804c 100644 --- a/data/person/ID_NL-LI-MAA_199X_NL-GE-ARN_XXXX_LYNN-SALENTIJN.json +++ b/data/person/ID_NL-LI-MAA_199X_NL-GE-ARN_XXXX_LYNN-SALENTIJN.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lynn-salentijn-208876bb_20251214T103410Z.json" ], - "modified_at": "2026-01-09T19:18:11.518393+00:00", + "modified_at": "2026-01-09T19:50:47.102792+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lynn-salentijn-208876bb", @@ -167,7 +167,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.518386+00:00", + "inferred_at": "2026-01-09T19:50:47.102781+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_199X_NL-LI-MAA_XXXX_SUSANNE-SOUREN.json b/data/person/ID_NL-LI-MAA_199X_NL-LI-MAA_XXXX_SUSANNE-SOUREN.json index 5998bdc258..1e4ac32e08 100644 --- a/data/person/ID_NL-LI-MAA_199X_NL-LI-MAA_XXXX_SUSANNE-SOUREN.json +++ b/data/person/ID_NL-LI-MAA_199X_NL-LI-MAA_XXXX_SUSANNE-SOUREN.json @@ -133,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/susanne-souren-991102124_20251214T110447Z.json" ], - "modified_at": "2026-01-09T19:18:15.297738+00:00", + "modified_at": "2026-01-09T19:50:49.143591+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "susanne-souren-991102124", @@ -171,7 +171,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.297732+00:00", + "inferred_at": "2026-01-09T19:50:49.143583+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_199X_NL-NH-AMS_XXXX_KASPER-STRAATEMEIER.json b/data/person/ID_NL-LI-MAA_199X_NL-NH-AMS_XXXX_KASPER-STRAATEMEIER.json index 2872c97720..5ca3441dea 100644 --- a/data/person/ID_NL-LI-MAA_199X_NL-NH-AMS_XXXX_KASPER-STRAATEMEIER.json +++ b/data/person/ID_NL-LI-MAA_199X_NL-NH-AMS_XXXX_KASPER-STRAATEMEIER.json @@ -146,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kasper-straatemeier-41808b4a_20251214T103105Z.json" ], - "modified_at": "2026-01-09T19:18:11.494171+00:00", + "modified_at": "2026-01-09T19:50:47.020213+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kasper-straatemeier-41808b4a", @@ -175,7 +175,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.494156+00:00", + "inferred_at": "2026-01-09T19:50:47.020201+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_199X_NL-ZH-TH_XXXX_FAUVE-KYLL.json b/data/person/ID_NL-LI-MAA_199X_NL-ZH-TH_XXXX_FAUVE-KYLL.json index aadd0f976f..c8c631980d 100644 --- a/data/person/ID_NL-LI-MAA_199X_NL-ZH-TH_XXXX_FAUVE-KYLL.json +++ b/data/person/ID_NL-LI-MAA_199X_NL-ZH-TH_XXXX_FAUVE-KYLL.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fauve-kyll-41a152bb_20251214T112902Z.json" ], - "modified_at": "2026-01-09T19:18:15.423367+00:00", + "modified_at": "2026-01-09T19:51:10.691956+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fauve-kyll-41a152bb", @@ -182,7 +182,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +231,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.423362+00:00", + "inferred_at": "2026-01-09T19:51:10.691948+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_199X_NL-ZH-TH_XXXX_LISANNE-WESSELS.json b/data/person/ID_NL-LI-MAA_199X_NL-ZH-TH_XXXX_LISANNE-WESSELS.json index 025f2ba542..c2f9d72951 100644 --- a/data/person/ID_NL-LI-MAA_199X_NL-ZH-TH_XXXX_LISANNE-WESSELS.json +++ b/data/person/ID_NL-LI-MAA_199X_NL-ZH-TH_XXXX_LISANNE-WESSELS.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lisannewessels_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:15.950027+00:00", + "modified_at": "2026-01-09T19:51:15.206684+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lisannewessels", @@ -134,7 +134,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.950019+00:00", + "inferred_at": "2026-01-09T19:51:15.206676+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_199X_XX-XX-XXX_XXXX_EMILY-PIETERSE.json b/data/person/ID_NL-LI-MAA_199X_XX-XX-XXX_XXXX_EMILY-PIETERSE.json index 39c8557035..011553e255 100644 --- a/data/person/ID_NL-LI-MAA_199X_XX-XX-XXX_XXXX_EMILY-PIETERSE.json +++ b/data/person/ID_NL-LI-MAA_199X_XX-XX-XXX_XXXX_EMILY-PIETERSE.json @@ -146,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emily-pieterse-98633097_20251214T103056Z.json" ], - "modified_at": "2026-01-09T19:18:15.035023+00:00", + "modified_at": "2026-01-09T19:51:06.629598+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emily-pieterse-98633097", @@ -168,7 +168,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.031321+00:00", + "inferred_at": "2026-01-09T19:51:06.625671+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_199X_XX-XX-XXX_XXXX_MADELEINE-VAUDREMER.json b/data/person/ID_NL-LI-MAA_199X_XX-XX-XXX_XXXX_MADELEINE-VAUDREMER.json index 0c95e9f750..e5b355ddee 100644 --- a/data/person/ID_NL-LI-MAA_199X_XX-XX-XXX_XXXX_MADELEINE-VAUDREMER.json +++ b/data/person/ID_NL-LI-MAA_199X_XX-XX-XXX_XXXX_MADELEINE-VAUDREMER.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mvaudremer_20251214T110215Z.json" ], - "modified_at": "2026-01-09T19:18:13.449447+00:00", + "modified_at": "2026-01-09T19:50:54.332437+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mvaudremer", @@ -172,7 +172,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.445710+00:00", + "inferred_at": "2026-01-09T19:50:54.328357+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_200X_NL-LI-BRU_XXXX_KENNY-DEBIE.json b/data/person/ID_NL-LI-MAA_200X_NL-LI-BRU_XXXX_KENNY-DEBIE.json index 3fb3cd40e8..e5807ce874 100644 --- a/data/person/ID_NL-LI-MAA_200X_NL-LI-BRU_XXXX_KENNY-DEBIE.json +++ b/data/person/ID_NL-LI-MAA_200X_NL-LI-BRU_XXXX_KENNY-DEBIE.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kenny-debie-4291791ba_20251214T111216Z.json" ], - "modified_at": "2026-01-09T19:18:11.514995+00:00", + "modified_at": "2026-01-09T19:50:47.091373+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kenny-debie-4291791ba", @@ -184,7 +184,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.514988+00:00", + "inferred_at": "2026-01-09T19:50:47.091353+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-MAA_200X_NL-NB-VEL_XXXX_CARLIJN-BRENTJENS.json b/data/person/ID_NL-LI-MAA_200X_NL-NB-VEL_XXXX_CARLIJN-BRENTJENS.json index 7f5868e898..7bbdccda1d 100644 --- a/data/person/ID_NL-LI-MAA_200X_NL-NB-VEL_XXXX_CARLIJN-BRENTJENS.json +++ b/data/person/ID_NL-LI-MAA_200X_NL-NB-VEL_XXXX_CARLIJN-BRENTJENS.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carlijn-brentjens-81b70020b_20251214T111226Z.json" ], - "modified_at": "2026-01-09T19:18:16.727891+00:00", + "modified_at": "2026-01-09T19:51:21.773018+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carlijn-brentjens-81b70020b", @@ -156,7 +156,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.727886+00:00", + "inferred_at": "2026-01-09T19:51:21.773005+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-LI-VAA_199X_NL-NB-EIN_XXXX_LUCA-BULLES.json b/data/person/ID_NL-LI-VAA_199X_NL-NB-EIN_XXXX_LUCA-BULLES.json index c06397b0b7..abb8d7bbd6 100644 --- a/data/person/ID_NL-LI-VAA_199X_NL-NB-EIN_XXXX_LUCA-BULLES.json +++ b/data/person/ID_NL-LI-VAA_199X_NL-NB-EIN_XXXX_LUCA-BULLES.json @@ -185,7 +185,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/luca-bulles-0921631b1_20251214T110927Z.json" ], - "modified_at": "2026-01-09T19:18:13.681910+00:00", + "modified_at": "2026-01-09T19:50:55.428082+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "luca-bulles-0921631b1", @@ -214,7 +214,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -263,7 +263,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.681906+00:00", + "inferred_at": "2026-01-09T19:50:55.428075+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_BARBARA-KRUIJSEN.json b/data/person/ID_NL-LI-VEN_198X_NL-GE-NIJ_XXXX_BARBARA-KRUIJSEN.json similarity index 68% rename from data/person/ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_BARBARA-KRUIJSEN.json rename to data/person/ID_NL-LI-VEN_198X_NL-GE-NIJ_XXXX_BARBARA-KRUIJSEN.json index 457e9f4883..4ceeca5a37 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_BARBARA-KRUIJSEN.json +++ b/data/person/ID_NL-LI-VEN_198X_NL-GE-NIJ_XXXX_BARBARA-KRUIJSEN.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_BARBARA-KRUIJSEN", + "ppid": "ID_NL-LI-VEN_198X_NL-GE-NIJ_XXXX_BARBARA-KRUIJSEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-LI-VEN", + "first_date": "198X", "last_location": "NL-GE-NIJ", "last_date": "XXXX", "name_tokens": [ "BARBARA", "KRUIJSEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Barbara Kruijsen", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -161,63 +167,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/barbara-kruijsen-6a2b6928_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:02.339957+00:00", + "modified_at": "2026-01-09T19:50:58.944350+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "barbara-kruijsen-6a2b6928", - "inferred_current_settlement": { - "value": "Nijmegen", - "formatted": "NL-GE-NIJ", - "country_code": "NL", - "region_code": "GE", - "settlement_code": "NIJ", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Nijmegen, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Nijmegen, Netherlands", - "result": { - "geonames_id": 2750053, - "geonames_name": "Nijmegen", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPL", - "latitude": 51.8425, - "longitude": 5.85278 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-GE-NIJ" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2750053, - "geonames_name": "Nijmegen", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPL", - "latitude": 51.8425, - "longitude": 5.85278 - }, - "inferred_at": "2026-01-09T17:43:02.339951+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BARBARA-KRUIJSEN", @@ -227,6 +180,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_BARBARA-KRUIJSEN", + "new_ppid": "ID_NL-LI-VEN_198X_NL-GE-NIJ_XXXX_BARBARA-KRUIJSEN", + "changed_at": "2026-01-09T19:43:39.098509+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1980 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Limburgs Museum", + "title": "Curator", + "date_range": "2003 - 2011" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2003 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2003 - 23 = 1980", + "result": "Estimated birth year: 1980", + "range": "1975-1985 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1975, + 1985 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:50:58.944344+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NB-BES_199X_NL-NB-EIN_XXXX_RODRIGUE-S.json b/data/person/ID_NL-NB-BES_199X_NL-NB-EIN_XXXX_RODRIGUE-S.json index a8f34894a9..38e4371d26 100644 --- a/data/person/ID_NL-NB-BES_199X_NL-NB-EIN_XXXX_RODRIGUE-S.json +++ b/data/person/ID_NL-NB-BES_199X_NL-NB-EIN_XXXX_RODRIGUE-S.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rodrigue-sandio_20251214T111057Z.json" ], - "modified_at": "2026-01-09T19:18:15.222140+00:00", + "modified_at": "2026-01-09T19:51:07.033572+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rodrigue-sandio", @@ -157,7 +157,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.222136+00:00", + "inferred_at": "2026-01-09T19:51:07.033566+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-BES_199X_NL-UT-UTR_XXXX_ARTHUR-COELHO.json b/data/person/ID_NL-NB-BES_199X_NL-UT-UTR_XXXX_ARTHUR-COELHO.json index 74e46c9088..1320dd0843 100644 --- a/data/person/ID_NL-NB-BES_199X_NL-UT-UTR_XXXX_ARTHUR-COELHO.json +++ b/data/person/ID_NL-NB-BES_199X_NL-UT-UTR_XXXX_ARTHUR-COELHO.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arthur-zachow_20251214T111146Z.json" ], - "modified_at": "2026-01-09T19:18:13.931069+00:00", + "modified_at": "2026-01-09T19:50:56.852558+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arthur-zachow", @@ -191,7 +191,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.931063+00:00", + "inferred_at": "2026-01-09T19:50:56.852552+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-BES_200X_NL-NB-BES_XXXX_MUSA-CELIK.json b/data/person/ID_NL-NB-BES_200X_NL-NB-BES_XXXX_MUSA-CELIK.json index c870900407..cd9b9ba8bd 100644 --- a/data/person/ID_NL-NB-BES_200X_NL-NB-BES_XXXX_MUSA-CELIK.json +++ b/data/person/ID_NL-NB-BES_200X_NL-NB-BES_XXXX_MUSA-CELIK.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/musa-celik-61a8aa1b4_20251214T111231Z.json" ], - "modified_at": "2026-01-09T19:18:16.785663+00:00", + "modified_at": "2026-01-09T19:51:21.956493+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "musa-celik-61a8aa1b4", @@ -139,7 +139,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.785659+00:00", + "inferred_at": "2026-01-09T19:51:21.956487+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-BOZ_195X_NL-NB-BRE_XXXX_THEO-MARCELIS.json b/data/person/ID_NL-NB-BOZ_195X_NL-NB-BRE_XXXX_THEO-MARCELIS.json index 3f7e1d3559..a518fa7fa8 100644 --- a/data/person/ID_NL-NB-BOZ_195X_NL-NB-BRE_XXXX_THEO-MARCELIS.json +++ b/data/person/ID_NL-NB-BOZ_195X_NL-NB-BRE_XXXX_THEO-MARCELIS.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/theo-marcelis-33a88314_20251214T104026Z.json" ], - "modified_at": "2026-01-09T19:18:17.610637+00:00", + "modified_at": "2026-01-09T19:51:28.532798+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "theo-marcelis-33a88314", @@ -177,7 +177,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:17.610631+00:00", + "inferred_at": "2026-01-09T19:51:28.532794+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-BOZ_196X_NL-NB-BRE_XXXX_ALBERT-HOEKSTRA.json b/data/person/ID_NL-NB-BOZ_196X_NL-NB-BRE_XXXX_ALBERT-HOEKSTRA.json index 22556322cb..760a43fe69 100644 --- a/data/person/ID_NL-NB-BOZ_196X_NL-NB-BRE_XXXX_ALBERT-HOEKSTRA.json +++ b/data/person/ID_NL-NB-BOZ_196X_NL-NB-BRE_XXXX_ALBERT-HOEKSTRA.json @@ -87,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/albert-hoekstra-a1742017_20251214T104028Z.json" ], - "modified_at": "2026-01-09T19:18:16.638813+00:00", + "modified_at": "2026-01-09T19:50:59.765532+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "albert-hoekstra-a1742017", @@ -119,7 +119,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.638808+00:00", + "inferred_at": "2026-01-09T19:50:59.765521+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-BOZ_197X_NL-NB-BOZ_XXXX_INGE-HOMMEL.json b/data/person/ID_NL-NB-BOZ_197X_NL-NB-BOZ_XXXX_INGE-HOMMEL.json index 2028f15c18..bd0275058b 100644 --- a/data/person/ID_NL-NB-BOZ_197X_NL-NB-BOZ_XXXX_INGE-HOMMEL.json +++ b/data/person/ID_NL-NB-BOZ_197X_NL-NB-BOZ_XXXX_INGE-HOMMEL.json @@ -204,7 +204,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/inge-hommel-bbb767a_20251214T104032Z.json" ], - "modified_at": "2026-01-09T19:18:14.039564+00:00", + "modified_at": "2026-01-09T19:50:58.539529+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "inge-hommel-bbb767a", @@ -233,7 +233,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -282,7 +282,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.039560+00:00", + "inferred_at": "2026-01-09T19:50:58.539524+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-BOZ_199X_NL-NB-STE_XXXX_JULIETTE-ROMIJN.json b/data/person/ID_NL-NB-BOZ_199X_NL-NB-STE_XXXX_JULIETTE-ROMIJN.json index 7365cc87e1..bd307a3356 100644 --- a/data/person/ID_NL-NB-BOZ_199X_NL-NB-STE_XXXX_JULIETTE-ROMIJN.json +++ b/data/person/ID_NL-NB-BOZ_199X_NL-NB-STE_XXXX_JULIETTE-ROMIJN.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/juliette-romijn-963374236_20251214T104037Z.json" ], - "modified_at": "2026-01-09T19:18:13.989401+00:00", + "modified_at": "2026-01-09T19:50:57.746684+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "juliette-romijn-963374236", @@ -112,7 +112,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -161,7 +161,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.989396+00:00", + "inferred_at": "2026-01-09T19:50:57.746678+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-BRE_197X_NL-NB-MOE_XXXX_ILSE-JANSEN.json b/data/person/ID_NL-NB-BRE_197X_NL-NB-MOE_XXXX_ILSE-JANSEN.json index c5777ca379..86761014fb 100644 --- a/data/person/ID_NL-NB-BRE_197X_NL-NB-MOE_XXXX_ILSE-JANSEN.json +++ b/data/person/ID_NL-NB-BRE_197X_NL-NB-MOE_XXXX_ILSE-JANSEN.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ilse-jansen-1161b924_20251214T104030Z.json" ], - "modified_at": "2026-01-09T19:18:17.039138+00:00", + "modified_at": "2026-01-09T19:51:12.694668+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ilse-jansen-1161b924", @@ -193,7 +193,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.039130+00:00", + "inferred_at": "2026-01-09T19:51:12.694663+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-BRE_197X_XX-XX-XXX_XXXX_ROLAND-SCHIJVENAARS.json b/data/person/ID_NL-NB-BRE_197X_XX-XX-XXX_XXXX_ROLAND-SCHIJVENAARS.json index 8a38b29568..772c005cf0 100644 --- a/data/person/ID_NL-NB-BRE_197X_XX-XX-XXX_XXXX_ROLAND-SCHIJVENAARS.json +++ b/data/person/ID_NL-NB-BRE_197X_XX-XX-XXX_XXXX_ROLAND-SCHIJVENAARS.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rschijvenaars_20251214T110817Z.json" ], - "modified_at": "2026-01-09T19:18:15.675216+00:00", + "modified_at": "2026-01-09T19:51:25.496438+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rschijvenaars", @@ -197,7 +197,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.671559+00:00", + "inferred_at": "2026-01-09T19:51:25.492788+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-BRE_198X_NL-NH-HAA_XXXX_WARD-JANSSEN.json b/data/person/ID_NL-NB-BRE_198X_NL-NH-HAA_XXXX_WARD-JANSSEN.json index c34f34d881..aadedb7010 100644 --- a/data/person/ID_NL-NB-BRE_198X_NL-NH-HAA_XXXX_WARD-JANSSEN.json +++ b/data/person/ID_NL-NB-BRE_198X_NL-NH-HAA_XXXX_WARD-JANSSEN.json @@ -222,7 +222,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ward-janssen-4a1a627_20251214T112535Z.json" ], - "modified_at": "2026-01-09T19:18:13.823221+00:00", + "modified_at": "2026-01-09T19:50:56.635781+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ward-janssen-4a1a627", @@ -251,7 +251,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -300,7 +300,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.823216+00:00", + "inferred_at": "2026-01-09T19:50:56.635766+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-BRE_198X_NL-ZH-TH_XXXX_HENK-HUITSING.json b/data/person/ID_NL-NB-BRE_198X_NL-ZH-TH_XXXX_HENK-HUITSING.json index 1a7911c157..1dc85d5deb 100644 --- a/data/person/ID_NL-NB-BRE_198X_NL-ZH-TH_XXXX_HENK-HUITSING.json +++ b/data/person/ID_NL-NB-BRE_198X_NL-ZH-TH_XXXX_HENK-HUITSING.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henk-huitsing-050a8174_20251214T110336Z.json" ], - "modified_at": "2026-01-09T19:18:14.658024+00:00", + "modified_at": "2026-01-09T19:50:53.850113+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henk-huitsing-050a8174", @@ -157,7 +157,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.658018+00:00", + "inferred_at": "2026-01-09T19:50:53.850105+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-BRE_198X_NL-ZH-TH_XXXX_SANNE-KOOL.json b/data/person/ID_NL-NB-BRE_198X_NL-ZH-TH_XXXX_SANNE-KOOL.json index df23c871b4..cad3ab4f58 100644 --- a/data/person/ID_NL-NB-BRE_198X_NL-ZH-TH_XXXX_SANNE-KOOL.json +++ b/data/person/ID_NL-NB-BRE_198X_NL-ZH-TH_XXXX_SANNE-KOOL.json @@ -146,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sannekool_20251214T113352Z.json" ], - "modified_at": "2026-01-09T19:18:17.049975+00:00", + "modified_at": "2026-01-09T19:51:23.193957+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sannekool", @@ -175,7 +175,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.049971+00:00", + "inferred_at": "2026-01-09T19:51:23.193952+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-BRE_199X_NL-NB-ROO_XXXX_JENNY-JOOSSE.json b/data/person/ID_NL-NB-BRE_199X_NL-NB-ROO_XXXX_JENNY-JOOSSE.json index c17cb1cf2d..d2713c2783 100644 --- a/data/person/ID_NL-NB-BRE_199X_NL-NB-ROO_XXXX_JENNY-JOOSSE.json +++ b/data/person/ID_NL-NB-BRE_199X_NL-NB-ROO_XXXX_JENNY-JOOSSE.json @@ -163,7 +163,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jennitajoosse_20251214T104027Z.json" ], - "modified_at": "2026-01-09T19:18:16.838067+00:00", + "modified_at": "2026-01-09T19:51:22.265923+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jennitajoosse", @@ -186,7 +186,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.838063+00:00", + "inferred_at": "2026-01-09T19:51:22.265920+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-BRE_199X_XX-XX-XXX_XXXX_VICKY-KLEINEN.json b/data/person/ID_NL-NB-BRE_199X_XX-XX-XXX_XXXX_VICKY-KLEINEN.json index 82a4be9ba7..880099b7fb 100644 --- a/data/person/ID_NL-NB-BRE_199X_XX-XX-XXX_XXXX_VICKY-KLEINEN.json +++ b/data/person/ID_NL-NB-BRE_199X_XX-XX-XXX_XXXX_VICKY-KLEINEN.json @@ -179,7 +179,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vicky-kleinen-846a77135_20251214T110731Z.json" ], - "modified_at": "2026-01-09T19:18:17.242367+00:00", + "modified_at": "2026-01-09T19:51:25.476491+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vicky-kleinen-846a77135", @@ -201,7 +201,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +242,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.242360+00:00", + "inferred_at": "2026-01-09T19:51:25.476484+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_195X_NL-GE-NIJ_XXXX_BEN-JANSSEN.json b/data/person/ID_NL-NB-EIN_195X_NL-GE-NIJ_XXXX_BEN-JANSSEN.json index b6d94765d1..770292734c 100644 --- a/data/person/ID_NL-NB-EIN_195X_NL-GE-NIJ_XXXX_BEN-JANSSEN.json +++ b/data/person/ID_NL-NB-EIN_195X_NL-GE-NIJ_XXXX_BEN-JANSSEN.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ben-janssen-91035b_20251214T112112Z.json" ], - "modified_at": "2026-01-09T19:18:17.768200+00:00", + "modified_at": "2026-01-09T19:51:28.567169+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ben-janssen-91035b", @@ -210,7 +210,7 @@ "primary_rationale": "1957 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1957 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:17.768190+00:00", + "inferred_at": "2026-01-09T19:51:28.567164+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_195X_NL-NH-HOO_XXXX_JOHAN-HOLLANDER.json b/data/person/ID_NL-NB-EIN_195X_NL-NH-HOO_XXXX_JOHAN-HOLLANDER.json index 52984ca311..a4c25e452f 100644 --- a/data/person/ID_NL-NB-EIN_195X_NL-NH-HOO_XXXX_JOHAN-HOLLANDER.json +++ b/data/person/ID_NL-NB-EIN_195X_NL-NH-HOO_XXXX_JOHAN-HOLLANDER.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/johan-de-hollander-1282454a_20251214T110245Z.json" ], - "modified_at": "2026-01-09T19:18:16.129041+00:00", + "modified_at": "2026-01-09T19:51:28.149154+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "johan-de-hollander-1282454a", @@ -147,7 +147,7 @@ "primary_rationale": "1951 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1951 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:16.129036+00:00", + "inferred_at": "2026-01-09T19:51:28.149149+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_196X_NL-NB-BRE_XXXX_INE-VRENKENREIJNDERS.json b/data/person/ID_NL-NB-EIN_196X_NL-NB-BRE_XXXX_INE-VRENKENREIJNDERS.json index 3172271048..22167caec2 100644 --- a/data/person/ID_NL-NB-EIN_196X_NL-NB-BRE_XXXX_INE-VRENKENREIJNDERS.json +++ b/data/person/ID_NL-NB-EIN_196X_NL-NB-BRE_XXXX_INE-VRENKENREIJNDERS.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ine-vrenken-reijnders-26893045_20251214T112937Z.json" ], - "modified_at": "2026-01-09T19:18:14.585609+00:00", + "modified_at": "2026-01-09T19:51:01.943146+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ine-vrenken-reijnders-26893045", @@ -193,7 +193,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.585605+00:00", + "inferred_at": "2026-01-09T19:51:01.943141+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NB-EIN_XXXX_MARC-WAL.json b/data/person/ID_NL-NB-EIN_196X_NL-NB-EIN_XXXX_MARC-WAL.json similarity index 65% rename from data/person/ID_XX-XX-XXX_196X_NL-NB-EIN_XXXX_MARC-WAL.json rename to data/person/ID_NL-NB-EIN_196X_NL-NB-EIN_XXXX_MARC-WAL.json index e6950bb120..971f22f923 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NB-EIN_XXXX_MARC-WAL.json +++ b/data/person/ID_NL-NB-EIN_196X_NL-NB-EIN_XXXX_MARC-WAL.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_NL-NB-EIN_XXXX_MARC-WAL", + "ppid": "ID_NL-NB-EIN_196X_NL-NB-EIN_XXXX_MARC-WAL", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NB-EIN", "first_date": "196X", "last_location": "NL-NB-EIN", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Marc Van de Wal", @@ -91,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marc-van-de-wal-53a20819_20251214T111232Z.json" ], - "modified_at": "2026-01-09T19:18:16.169857+00:00", + "modified_at": "2026-01-09T19:51:27.907655+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marc-van-de-wal-53a20819", @@ -114,6 +115,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_NL-NB-EIN_XXXX_MARC-WAL", + "new_ppid": "ID_NL-NB-EIN_196X_NL-NB-EIN_XXXX_MARC-WAL", + "changed_at": "2026-01-09T19:51:27.907653+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -128,7 +139,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +188,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.169824+00:00", + "inferred_at": "2026-01-09T19:51:27.905267+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Eindhoven", + "formatted": "NL-NB-EIN", + "country_code": "NL", + "region_code": "NB", + "settlement_code": "EIN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Eindhoven University of Technology", + "date_range": "1989 - 1998 • 9 years", + "degree": "dr.ir., mechanical engineering" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Eindhoven University of Technology", + "mapping_result": "Eindhoven, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Eindhoven, Netherlands", + "result": { + "geonames_id": 2756253, + "geonames_name": "Eindhoven", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.44083, + "longitude": 5.47778 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NB", + "settlement_code": "EIN" + }, + "result": "NL-NB-EIN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756253, + "geonames_name": "Eindhoven", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.44083, + "longitude": 5.47778 + }, + "inferred_at": "2026-01-09T19:51:27.907646+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_196X_NL-NB-TIL_XXXX_CORNE-KOK.json b/data/person/ID_NL-NB-EIN_196X_NL-NB-TIL_XXXX_CORNE-KOK.json index dbb820d0ff..afa117eed3 100644 --- a/data/person/ID_NL-NB-EIN_196X_NL-NB-TIL_XXXX_CORNE-KOK.json +++ b/data/person/ID_NL-NB-EIN_196X_NL-NB-TIL_XXXX_CORNE-KOK.json @@ -208,7 +208,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cornedekok_20251214T111206Z.json" ], - "modified_at": "2026-01-09T19:18:16.079617+00:00", + "modified_at": "2026-01-09T19:51:16.872768+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cornedekok", @@ -231,7 +231,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -272,7 +272,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.079613+00:00", + "inferred_at": "2026-01-09T19:51:16.872761+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_196X_NL-NB-VEL_XXXX_JEROEN-DUIVENBODE.json b/data/person/ID_NL-NB-EIN_196X_NL-NB-VEL_XXXX_JEROEN-DUIVENBODE.json index f4b9646ec9..6ab417adef 100644 --- a/data/person/ID_NL-NB-EIN_196X_NL-NB-VEL_XXXX_JEROEN-DUIVENBODE.json +++ b/data/person/ID_NL-NB-EIN_196X_NL-NB-VEL_XXXX_JEROEN-DUIVENBODE.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeroen-van-duivenbode-7a38b98_20251214T110908Z.json" ], - "modified_at": "2026-01-09T19:18:13.913839+00:00", + "modified_at": "2026-01-09T19:50:56.790173+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeroen-van-duivenbode-7a38b98", @@ -193,7 +193,7 @@ "primary_rationale": "1960 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +242,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1960 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.913834+00:00", + "inferred_at": "2026-01-09T19:50:56.790168+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_196X_NL-NB-VEL_XXXX_JOOST-SMITS.json b/data/person/ID_NL-NB-EIN_196X_NL-NB-VEL_XXXX_JOOST-SMITS.json index 2e1ab3dade..a69f0bf6db 100644 --- a/data/person/ID_NL-NB-EIN_196X_NL-NB-VEL_XXXX_JOOST-SMITS.json +++ b/data/person/ID_NL-NB-EIN_196X_NL-NB-VEL_XXXX_JOOST-SMITS.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joost-smits-2738383_20251214T111115Z.json" ], - "modified_at": "2026-01-09T19:18:14.867267+00:00", + "modified_at": "2026-01-09T19:51:18.513996+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joost-smits-2738383", @@ -207,7 +207,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -256,7 +256,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.867260+00:00", + "inferred_at": "2026-01-09T19:51:18.513989+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NB-VEL_XXXX_LEON-VERSTAPPEN.json b/data/person/ID_NL-NB-EIN_196X_NL-NB-VEL_XXXX_LEON-VERSTAPPEN.json similarity index 64% rename from data/person/ID_XX-XX-XXX_196X_NL-NB-VEL_XXXX_LEON-VERSTAPPEN.json rename to data/person/ID_NL-NB-EIN_196X_NL-NB-VEL_XXXX_LEON-VERSTAPPEN.json index e1a9038a00..ff818bf90c 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NB-VEL_XXXX_LEON-VERSTAPPEN.json +++ b/data/person/ID_NL-NB-EIN_196X_NL-NB-VEL_XXXX_LEON-VERSTAPPEN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_NL-NB-VEL_XXXX_LEON-VERSTAPPEN", + "ppid": "ID_NL-NB-EIN_196X_NL-NB-VEL_XXXX_LEON-VERSTAPPEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NB-EIN", "first_date": "196X", "last_location": "NL-NB-VEL", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Leon Verstappen", @@ -95,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/leon-verstappen-5a9a321_20251214T111236Z.json" ], - "modified_at": "2026-01-09T19:18:15.643221+00:00", + "modified_at": "2026-01-09T19:51:07.583828+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "leon-verstappen-5a9a321", @@ -118,6 +119,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_NL-NB-VEL_XXXX_LEON-VERSTAPPEN", + "new_ppid": "ID_NL-NB-EIN_196X_NL-NB-VEL_XXXX_LEON-VERSTAPPEN", + "changed_at": "2026-01-09T19:51:07.583826+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -126,7 +137,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +178,77 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.643194+00:00", + "inferred_at": "2026-01-09T19:51:07.581723+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Eindhoven", + "formatted": "NL-NB-EIN", + "country_code": "NL", + "region_code": "NB", + "settlement_code": "EIN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Eindhoven University of Technology", + "date_range": "1988 - 1994 • 6 years", + "degree": "Master's Degree, Physics" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Eindhoven University of Technology", + "mapping_result": "Eindhoven, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Eindhoven, Netherlands", + "result": { + "geonames_id": 2756253, + "geonames_name": "Eindhoven", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.44083, + "longitude": 5.47778 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NB", + "settlement_code": "EIN" + }, + "result": "NL-NB-EIN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756253, + "geonames_name": "Eindhoven", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.44083, + "longitude": 5.47778 + }, + "inferred_at": "2026-01-09T19:51:07.583819+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_DIRK-BROKKEN.json b/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_DIRK-BROKKEN.json index bee162781a..765ec67829 100644 --- a/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_DIRK-BROKKEN.json +++ b/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_DIRK-BROKKEN.json @@ -157,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dirkbrokken_20251214T110939Z.json" ], - "modified_at": "2026-01-09T19:18:17.511781+00:00", + "modified_at": "2026-01-09T19:51:28.386148+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dirkbrokken", @@ -186,7 +186,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -235,7 +235,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.511776+00:00", + "inferred_at": "2026-01-09T19:51:28.386141+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_ERIK-LAMBERS.json b/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_ERIK-LAMBERS.json index d2e49392f0..e23a9f7c36 100644 --- a/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_ERIK-LAMBERS.json +++ b/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_ERIK-LAMBERS.json @@ -174,7 +174,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erik-lambers-998747b_20251214T111116Z.json" ], - "modified_at": "2026-01-09T19:18:13.559904+00:00", + "modified_at": "2026-01-09T19:50:55.059196+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erik-lambers-998747b", @@ -203,7 +203,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.559901+00:00", + "inferred_at": "2026-01-09T19:50:55.059190+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NB-EIN_XXXX_GUNNAR-TIMMERMANS.json b/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_GUNNAR-TIMMERMANS.json similarity index 64% rename from data/person/ID_XX-XX-XXX_197X_NL-NB-EIN_XXXX_GUNNAR-TIMMERMANS.json rename to data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_GUNNAR-TIMMERMANS.json index 290b06635f..55f23b8809 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NB-EIN_XXXX_GUNNAR-TIMMERMANS.json +++ b/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_GUNNAR-TIMMERMANS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_197X_NL-NB-EIN_XXXX_GUNNAR-TIMMERMANS", + "ppid": "ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_GUNNAR-TIMMERMANS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NB-EIN", "first_date": "197X", "last_location": "NL-NB-EIN", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Gunnar Timmermans", @@ -94,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gunnar-timmermans-0104061_20251214T111149Z.json" ], - "modified_at": "2026-01-09T19:18:18.957763+00:00", + "modified_at": "2026-01-09T19:51:31.804773+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gunnar-timmermans-0104061", @@ -108,6 +109,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_NL-NB-EIN_XXXX_GUNNAR-TIMMERMANS", + "new_ppid": "ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_GUNNAR-TIMMERMANS", + "changed_at": "2026-01-09T19:51:31.804771+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -122,7 +133,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -171,7 +182,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:18.957735+00:00", + "inferred_at": "2026-01-09T19:51:31.791921+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Eindhoven", + "formatted": "NL-NB-EIN", + "country_code": "NL", + "region_code": "NB", + "settlement_code": "EIN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Eindhoven University of Technology", + "date_range": "1994 - 2003 • 9 years", + "degree": "Msc, Applied Physics" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Eindhoven University of Technology", + "mapping_result": "Eindhoven, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Eindhoven, Netherlands", + "result": { + "geonames_id": 2756253, + "geonames_name": "Eindhoven", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.44083, + "longitude": 5.47778 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NB", + "settlement_code": "EIN" + }, + "result": "NL-NB-EIN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756253, + "geonames_name": "Eindhoven", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.44083, + "longitude": 5.47778 + }, + "inferred_at": "2026-01-09T19:51:31.804751+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_ISHAAN-SHARMA.json b/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_ISHAAN-SHARMA.json index 31ac4e8550..ddc1c6e40d 100644 --- a/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_ISHAAN-SHARMA.json +++ b/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_ISHAAN-SHARMA.json @@ -192,7 +192,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ishaansharma61_20251214T111204Z.json" ], - "modified_at": "2026-01-09T19:18:13.319106+00:00", + "modified_at": "2026-01-09T19:51:21.791001+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ishaansharma61", @@ -230,7 +230,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -279,7 +279,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.319100+00:00", + "inferred_at": "2026-01-09T19:51:21.790992+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NB-EIN_XXXX_JOS-HEYDEN.json b/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_JOS-HEYDEN.json similarity index 72% rename from data/person/ID_XX-XX-XXX_197X_NL-NB-EIN_XXXX_JOS-HEYDEN.json rename to data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_JOS-HEYDEN.json index a21ced8b28..11c28cfcd1 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NB-EIN_XXXX_JOS-HEYDEN.json +++ b/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_JOS-HEYDEN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_197X_NL-NB-EIN_XXXX_JOS-HEYDEN", + "ppid": "ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_JOS-HEYDEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NB-EIN", "first_date": "197X", "last_location": "NL-NB-EIN", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Jos van der Heyden", @@ -127,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jos-van-der-heyden-74279916_20251214T111003Z.json" ], - "modified_at": "2026-01-09T19:18:14.133447+00:00", + "modified_at": "2026-01-09T19:50:58.681728+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jos-van-der-heyden-74279916", @@ -141,6 +142,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_NL-NB-EIN_XXXX_JOS-HEYDEN", + "new_ppid": "ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_JOS-HEYDEN", + "changed_at": "2026-01-09T19:50:58.681725+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -149,7 +160,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +201,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.133272+00:00", + "inferred_at": "2026-01-09T19:50:58.672630+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Eindhoven", + "formatted": "NL-NB-EIN", + "country_code": "NL", + "region_code": "NB", + "settlement_code": "EIN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Eindhoven University of Technology", + "date_range": "1993 - 1995 • 2 years", + "degree": "PDEng, Software Technology (OOTI)" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Eindhoven University of Technology", + "mapping_result": "Eindhoven, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Eindhoven, Netherlands", + "result": { + "geonames_id": 2756253, + "geonames_name": "Eindhoven", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.44083, + "longitude": 5.47778 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NB", + "settlement_code": "EIN" + }, + "result": "NL-NB-EIN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756253, + "geonames_name": "Eindhoven", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.44083, + "longitude": 5.47778 + }, + "inferred_at": "2026-01-09T19:50:58.681709+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_LU-GAO.json b/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_LU-GAO.json index f05c92d593..4739f0c522 100644 --- a/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_LU-GAO.json +++ b/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_LU-GAO.json @@ -133,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lu-gao-ab9a60a1_20251214T111238Z.json" ], - "modified_at": "2026-01-09T19:18:16.781317+00:00", + "modified_at": "2026-01-09T19:51:28.157331+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lu-gao-ab9a60a1", @@ -165,7 +165,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.781310+00:00", + "inferred_at": "2026-01-09T19:51:28.157327+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_SUPRIYO-CHATTERJEA.json b/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_SUPRIYO-CHATTERJEA.json index 43f5f9ce29..edf3196813 100644 --- a/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_SUPRIYO-CHATTERJEA.json +++ b/data/person/ID_NL-NB-EIN_197X_NL-NB-EIN_XXXX_SUPRIYO-CHATTERJEA.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/supriyo-chatterjea-02abb325_20251214T111127Z.json" ], - "modified_at": "2026-01-09T19:18:11.236546+00:00", + "modified_at": "2026-01-09T19:50:50.619987+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "supriyo-chatterjea-02abb325", @@ -204,7 +204,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -253,7 +253,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.236536+00:00", + "inferred_at": "2026-01-09T19:50:50.619981+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_197X_NL-NB-TIL_XXXX_DENNIS-EIJSTEN.json b/data/person/ID_NL-NB-EIN_197X_NL-NB-TIL_XXXX_DENNIS-EIJSTEN.json index 0af194314b..3765a0db99 100644 --- a/data/person/ID_NL-NB-EIN_197X_NL-NB-TIL_XXXX_DENNIS-EIJSTEN.json +++ b/data/person/ID_NL-NB-EIN_197X_NL-NB-TIL_XXXX_DENNIS-EIJSTEN.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dennis-eijsten-a32a5613_20251214T113400Z.json" ], - "modified_at": "2026-01-09T19:18:15.320263+00:00", + "modified_at": "2026-01-09T19:51:10.856908+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dennis-eijsten-a32a5613", @@ -175,7 +175,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.320258+00:00", + "inferred_at": "2026-01-09T19:51:10.856902+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_197X_NL-NB-VEL_XXXX_ERIC-MAROTO.json b/data/person/ID_NL-NB-EIN_197X_NL-NB-VEL_XXXX_ERIC-MAROTO.json index 110b1206d9..5f593c1ed1 100644 --- a/data/person/ID_NL-NB-EIN_197X_NL-NB-VEL_XXXX_ERIC-MAROTO.json +++ b/data/person/ID_NL-NB-EIN_197X_NL-NB-VEL_XXXX_ERIC-MAROTO.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eric-maroto-aba59497_20251214T111009Z.json" ], - "modified_at": "2026-01-09T19:18:15.306035+00:00", + "modified_at": "2026-01-09T19:51:08.442964+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eric-maroto-aba59497", @@ -158,7 +158,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +207,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.306031+00:00", + "inferred_at": "2026-01-09T19:51:08.442958+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-LI-MAA_XXXX_JAMIE-PIEROELIE.json b/data/person/ID_NL-NB-EIN_198X_NL-LI-MAA_XXXX_JAMIE-PIEROELIE.json index 3d34f311df..b41259bb8c 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-LI-MAA_XXXX_JAMIE-PIEROELIE.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-LI-MAA_XXXX_JAMIE-PIEROELIE.json @@ -200,7 +200,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jamie-pieroelie-653577110_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:18.051888+00:00", + "modified_at": "2026-01-09T19:51:28.899285+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jamie-pieroelie-653577110", @@ -237,7 +237,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -286,7 +286,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.051881+00:00", + "inferred_at": "2026-01-09T19:51:28.899280+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-BOX_XXXX_DANIELLE-STEENBRINK.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-BOX_XXXX_DANIELLE-STEENBRINK.json index 141aec89ac..7d444fd5a0 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-BOX_XXXX_DANIELLE-STEENBRINK.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-BOX_XXXX_DANIELLE-STEENBRINK.json @@ -310,7 +310,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daniellesteenbrink_20251214T110845Z.json" ], - "modified_at": "2026-01-09T19:18:16.884482+00:00", + "modified_at": "2026-01-09T19:51:22.335393+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daniellesteenbrink", @@ -333,7 +333,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -374,7 +374,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.884479+00:00", + "inferred_at": "2026-01-09T19:51:22.335389+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ABEL-GEBRESILASSIE.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ABEL-GEBRESILASSIE.json index df564b4775..21b277bc8b 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ABEL-GEBRESILASSIE.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ABEL-GEBRESILASSIE.json @@ -193,7 +193,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/abel-g-gebresilassie-phd-6128732b_20251214T111034Z.json" ], - "modified_at": "2026-01-09T19:18:12.949772+00:00", + "modified_at": "2026-01-09T19:50:49.151614+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "abel-g-gebresilassie-phd-6128732b", @@ -222,7 +222,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -271,7 +271,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.949765+00:00", + "inferred_at": "2026-01-09T19:50:49.151606+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ABHILASH-DASH.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ABHILASH-DASH.json index 60cf46f817..1d626ce3d5 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ABHILASH-DASH.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ABHILASH-DASH.json @@ -197,7 +197,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/abhilash5788_20251214T110932Z.json" ], - "modified_at": "2026-01-09T19:18:14.939301+00:00", + "modified_at": "2026-01-09T19:51:05.565221+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "abhilash5788", @@ -226,7 +226,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -275,7 +275,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.939296+00:00", + "inferred_at": "2026-01-09T19:51:05.565099+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ALEXANDRE-BUENO.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ALEXANDRE-BUENO.json index 6f489a2b44..477b6c2813 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ALEXANDRE-BUENO.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ALEXANDRE-BUENO.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alexandre-bueno-91521516_20251214T110906Z.json" ], - "modified_at": "2026-01-09T19:18:12.465441+00:00", + "modified_at": "2026-01-09T19:50:48.482774+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alexandre-bueno-91521516", @@ -195,7 +195,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -244,7 +244,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.465422+00:00", + "inferred_at": "2026-01-09T19:50:48.482767+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ALVIN-KHARITS.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ALVIN-KHARITS.json index d4ef14e0eb..8e4e2119dd 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ALVIN-KHARITS.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ALVIN-KHARITS.json @@ -206,7 +206,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alvinkharits_20251214T111142Z.json" ], - "modified_at": "2026-01-09T19:18:17.118482+00:00", + "modified_at": "2026-01-09T19:51:13.295296+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alvinkharits", @@ -238,7 +238,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -279,7 +279,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.118476+00:00", + "inferred_at": "2026-01-09T19:51:13.295291+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_BO-LIU.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_BO-LIU.json index 4c33aaeb70..64fc8fe4de 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_BO-LIU.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_BO-LIU.json @@ -150,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bosealiu_20251214T111119Z.json" ], - "modified_at": "2026-01-09T19:18:11.629299+00:00", + "modified_at": "2026-01-09T19:50:47.231036+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bosealiu", @@ -179,7 +179,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.629292+00:00", + "inferred_at": "2026-01-09T19:50:47.231028+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_CODY-BROWN.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_CODY-BROWN.json index efafc61231..2a9af9a25c 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_CODY-BROWN.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_CODY-BROWN.json @@ -177,7 +177,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cody-brown-188a186b_20251214T111023Z.json" ], - "modified_at": "2026-01-09T19:18:17.503819+00:00", + "modified_at": "2026-01-09T19:50:54.333161+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cody-brown-188a186b", @@ -215,7 +215,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -264,7 +264,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.503809+00:00", + "inferred_at": "2026-01-09T19:50:54.333153+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ERIC-BERKERS.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ERIC-BERKERS.json index f0a9290a39..868598e8b0 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ERIC-BERKERS.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ERIC-BERKERS.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eric-berkers-600ba42a_20251214T110804Z.json" ], - "modified_at": "2026-01-09T19:18:18.153254+00:00", + "modified_at": "2026-01-09T19:51:29.000287+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eric-berkers-600ba42a", @@ -129,7 +129,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.153239+00:00", + "inferred_at": "2026-01-09T19:51:29.000281+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ERNEST-LOBO.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ERNEST-LOBO.json index a3bbf5d30e..102eb9c149 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ERNEST-LOBO.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ERNEST-LOBO.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ernest-mithun-xavier-lobo-59437811_20251214T111106Z.json" ], - "modified_at": "2026-01-09T19:18:14.983960+00:00", + "modified_at": "2026-01-09T19:51:21.541618+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ernest-mithun-xavier-lobo-59437811", @@ -203,7 +203,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.983953+00:00", + "inferred_at": "2026-01-09T19:51:21.541614+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_FEDERICO-TORRE.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_FEDERICO-TORRE.json index ca97079ced..f929387c98 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_FEDERICO-TORRE.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_FEDERICO-TORRE.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/federico-la-torre-27334b2b_20251214T111134Z.json" ], - "modified_at": "2026-01-09T19:18:18.393776+00:00", + "modified_at": "2026-01-09T19:51:29.318139+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "federico-la-torre-27334b2b", @@ -155,7 +155,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.393767+00:00", + "inferred_at": "2026-01-09T19:51:29.318134+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_FIGEN-DEMIRER.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_FIGEN-DEMIRER.json index f04760e4ec..3cdcdf6e76 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_FIGEN-DEMIRER.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_FIGEN-DEMIRER.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/figen-ece-demirer-43496252_20251214T111131Z.json" ], - "modified_at": "2026-01-09T19:18:13.495394+00:00", + "modified_at": "2026-01-09T19:51:05.167302+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "figen-ece-demirer-43496252", @@ -159,7 +159,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.495386+00:00", + "inferred_at": "2026-01-09T19:51:05.167272+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_FILIPPO-LUSITANI.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_FILIPPO-LUSITANI.json index 387c8f4b67..e9f304e888 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_FILIPPO-LUSITANI.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_FILIPPO-LUSITANI.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/filippo-lusitani-7771443a_20251214T111157Z.json" ], - "modified_at": "2026-01-09T19:18:14.231305+00:00", + "modified_at": "2026-01-09T19:50:58.943024+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "filippo-lusitani-7771443a", @@ -121,7 +121,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.231300+00:00", + "inferred_at": "2026-01-09T19:50:58.943017+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_GIORGOS-ZOGRAFOS.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_GIORGOS-ZOGRAFOS.json index ed9a33e2b7..2856ac7a96 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_GIORGOS-ZOGRAFOS.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_GIORGOS-ZOGRAFOS.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/giorgoszografos_20251214T111115Z.json" ], - "modified_at": "2026-01-09T19:18:14.366694+00:00", + "modified_at": "2026-01-09T19:51:01.710567+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "giorgoszografos", @@ -161,7 +161,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.366688+00:00", + "inferred_at": "2026-01-09T19:51:01.710562+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_GOPAL-MANTRAWADI.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_GOPAL-MANTRAWADI.json index 006e585b55..acc7b28146 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_GOPAL-MANTRAWADI.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_GOPAL-MANTRAWADI.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gopal-mantrawadi-6a465820_20251214T111232Z.json" ], - "modified_at": "2026-01-09T19:18:14.303252+00:00", + "modified_at": "2026-01-09T19:51:00.095930+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gopal-mantrawadi-6a465820", @@ -141,7 +141,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.303247+00:00", + "inferred_at": "2026-01-09T19:51:00.095924+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_HENRIQUE-MAGESTE.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_HENRIQUE-MAGESTE.json index f1c7b94860..3538f9aadd 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_HENRIQUE-MAGESTE.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_HENRIQUE-MAGESTE.json @@ -203,7 +203,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henriquemageste_20251214T110924Z.json" ], - "modified_at": "2026-01-09T19:18:13.358966+00:00", + "modified_at": "2026-01-09T19:50:54.192709+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henriquemageste", @@ -241,7 +241,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -290,7 +290,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.358960+00:00", + "inferred_at": "2026-01-09T19:50:54.192687+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_JAN-MARCK.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_JAN-MARCK.json index b01a8b7446..93e0ef5284 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_JAN-MARCK.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_JAN-MARCK.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jwmarck_20251214T110942Z.json" ], - "modified_at": "2026-01-09T19:18:15.364701+00:00", + "modified_at": "2026-01-09T19:51:08.607233+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jwmarck", @@ -173,7 +173,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.364694+00:00", + "inferred_at": "2026-01-09T19:51:08.607225+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_LARA-TRUTER.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_LARA-TRUTER.json index 3c74136628..d91a0bc863 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_LARA-TRUTER.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_LARA-TRUTER.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lara-truter-9095365b_20251214T111230Z.json" ], - "modified_at": "2026-01-09T19:18:14.765419+00:00", + "modified_at": "2026-01-09T19:51:18.447954+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lara-truter-9095365b", @@ -175,7 +175,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.765412+00:00", + "inferred_at": "2026-01-09T19:51:18.447949+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_MAGDY-SHONODA.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_MAGDY-SHONODA.json index 1208f98157..52d8fb20b6 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_MAGDY-SHONODA.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_MAGDY-SHONODA.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mshonoda_20251214T111019Z.json" ], - "modified_at": "2026-01-09T19:18:14.645913+00:00", + "modified_at": "2026-01-09T19:51:03.217721+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mshonoda", @@ -174,7 +174,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.645908+00:00", + "inferred_at": "2026-01-09T19:51:03.217715+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_MAIKEL-GOOSEN.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_MAIKEL-GOOSEN.json index 67c725fe37..b749bd62d8 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_MAIKEL-GOOSEN.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_MAIKEL-GOOSEN.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maikel-goosen-5a357541_20251214T111017Z.json" ], - "modified_at": "2026-01-09T19:18:13.450037+00:00", + "modified_at": "2026-01-09T19:50:54.333810+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maikel-goosen-5a357541", @@ -147,7 +147,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.450033+00:00", + "inferred_at": "2026-01-09T19:50:54.333804+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_MARCEL-MULDER.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_MARCEL-MULDER.json index af886fed8a..14e8a9a87c 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_MARCEL-MULDER.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_MARCEL-MULDER.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marcel-mulder-b6122014_20251214T110956Z.json" ], - "modified_at": "2026-01-09T19:18:15.691921+00:00", + "modified_at": "2026-01-09T19:51:13.466941+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marcel-mulder-b6122014", @@ -128,7 +128,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.691918+00:00", + "inferred_at": "2026-01-09T19:51:13.466934+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_NAGARAJU-DHULIPALLA.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_NAGARAJU-DHULIPALLA.json index 262adc5e3b..a946e4fb1d 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_NAGARAJU-DHULIPALLA.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_NAGARAJU-DHULIPALLA.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nagaraju-dhulipalla_20251214T110955Z.json" ], - "modified_at": "2026-01-09T19:18:15.728099+00:00", + "modified_at": "2026-01-09T19:50:49.071891+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nagaraju-dhulipalla", @@ -139,7 +139,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.728094+00:00", + "inferred_at": "2026-01-09T19:50:49.071886+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_PIETER-HORSTMAN.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_PIETER-HORSTMAN.json index 30c8149e60..7d73e5d29e 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_PIETER-HORSTMAN.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_PIETER-HORSTMAN.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pieterhorstman_20251214T110933Z.json" ], - "modified_at": "2026-01-09T19:18:13.077724+00:00", + "modified_at": "2026-01-09T19:50:54.522229+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pieterhorstman", @@ -169,7 +169,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +218,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.077717+00:00", + "inferred_at": "2026-01-09T19:50:54.522220+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_RALPH-HANZEN.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_RALPH-HANZEN.json similarity index 70% rename from data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_RALPH-HANZEN.json rename to data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_RALPH-HANZEN.json index a957553071..7fe7eb860c 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_RALPH-HANZEN.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_RALPH-HANZEN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_RALPH-HANZEN", + "ppid": "ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_RALPH-HANZEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NB-EIN", "first_date": "198X", "last_location": "NL-NB-EIN", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Ralph Hanzen", @@ -133,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ralphhanzen_20251214T110951Z.json" ], - "modified_at": "2026-01-09T19:18:17.086200+00:00", + "modified_at": "2026-01-09T19:51:29.317243+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ralphhanzen", @@ -156,6 +157,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_RALPH-HANZEN", + "new_ppid": "ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_RALPH-HANZEN", + "changed_at": "2026-01-09T19:51:29.317241+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -170,7 +181,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +230,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.086143+00:00", + "inferred_at": "2026-01-09T19:51:29.315381+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Eindhoven", + "formatted": "NL-NB-EIN", + "country_code": "NL", + "region_code": "NB", + "settlement_code": "EIN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Eindhoven University of Technology", + "date_range": "1991 - 1997 • 6 years", + "degree": "M.Sc." + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Eindhoven University of Technology", + "mapping_result": "Eindhoven, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Eindhoven, Netherlands", + "result": { + "geonames_id": 2756253, + "geonames_name": "Eindhoven", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.44083, + "longitude": 5.47778 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NB", + "settlement_code": "EIN" + }, + "result": "NL-NB-EIN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756253, + "geonames_name": "Eindhoven", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.44083, + "longitude": 5.47778 + }, + "inferred_at": "2026-01-09T19:51:29.317236+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ROBBERT-LINDEN.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ROBBERT-LINDEN.json index 2e0271ffdb..25c714de79 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ROBBERT-LINDEN.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_ROBBERT-LINDEN.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robbertvanderlinden_20251214T110842Z.json" ], - "modified_at": "2026-01-09T19:18:14.937802+00:00", + "modified_at": "2026-01-09T19:51:05.555036+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robbertvanderlinden", @@ -165,7 +165,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.937797+00:00", + "inferred_at": "2026-01-09T19:51:05.555028+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_SAMUEL-CHARLES.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_SAMUEL-CHARLES.json index d942ae604a..ee1be7b1ca 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_SAMUEL-CHARLES.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_SAMUEL-CHARLES.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/samxfed_20251214T111025Z.json" ], - "modified_at": "2026-01-09T19:18:13.002012+00:00", + "modified_at": "2026-01-09T19:50:50.276988+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "samxfed", @@ -204,7 +204,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -253,7 +253,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.002006+00:00", + "inferred_at": "2026-01-09T19:50:50.276981+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_SANDEEP-YOGI.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_SANDEEP-YOGI.json index 034dff1a64..058f3265f1 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_SANDEEP-YOGI.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_SANDEEP-YOGI.json @@ -159,7 +159,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sandeep-yogi-77ab46141_20251214T111027Z.json" ], - "modified_at": "2026-01-09T19:18:13.412377+00:00", + "modified_at": "2026-01-09T19:51:05.206060+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sandeep-yogi-77ab46141", @@ -197,7 +197,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +246,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.412371+00:00", + "inferred_at": "2026-01-09T19:51:05.206047+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_SEBASTIAN-G.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_SEBASTIAN-G.json index 4f8fece9d1..a097afece5 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_SEBASTIAN-G.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-EIN_XXXX_SEBASTIAN-G.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sebastian-g-768639a_20251214T110851Z.json" ], - "modified_at": "2026-01-09T19:18:17.327616+00:00", + "modified_at": "2026-01-09T19:51:25.530518+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sebastian-g-768639a", @@ -179,7 +179,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.327611+00:00", + "inferred_at": "2026-01-09T19:51:25.530514+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-HEL_XXXX_MANJUNATH-MALEPATI.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-HEL_XXXX_MANJUNATH-MALEPATI.json index 5270130223..0a6fb44cf9 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-HEL_XXXX_MANJUNATH-MALEPATI.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-HEL_XXXX_MANJUNATH-MALEPATI.json @@ -189,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/manjunath-malepati-591871b4_20251214T110930Z.json" ], - "modified_at": "2026-01-09T19:18:17.365718+00:00", + "modified_at": "2026-01-09T19:51:26.683949+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "manjunath-malepati-591871b4", @@ -218,7 +218,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -267,7 +267,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.365712+00:00", + "inferred_at": "2026-01-09T19:51:26.683945+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_BAS-KLEUSKENS.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_BAS-KLEUSKENS.json index 26559a5f9f..ebb19e98a9 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_BAS-KLEUSKENS.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_BAS-KLEUSKENS.json @@ -236,7 +236,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/baskleuskens_20251214T110839Z.json" ], - "modified_at": "2026-01-09T19:18:12.964108+00:00", + "modified_at": "2026-01-09T19:50:49.608649+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "baskleuskens", @@ -259,7 +259,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -300,7 +300,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.964105+00:00", + "inferred_at": "2026-01-09T19:50:49.608642+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_KANNAN-KEIZER.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_KANNAN-KEIZER.json index d1c46998f5..deeee3424f 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_KANNAN-KEIZER.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_KANNAN-KEIZER.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kannan-keizer-a39a995_20251214T111221Z.json" ], - "modified_at": "2026-01-09T19:18:11.419489+00:00", + "modified_at": "2026-01-09T19:50:46.849300+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kannan-keizer-a39a995", @@ -160,7 +160,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.419480+00:00", + "inferred_at": "2026-01-09T19:50:46.849275+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_MIAO-ZHANG.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_MIAO-ZHANG.json index fd469fbbfc..c6ade5e726 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_MIAO-ZHANG.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_MIAO-ZHANG.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/miao-zhang-436b6131_20251214T111006Z.json" ], - "modified_at": "2026-01-09T19:18:13.863294+00:00", + "modified_at": "2026-01-09T19:50:56.720233+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "miao-zhang-436b6131", @@ -191,7 +191,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.863290+00:00", + "inferred_at": "2026-01-09T19:50:56.720226+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_SUPRIYA-MANCHI.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_SUPRIYA-MANCHI.json index 5f9d8daa02..4364ffa4f4 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_SUPRIYA-MANCHI.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-VEL_XXXX_SUPRIYA-MANCHI.json @@ -160,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/supriya-manchi-6606a316_20251214T110845Z.json" ], - "modified_at": "2026-01-09T19:18:11.470740+00:00", + "modified_at": "2026-01-09T19:50:46.993649+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "supriya-manchi-6606a316", @@ -189,7 +189,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.470735+00:00", + "inferred_at": "2026-01-09T19:50:46.993640+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_NL-NB-WAA_XXXX_RALF-WEIJERS.json b/data/person/ID_NL-NB-EIN_198X_NL-NB-WAA_XXXX_RALF-WEIJERS.json index 0749ce3b97..78e5875e39 100644 --- a/data/person/ID_NL-NB-EIN_198X_NL-NB-WAA_XXXX_RALF-WEIJERS.json +++ b/data/person/ID_NL-NB-EIN_198X_NL-NB-WAA_XXXX_RALF-WEIJERS.json @@ -211,7 +211,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ralf-weijers-b15b979_20251214T111107Z.json" ], - "modified_at": "2026-01-09T19:18:13.554493+00:00", + "modified_at": "2026-01-09T19:50:54.651649+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ralf-weijers-b15b979", @@ -240,7 +240,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -289,7 +289,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.554489+00:00", + "inferred_at": "2026-01-09T19:50:54.651641+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_XX-XX-XXX_XXXX_DEVASHRI-KASHYAPE.json b/data/person/ID_NL-NB-EIN_198X_XX-XX-XXX_XXXX_DEVASHRI-KASHYAPE.json index 53117be8b0..86b113f218 100644 --- a/data/person/ID_NL-NB-EIN_198X_XX-XX-XXX_XXXX_DEVASHRI-KASHYAPE.json +++ b/data/person/ID_NL-NB-EIN_198X_XX-XX-XXX_XXXX_DEVASHRI-KASHYAPE.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/devashri-kashyape-80221741_20251214T110932Z.json" ], - "modified_at": "2026-01-09T19:18:11.193537+00:00", + "modified_at": "2026-01-09T19:51:29.237725+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "devashri-kashyape-80221741", @@ -159,7 +159,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.114128+00:00", + "inferred_at": "2026-01-09T19:51:29.232389+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_198X_XX-XX-XXX_XXXX_NINA-KLINKHAMER.json b/data/person/ID_NL-NB-EIN_198X_XX-XX-XXX_XXXX_NINA-KLINKHAMER.json index 6fa2e30a33..05fbc6323c 100644 --- a/data/person/ID_NL-NB-EIN_198X_XX-XX-XXX_XXXX_NINA-KLINKHAMER.json +++ b/data/person/ID_NL-NB-EIN_198X_XX-XX-XXX_XXXX_NINA-KLINKHAMER.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ninaklinkhamer_20251214T110728Z.json" ], - "modified_at": "2026-01-09T19:18:11.424210+00:00", + "modified_at": "2026-01-09T19:50:53.867787+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ninaklinkhamer", @@ -145,7 +145,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.420193+00:00", + "inferred_at": "2026-01-09T19:50:53.863766+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-GE-ARN_XXXX_STIJN-MARREWIJK.json b/data/person/ID_NL-NB-EIN_199X_NL-GE-ARN_XXXX_STIJN-MARREWIJK.json index fe6dbfb98c..58d36bbacb 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-GE-ARN_XXXX_STIJN-MARREWIJK.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-GE-ARN_XXXX_STIJN-MARREWIJK.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stijn-van-marrewijk-a364161b9_20251214T110735Z.json" ], - "modified_at": "2026-01-09T19:18:14.330179+00:00", + "modified_at": "2026-01-09T19:51:00.700309+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stijn-van-marrewijk-a364161b9", @@ -137,7 +137,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.330173+00:00", + "inferred_at": "2026-01-09T19:51:00.700300+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ABHISHEK-CHANDURKAR.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ABHISHEK-CHANDURKAR.json index 1a2b3083bf..eb5339d246 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ABHISHEK-CHANDURKAR.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ABHISHEK-CHANDURKAR.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/abhishek-chandurkar-49ab03120_20251214T111223Z.json" ], - "modified_at": "2026-01-09T19:18:13.786772+00:00", + "modified_at": "2026-01-09T19:50:56.566802+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "abhishek-chandurkar-49ab03120", @@ -164,7 +164,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.786767+00:00", + "inferred_at": "2026-01-09T19:50:56.566797+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ADMASU-GURMESSA.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ADMASU-GURMESSA.json index 9eaad0745b..3c0439ba93 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ADMASU-GURMESSA.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ADMASU-GURMESSA.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/admasu-geneti-gurmessa-ab581a27_20251214T110920Z.json" ], - "modified_at": "2026-01-09T19:18:16.561285+00:00", + "modified_at": "2026-01-09T19:51:19.049075+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "admasu-geneti-gurmessa-ab581a27", @@ -155,7 +155,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.561272+00:00", + "inferred_at": "2026-01-09T19:51:19.049069+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_AHMED-ABUELFARH.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_AHMED-ABUELFARH.json index 3b0f64ecc4..b06d88cf21 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_AHMED-ABUELFARH.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_AHMED-ABUELFARH.json @@ -187,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ahmash92_20251214T111118Z.json" ], - "modified_at": "2026-01-09T19:18:17.823795+00:00", + "modified_at": "2026-01-09T19:51:28.780893+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ahmash92", @@ -216,7 +216,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -265,7 +265,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.823782+00:00", + "inferred_at": "2026-01-09T19:51:28.780886+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ALEXANDER-GRAAF.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ALEXANDER-GRAAF.json index e017e38d68..ea858ba70b 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ALEXANDER-GRAAF.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ALEXANDER-GRAAF.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alexander-van-der-graaf-0a835818_20251214T111144Z.json" ], - "modified_at": "2026-01-09T19:18:13.419844+00:00", + "modified_at": "2026-01-09T19:50:54.115211+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alexander-van-der-graaf-0a835818", @@ -131,7 +131,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.419841+00:00", + "inferred_at": "2026-01-09T19:50:54.115204+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ANDRE-KARELSE.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ANDRE-KARELSE.json index 8ab60ee958..67cbb7773b 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ANDRE-KARELSE.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ANDRE-KARELSE.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/andre-karelse-3179831b8_20251214T110908Z.json" ], - "modified_at": "2026-01-09T19:18:13.287786+00:00", + "modified_at": "2026-01-09T19:50:53.810953+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "andre-karelse-3179831b8", @@ -149,7 +149,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.287783+00:00", + "inferred_at": "2026-01-09T19:50:53.810944+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ARVIND-RAVICHANDRAN.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ARVIND-RAVICHANDRAN.json index 9c390a9c3c..369f7aa5bb 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ARVIND-RAVICHANDRAN.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ARVIND-RAVICHANDRAN.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arvind-ravichandran_20251214T111037Z.json" ], - "modified_at": "2026-01-09T19:18:14.955520+00:00", + "modified_at": "2026-01-09T19:51:05.611319+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arvind-ravichandran", @@ -154,7 +154,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.955515+00:00", + "inferred_at": "2026-01-09T19:51:05.611311+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ASHTON-MENEZES.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ASHTON-MENEZES.json index d724fe39a9..926b77453e 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ASHTON-MENEZES.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ASHTON-MENEZES.json @@ -178,7 +178,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ashton-menezes-b9631366_20251214T110850Z.json" ], - "modified_at": "2026-01-09T19:18:18.312186+00:00", + "modified_at": "2026-01-09T19:51:29.269170+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ashton-menezes-b9631366", @@ -207,7 +207,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -256,7 +256,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.312179+00:00", + "inferred_at": "2026-01-09T19:51:29.269164+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_CHARALAMBOS-PAPADAKIS.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_CHARALAMBOS-PAPADAKIS.json index 4e37f6d1df..0600def1fe 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_CHARALAMBOS-PAPADAKIS.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_CHARALAMBOS-PAPADAKIS.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harispapadakis_20251214T111136Z.json" ], - "modified_at": "2026-01-09T19:18:15.169469+00:00", + "modified_at": "2026-01-09T19:51:06.975088+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harispapadakis", @@ -152,7 +152,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.169465+00:00", + "inferred_at": "2026-01-09T19:51:06.975082+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_DAAN-WOUDE.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_DAAN-WOUDE.json index 1440e2d152..130c4e0f4b 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_DAAN-WOUDE.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_DAAN-WOUDE.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daanvdwoude_20251214T110907Z.json" ], - "modified_at": "2026-01-09T19:18:14.126044+00:00", + "modified_at": "2026-01-09T19:50:58.660570+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daanvdwoude", @@ -152,7 +152,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.126039+00:00", + "inferred_at": "2026-01-09T19:50:58.660560+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_DIMITRIOS-KENTRO.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_DIMITRIOS-KENTRO.json index ea1f15ccad..5acd4ac52e 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_DIMITRIOS-KENTRO.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_DIMITRIOS-KENTRO.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dimitrios-kentro_20251214T111024Z.json" ], - "modified_at": "2026-01-09T19:18:18.349503+00:00", + "modified_at": "2026-01-09T19:51:29.282896+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dimitrios-kentro", @@ -199,7 +199,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -248,7 +248,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.349495+00:00", + "inferred_at": "2026-01-09T19:51:29.282890+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_DORSA-HOSSEINI.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_DORSA-HOSSEINI.json index 2f28a37697..c653ebf22d 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_DORSA-HOSSEINI.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_DORSA-HOSSEINI.json @@ -172,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dorsa-nayeb-ghanbar-hosseini_20251214T111143Z.json" ], - "modified_at": "2026-01-09T19:18:11.788632+00:00", + "modified_at": "2026-01-09T19:50:47.300948+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dorsa-nayeb-ghanbar-hosseini", @@ -201,7 +201,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -250,7 +250,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.788601+00:00", + "inferred_at": "2026-01-09T19:50:47.300940+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_EMANUELA-CATANA.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_EMANUELA-CATANA.json index 13b4142b20..603ba76070 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_EMANUELA-CATANA.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_EMANUELA-CATANA.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emanuela-catana-230195115_20251214T111152Z.json" ], - "modified_at": "2026-01-09T19:18:15.066766+00:00", + "modified_at": "2026-01-09T19:51:06.669479+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emanuela-catana-230195115", @@ -142,7 +142,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.066762+00:00", + "inferred_at": "2026-01-09T19:51:06.669473+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ENGD-DPENHA.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ENGD-DPENHA.json index 1c937c8dea..10c539eeaa 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ENGD-DPENHA.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ENGD-DPENHA.json @@ -184,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nathandpenha_20251214T111111Z.json" ], - "modified_at": "2026-01-09T19:18:17.691619+00:00", + "modified_at": "2026-01-09T19:51:28.549956+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nathandpenha", @@ -213,7 +213,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.691603+00:00", + "inferred_at": "2026-01-09T19:51:28.549951+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_ENGD-TAHIR.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ENGD-TAHIR.json similarity index 65% rename from data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_ENGD-TAHIR.json rename to data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ENGD-TAHIR.json index 930de052bd..04e01bd843 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_ENGD-TAHIR.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ENGD-TAHIR.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_ENGD-TAHIR", + "ppid": "ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ENGD-TAHIR", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NB-EIN", "first_date": "199X", "last_location": "NL-NB-EIN", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "EngD Osama Tahir", @@ -92,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/osamaahmed17_20251214T110828Z.json" ], - "modified_at": "2026-01-09T19:18:16.914005+00:00", + "modified_at": "2026-01-09T19:51:22.026362+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "osamaahmed17", @@ -115,6 +116,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_ENGD-TAHIR", + "new_ppid": "ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ENGD-TAHIR", + "changed_at": "2026-01-09T19:51:22.026360+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -123,7 +134,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +175,77 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.913965+00:00", + "inferred_at": "2026-01-09T19:51:22.024372+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Eindhoven", + "formatted": "NL-NB-EIN", + "country_code": "NL", + "region_code": "NB", + "settlement_code": "EIN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Eindhoven University of Technology", + "date_range": "2022 - 2024 • 2 years", + "degree": "Engineering Doctorate (EngD), Software Technology, 8/9" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Eindhoven University of Technology", + "mapping_result": "Eindhoven, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Eindhoven, Netherlands", + "result": { + "geonames_id": 2756253, + "geonames_name": "Eindhoven", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.44083, + "longitude": 5.47778 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NB", + "settlement_code": "EIN" + }, + "result": "NL-NB-EIN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756253, + "geonames_name": "Eindhoven", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.44083, + "longitude": 5.47778 + }, + "inferred_at": "2026-01-09T19:51:22.026351+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ERIK-SAVENIJE.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ERIK-SAVENIJE.json index b72403a6c9..3818c124b7 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ERIK-SAVENIJE.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_ERIK-SAVENIJE.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erik-savenije-2924a9130_20251214T111227Z.json" ], - "modified_at": "2026-01-09T19:18:13.719211+00:00", + "modified_at": "2026-01-09T19:50:55.988573+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erik-savenije-2924a9130", @@ -159,7 +159,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.719207+00:00", + "inferred_at": "2026-01-09T19:50:55.988567+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_GIZEM-AKTAS.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_GIZEM-AKTAS.json index e5bfb13c04..872636373e 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_GIZEM-AKTAS.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_GIZEM-AKTAS.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gizemaktas_20251214T111206Z.json" ], - "modified_at": "2026-01-09T19:18:14.183189+00:00", + "modified_at": "2026-01-09T19:50:58.809383+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gizemaktas", @@ -156,7 +156,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.183183+00:00", + "inferred_at": "2026-01-09T19:50:58.809375+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_IMRE-DEHNER.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_IMRE-DEHNER.json index fc5f3aeb92..11623c7d60 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_IMRE-DEHNER.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_IMRE-DEHNER.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/imre-dehner-83a7bbb1_20251214T111234Z.json" ], - "modified_at": "2026-01-09T19:18:14.297204+00:00", + "modified_at": "2026-01-09T19:51:00.074805+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "imre-dehner-83a7bbb1", @@ -164,7 +164,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.297198+00:00", + "inferred_at": "2026-01-09T19:51:00.074795+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_JAN-MASTRIGT.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_JAN-MASTRIGT.json index 16c7296cff..58f20c050f 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_JAN-MASTRIGT.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_JAN-MASTRIGT.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-van-mastrigt-583968176_20251214T111217Z.json" ], - "modified_at": "2026-01-09T19:18:15.572198+00:00", + "modified_at": "2026-01-09T19:51:28.576259+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-van-mastrigt-583968176", @@ -170,7 +170,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.572191+00:00", + "inferred_at": "2026-01-09T19:51:28.576256+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_JOS-SNIJDERS.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_JOS-SNIJDERS.json index 14c8aaa5ac..a96ca2f23d 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_JOS-SNIJDERS.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_JOS-SNIJDERS.json @@ -140,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jos-snijders_20251214T111130Z.json" ], - "modified_at": "2026-01-09T19:18:17.489380+00:00", + "modified_at": "2026-01-09T19:51:28.196237+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jos-snijders", @@ -169,7 +169,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +218,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.489373+00:00", + "inferred_at": "2026-01-09T19:51:28.196230+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_KAAN-ERKOC.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_KAAN-ERKOC.json index 364ef52eea..605bb23943 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_KAAN-ERKOC.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_KAAN-ERKOC.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mkaanerkoc_20251214T111126Z.json" ], - "modified_at": "2026-01-09T19:18:13.303065+00:00", + "modified_at": "2026-01-09T19:50:53.841809+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mkaanerkoc", @@ -145,7 +145,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.303061+00:00", + "inferred_at": "2026-01-09T19:50:53.841804+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_KISAKA-MSOFFE.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_KISAKA-MSOFFE.json index 18d4aae0c3..0b51ae9f75 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_KISAKA-MSOFFE.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_KISAKA-MSOFFE.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kisaka-msoffe-5ba94843_20251214T111233Z.json" ], - "modified_at": "2026-01-09T19:18:13.115662+00:00", + "modified_at": "2026-01-09T19:50:51.735698+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kisaka-msoffe-5ba94843", @@ -159,7 +159,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.115657+00:00", + "inferred_at": "2026-01-09T19:50:51.735690+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_LENNART-SIKKENK.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_LENNART-SIKKENK.json index 09ebe68b85..ab845fac05 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_LENNART-SIKKENK.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_LENNART-SIKKENK.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lennart-sikkenk_20251214T110930Z.json" ], - "modified_at": "2026-01-09T19:18:13.284306+00:00", + "modified_at": "2026-01-09T19:50:53.742332+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lennart-sikkenk", @@ -154,7 +154,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.284302+00:00", + "inferred_at": "2026-01-09T19:50:53.742311+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_MAKAR-RIABCEV.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_MAKAR-RIABCEV.json index 95999f24d8..df63e89fbb 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_MAKAR-RIABCEV.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_MAKAR-RIABCEV.json @@ -189,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/makarriabcev_20251214T110902Z.json" ], - "modified_at": "2026-01-09T19:18:15.523537+00:00", + "modified_at": "2026-01-09T19:51:11.795108+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "makarriabcev", @@ -218,7 +218,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -267,7 +267,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.523532+00:00", + "inferred_at": "2026-01-09T19:51:11.795097+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_MARIJN-DONKELAAR.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_MARIJN-DONKELAAR.json index 5f7d601799..bb6b9f6b81 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_MARIJN-DONKELAAR.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_MARIJN-DONKELAAR.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marijn-van-donkelaar-034409a6_20251214T111140Z.json" ], - "modified_at": "2026-01-09T19:18:15.214175+00:00", + "modified_at": "2026-01-09T19:51:07.018270+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marijn-van-donkelaar-034409a6", @@ -151,7 +151,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.214171+00:00", + "inferred_at": "2026-01-09T19:51:07.018264+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_MARION-RIJKS.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_MARION-RIJKS.json index 47b4c1394c..d097ae4537 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_MARION-RIJKS.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_MARION-RIJKS.json @@ -213,7 +213,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marion-rijks-b87a684_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:14.782322+00:00", + "modified_at": "2026-01-09T19:51:04.545348+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marion-rijks-b87a684", @@ -250,7 +250,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -299,7 +299,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.782318+00:00", + "inferred_at": "2026-01-09T19:51:04.545341+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_PRASANTH-MURALIDHARAN.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_PRASANTH-MURALIDHARAN.json index 49f5e7daae..34a7f07a71 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_PRASANTH-MURALIDHARAN.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_PRASANTH-MURALIDHARAN.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/prasanthmuralidharan_20251214T111133Z.json" ], - "modified_at": "2026-01-09T19:18:12.981716+00:00", + "modified_at": "2026-01-09T19:50:49.623941+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "prasanthmuralidharan", @@ -182,7 +182,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +231,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.981711+00:00", + "inferred_at": "2026-01-09T19:50:49.623935+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_SAMAR-HADDAD.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_SAMAR-HADDAD.json index 0db50ebfe2..de8df1b06b 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_SAMAR-HADDAD.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_SAMAR-HADDAD.json @@ -202,7 +202,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rania-haddad_20251214T111015Z.json" ], - "modified_at": "2026-01-09T19:18:16.597716+00:00", + "modified_at": "2026-01-09T19:51:20.519656+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rania-haddad", @@ -231,7 +231,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -280,7 +280,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.597712+00:00", + "inferred_at": "2026-01-09T19:51:20.519651+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_SNEHA-SAGALA.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_SNEHA-SAGALA.json index e8768a1c30..e7f0661734 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_SNEHA-SAGALA.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_SNEHA-SAGALA.json @@ -157,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sneha-sagala-81796538_20251214T110847Z.json" ], - "modified_at": "2026-01-09T19:18:17.373039+00:00", + "modified_at": "2026-01-09T19:51:11.059453+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sneha-sagala-81796538", @@ -189,7 +189,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.373027+00:00", + "inferred_at": "2026-01-09T19:51:11.059449+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_VINA-FARAMARZI.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_VINA-FARAMARZI.json index 9b7ad19c9c..e628341a9c 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_VINA-FARAMARZI.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_VINA-FARAMARZI.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vinafaramarzi_20251214T110903Z.json" ], - "modified_at": "2026-01-09T19:18:17.799298+00:00", + "modified_at": "2026-01-09T19:51:28.583038+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vinafaramarzi", @@ -180,7 +180,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.799291+00:00", + "inferred_at": "2026-01-09T19:51:28.583034+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_YOUNES-AOUAJ.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_YOUNES-AOUAJ.json index 339bb4c588..9ea9456257 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_YOUNES-AOUAJ.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-EIN_XXXX_YOUNES-AOUAJ.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/younes-aouaj-4a4379b2_20251214T110849Z.json" ], - "modified_at": "2026-01-09T19:18:12.602619+00:00", + "modified_at": "2026-01-09T19:51:01.729868+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "younes-aouaj-4a4379b2", @@ -164,7 +164,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.602613+00:00", + "inferred_at": "2026-01-09T19:51:01.729863+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-GEL_XXXX_ROEL-BORGERS.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-GEL_XXXX_ROEL-BORGERS.json index 3843e536d2..d9ba5c30dc 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-GEL_XXXX_ROEL-BORGERS.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-GEL_XXXX_ROEL-BORGERS.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roel-borgers_20251214T111131Z.json" ], - "modified_at": "2026-01-09T19:18:18.891378+00:00", + "modified_at": "2026-01-09T19:51:29.496000+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "roel-borgers", @@ -135,7 +135,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.891373+00:00", + "inferred_at": "2026-01-09T19:51:29.495996+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-OOS_XXXX_JASPER-GOOS.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-OOS_XXXX_JASPER-GOOS.json index d11bbec436..263ce29556 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-OOS_XXXX_JASPER-GOOS.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-OOS_XXXX_JASPER-GOOS.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jaspergoos_20251214T110852Z.json" ], - "modified_at": "2026-01-09T19:18:17.283668+00:00", + "modified_at": "2026-01-09T19:51:25.486949+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jaspergoos", @@ -177,7 +177,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.283662+00:00", + "inferred_at": "2026-01-09T19:51:25.486945+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-TIL_XXXX_AHMET-COSKUN.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-TIL_XXXX_AHMET-COSKUN.json index b82574fc29..bd95484e44 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-TIL_XXXX_AHMET-COSKUN.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-TIL_XXXX_AHMET-COSKUN.json @@ -243,7 +243,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/coskunahmet_20251214T110857Z.json" ], - "modified_at": "2026-01-09T19:18:15.210391+00:00", + "modified_at": "2026-01-09T19:51:07.013889+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "coskunahmet", @@ -266,7 +266,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -307,7 +307,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.210386+00:00", + "inferred_at": "2026-01-09T19:51:07.013883+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-TIL_XXXX_MARLEEN-TRAAS.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-TIL_XXXX_MARLEEN-TRAAS.json index f63315428f..25be5b5c17 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-TIL_XXXX_MARLEEN-TRAAS.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-TIL_XXXX_MARLEEN-TRAAS.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marleen-traas-91b766153_20251214T111055Z.json" ], - "modified_at": "2026-01-09T19:18:13.288992+00:00", + "modified_at": "2026-01-09T19:50:53.811742+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marleen-traas-91b766153", @@ -128,7 +128,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.288986+00:00", + "inferred_at": "2026-01-09T19:50:53.811734+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_ALINA-ONAC.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_ALINA-ONAC.json index e177fbec1c..229f7d46c8 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_ALINA-ONAC.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_ALINA-ONAC.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alina-onac-504173b_20251214T110938Z.json" ], - "modified_at": "2026-01-09T19:18:13.877276+00:00", + "modified_at": "2026-01-09T19:51:10.845439+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alina-onac-504173b", @@ -188,7 +188,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.877268+00:00", + "inferred_at": "2026-01-09T19:51:10.845430+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_DION-VERSCHUREN.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_DION-VERSCHUREN.json index bd741e5127..62c29bf869 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_DION-VERSCHUREN.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_DION-VERSCHUREN.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dion-verschuren_20251214T111121Z.json" ], - "modified_at": "2026-01-09T19:18:17.755247+00:00", + "modified_at": "2026-01-09T19:51:28.561984+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dion-verschuren", @@ -198,7 +198,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +247,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.755240+00:00", + "inferred_at": "2026-01-09T19:51:28.561978+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_KEVIN-WANG.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_KEVIN-WANG.json index 43f40c51f1..3284ccd29a 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_KEVIN-WANG.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_KEVIN-WANG.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kevin-tc-wang-419a57114_20251214T111140Z.json" ], - "modified_at": "2026-01-09T19:18:17.722027+00:00", + "modified_at": "2026-01-09T19:51:28.555737+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kevin-tc-wang-419a57114", @@ -126,7 +126,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.722019+00:00", + "inferred_at": "2026-01-09T19:51:28.555734+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_TUGBA-FINDIK.json b/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_TUGBA-FINDIK.json index 949e3c98b4..e39605d23a 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_TUGBA-FINDIK.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-NB-VEL_XXXX_TUGBA-FINDIK.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tugba-findik-15b3071b7_20251214T110959Z.json" ], - "modified_at": "2026-01-09T19:18:13.124970+00:00", + "modified_at": "2026-01-09T19:50:51.771046+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tugba-findik-15b3071b7", @@ -142,7 +142,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.124967+00:00", + "inferred_at": "2026-01-09T19:50:51.771042+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_NL-UT-UTR_XXXX_ARAM-MEIJER.json b/data/person/ID_NL-NB-EIN_199X_NL-UT-UTR_XXXX_ARAM-MEIJER.json index 00735641f0..21879a6814 100644 --- a/data/person/ID_NL-NB-EIN_199X_NL-UT-UTR_XXXX_ARAM-MEIJER.json +++ b/data/person/ID_NL-NB-EIN_199X_NL-UT-UTR_XXXX_ARAM-MEIJER.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arammeijer_20251214T111224Z.json" ], - "modified_at": "2026-01-09T19:18:13.307747+00:00", + "modified_at": "2026-01-09T19:51:15.180648+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arammeijer", @@ -175,7 +175,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.307742+00:00", + "inferred_at": "2026-01-09T19:51:15.180643+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_199X_XX-XX-XXX_XXXX_OGUZHAN-YILDIZ.json b/data/person/ID_NL-NB-EIN_199X_XX-XX-XXX_XXXX_OGUZHAN-YILDIZ.json index 261d902ec7..aa87d09b4a 100644 --- a/data/person/ID_NL-NB-EIN_199X_XX-XX-XXX_XXXX_OGUZHAN-YILDIZ.json +++ b/data/person/ID_NL-NB-EIN_199X_XX-XX-XXX_XXXX_OGUZHAN-YILDIZ.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/oguzhan-yildiz-825607110_20251214T111015Z.json" ], - "modified_at": "2026-01-09T19:18:16.125348+00:00", + "modified_at": "2026-01-09T19:51:17.574737+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "oguzhan-yildiz-825607110", @@ -145,7 +145,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.123494+00:00", + "inferred_at": "2026-01-09T19:51:17.572788+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SWATI-KUNWAR.json b/data/person/ID_NL-NB-EIN_199X_XX-XX-XXX_XXXX_SWATI-KUNWAR.json similarity index 66% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SWATI-KUNWAR.json rename to data/person/ID_NL-NB-EIN_199X_XX-XX-XXX_XXXX_SWATI-KUNWAR.json index 529b3a4142..6c24c759eb 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SWATI-KUNWAR.json +++ b/data/person/ID_NL-NB-EIN_199X_XX-XX-XXX_XXXX_SWATI-KUNWAR.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SWATI-KUNWAR", + "ppid": "ID_NL-NB-EIN_199X_XX-XX-XXX_XXXX_SWATI-KUNWAR", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NB-EIN", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Swati Kunwar", @@ -121,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/swati-kunwar_20251214T111101Z.json" ], - "modified_at": "2026-01-09T19:18:13.023705+00:00", + "modified_at": "2026-01-09T19:50:50.606510+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "swati-kunwar", @@ -134,6 +135,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SWATI-KUNWAR", + "new_ppid": "ID_NL-NB-EIN_199X_XX-XX-XXX_XXXX_SWATI-KUNWAR", + "changed_at": "2026-01-09T19:50:50.606501+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -142,7 +153,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +194,77 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.021833+00:00", + "inferred_at": "2026-01-09T19:50:50.596082+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Eindhoven", + "formatted": "NL-NB-EIN", + "country_code": "NL", + "region_code": "NB", + "settlement_code": "EIN", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Eindhoven University of Technology", + "date_range": "2015 - 2017 • 2 years", + "degree": "Master’s Degree, Embedded System" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Eindhoven University of Technology", + "mapping_result": "Eindhoven, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Eindhoven, Netherlands", + "result": { + "geonames_id": 2756253, + "geonames_name": "Eindhoven", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.44083, + "longitude": 5.47778 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NB", + "settlement_code": "EIN" + }, + "result": "NL-NB-EIN" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756253, + "geonames_name": "Eindhoven", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.44083, + "longitude": 5.47778 + }, + "inferred_at": "2026-01-09T19:50:50.601721+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_200X_NL-NB-EIN_XXXX_ALPER-ARAS.json b/data/person/ID_NL-NB-EIN_200X_NL-NB-EIN_XXXX_ALPER-ARAS.json index 1e56a248b1..9fddaa83ce 100644 --- a/data/person/ID_NL-NB-EIN_200X_NL-NB-EIN_XXXX_ALPER-ARAS.json +++ b/data/person/ID_NL-NB-EIN_200X_NL-NB-EIN_XXXX_ALPER-ARAS.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alper-aras-652185231_20251214T110808Z.json" ], - "modified_at": "2026-01-09T19:18:13.408187+00:00", + "modified_at": "2026-01-09T19:50:54.094453+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alper-aras-652185231", @@ -146,7 +146,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.408183+00:00", + "inferred_at": "2026-01-09T19:50:54.094447+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_200X_NL-NB-EIN_XXXX_ERIK-DEKKER.json b/data/person/ID_NL-NB-EIN_200X_NL-NB-EIN_XXXX_ERIK-DEKKER.json index c789a51369..128b9de870 100644 --- a/data/person/ID_NL-NB-EIN_200X_NL-NB-EIN_XXXX_ERIK-DEKKER.json +++ b/data/person/ID_NL-NB-EIN_200X_NL-NB-EIN_XXXX_ERIK-DEKKER.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erikpydekker_20251214T110917Z.json" ], - "modified_at": "2026-01-09T19:18:14.669574+00:00", + "modified_at": "2026-01-09T19:51:03.341904+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erikpydekker", @@ -145,7 +145,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.669571+00:00", + "inferred_at": "2026-01-09T19:51:03.341896+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_200X_NL-NB-EIN_XXXX_SHANE-MILLSON.json b/data/person/ID_NL-NB-EIN_200X_NL-NB-EIN_XXXX_SHANE-MILLSON.json index 95a0bbe0c8..cabc019456 100644 --- a/data/person/ID_NL-NB-EIN_200X_NL-NB-EIN_XXXX_SHANE-MILLSON.json +++ b/data/person/ID_NL-NB-EIN_200X_NL-NB-EIN_XXXX_SHANE-MILLSON.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/shanemillson_20251214T110954Z.json" ], - "modified_at": "2026-01-09T19:18:13.393985+00:00", + "modified_at": "2026-01-09T19:50:54.014443+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "shanemillson", @@ -136,7 +136,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.393969+00:00", + "inferred_at": "2026-01-09T19:50:54.014436+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-EIN_200X_NL-NH-AMS_XXXX_LENA-HAAN.json b/data/person/ID_NL-NB-EIN_200X_NL-NH-AMS_XXXX_LENA-HAAN.json index cd7021a941..fe43ebeba2 100644 --- a/data/person/ID_NL-NB-EIN_200X_NL-NH-AMS_XXXX_LENA-HAAN.json +++ b/data/person/ID_NL-NB-EIN_200X_NL-NH-AMS_XXXX_LENA-HAAN.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lena-den-haan-46988a21b_20251214T110105Z.json" ], - "modified_at": "2026-01-09T19:18:13.503842+00:00", + "modified_at": "2026-01-09T19:51:03.247017+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lena-den-haan-46988a21b", @@ -152,7 +152,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.503836+00:00", + "inferred_at": "2026-01-09T19:51:03.247009+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-ETT_195X_NL-GE-DRU_XXXX_CEES-COOIMAN.json b/data/person/ID_NL-NB-ETT_195X_NL-GE-DRU_XXXX_CEES-COOIMAN.json index 777564328b..9ab182d447 100644 --- a/data/person/ID_NL-NB-ETT_195X_NL-GE-DRU_XXXX_CEES-COOIMAN.json +++ b/data/person/ID_NL-NB-ETT_195X_NL-GE-DRU_XXXX_CEES-COOIMAN.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ceescooiman_20251214T110619Z.json" ], - "modified_at": "2026-01-09T19:18:16.311388+00:00", + "modified_at": "2026-01-09T19:51:06.699416+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ceescooiman", @@ -163,7 +163,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.311377+00:00", + "inferred_at": "2026-01-09T19:51:06.699407+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-ETT_197X_XX-XX-XXX_XXXX_ANNE-V.json b/data/person/ID_NL-NB-ETT_197X_XX-XX-XXX_XXXX_ANNE-V.json index b8a940ca65..eb47ecec9b 100644 --- a/data/person/ID_NL-NB-ETT_197X_XX-XX-XXX_XXXX_ANNE-V.json +++ b/data/person/ID_NL-NB-ETT_197X_XX-XX-XXX_XXXX_ANNE-V.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-v-1766a923_20251214T112313Z.json" ], - "modified_at": "2026-01-09T19:18:12.487829+00:00", + "modified_at": "2026-01-09T19:50:48.491167+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-v-1766a923", @@ -162,7 +162,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.484182+00:00", + "inferred_at": "2026-01-09T19:50:48.486939+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-ETT_199X_NL-NB-ZUN_XXXX_EEFJE-GOOS.json b/data/person/ID_NL-NB-ETT_199X_NL-NB-ZUN_XXXX_EEFJE-GOOS.json index dad367bd9c..c9d871f8cc 100644 --- a/data/person/ID_NL-NB-ETT_199X_NL-NB-ZUN_XXXX_EEFJE-GOOS.json +++ b/data/person/ID_NL-NB-ETT_199X_NL-NB-ZUN_XXXX_EEFJE-GOOS.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eefje-goos-014a3130_20251214T110313Z.json" ], - "modified_at": "2026-01-09T19:18:14.668215+00:00", + "modified_at": "2026-01-09T19:51:03.341068+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eefje-goos-014a3130", @@ -162,7 +162,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.668210+00:00", + "inferred_at": "2026-01-09T19:51:03.341059+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-HEL_199X_NL-NB-EIN_XXXX_IGOR-PEREIRA.json b/data/person/ID_NL-NB-HEL_199X_NL-NB-EIN_XXXX_IGOR-PEREIRA.json index bfcaee4429..2bc62c4f8a 100644 --- a/data/person/ID_NL-NB-HEL_199X_NL-NB-EIN_XXXX_IGOR-PEREIRA.json +++ b/data/person/ID_NL-NB-HEL_199X_NL-NB-EIN_XXXX_IGOR-PEREIRA.json @@ -133,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/igor-pereira-1293ba145_20251214T111020Z.json" ], - "modified_at": "2026-01-09T19:18:15.768042+00:00", + "modified_at": "2026-01-09T19:51:14.350551+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "igor-pereira-1293ba145", @@ -162,7 +162,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.768038+00:00", + "inferred_at": "2026-01-09T19:51:14.350543+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-LEE_199X_XX-XX-XXX_XXXX_TRISTEN-STRIJKERT.json b/data/person/ID_NL-NB-LEE_199X_XX-XX-XXX_XXXX_TRISTEN-STRIJKERT.json index 58f5765684..5b139a491f 100644 --- a/data/person/ID_NL-NB-LEE_199X_XX-XX-XXX_XXXX_TRISTEN-STRIJKERT.json +++ b/data/person/ID_NL-NB-LEE_199X_XX-XX-XXX_XXXX_TRISTEN-STRIJKERT.json @@ -176,7 +176,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tristen-strijkert-45442b148_20251214T113039Z.json" ], - "modified_at": "2026-01-09T19:18:17.167758+00:00", + "modified_at": "2026-01-09T19:50:49.088287+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tristen-strijkert-45442b148", @@ -207,7 +207,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -248,7 +248,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.167736+00:00", + "inferred_at": "2026-01-09T19:50:49.088241+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-OSS_198X_NL-GE-WAG_XXXX_KARIN-SCHIPPER.json b/data/person/ID_NL-NB-OSS_198X_NL-GE-WAG_XXXX_KARIN-SCHIPPER.json index e1ea92cbf8..23c6c2e3c1 100644 --- a/data/person/ID_NL-NB-OSS_198X_NL-GE-WAG_XXXX_KARIN-SCHIPPER.json +++ b/data/person/ID_NL-NB-OSS_198X_NL-GE-WAG_XXXX_KARIN-SCHIPPER.json @@ -198,7 +198,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karin-schipper-1aa28a29_20251214T110601Z.json" ], - "modified_at": "2026-01-09T19:18:13.920022+00:00", + "modified_at": "2026-01-09T19:50:56.843464+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karin-schipper-1aa28a29", @@ -227,7 +227,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -276,7 +276,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.920017+00:00", + "inferred_at": "2026-01-09T19:50:56.843457+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_195X_NL-ZH-VAL_XXXX_EDUARD-DORMANS.json b/data/person/ID_NL-NB-TIL_195X_NL-ZH-VAL_XXXX_EDUARD-DORMANS.json index 805ec84012..5408242cd8 100644 --- a/data/person/ID_NL-NB-TIL_195X_NL-ZH-VAL_XXXX_EDUARD-DORMANS.json +++ b/data/person/ID_NL-NB-TIL_195X_NL-ZH-VAL_XXXX_EDUARD-DORMANS.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eduard-dormans-9115a519_20251214T110446Z.json" ], - "modified_at": "2026-01-09T19:18:14.719559+00:00", + "modified_at": "2026-01-09T19:51:03.562771+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eduard-dormans-9115a519", @@ -174,7 +174,7 @@ "primary_rationale": "1950 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1950 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:14.719555+00:00", + "inferred_at": "2026-01-09T19:51:03.562765+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_196X_NL-NB-VEL_XXXX_KUNO-HUISMAN.json b/data/person/ID_NL-NB-TIL_196X_NL-NB-VEL_XXXX_KUNO-HUISMAN.json index 9682f33b9e..9456292a89 100644 --- a/data/person/ID_NL-NB-TIL_196X_NL-NB-VEL_XXXX_KUNO-HUISMAN.json +++ b/data/person/ID_NL-NB-TIL_196X_NL-NB-VEL_XXXX_KUNO-HUISMAN.json @@ -191,8 +191,10 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T00:29:00Z", + "result": "not_found", + "notes": "Exa search found ASML and Tilburg University profiles but no birth date. Search query: \"Kuno Huisman\" Tilburg professor born birthday biography" } }, "provenance": { @@ -201,7 +203,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kjmhuisman_20251214T111223Z.json" ], - "modified_at": "2026-01-09T19:18:16.498276+00:00", + "modified_at": "2026-01-09T19:51:06.621142+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kjmhuisman", @@ -239,7 +241,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -288,7 +290,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.498267+00:00", + "inferred_at": "2026-01-09T19:51:06.621135+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_197X_NL-NH-AMS_XXXX_GURKAN-CELIK.json b/data/person/ID_NL-NB-TIL_197X_NL-NH-AMS_XXXX_GURKAN-CELIK.json index 18e9f5a6aa..9befa123e6 100644 --- a/data/person/ID_NL-NB-TIL_197X_NL-NH-AMS_XXXX_GURKAN-CELIK.json +++ b/data/person/ID_NL-NB-TIL_197X_NL-NH-AMS_XXXX_GURKAN-CELIK.json @@ -319,7 +319,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gurkan-celik-9993214_20251213T010000Z.json" ], - "modified_at": "2026-01-09T19:18:15.172018+00:00", + "modified_at": "2026-01-09T19:51:12.753065+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gurkan-celik-9993214", @@ -359,7 +359,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -400,7 +400,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.172013+00:00", + "inferred_at": "2026-01-09T19:51:12.753059+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_198X_NL-NB-TIL_XXXX_VERA-DUREN.json b/data/person/ID_NL-NB-TIL_198X_NL-NB-TIL_XXXX_VERA-DUREN.json index 03a7d8bca8..a7f23c9826 100644 --- a/data/person/ID_NL-NB-TIL_198X_NL-NB-TIL_XXXX_VERA-DUREN.json +++ b/data/person/ID_NL-NB-TIL_198X_NL-NB-TIL_XXXX_VERA-DUREN.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vera-van-duren-42703217_20251214T110715Z.json" ], - "modified_at": "2026-01-09T19:18:14.585126+00:00", + "modified_at": "2026-01-09T19:51:01.942664+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vera-van-duren-42703217", @@ -144,7 +144,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.585121+00:00", + "inferred_at": "2026-01-09T19:51:01.942657+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_198X_NL-NH-AMS_XXXX_PUCK-BASTIAANSEN.json b/data/person/ID_NL-NB-TIL_198X_NL-NH-AMS_XXXX_PUCK-BASTIAANSEN.json index 02e77bfb84..672d59bcec 100644 --- a/data/person/ID_NL-NB-TIL_198X_NL-NH-AMS_XXXX_PUCK-BASTIAANSEN.json +++ b/data/person/ID_NL-NB-TIL_198X_NL-NH-AMS_XXXX_PUCK-BASTIAANSEN.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/puck-bastiaansen-2bb554b7_20251214T111700Z.json" ], - "modified_at": "2026-01-09T19:18:13.949891+00:00", + "modified_at": "2026-01-09T19:50:56.878137+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "puck-bastiaansen-2bb554b7", @@ -180,7 +180,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.949886+00:00", + "inferred_at": "2026-01-09T19:50:56.878130+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_198X_XX-XX-XXX_XXXX_MARIEANNE-KEIZERMITTELHAEUSER.json b/data/person/ID_NL-NB-TIL_198X_NL-UT-UTR_XXXX_MARIEANNE-KEIZERMITTELHAEUSER.json similarity index 88% rename from data/person/ID_NL-NB-TIL_198X_XX-XX-XXX_XXXX_MARIEANNE-KEIZERMITTELHAEUSER.json rename to data/person/ID_NL-NB-TIL_198X_NL-UT-UTR_XXXX_MARIEANNE-KEIZERMITTELHAEUSER.json index 411f2946d4..5e67f0adca 100644 --- a/data/person/ID_NL-NB-TIL_198X_XX-XX-XXX_XXXX_MARIEANNE-KEIZERMITTELHAEUSER.json +++ b/data/person/ID_NL-NB-TIL_198X_NL-UT-UTR_XXXX_MARIEANNE-KEIZERMITTELHAEUSER.json @@ -1,11 +1,11 @@ { - "ppid": "ID_NL-NB-TIL_198X_XX-XX-XXX_XXXX_MARIEANNE-KEIZERMITTELHAEUSER", + "ppid": "ID_NL-NB-TIL_198X_NL-UT-UTR_XXXX_MARIEANNE-KEIZERMITTELHAEUSER", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "NL-NB-TIL", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "NL-UT-UTR", "last_date": "XXXX", "name_tokens": [ "MARIEANNE", @@ -15,7 +15,8 @@ "first_date_alternatives": [ "198X" ], - "first_location_source": "inferred_birth_settlement" + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Marie-Anne Keizer-Mittelhaeuser", @@ -114,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marie-anne-keizer-mittelhaeuser_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:13.284757+00:00", + "modified_at": "2026-01-09T19:50:58.927742+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marie-anne-keizer-mittelhaeuser", @@ -137,6 +138,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_NL-NB-TIL_198X_XX-XX-XXX_XXXX_MARIEANNE-KEIZERMITTELHAEUSER", + "new_ppid": "ID_NL-NB-TIL_198X_NL-UT-UTR_XXXX_MARIEANNE-KEIZERMITTELHAEUSER", + "changed_at": "2026-01-09T19:43:41.238951+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -145,7 +156,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +197,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.284747+00:00", + "inferred_at": "2026-01-09T19:50:58.927734+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-LEI_XXXX_NAOMI-DEEGENAARS.json b/data/person/ID_NL-NB-TIL_198X_NL-ZH-LEI_XXXX_NAOMI-DEEGENAARS.json similarity index 84% rename from data/person/ID_XX-XX-XXX_198X_NL-ZH-LEI_XXXX_NAOMI-DEEGENAARS.json rename to data/person/ID_NL-NB-TIL_198X_NL-ZH-LEI_XXXX_NAOMI-DEEGENAARS.json index 2e4f761e92..8ee8847cab 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-LEI_XXXX_NAOMI-DEEGENAARS.json +++ b/data/person/ID_NL-NB-TIL_198X_NL-ZH-LEI_XXXX_NAOMI-DEEGENAARS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-ZH-LEI_XXXX_NAOMI-DEEGENAARS", + "ppid": "ID_NL-NB-TIL_198X_NL-ZH-LEI_XXXX_NAOMI-DEEGENAARS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NB-TIL", "first_date": "198X", "last_location": "NL-ZH-LEI", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Naomi Deegenaars", @@ -190,7 +191,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/naomi-deegenaars-a2bb7b10_20251214T113419Z.json" ], - "modified_at": "2026-01-09T19:18:15.208181+00:00", + "modified_at": "2026-01-09T19:51:07.010420+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "naomi-deegenaars-a2bb7b10", @@ -204,6 +205,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-ZH-LEI_XXXX_NAOMI-DEEGENAARS", + "new_ppid": "ID_NL-NB-TIL_198X_NL-ZH-LEI_XXXX_NAOMI-DEEGENAARS", + "changed_at": "2026-01-09T19:51:07.010417+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -218,7 +229,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -267,7 +278,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.208099+00:00", + "inferred_at": "2026-01-09T19:51:07.008225+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Tilburg", + "formatted": "NL-NB-TIL", + "country_code": "NL", + "region_code": "NB", + "settlement_code": "TIL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "TIAS School for Business and Society", + "date_range": "2020 - 2020", + "degree": "3-daagse Masterclass Samenwerken in Netwerken & Allianties" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "TIAS School for Business and Society", + "mapping_result": "Tilburg, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Tilburg, Netherlands", + "result": { + "geonames_id": 2746301, + "geonames_name": "Tilburg", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.55551, + "longitude": 5.0913 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NB", + "settlement_code": "TIL" + }, + "result": "NL-NB-TIL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2746301, + "geonames_name": "Tilburg", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.55551, + "longitude": 5.0913 + }, + "inferred_at": "2026-01-09T19:51:07.010407+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_198X_NL-ZH-ROT_XXXX_ENRICO-WELDER.json b/data/person/ID_NL-NB-TIL_198X_NL-ZH-ROT_XXXX_ENRICO-WELDER.json index 7a50660d98..202bb4c626 100644 --- a/data/person/ID_NL-NB-TIL_198X_NL-ZH-ROT_XXXX_ENRICO-WELDER.json +++ b/data/person/ID_NL-NB-TIL_198X_NL-ZH-ROT_XXXX_ENRICO-WELDER.json @@ -341,7 +341,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/enricowelder_20251214T112951Z.json" ], - "modified_at": "2026-01-09T19:18:15.555746+00:00", + "modified_at": "2026-01-09T19:51:12.100732+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "enricowelder", @@ -364,7 +364,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -405,7 +405,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.555741+00:00", + "inferred_at": "2026-01-09T19:51:12.100721+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_198X_NL-ZH-TH_XXXX_BIANCA-LOON.json b/data/person/ID_NL-NB-TIL_198X_NL-ZH-TH_XXXX_BIANCA-LOON.json index ee07a7f348..4cbf658517 100644 --- a/data/person/ID_NL-NB-TIL_198X_NL-ZH-TH_XXXX_BIANCA-LOON.json +++ b/data/person/ID_NL-NB-TIL_198X_NL-ZH-TH_XXXX_BIANCA-LOON.json @@ -179,7 +179,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bianca-van-loon-62198a14_20251214T102756Z.json" ], - "modified_at": "2026-01-09T19:18:13.116453+00:00", + "modified_at": "2026-01-09T19:50:51.736603+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bianca-van-loon-62198a14", @@ -202,7 +202,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.116449+00:00", + "inferred_at": "2026-01-09T19:50:51.736597+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_198X_NL-ZH-TH_XXXX_IBAN-SPIJKERS.json b/data/person/ID_NL-NB-TIL_198X_NL-ZH-TH_XXXX_IBAN-SPIJKERS.json index 6184247c55..b414d61bbe 100644 --- a/data/person/ID_NL-NB-TIL_198X_NL-ZH-TH_XXXX_IBAN-SPIJKERS.json +++ b/data/person/ID_NL-NB-TIL_198X_NL-ZH-TH_XXXX_IBAN-SPIJKERS.json @@ -177,7 +177,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ibanspijkers_20251214T112836Z.json" ], - "modified_at": "2026-01-09T19:18:13.234631+00:00", + "modified_at": "2026-01-09T19:50:53.689485+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ibanspijkers", @@ -206,7 +206,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -255,7 +255,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.234626+00:00", + "inferred_at": "2026-01-09T19:50:53.689478+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_198X_XX-XX-XXX_XXXX_JORIS-GIELEN.json b/data/person/ID_NL-NB-TIL_198X_XX-XX-XXX_XXXX_JORIS-GIELEN.json index 6f21f4d861..1b8f1f207e 100644 --- a/data/person/ID_NL-NB-TIL_198X_XX-XX-XXX_XXXX_JORIS-GIELEN.json +++ b/data/person/ID_NL-NB-TIL_198X_XX-XX-XXX_XXXX_JORIS-GIELEN.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jorisgielen_20251214T103006Z.json" ], - "modified_at": "2026-01-09T19:18:15.766627+00:00", + "modified_at": "2026-01-09T19:51:28.589414+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jorisgielen", @@ -151,7 +151,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.764745+00:00", + "inferred_at": "2026-01-09T19:51:28.587047+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_NL-GE-NIJ_XXXX_CARLIJN-BUSSEMAKERS.json b/data/person/ID_NL-NB-TIL_199X_NL-GE-NIJ_XXXX_CARLIJN-BUSSEMAKERS.json index 7f9e14555f..8eadd89151 100644 --- a/data/person/ID_NL-NB-TIL_199X_NL-GE-NIJ_XXXX_CARLIJN-BUSSEMAKERS.json +++ b/data/person/ID_NL-NB-TIL_199X_NL-GE-NIJ_XXXX_CARLIJN-BUSSEMAKERS.json @@ -232,7 +232,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carlijn-bussemakers_20251212T230000Z.json" ], - "modified_at": "2026-01-09T19:18:15.977571+00:00", + "modified_at": "2026-01-09T19:51:15.718350+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carlijn-bussemakers", @@ -263,7 +263,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -304,7 +304,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.977567+00:00", + "inferred_at": "2026-01-09T19:51:15.718345+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_NL-GE-NIJ_XXXX_RUBEN-ALBRECHT.json b/data/person/ID_NL-NB-TIL_199X_NL-GE-NIJ_XXXX_RUBEN-ALBRECHT.json index 9afb7e6004..c0cc169097 100644 --- a/data/person/ID_NL-NB-TIL_199X_NL-GE-NIJ_XXXX_RUBEN-ALBRECHT.json +++ b/data/person/ID_NL-NB-TIL_199X_NL-GE-NIJ_XXXX_RUBEN-ALBRECHT.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rubenalbrecht_20251214T112813Z.json" ], - "modified_at": "2026-01-09T19:18:16.658326+00:00", + "modified_at": "2026-01-09T19:51:21.357964+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rubenalbrecht", @@ -185,7 +185,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.658319+00:00", + "inferred_at": "2026-01-09T19:51:21.357960+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_NL-NB-BOZ_XXXX_ADAM-AHAJAJ.json b/data/person/ID_NL-NB-TIL_199X_NL-NB-BOZ_XXXX_ADAM-AHAJAJ.json index 54bd3e2ee1..c11f2c0946 100644 --- a/data/person/ID_NL-NB-TIL_199X_NL-NB-BOZ_XXXX_ADAM-AHAJAJ.json +++ b/data/person/ID_NL-NB-TIL_199X_NL-NB-BOZ_XXXX_ADAM-AHAJAJ.json @@ -228,7 +228,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/adam-ahajaj-320022117_20251214T103131Z.json" ], - "modified_at": "2026-01-09T19:18:13.631033+00:00", + "modified_at": "2026-01-09T19:50:55.252672+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "adam-ahajaj-320022117", @@ -257,7 +257,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -306,7 +306,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.631029+00:00", + "inferred_at": "2026-01-09T19:50:55.252666+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_NL-NB-BOZ_XXXX_MARK-HOEFNAGELS.json b/data/person/ID_NL-NB-TIL_199X_NL-NB-BOZ_XXXX_MARK-HOEFNAGELS.json index d908d3ab78..3d17f37769 100644 --- a/data/person/ID_NL-NB-TIL_199X_NL-NB-BOZ_XXXX_MARK-HOEFNAGELS.json +++ b/data/person/ID_NL-NB-TIL_199X_NL-NB-BOZ_XXXX_MARK-HOEFNAGELS.json @@ -204,7 +204,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mark-hoefnagels_20251214T104032Z.json" ], - "modified_at": "2026-01-09T19:18:13.475009+00:00", + "modified_at": "2026-01-09T19:50:47.299393+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mark-hoefnagels", @@ -236,7 +236,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -277,7 +277,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.475003+00:00", + "inferred_at": "2026-01-09T19:50:47.299382+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_NL-NB-EIN_XXXX_LUUK-GROENEN.json b/data/person/ID_NL-NB-TIL_199X_NL-NB-EIN_XXXX_LUUK-GROENEN.json index 88eafe87ac..22424e3888 100644 --- a/data/person/ID_NL-NB-TIL_199X_NL-NB-EIN_XXXX_LUUK-GROENEN.json +++ b/data/person/ID_NL-NB-TIL_199X_NL-NB-EIN_XXXX_LUUK-GROENEN.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/luuk-groenen-7b68b0130_20251214T111113Z.json" ], - "modified_at": "2026-01-09T19:18:11.637808+00:00", + "modified_at": "2026-01-09T19:50:47.246692+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "luuk-groenen-7b68b0130", @@ -159,7 +159,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.637798+00:00", + "inferred_at": "2026-01-09T19:50:47.246684+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_NL-NB-TIL_XXXX_ANWAR-ACHAHBAR.json b/data/person/ID_NL-NB-TIL_199X_NL-NB-TIL_XXXX_ANWAR-ACHAHBAR.json index 4621ef1ed4..604414e266 100644 --- a/data/person/ID_NL-NB-TIL_199X_NL-NB-TIL_XXXX_ANWAR-ACHAHBAR.json +++ b/data/person/ID_NL-NB-TIL_199X_NL-NB-TIL_XXXX_ANWAR-ACHAHBAR.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anwar-achahbar-a751681a4_20251214T110936Z.json" ], - "modified_at": "2026-01-09T19:18:15.079202+00:00", + "modified_at": "2026-01-09T19:51:06.702330+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anwar-achahbar-a751681a4", @@ -128,7 +128,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.079198+00:00", + "inferred_at": "2026-01-09T19:51:06.702324+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_NL-NB-TIL_XXXX_INDIE-LIESHOUT.json b/data/person/ID_NL-NB-TIL_199X_NL-NB-TIL_XXXX_INDIE-LIESHOUT.json index 46bf15177e..25b9c5e70f 100644 --- a/data/person/ID_NL-NB-TIL_199X_NL-NB-TIL_XXXX_INDIE-LIESHOUT.json +++ b/data/person/ID_NL-NB-TIL_199X_NL-NB-TIL_XXXX_INDIE-LIESHOUT.json @@ -242,7 +242,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/indie-van-lieshout_20251214T110425Z.json" ], - "modified_at": "2026-01-09T19:18:18.296993+00:00", + "modified_at": "2026-01-09T19:50:49.609783+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "indie-van-lieshout", @@ -280,7 +280,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -329,7 +329,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.296965+00:00", + "inferred_at": "2026-01-09T19:50:49.609776+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_NL-NB-TIL_XXXX_MEI-MAN.json b/data/person/ID_NL-NB-TIL_199X_NL-NB-TIL_XXXX_MEI-MAN.json index c7ec0515f8..bdfff0b621 100644 --- a/data/person/ID_NL-NB-TIL_199X_NL-NB-TIL_XXXX_MEI-MAN.json +++ b/data/person/ID_NL-NB-TIL_199X_NL-NB-TIL_XXXX_MEI-MAN.json @@ -190,7 +190,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/meipoman_20251214T112724Z.json" ], - "modified_at": "2026-01-09T19:18:13.277593+00:00", + "modified_at": "2026-01-09T19:51:18.409108+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "meipoman", @@ -228,7 +228,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -277,7 +277,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.277586+00:00", + "inferred_at": "2026-01-09T19:51:18.409103+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_NL-NB-VEL_XXXX_STEFANI-ILIEVA.json b/data/person/ID_NL-NB-TIL_199X_NL-NB-VEL_XXXX_STEFANI-ILIEVA.json index e53de5a02a..80a7ed1c1a 100644 --- a/data/person/ID_NL-NB-TIL_199X_NL-NB-VEL_XXXX_STEFANI-ILIEVA.json +++ b/data/person/ID_NL-NB-TIL_199X_NL-NB-VEL_XXXX_STEFANI-ILIEVA.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stefaniilieva_20251214T110806Z.json" ], - "modified_at": "2026-01-09T19:18:15.652518+00:00", + "modified_at": "2026-01-09T19:51:13.255975+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stefaniilieva", @@ -182,7 +182,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +231,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.652514+00:00", + "inferred_at": "2026-01-09T19:51:13.255968+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-UT-MIJ_XXXX_PATRICK-BANIS.json b/data/person/ID_NL-NB-TIL_199X_NL-UT-MIJ_XXXX_PATRICK-BANIS.json similarity index 78% rename from data/person/ID_XX-XX-XXX_199X_NL-UT-MIJ_XXXX_PATRICK-BANIS.json rename to data/person/ID_NL-NB-TIL_199X_NL-UT-MIJ_XXXX_PATRICK-BANIS.json index 3373bc9a3d..625fd6ecb9 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-UT-MIJ_XXXX_PATRICK-BANIS.json +++ b/data/person/ID_NL-NB-TIL_199X_NL-UT-MIJ_XXXX_PATRICK-BANIS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-UT-MIJ_XXXX_PATRICK-BANIS", + "ppid": "ID_NL-NB-TIL_199X_NL-UT-MIJ_XXXX_PATRICK-BANIS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NB-TIL", "first_date": "199X", "last_location": "NL-UT-MIJ", "last_date": "XXXX", @@ -15,7 +15,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Patrick Banis", @@ -205,7 +206,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/patrick-banis-a168637_20251212T230500Z.json" ], - "modified_at": "2026-01-09T19:18:14.076163+00:00", + "modified_at": "2026-01-09T19:50:58.568214+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "patrick-banis-a168637", @@ -227,6 +228,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-UT-MIJ_XXXX_PATRICK-BANIS", + "new_ppid": "ID_NL-NB-TIL_199X_NL-UT-MIJ_XXXX_PATRICK-BANIS", + "changed_at": "2026-01-09T19:50:58.568212+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -241,7 +252,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -290,7 +301,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.076108+00:00", + "inferred_at": "2026-01-09T19:50:58.565187+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Tilburg", + "formatted": "NL-NB-TIL", + "country_code": "NL", + "region_code": "NB", + "settlement_code": "TIL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "TIAS School for Business and Society", + "date_range": "2012 - 2014", + "degree": "Masterclasscyclus Leiderschap en Management in de non-profit" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "TIAS School for Business and Society", + "mapping_result": "Tilburg, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Tilburg, Netherlands", + "result": { + "geonames_id": 2746301, + "geonames_name": "Tilburg", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.55551, + "longitude": 5.0913 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NB", + "settlement_code": "TIL" + }, + "result": "NL-NB-TIL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2746301, + "geonames_name": "Tilburg", + "admin1_code": "06", + "admin1_name": "North Brabant", + "feature_code": "PPL", + "latitude": 51.55551, + "longitude": 5.0913 + }, + "inferred_at": "2026-01-09T19:50:58.568203+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_NL-ZH-ROT_XXXX_DIMITRI-VERZIJL.json b/data/person/ID_NL-NB-TIL_199X_NL-ZH-ROT_XXXX_DIMITRI-VERZIJL.json index 8645503d9e..032e6c8efc 100644 --- a/data/person/ID_NL-NB-TIL_199X_NL-ZH-ROT_XXXX_DIMITRI-VERZIJL.json +++ b/data/person/ID_NL-NB-TIL_199X_NL-ZH-ROT_XXXX_DIMITRI-VERZIJL.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dimitri-verzijl-25ba855_20251214T111539Z.json" ], - "modified_at": "2026-01-09T19:18:14.100833+00:00", + "modified_at": "2026-01-09T19:51:03.249009+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dimitri-verzijl-25ba855", @@ -183,7 +183,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.100824+00:00", + "inferred_at": "2026-01-09T19:51:03.249002+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_NL-ZH-SCH_XXXX_TJITSKE-HELMICH.json b/data/person/ID_NL-NB-TIL_199X_NL-ZH-SCH_XXXX_TJITSKE-HELMICH.json index 474eacd9b6..50b732d47b 100644 --- a/data/person/ID_NL-NB-TIL_199X_NL-ZH-SCH_XXXX_TJITSKE-HELMICH.json +++ b/data/person/ID_NL-NB-TIL_199X_NL-ZH-SCH_XXXX_TJITSKE-HELMICH.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tjitskehelmich_20251214T112413Z.json" ], - "modified_at": "2026-01-09T19:18:14.129146+00:00", + "modified_at": "2026-01-09T19:50:58.667864+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tjitskehelmich", @@ -108,7 +108,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -149,7 +149,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.129140+00:00", + "inferred_at": "2026-01-09T19:50:58.667857+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_NL-ZH-TH_XXXX_IRIS-GROOT.json b/data/person/ID_NL-NB-TIL_199X_NL-ZH-TH_XXXX_IRIS-GROOT.json index 21a745e610..e4602b3ffa 100644 --- a/data/person/ID_NL-NB-TIL_199X_NL-ZH-TH_XXXX_IRIS-GROOT.json +++ b/data/person/ID_NL-NB-TIL_199X_NL-ZH-TH_XXXX_IRIS-GROOT.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/irisdegroot_20251214T103150Z.json" ], - "modified_at": "2026-01-09T19:18:13.196504+00:00", + "modified_at": "2026-01-09T19:50:53.235768+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "irisdegroot", @@ -176,7 +176,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.196495+00:00", + "inferred_at": "2026-01-09T19:50:53.235761+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_NL-ZH-TH_XXXX_SVEN-SOKAL.json b/data/person/ID_NL-NB-TIL_199X_NL-ZH-TH_XXXX_SVEN-SOKAL.json index 07657f58de..0cabc04cff 100644 --- a/data/person/ID_NL-NB-TIL_199X_NL-ZH-TH_XXXX_SVEN-SOKAL.json +++ b/data/person/ID_NL-NB-TIL_199X_NL-ZH-TH_XXXX_SVEN-SOKAL.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sven-sokal-42186a140_20251214T113003Z.json" ], - "modified_at": "2026-01-09T19:18:11.477428+00:00", + "modified_at": "2026-01-09T19:50:47.012120+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sven-sokal-42186a140", @@ -168,7 +168,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.477418+00:00", + "inferred_at": "2026-01-09T19:50:47.012111+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_XX-XX-XXX_XXXX_ARJAN-MURIQI.json b/data/person/ID_NL-NB-TIL_199X_XX-XX-XXX_XXXX_ARJAN-MURIQI.json index ce27e0fd6a..545ea041ee 100644 --- a/data/person/ID_NL-NB-TIL_199X_XX-XX-XXX_XXXX_ARJAN-MURIQI.json +++ b/data/person/ID_NL-NB-TIL_199X_XX-XX-XXX_XXXX_ARJAN-MURIQI.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arjanmuriqi_20251214T112830Z.json" ], - "modified_at": "2026-01-09T19:18:14.146051+00:00", + "modified_at": "2026-01-09T19:50:58.716510+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arjanmuriqi", @@ -140,7 +140,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.144104+00:00", + "inferred_at": "2026-01-09T19:50:58.714378+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_XX-XX-XXX_XXXX_SNEHA-V.json b/data/person/ID_NL-NB-TIL_199X_XX-XX-XXX_XXXX_SNEHA-V.json index 61052db5af..f6a82ad604 100644 --- a/data/person/ID_NL-NB-TIL_199X_XX-XX-XXX_XXXX_SNEHA-V.json +++ b/data/person/ID_NL-NB-TIL_199X_XX-XX-XXX_XXXX_SNEHA-V.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sneha-ravisankar_20251214T110814Z.json" ], - "modified_at": "2026-01-09T19:18:17.605413+00:00", + "modified_at": "2026-01-09T19:51:28.447763+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sneha-ravisankar", @@ -177,7 +177,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.601408+00:00", + "inferred_at": "2026-01-09T19:51:28.443960+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_199X_XX-XX-XXX_XXXX_YORAN-SANDERS.json b/data/person/ID_NL-NB-TIL_199X_XX-XX-XXX_XXXX_YORAN-SANDERS.json index 00ea6985d8..a0747d648a 100644 --- a/data/person/ID_NL-NB-TIL_199X_XX-XX-XXX_XXXX_YORAN-SANDERS.json +++ b/data/person/ID_NL-NB-TIL_199X_XX-XX-XXX_XXXX_YORAN-SANDERS.json @@ -146,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yoran-de-sanders-7576169b_20251214T112247Z.json" ], - "modified_at": "2026-01-09T19:18:14.033505+00:00", + "modified_at": "2026-01-09T19:50:58.359556+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yoran-de-sanders-7576169b", @@ -174,7 +174,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.029532+00:00", + "inferred_at": "2026-01-09T19:50:58.355585+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_200X_NL-NB-VEL_XXXX_ANNA-WIGGEN.json b/data/person/ID_NL-NB-TIL_200X_NL-NB-VEL_XXXX_ANNA-WIGGEN.json index b88364ded6..ae36afefe6 100644 --- a/data/person/ID_NL-NB-TIL_200X_NL-NB-VEL_XXXX_ANNA-WIGGEN.json +++ b/data/person/ID_NL-NB-TIL_200X_NL-NB-VEL_XXXX_ANNA-WIGGEN.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-daalderop-van-wiggen-a78905192_20251214T111216Z.json" ], - "modified_at": "2026-01-09T19:18:14.165479+00:00", + "modified_at": "2026-01-09T19:50:58.747998+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anna-daalderop-van-wiggen-a78905192", @@ -133,7 +133,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.165466+00:00", + "inferred_at": "2026-01-09T19:50:58.747986+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_200X_NL-NB-VEL_XXXX_SANNE-KESSEL.json b/data/person/ID_NL-NB-TIL_200X_NL-NB-VEL_XXXX_SANNE-KESSEL.json index f790ffb1bd..239aacb624 100644 --- a/data/person/ID_NL-NB-TIL_200X_NL-NB-VEL_XXXX_SANNE-KESSEL.json +++ b/data/person/ID_NL-NB-TIL_200X_NL-NB-VEL_XXXX_SANNE-KESSEL.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sanne-van-kessel-5739aa1b5_20251214T111014Z.json" ], - "modified_at": "2026-01-09T19:18:14.026315+00:00", + "modified_at": "2026-01-09T19:50:58.353368+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sanne-van-kessel-5739aa1b5", @@ -165,7 +165,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.026311+00:00", + "inferred_at": "2026-01-09T19:50:58.353360+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-TIL_200X_XX-XX-XXX_XXXX_MARC-VERSTEEG.json b/data/person/ID_NL-NB-TIL_200X_XX-XX-XXX_XXXX_MARC-VERSTEEG.json index 8be2388d49..5e9ce5411b 100644 --- a/data/person/ID_NL-NB-TIL_200X_XX-XX-XXX_XXXX_MARC-VERSTEEG.json +++ b/data/person/ID_NL-NB-TIL_200X_XX-XX-XXX_XXXX_MARC-VERSTEEG.json @@ -312,7 +312,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marc-versteeg-b4589324_20251214T112527Z.json" ], - "modified_at": "2026-01-09T19:18:14.829812+00:00", + "modified_at": "2026-01-09T19:50:49.150082+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marc-versteeg-b4589324", @@ -349,7 +349,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -398,7 +398,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.829791+00:00", + "inferred_at": "2026-01-09T19:50:49.150037+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VAL_198X_NL-NB-VAL_XXXX_FLEUR-CARVALHO.json b/data/person/ID_NL-NB-VAL_198X_NL-NB-VAL_XXXX_FLEUR-CARVALHO.json index 4c6078fa64..bc0b200c5a 100644 --- a/data/person/ID_NL-NB-VAL_198X_NL-NB-VAL_XXXX_FLEUR-CARVALHO.json +++ b/data/person/ID_NL-NB-VAL_198X_NL-NB-VAL_XXXX_FLEUR-CARVALHO.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fleur-roos-rosa-de-carvalho-3422799_20251214T110133Z.json" ], - "modified_at": "2026-01-09T19:18:16.656974+00:00", + "modified_at": "2026-01-09T19:51:21.356923+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fleur-roos-rosa-de-carvalho-3422799", @@ -149,7 +149,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.656971+00:00", + "inferred_at": "2026-01-09T19:51:21.356920+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEG_199X_NL-NB-EIN_XXXX_JASPER-ELSEN.json b/data/person/ID_NL-NB-VEG_199X_NL-NB-EIN_XXXX_JASPER-ELSEN.json index 0a88102907..7d34632bc0 100644 --- a/data/person/ID_NL-NB-VEG_199X_NL-NB-EIN_XXXX_JASPER-ELSEN.json +++ b/data/person/ID_NL-NB-VEG_199X_NL-NB-EIN_XXXX_JASPER-ELSEN.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jasper-van-den-elsen-8963b2186_20251214T110846Z.json" ], - "modified_at": "2026-01-09T19:18:16.557840+00:00", + "modified_at": "2026-01-09T19:51:18.736234+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jasper-van-den-elsen-8963b2186", @@ -133,7 +133,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.557836+00:00", + "inferred_at": "2026-01-09T19:51:18.736228+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_196X_NL-NB-VEL_XXXX_JOS-BENSCHOP.json b/data/person/ID_NL-NB-VEL_196X_NL-NB-VEL_XXXX_JOS-BENSCHOP.json index 4d014b217a..fbde5302c0 100644 --- a/data/person/ID_NL-NB-VEL_196X_NL-NB-VEL_XXXX_JOS-BENSCHOP.json +++ b/data/person/ID_NL-NB-VEL_196X_NL-NB-VEL_XXXX_JOS-BENSCHOP.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jos-benschop-2aa1716_20251214T110817Z.json" ], - "modified_at": "2026-01-09T19:18:16.116569+00:00", + "modified_at": "2026-01-09T19:51:22.270135+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jos-benschop-2aa1716", @@ -142,7 +142,7 @@ "primary_rationale": "1960 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1960 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.116562+00:00", + "inferred_at": "2026-01-09T19:51:22.270132+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_197X_NL-NB-EIN_XXXX_ERWIN-WITKAMP.json b/data/person/ID_NL-NB-VEL_197X_NL-NB-EIN_XXXX_ERWIN-WITKAMP.json index 0942d117f3..3062b8a104 100644 --- a/data/person/ID_NL-NB-VEL_197X_NL-NB-EIN_XXXX_ERWIN-WITKAMP.json +++ b/data/person/ID_NL-NB-VEL_197X_NL-NB-EIN_XXXX_ERWIN-WITKAMP.json @@ -206,7 +206,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erwinwitkamp_20251214T111204Z.json" ], - "modified_at": "2026-01-09T19:18:12.628796+00:00", + "modified_at": "2026-01-09T19:51:15.170608+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erwinwitkamp", @@ -244,7 +244,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -293,7 +293,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.628789+00:00", + "inferred_at": "2026-01-09T19:51:15.170595+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_197X_NL-NB-EIN_XXXX_HAROLD-HORCK.json b/data/person/ID_NL-NB-VEL_197X_NL-NB-EIN_XXXX_HAROLD-HORCK.json index bf6b838fb3..ae58850c3b 100644 --- a/data/person/ID_NL-NB-VEL_197X_NL-NB-EIN_XXXX_HAROLD-HORCK.json +++ b/data/person/ID_NL-NB-VEL_197X_NL-NB-EIN_XXXX_HAROLD-HORCK.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harold-van-horck-762a215_20251214T110838Z.json" ], - "modified_at": "2026-01-09T19:18:11.597873+00:00", + "modified_at": "2026-01-09T19:50:47.211485+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harold-van-horck-762a215", @@ -171,7 +171,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.597867+00:00", + "inferred_at": "2026-01-09T19:50:47.211478+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_197X_XX-XX-XXX_XXXX_FABIO-SBRIZZAI.json b/data/person/ID_NL-NB-VEL_197X_XX-XX-XXX_XXXX_FABIO-SBRIZZAI.json index 9757f0cba2..0a473883c3 100644 --- a/data/person/ID_NL-NB-VEL_197X_XX-XX-XXX_XXXX_FABIO-SBRIZZAI.json +++ b/data/person/ID_NL-NB-VEL_197X_XX-XX-XXX_XXXX_FABIO-SBRIZZAI.json @@ -157,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fabio-sbrizzai-0b85303b_20251214T111154Z.json" ], - "modified_at": "2026-01-09T19:18:16.186149+00:00", + "modified_at": "2026-01-09T19:51:18.254838+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fabio-sbrizzai-0b85303b", @@ -185,7 +185,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.186138+00:00", + "inferred_at": "2026-01-09T19:51:18.254814+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_198X_NL-LI-ROE_XXXX_ANIKA-SMITS.json b/data/person/ID_NL-NB-VEL_198X_NL-LI-ROE_XXXX_ANIKA-SMITS.json index b0a7a81f28..1bed0ea18a 100644 --- a/data/person/ID_NL-NB-VEL_198X_NL-LI-ROE_XXXX_ANIKA-SMITS.json +++ b/data/person/ID_NL-NB-VEL_198X_NL-LI-ROE_XXXX_ANIKA-SMITS.json @@ -256,7 +256,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/smitsanika_20251214T111137Z.json" ], - "modified_at": "2026-01-09T19:18:13.812935+00:00", + "modified_at": "2026-01-09T19:51:29.501377+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "smitsanika", @@ -294,7 +294,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -343,7 +343,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.812928+00:00", + "inferred_at": "2026-01-09T19:51:29.501371+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_CANER-YILMAZ.json b/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_CANER-YILMAZ.json index 3424d92344..ed15a1d39c 100644 --- a/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_CANER-YILMAZ.json +++ b/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_CANER-YILMAZ.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/caner-yilmaz-79a42225_20251214T110934Z.json" ], - "modified_at": "2026-01-09T19:18:14.254753+00:00", + "modified_at": "2026-01-09T19:50:59.313874+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "caner-yilmaz-79a42225", @@ -189,7 +189,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.254749+00:00", + "inferred_at": "2026-01-09T19:50:59.313865+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_DEBOSREE-SASMAL.json b/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_DEBOSREE-SASMAL.json index a2be35c75e..f893ca822f 100644 --- a/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_DEBOSREE-SASMAL.json +++ b/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_DEBOSREE-SASMAL.json @@ -174,7 +174,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/debosree-sasmal-5058423b_20251214T110811Z.json" ], - "modified_at": "2026-01-09T19:18:17.174647+00:00", + "modified_at": "2026-01-09T19:51:20.843159+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "debosree-sasmal-5058423b", @@ -212,7 +212,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -261,7 +261,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.174639+00:00", + "inferred_at": "2026-01-09T19:51:20.843155+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_OZGE-KAYA.json b/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_OZGE-KAYA.json index 309665a711..f78f63a698 100644 --- a/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_OZGE-KAYA.json +++ b/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_OZGE-KAYA.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mozgekaya_20251214T111200Z.json" ], - "modified_at": "2026-01-09T19:18:16.315801+00:00", + "modified_at": "2026-01-09T19:51:22.046137+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mozgekaya", @@ -131,7 +131,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.315793+00:00", + "inferred_at": "2026-01-09T19:51:22.046131+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_SUMANTA-BHANDARY.json b/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_SUMANTA-BHANDARY.json index 036bc2c4a7..f0139a331e 100644 --- a/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_SUMANTA-BHANDARY.json +++ b/data/person/ID_NL-NB-VEL_198X_NL-NB-EIN_XXXX_SUMANTA-BHANDARY.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sumanta-bhandary_20251214T111129Z.json" ], - "modified_at": "2026-01-09T19:18:15.192449+00:00", + "modified_at": "2026-01-09T19:51:06.678395+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sumanta-bhandary", @@ -163,7 +163,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.192443+00:00", + "inferred_at": "2026-01-09T19:51:06.678389+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_CRISTIANE-BOAS.json b/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_CRISTIANE-BOAS.json index 85a9f7b072..66e9eee211 100644 --- a/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_CRISTIANE-BOAS.json +++ b/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_CRISTIANE-BOAS.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cristianevilasboas_20251214T110909Z.json" ], - "modified_at": "2026-01-09T19:18:17.240974+00:00", + "modified_at": "2026-01-09T19:51:03.399456+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cristianevilasboas", @@ -189,7 +189,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.240964+00:00", + "inferred_at": "2026-01-09T19:51:03.399450+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_IVO-HORST.json b/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_IVO-HORST.json index 7fdade7684..96b567960f 100644 --- a/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_IVO-HORST.json +++ b/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_IVO-HORST.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ivoterhorst_20251214T110902Z.json" ], - "modified_at": "2026-01-09T19:18:13.843688+00:00", + "modified_at": "2026-01-09T19:50:56.693239+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ivoterhorst", @@ -147,7 +147,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.843685+00:00", + "inferred_at": "2026-01-09T19:50:56.693073+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_KIM-HENDRIKSE.json b/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_KIM-HENDRIKSE.json index ddf256209b..fef92a5615 100644 --- a/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_KIM-HENDRIKSE.json +++ b/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_KIM-HENDRIKSE.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kim-hendrikse-2427643_20251214T110904Z.json" ], - "modified_at": "2026-01-09T19:18:14.968934+00:00", + "modified_at": "2026-01-09T19:51:06.335604+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kim-hendrikse-2427643", @@ -153,7 +153,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.968930+00:00", + "inferred_at": "2026-01-09T19:51:06.335595+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_LAURIE-W.json b/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_LAURIE-W.json index 79b0fe3317..d5522fdc08 100644 --- a/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_LAURIE-W.json +++ b/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_LAURIE-W.json @@ -177,7 +177,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laurie-walk_20251214T110934Z.json" ], - "modified_at": "2026-01-09T19:18:13.303507+00:00", + "modified_at": "2026-01-09T19:51:04.062513+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laurie-walk", @@ -209,7 +209,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -250,7 +250,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.303502+00:00", + "inferred_at": "2026-01-09T19:51:04.062509+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_MARTIN-KERS.json b/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_MARTIN-KERS.json index 62e19840d0..26e0c8e9d4 100644 --- a/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_MARTIN-KERS.json +++ b/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_MARTIN-KERS.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mkers_20251214T110915Z.json" ], - "modified_at": "2026-01-09T19:18:18.877903+00:00", + "modified_at": "2026-01-09T19:51:29.483497+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mkers", @@ -195,7 +195,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -244,7 +244,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.877894+00:00", + "inferred_at": "2026-01-09T19:51:29.483491+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_OSMAN-KALE.json b/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_OSMAN-KALE.json index da4b700ece..dee10163a6 100644 --- a/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_OSMAN-KALE.json +++ b/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_OSMAN-KALE.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/osman-kale-8839baa_20251214T111159Z.json" ], - "modified_at": "2026-01-09T19:18:15.224396+00:00", + "modified_at": "2026-01-09T19:51:07.042290+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "osman-kale-8839baa", @@ -129,7 +129,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.224392+00:00", + "inferred_at": "2026-01-09T19:51:07.042285+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_SATISH-JAISWAL.json b/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_SATISH-JAISWAL.json index 2ab44cf3d8..50fa38ec9c 100644 --- a/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_SATISH-JAISWAL.json +++ b/data/person/ID_NL-NB-VEL_198X_NL-NB-VEL_XXXX_SATISH-JAISWAL.json @@ -199,7 +199,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/satish-jaiswal-3662201a_20251214T110925Z.json" ], - "modified_at": "2026-01-09T19:18:16.832063+00:00", + "modified_at": "2026-01-09T19:50:58.860679+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "satish-jaiswal-3662201a", @@ -237,7 +237,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -286,7 +286,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.832055+00:00", + "inferred_at": "2026-01-09T19:50:58.860655+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_199X_NL-LI-VEN_XXXX_KOEN-CLASSENS.json b/data/person/ID_NL-NB-VEL_199X_NL-LI-VEN_XXXX_KOEN-CLASSENS.json index 1d4b5aa193..cbaf61e2f2 100644 --- a/data/person/ID_NL-NB-VEL_199X_NL-LI-VEN_XXXX_KOEN-CLASSENS.json +++ b/data/person/ID_NL-NB-VEL_199X_NL-LI-VEN_XXXX_KOEN-CLASSENS.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/koen-classens_20251214T110859Z.json" ], - "modified_at": "2026-01-09T19:18:16.853827+00:00", + "modified_at": "2026-01-09T19:51:22.315280+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "koen-classens", @@ -177,7 +177,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +218,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.853823+00:00", + "inferred_at": "2026-01-09T19:51:22.315274+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_ARYA-KIRATHAMOORTHY.json b/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_ARYA-KIRATHAMOORTHY.json index ad359b93f8..ffbbc4817b 100644 --- a/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_ARYA-KIRATHAMOORTHY.json +++ b/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_ARYA-KIRATHAMOORTHY.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arya-moorthy_20251214T111101Z.json" ], - "modified_at": "2026-01-09T19:18:11.645563+00:00", + "modified_at": "2026-01-09T19:50:47.248124+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arya-moorthy", @@ -158,7 +158,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.645555+00:00", + "inferred_at": "2026-01-09T19:50:47.248116+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_BIBIN-THOMAS.json b/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_BIBIN-THOMAS.json index 69b17d9beb..a6ea9d537f 100644 --- a/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_BIBIN-THOMAS.json +++ b/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_BIBIN-THOMAS.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bibin-thomas-6545a763_20251214T110848Z.json" ], - "modified_at": "2026-01-09T19:18:12.087613+00:00", + "modified_at": "2026-01-09T19:50:47.438417+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bibin-thomas-6545a763", @@ -148,7 +148,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.087601+00:00", + "inferred_at": "2026-01-09T19:50:47.438386+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_KONSTANTINOS-MANOS.json b/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_KONSTANTINOS-MANOS.json index 62d7259792..a8c370f7d0 100644 --- a/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_KONSTANTINOS-MANOS.json +++ b/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_KONSTANTINOS-MANOS.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/konstantinos-tsioumanis-manos_20251214T111158Z.json" ], - "modified_at": "2026-01-09T19:18:13.633364+00:00", + "modified_at": "2026-01-09T19:50:55.260073+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "konstantinos-tsioumanis-manos", @@ -191,7 +191,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.633360+00:00", + "inferred_at": "2026-01-09T19:50:55.260066+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_LUIS-FERNANDES.json b/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_LUIS-FERNANDES.json index bdbc5b9052..04f078a41b 100644 --- a/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_LUIS-FERNANDES.json +++ b/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_LUIS-FERNANDES.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lfelipeff_20251214T111205Z.json" ], - "modified_at": "2026-01-09T19:18:15.290881+00:00", + "modified_at": "2026-01-09T19:51:08.362860+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lfelipeff", @@ -154,7 +154,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.290878+00:00", + "inferred_at": "2026-01-09T19:51:08.362853+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_MOHAMMED-GHIDAN.json b/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_MOHAMMED-GHIDAN.json index 5fc373f37f..82a4bd3a75 100644 --- a/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_MOHAMMED-GHIDAN.json +++ b/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_MOHAMMED-GHIDAN.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mohammed-faisal-ghidan-460a0a30_20251214T110855Z.json" ], - "modified_at": "2026-01-09T19:18:16.653608+00:00", + "modified_at": "2026-01-09T19:51:21.350605+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mohammed-faisal-ghidan-460a0a30", @@ -129,7 +129,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.653604+00:00", + "inferred_at": "2026-01-09T19:51:21.350600+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_NAOMI-DECKER.json b/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_NAOMI-DECKER.json index 74f718d7b5..e88f04406f 100644 --- a/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_NAOMI-DECKER.json +++ b/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_NAOMI-DECKER.json @@ -171,7 +171,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/naomidecker_20251214T110918Z.json" ], - "modified_at": "2026-01-09T19:18:17.241763+00:00", + "modified_at": "2026-01-09T19:51:25.475932+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "naomidecker", @@ -200,7 +200,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -249,7 +249,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.241756+00:00", + "inferred_at": "2026-01-09T19:51:25.475926+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_SAJITH-RAJAN.json b/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_SAJITH-RAJAN.json index 6c607added..b3d483c6e9 100644 --- a/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_SAJITH-RAJAN.json +++ b/data/person/ID_NL-NB-VEL_199X_NL-NB-EIN_XXXX_SAJITH-RAJAN.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sajith-k-rajan-0bb932101_20251214T111049Z.json" ], - "modified_at": "2026-01-09T19:18:17.985963+00:00", + "modified_at": "2026-01-09T19:51:28.874038+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sajith-k-rajan-0bb932101", @@ -128,7 +128,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.985925+00:00", + "inferred_at": "2026-01-09T19:51:28.874033+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_199X_NL-NB-VEL_XXXX_LUCA-SCHRIER.json b/data/person/ID_NL-NB-VEL_199X_NL-NB-VEL_XXXX_LUCA-SCHRIER.json index f3ff6bb6df..37e77deec3 100644 --- a/data/person/ID_NL-NB-VEL_199X_NL-NB-VEL_XXXX_LUCA-SCHRIER.json +++ b/data/person/ID_NL-NB-VEL_199X_NL-NB-VEL_XXXX_LUCA-SCHRIER.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lucaschrier_20251214T110927Z.json" ], - "modified_at": "2026-01-09T19:18:13.013891+00:00", + "modified_at": "2026-01-09T19:50:50.585525+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lucaschrier", @@ -157,7 +157,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.013887+00:00", + "inferred_at": "2026-01-09T19:50:50.585518+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_199X_NL-NB-VEL_XXXX_NARAYANA-ESWARAN.json b/data/person/ID_NL-NB-VEL_199X_NL-NB-VEL_XXXX_NARAYANA-ESWARAN.json index e669d7ab85..a839255e72 100644 --- a/data/person/ID_NL-NB-VEL_199X_NL-NB-VEL_XXXX_NARAYANA-ESWARAN.json +++ b/data/person/ID_NL-NB-VEL_199X_NL-NB-VEL_XXXX_NARAYANA-ESWARAN.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/narayana-babu-p-e_20251214T111214Z.json" ], - "modified_at": "2026-01-09T19:18:15.148696+00:00", + "modified_at": "2026-01-09T19:51:06.759842+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "narayana-babu-p-e", @@ -176,7 +176,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.148691+00:00", + "inferred_at": "2026-01-09T19:51:06.759835+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_199X_NL-NB-VEL_XXXX_SEPAND-KASHANI.json b/data/person/ID_NL-NB-VEL_199X_NL-NB-VEL_XXXX_SEPAND-KASHANI.json index d25c74a404..e3b8332cfa 100644 --- a/data/person/ID_NL-NB-VEL_199X_NL-NB-VEL_XXXX_SEPAND-KASHANI.json +++ b/data/person/ID_NL-NB-VEL_199X_NL-NB-VEL_XXXX_SEPAND-KASHANI.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sepand-kashani-3bb508a3_20251214T110815Z.json" ], - "modified_at": "2026-01-09T19:18:14.841725+00:00", + "modified_at": "2026-01-09T19:51:04.984343+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sepand-kashani-3bb508a3", @@ -182,7 +182,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +231,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.841721+00:00", + "inferred_at": "2026-01-09T19:51:04.984337+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_199X_XX-XX-XXX_XXXX_BASAK-GUL.json b/data/person/ID_NL-NB-VEL_199X_XX-XX-XXX_XXXX_BASAK-GUL.json index 0f20babd50..b17776482e 100644 --- a/data/person/ID_NL-NB-VEL_199X_XX-XX-XXX_XXXX_BASAK-GUL.json +++ b/data/person/ID_NL-NB-VEL_199X_XX-XX-XXX_XXXX_BASAK-GUL.json @@ -160,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/basak-soyturk_20251214T111016Z.json" ], - "modified_at": "2026-01-09T19:18:14.230715+00:00", + "modified_at": "2026-01-09T19:50:58.941666+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "basak-soyturk", @@ -182,7 +182,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.226983+00:00", + "inferred_at": "2026-01-09T19:50:58.936395+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_199X_XX-XX-XXX_XXXX_SAEEDEH-FAROKHIPOOR.json b/data/person/ID_NL-NB-VEL_199X_XX-XX-XXX_XXXX_SAEEDEH-FAROKHIPOOR.json index c38406199a..69087a6b20 100644 --- a/data/person/ID_NL-NB-VEL_199X_XX-XX-XXX_XXXX_SAEEDEH-FAROKHIPOOR.json +++ b/data/person/ID_NL-NB-VEL_199X_XX-XX-XXX_XXXX_SAEEDEH-FAROKHIPOOR.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saeedeh-farokhipoor-80b9603b_20251214T110840Z.json" ], - "modified_at": "2026-01-09T19:18:15.670686+00:00", + "modified_at": "2026-01-09T19:51:13.392093+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saeedeh-farokhipoor-80b9603b", @@ -157,7 +157,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.668732+00:00", + "inferred_at": "2026-01-09T19:51:13.389776+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_GIAN-LUCCA.json b/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_GIAN-LUCCA.json index 9dc415eeba..3030daa302 100644 --- a/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_GIAN-LUCCA.json +++ b/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_GIAN-LUCCA.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gianmaria-lucca_20251214T110804Z.json" ], - "modified_at": "2026-01-09T19:18:11.251976+00:00", + "modified_at": "2026-01-09T19:50:46.699014+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gianmaria-lucca", @@ -154,7 +154,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.251965+00:00", + "inferred_at": "2026-01-09T19:50:46.699008+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_IVANO-SNO.json b/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_IVANO-SNO.json index e16c35c704..51e9a5e5c6 100644 --- a/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_IVANO-SNO.json +++ b/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_IVANO-SNO.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ivano-sno-53ab072a3_20251214T111220Z.json" ], - "modified_at": "2026-01-09T19:18:15.444809+00:00", + "modified_at": "2026-01-09T19:51:10.865813+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ivano-sno-53ab072a3", @@ -121,7 +121,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.444805+00:00", + "inferred_at": "2026-01-09T19:51:10.865808+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_SHERENA-GAYO.json b/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_SHERENA-GAYO.json index 05692c7131..50c9396895 100644 --- a/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_SHERENA-GAYO.json +++ b/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_SHERENA-GAYO.json @@ -150,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sherenagayo_20251214T111032Z.json" ], - "modified_at": "2026-01-09T19:18:13.106314+00:00", + "modified_at": "2026-01-09T19:50:51.603302+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sherenagayo", @@ -179,7 +179,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.106309+00:00", + "inferred_at": "2026-01-09T19:50:51.603297+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_YEE-TEOH.json b/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_YEE-TEOH.json index b385b2c118..3cf33f8397 100644 --- a/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_YEE-TEOH.json +++ b/data/person/ID_NL-NB-VEL_200X_NL-NB-EIN_XXXX_YEE-TEOH.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yee-yonn-teoh-752985193_20251214T110946Z.json" ], - "modified_at": "2026-01-09T19:18:15.175403+00:00", + "modified_at": "2026-01-09T19:51:06.993086+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yee-yonn-teoh-752985193", @@ -194,7 +194,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.175399+00:00", + "inferred_at": "2026-01-09T19:51:06.993082+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VEL_200X_NL-NB-VEL_XXXX_ADRIAAN-BRINK.json b/data/person/ID_NL-NB-VEL_200X_NL-NB-VEL_XXXX_ADRIAAN-BRINK.json index 6ed138acda..0e1e23e523 100644 --- a/data/person/ID_NL-NB-VEL_200X_NL-NB-VEL_XXXX_ADRIAAN-BRINK.json +++ b/data/person/ID_NL-NB-VEL_200X_NL-NB-VEL_XXXX_ADRIAAN-BRINK.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/adriaan-brink-5a6a9a238_20251214T111139Z.json" ], - "modified_at": "2026-01-09T19:18:17.031683+00:00", + "modified_at": "2026-01-09T19:51:23.166726+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "adriaan-brink-5a6a9a238", @@ -144,7 +144,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.031676+00:00", + "inferred_at": "2026-01-09T19:51:23.166721+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NB-VUG_199X_NL-ZH-TH_XXXX_NINE-CLAASSEN.json b/data/person/ID_NL-NB-VUG_199X_NL-ZH-TH_XXXX_NINE-CLAASSEN.json index 1b1d3463a9..a4a9fec904 100644 --- a/data/person/ID_NL-NB-VUG_199X_NL-ZH-TH_XXXX_NINE-CLAASSEN.json +++ b/data/person/ID_NL-NB-VUG_199X_NL-ZH-TH_XXXX_NINE-CLAASSEN.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nine-claassen-1a035a210_20251214T112344Z.json" ], - "modified_at": "2026-01-09T19:18:15.292368+00:00", + "modified_at": "2026-01-09T19:51:34.141808+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nine-claassen-1a035a210", @@ -163,7 +163,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.292363+00:00", + "inferred_at": "2026-01-09T19:51:34.141802+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-MOE_XXXX_MARIANNE-PAS.json b/data/person/ID_NL-NB-ZEV_197X_NL-NB-MOE_XXXX_MARIANNE-PAS.json similarity index 70% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NB-MOE_XXXX_MARIANNE-PAS.json rename to data/person/ID_NL-NB-ZEV_197X_NL-NB-MOE_XXXX_MARIANNE-PAS.json index 89437f0159..86c5f3df21 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-MOE_XXXX_MARIANNE-PAS.json +++ b/data/person/ID_NL-NB-ZEV_197X_NL-NB-MOE_XXXX_MARIANNE-PAS.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NB-MOE_XXXX_MARIANNE-PAS", + "ppid": "ID_NL-NB-ZEV_197X_NL-NB-MOE_XXXX_MARIANNE-PAS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NB-ZEV", + "first_date": "197X", "last_location": "NL-NB-MOE", "last_date": "XXXX", "name_tokens": [ "MARIANNE", "PAS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Marianne Pas", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -181,63 +187,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marianne-pas-82835880_20251213T020000Z.json" ], - "modified_at": "2026-01-09T18:58:10.931208+00:00", + "modified_at": "2026-01-09T19:50:50.788358+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marianne-pas-82835880", - "inferred_current_settlement": { - "value": "Moerdijk", - "formatted": "NL-NB-MOE", - "country_code": "NL", - "region_code": "NB", - "settlement_code": "MOE", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Moerdijk, North Brabant, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Moerdijk, North Brabant, Netherlands", - "result": { - "geonames_id": 2750769, - "geonames_name": "Moerdijk", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.70167, - "longitude": 4.62639 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NB-MOE" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2750769, - "geonames_name": "Moerdijk", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.70167, - "longitude": 4.62639 - }, - "inferred_at": "2026-01-09T18:58:10.931195+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARIANNE-PAS", @@ -247,6 +200,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NB-MOE_XXXX_MARIANNE-PAS", + "new_ppid": "ID_NL-NB-ZEV_197X_NL-NB-MOE_XXXX_MARIANNE-PAS", + "changed_at": "2026-01-09T19:43:39.134211+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1974 is in 197X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Inspectie van het Onderwijs", + "title": "Onderwijsinspecteur", + "date_range": "Sep 1997 - Mar 2013" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1997 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1997 - 23 = 1974", + "result": "Estimated birth year: 1974", + "range": "1969-1979 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1969, + 1979 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:50:50.788346+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-ALK_195X_NL-NH-ALK_XXXX_LEX-ESSER.json b/data/person/ID_NL-NH-ALK_195X_NL-NH-ALK_XXXX_LEX-ESSER.json index 8cbae78052..0e8761a3e0 100644 --- a/data/person/ID_NL-NH-ALK_195X_NL-NH-ALK_XXXX_LEX-ESSER.json +++ b/data/person/ID_NL-NH-ALK_195X_NL-NH-ALK_XXXX_LEX-ESSER.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lex-esser-b4a4b627_20251214T113153Z.json" ], - "modified_at": "2026-01-09T19:18:13.456424+00:00", + "modified_at": "2026-01-09T19:50:54.438392+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lex-esser-b4a4b627", @@ -184,7 +184,7 @@ "primary_rationale": "1950 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1950 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:13.456420+00:00", + "inferred_at": "2026-01-09T19:50:54.438383+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-ALK_198X_NL-NH-ALK_XXXX_ERNA-WINTERS.json b/data/person/ID_NL-NH-ALK_198X_NL-NH-ALK_XXXX_ERNA-WINTERS.json index 7b444a4204..4f5cc4954f 100644 --- a/data/person/ID_NL-NH-ALK_198X_NL-NH-ALK_XXXX_ERNA-WINTERS.json +++ b/data/person/ID_NL-NH-ALK_198X_NL-NH-ALK_XXXX_ERNA-WINTERS.json @@ -189,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ernawinters_20251214T113333Z.json" ], - "modified_at": "2026-01-09T19:18:13.922007+00:00", + "modified_at": "2026-01-09T19:50:56.846323+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ernawinters", @@ -212,7 +212,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -253,7 +253,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.922001+00:00", + "inferred_at": "2026-01-09T19:50:56.846318+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-ALK_198X_NL-NH-AMS_XXXX_MARJORIE-BEEKUM.json b/data/person/ID_NL-NH-ALK_198X_NL-NH-AMS_XXXX_MARJORIE-BEEKUM.json index df0238e678..ad15236c6e 100644 --- a/data/person/ID_NL-NH-ALK_198X_NL-NH-AMS_XXXX_MARJORIE-BEEKUM.json +++ b/data/person/ID_NL-NH-ALK_198X_NL-NH-AMS_XXXX_MARJORIE-BEEKUM.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjorie-van-beekum-81081810_20251214T111616Z.json" ], - "modified_at": "2026-01-09T19:18:11.650929+00:00", + "modified_at": "2026-01-09T19:50:47.255604+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjorie-van-beekum-81081810", @@ -173,7 +173,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.650923+00:00", + "inferred_at": "2026-01-09T19:50:47.255595+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-ALK_199X_NL-NH-ALK_XXXX_FEMKE-DIERTENS.json b/data/person/ID_NL-NH-ALK_199X_NL-NH-ALK_XXXX_FEMKE-DIERTENS.json index 37de0210b0..2d38fc7c4e 100644 --- a/data/person/ID_NL-NH-ALK_199X_NL-NH-ALK_XXXX_FEMKE-DIERTENS.json +++ b/data/person/ID_NL-NH-ALK_199X_NL-NH-ALK_XXXX_FEMKE-DIERTENS.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/femke-diertens-13601a1a2_20251214T111603Z.json" ], - "modified_at": "2026-01-09T19:18:13.576356+00:00", + "modified_at": "2026-01-09T19:50:55.104011+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "femke-diertens-13601a1a2", @@ -184,7 +184,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.576306+00:00", + "inferred_at": "2026-01-09T19:50:55.104003+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-ALK_199X_NL-NH-ALK_XXXX_NOA-DUIJSENS.json b/data/person/ID_NL-NH-ALK_199X_NL-NH-ALK_XXXX_NOA-DUIJSENS.json index 12fe855f1d..5ccfbf643f 100644 --- a/data/person/ID_NL-NH-ALK_199X_NL-NH-ALK_XXXX_NOA-DUIJSENS.json +++ b/data/person/ID_NL-NH-ALK_199X_NL-NH-ALK_XXXX_NOA-DUIJSENS.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/noa-duijsens-4b6ab219a_20251214T111553Z.json" ], - "modified_at": "2026-01-09T19:18:17.819176+00:00", + "modified_at": "2026-01-09T19:51:28.778319+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "noa-duijsens-4b6ab219a", @@ -184,7 +184,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.819172+00:00", + "inferred_at": "2026-01-09T19:51:28.778313+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-ALK_199X_NL-NH-AMS_XXXX_MEREL-KOUWETS.json b/data/person/ID_NL-NH-ALK_199X_NL-NH-AMS_XXXX_MEREL-KOUWETS.json index ba5760ebe1..3d82601306 100644 --- a/data/person/ID_NL-NH-ALK_199X_NL-NH-AMS_XXXX_MEREL-KOUWETS.json +++ b/data/person/ID_NL-NH-ALK_199X_NL-NH-AMS_XXXX_MEREL-KOUWETS.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merel-kouwets-a93a5a211_20251214T111818Z.json" ], - "modified_at": "2026-01-09T19:18:14.009551+00:00", + "modified_at": "2026-01-09T19:50:58.067124+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merel-kouwets-a93a5a211", @@ -144,7 +144,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.009548+00:00", + "inferred_at": "2026-01-09T19:50:58.067110+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-ALK_200X_NL-NH-MED_XXXX_JESSIE-STELTENPOOL.json b/data/person/ID_NL-NH-ALK_200X_NL-NH-MED_XXXX_JESSIE-STELTENPOOL.json index 3b7ecbd43f..6e39c1f323 100644 --- a/data/person/ID_NL-NH-ALK_200X_NL-NH-MED_XXXX_JESSIE-STELTENPOOL.json +++ b/data/person/ID_NL-NH-ALK_200X_NL-NH-MED_XXXX_JESSIE-STELTENPOOL.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jessie-steltenpool-3abbb2225_20251214T111541Z.json" ], - "modified_at": "2026-01-09T19:18:18.364512+00:00", + "modified_at": "2026-01-09T19:51:29.289612+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jessie-steltenpool-3abbb2225", @@ -121,7 +121,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.364501+00:00", + "inferred_at": "2026-01-09T19:51:29.289608+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHARLES-GIELEN.json b/data/person/ID_NL-NH-AMS_194X_NL-NH-AMS_XXXX_CHARLES-GIELEN.json similarity index 67% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHARLES-GIELEN.json rename to data/person/ID_NL-NH-AMS_194X_NL-NH-AMS_XXXX_CHARLES-GIELEN.json index 3a599d3328..6c3674b2af 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHARLES-GIELEN.json +++ b/data/person/ID_NL-NH-AMS_194X_NL-NH-AMS_XXXX_CHARLES-GIELEN.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHARLES-GIELEN", + "ppid": "ID_NL-NH-AMS_194X_NL-NH-AMS_XXXX_CHARLES-GIELEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "194X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "CHARLES", "GIELEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "195X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Charles Gielen", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -132,63 +138,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/charles-gielen-953bab9_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:56.214652+00:00", + "modified_at": "2026-01-09T19:50:56.880157+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "charles-gielen-953bab9", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:56.214646+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHARLES-GIELEN", @@ -198,6 +151,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHARLES-GIELEN", + "new_ppid": "ID_NL-NH-AMS_194X_NL-NH-AMS_XXXX_CHARLES-GIELEN", + "changed_at": "2026-01-09T19:43:41.737583+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "194X", + "195X" + ], + "edtf": "[194X,195X]", + "edtf_meaning": "one of: 1940s or 1950s", + "precision": "decade_set", + "primary_value": "194X", + "primary_rationale": "1948 is in 194X, but range extends into 195X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "NautaDutilh", + "title": "Of Counsel", + "date_range": "1971" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1971 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1971 - 23 = 1948", + "result": "Estimated birth year: 1948", + "range": "1943-1953 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1943, + 1953 + ], + "output": [ + "194X", + "195X" + ], + "edtf": "[194X,195X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1948 spans decades 194X/195X", + "inferred_at": "2026-01-09T19:50:56.880149+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_194X_NL-NH-AMS_XXXX_JAAP-HAAG.json b/data/person/ID_NL-NH-AMS_194X_NL-NH-AMS_XXXX_JAAP-HAAG.json index b152a9ac24..54e1803957 100644 --- a/data/person/ID_NL-NH-AMS_194X_NL-NH-AMS_XXXX_JAAP-HAAG.json +++ b/data/person/ID_NL-NH-AMS_194X_NL-NH-AMS_XXXX_JAAP-HAAG.json @@ -87,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jaap-haag-51387516_20251214T113216Z.json" ], - "modified_at": "2026-01-09T19:18:15.959284+00:00", + "modified_at": "2026-01-09T19:51:29.476383+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jaap-haag-51387516", @@ -125,7 +125,7 @@ "primary_rationale": "1949 is in 194X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1949 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:15.959275+00:00", + "inferred_at": "2026-01-09T19:51:29.476375+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_195X_NL-GE-LOC_XXXX_VINCENT-SLEEBE.json b/data/person/ID_NL-NH-AMS_195X_NL-GE-LOC_XXXX_VINCENT-SLEEBE.json index dcdc1055af..15473ea45e 100644 --- a/data/person/ID_NL-NH-AMS_195X_NL-GE-LOC_XXXX_VINCENT-SLEEBE.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-GE-LOC_XXXX_VINCENT-SLEEBE.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vincentsleebe_20251214T112956Z.json" ], - "modified_at": "2026-01-09T19:18:16.442158+00:00", + "modified_at": "2026-01-09T19:51:03.347338+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vincentsleebe", @@ -174,7 +174,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.442150+00:00", + "inferred_at": "2026-01-09T19:51:03.347331+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_CEES-VERMEULEN.json b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_CEES-VERMEULEN.json index 3654210054..09d0ad4f70 100644 --- a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_CEES-VERMEULEN.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_CEES-VERMEULEN.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cees-vermeulen-b53a07a_20251214T112143Z.json" ], - "modified_at": "2026-01-09T19:18:14.278691+00:00", + "modified_at": "2026-01-09T19:51:06.605797+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cees-vermeulen-b53a07a", @@ -149,7 +149,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.278684+00:00", + "inferred_at": "2026-01-09T19:51:06.605792+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_DESIREE-BONIS.json b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_DESIREE-BONIS.json index 9886301e1f..83cde6c46d 100644 --- a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_DESIREE-BONIS.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_DESIREE-BONIS.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/desiree-bonis-66759856_20251214T103337Z.json" ], - "modified_at": "2026-01-09T19:18:14.881497+00:00", + "modified_at": "2026-01-09T19:50:57.666497+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "desiree-bonis-66759856", @@ -186,7 +186,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.881455+00:00", + "inferred_at": "2026-01-09T19:50:57.666492+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ERIK-SOMERS.json b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_ERIK-SOMERS.json similarity index 70% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ERIK-SOMERS.json rename to data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_ERIK-SOMERS.json index 4b4e222e10..34f6d3e03e 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ERIK-SOMERS.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_ERIK-SOMERS.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ERIK-SOMERS", + "ppid": "ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_ERIK-SOMERS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "195X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ERIK", "SOMERS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "194X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Erik Somers", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -162,63 +168,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erik-somers-781141b_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:57.156687+00:00", + "modified_at": "2026-01-09T19:51:04.020570+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erik-somers-781141b", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:57.156681+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ERIK-SOMERS", @@ -228,6 +181,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ERIK-SOMERS", + "new_ppid": "ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_ERIK-SOMERS", + "changed_at": "2026-01-09T19:43:37.918541+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "194X", + "195X" + ], + "edtf": "[194X,195X]", + "edtf_meaning": "one of: 1940s or 1950s", + "precision": "decade_set", + "primary_value": "195X", + "primary_rationale": "1953 is in 195X, but range extends into 194X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "NIOD Institute for War, Holocaust and Genocide Studies", + "title": "Historian, Researcher, Curator", + "date_range": "1976 - 2024" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1976 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1976 - 23 = 1953", + "result": "Estimated birth year: 1953", + "range": "1948-1958 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1948, + 1958 + ], + "output": [ + "194X", + "195X" + ], + "edtf": "[194X,195X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1953 spans decades 194X/195X", + "inferred_at": "2026-01-09T19:51:04.020564+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_GRANT-SLINGO.json b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_GRANT-SLINGO.json index d73c6a41e0..b3c5eaa7d0 100644 --- a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_GRANT-SLINGO.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_GRANT-SLINGO.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/grant-paul-slingo-9a201817_20251214T110328Z.json" ], - "modified_at": "2026-01-09T19:18:16.730569+00:00", + "modified_at": "2026-01-09T19:51:14.426883+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "grant-paul-slingo-9a201817", @@ -170,7 +170,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.730564+00:00", + "inferred_at": "2026-01-09T19:51:14.426876+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_HENNI-BEEK.json b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_HENNI-BEEK.json index e8c5b8f677..294124e7f8 100644 --- a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_HENNI-BEEK.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_HENNI-BEEK.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henni-van-beek-87201320_20251214T111342Z.json" ], - "modified_at": "2026-01-09T19:18:15.651286+00:00", + "modified_at": "2026-01-09T19:51:13.255005+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henni-van-beek-87201320", @@ -129,7 +129,7 @@ "primary_rationale": "1957 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1957 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.651282+00:00", + "inferred_at": "2026-01-09T19:51:13.254997+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_HUIGEN-LEEFLANG.json b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_HUIGEN-LEEFLANG.json index 0fd4851624..2a12e7df1f 100644 --- a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_HUIGEN-LEEFLANG.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_HUIGEN-LEEFLANG.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/huigen-leeflang-63b90b11_20251214T111410Z.json" ], - "modified_at": "2026-01-09T19:18:16.199906+00:00", + "modified_at": "2026-01-09T19:50:56.606582+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "huigen-leeflang-63b90b11", @@ -123,7 +123,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.199901+00:00", + "inferred_at": "2026-01-09T19:50:56.606577+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_JAN-SCHINDLER.json b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_JAN-SCHINDLER.json index 9c87b2cd1d..7fb45f03b3 100644 --- a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_JAN-SCHINDLER.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_JAN-SCHINDLER.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-schindler-09432835_20251214T111824Z.json" ], - "modified_at": "2026-01-09T19:18:15.640066+00:00", + "modified_at": "2026-01-09T19:51:12.744510+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-schindler-09432835", @@ -111,7 +111,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.640062+00:00", + "inferred_at": "2026-01-09T19:51:12.744505+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_LUDO-HALEM.json b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_LUDO-HALEM.json index 6f0019b989..c17a0f109f 100644 --- a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_LUDO-HALEM.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_LUDO-HALEM.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ludovanhalem_20251214T111527Z.json" ], - "modified_at": "2026-01-09T19:18:19.009839+00:00", + "modified_at": "2026-01-09T19:51:34.138709+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ludovanhalem", @@ -190,7 +190,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:19.009830+00:00", + "inferred_at": "2026-01-09T19:51:34.138704+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_MARLIES-TOOREN.json b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_MARLIES-TOOREN.json index 19854e559f..8e1365ffde 100644 --- a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_MARLIES-TOOREN.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_MARLIES-TOOREN.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marlies-van-tooren-7b5bb731_20251214T112149Z.json" ], - "modified_at": "2026-01-09T19:18:15.629879+00:00", + "modified_at": "2026-01-09T19:51:06.677178+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marlies-van-tooren-7b5bb731", @@ -167,7 +167,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.629871+00:00", + "inferred_at": "2026-01-09T19:51:06.677172+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_MILLY-PLOEGER.json b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_MILLY-PLOEGER.json index 0c0ef032ae..e85d9f219e 100644 --- a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_MILLY-PLOEGER.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_MILLY-PLOEGER.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/milly-ploeger-94611537_20251214T112048Z.json" ], - "modified_at": "2026-01-09T19:18:15.614990+00:00", + "modified_at": "2026-01-09T19:50:50.215593+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "milly-ploeger-94611537", @@ -203,7 +203,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.614983+00:00", + "inferred_at": "2026-01-09T19:50:50.215588+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_ROB-HENDRIKS.json b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_ROB-HENDRIKS.json index 9173a273fd..f8f019ab68 100644 --- a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_ROB-HENDRIKS.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_ROB-HENDRIKS.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rhendriks_20251214T111439Z.json" ], - "modified_at": "2026-01-09T19:18:13.044186+00:00", + "modified_at": "2026-01-09T19:51:02.692766+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rhendriks", @@ -147,7 +147,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.044181+00:00", + "inferred_at": "2026-01-09T19:51:02.692759+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_TON-ISEGER.json b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_TON-ISEGER.json index dc0ce55325..4798523bc0 100644 --- a/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_TON-ISEGER.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-NH-AMS_XXXX_TON-ISEGER.json @@ -248,7 +248,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ton-den-iseger-18b0897_20251214T111757Z.json" ], - "modified_at": "2026-01-09T19:18:16.544821+00:00", + "modified_at": "2026-01-09T19:51:18.605172+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ton-den-iseger-18b0897", @@ -277,7 +277,7 @@ "primary_rationale": "1950 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -326,7 +326,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1950 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:16.544817+00:00", + "inferred_at": "2026-01-09T19:51:18.605165+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_195X_NL-OV-NED_XXXX_FEBE-MMC.json b/data/person/ID_NL-NH-AMS_195X_NL-OV-NED_XXXX_FEBE-MMC.json index f8a59515ac..3d5a752e27 100644 --- a/data/person/ID_NL-NH-AMS_195X_NL-OV-NED_XXXX_FEBE-MMC.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-OV-NED_XXXX_FEBE-MMC.json @@ -286,7 +286,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/febedeug_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:14.987485+00:00", + "modified_at": "2026-01-09T19:51:21.816827+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "febedeug", @@ -318,7 +318,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -359,7 +359,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.987479+00:00", + "inferred_at": "2026-01-09T19:51:21.816822+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_195X_NL-ZH-TH_XXXX_NICO-ATEN.json b/data/person/ID_NL-NH-AMS_195X_NL-ZH-TH_XXXX_NICO-ATEN.json index 4510203430..afae308f07 100644 --- a/data/person/ID_NL-NH-AMS_195X_NL-ZH-TH_XXXX_NICO-ATEN.json +++ b/data/person/ID_NL-NH-AMS_195X_NL-ZH-TH_XXXX_NICO-ATEN.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nico-aten-4365108_20251214T112427Z.json" ], - "modified_at": "2026-01-09T19:18:16.382232+00:00", + "modified_at": "2026-01-09T19:50:52.950172+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nico-aten-4365108", @@ -145,7 +145,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.382225+00:00", + "inferred_at": "2026-01-09T19:50:52.950165+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-FL-AS_XXXX_MARGO-HEKSTRA.json b/data/person/ID_NL-NH-AMS_196X_NL-FL-AS_XXXX_MARGO-HEKSTRA.json index fe09258334..edde992b5a 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-FL-AS_XXXX_MARGO-HEKSTRA.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-FL-AS_XXXX_MARGO-HEKSTRA.json @@ -225,7 +225,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/margo-hekstra-a8b100a_20251214T104138Z.json" ], - "modified_at": "2026-01-09T19:18:15.460865+00:00", + "modified_at": "2026-01-09T19:51:15.182088+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "margo-hekstra-a8b100a", @@ -257,7 +257,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -298,7 +298,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.460861+00:00", + "inferred_at": "2026-01-09T19:51:15.182084+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-GE-ARN_XXXX_PETRA-PETERSEN.json b/data/person/ID_NL-NH-AMS_196X_NL-GE-ARN_XXXX_PETRA-PETERSEN.json index 179782e11a..f457b6b398 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-GE-ARN_XXXX_PETRA-PETERSEN.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-GE-ARN_XXXX_PETRA-PETERSEN.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/petra-petersen-61810613_20251214T111247Z.json" ], - "modified_at": "2026-01-09T19:18:15.321742+00:00", + "modified_at": "2026-01-09T19:51:08.540269+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "petra-petersen-61810613", @@ -165,7 +165,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.321738+00:00", + "inferred_at": "2026-01-09T19:51:08.540264+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-GE-LOC_XXXX_BORIS-MUNNICK.json b/data/person/ID_NL-NH-AMS_196X_NL-GE-LOC_XXXX_BORIS-MUNNICK.json index 9f7e7455cf..f0b1bea547 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-GE-LOC_XXXX_BORIS-MUNNICK.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-GE-LOC_XXXX_BORIS-MUNNICK.json @@ -347,7 +347,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/borisdemunnick_20251214T110532Z.json" ], - "modified_at": "2026-01-09T19:18:13.127100+00:00", + "modified_at": "2026-01-09T19:51:02.698686+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "borisdemunnick", @@ -379,7 +379,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -420,7 +420,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.127094+00:00", + "inferred_at": "2026-01-09T19:51:02.698680+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-LI-MAA_XXXX_JAC-V.json b/data/person/ID_NL-NH-AMS_196X_NL-LI-MAA_XXXX_JAC-V.json index ac74deeba8..2d8457cb42 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-LI-MAA_XXXX_JAC-V.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-LI-MAA_XXXX_JAC-V.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jac-v-37965537_20251214T110443Z.json" ], - "modified_at": "2026-01-09T19:18:16.318683+00:00", + "modified_at": "2026-01-09T19:51:03.406842+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jac-v-37965537", @@ -151,7 +151,7 @@ "primary_rationale": "1961 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1961 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.318675+00:00", + "inferred_at": "2026-01-09T19:51:03.406836+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-LI-WEE_XXXX_ANNICK-POL.json b/data/person/ID_NL-NH-AMS_196X_NL-LI-WEE_XXXX_ANNICK-POL.json index 70e3d3c991..c963b8173f 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-LI-WEE_XXXX_ANNICK-POL.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-LI-WEE_XXXX_ANNICK-POL.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annick-van-pol-24422b58_20251214T111507Z.json" ], - "modified_at": "2026-01-09T19:18:16.198492+00:00", + "modified_at": "2026-01-09T19:51:18.291933+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annick-van-pol-24422b58", @@ -177,7 +177,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +218,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.198488+00:00", + "inferred_at": "2026-01-09T19:51:18.291926+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NB-OOS_XXXX_ROBERT-PRUIJN.json b/data/person/ID_NL-NH-AMS_196X_NL-NB-OOS_XXXX_ROBERT-PRUIJN.json index bf2df724b2..6c199bd37a 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NB-OOS_XXXX_ROBERT-PRUIJN.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NB-OOS_XXXX_ROBERT-PRUIJN.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rjpruijn_20251214T110258Z.json" ], - "modified_at": "2026-01-09T19:18:16.544214+00:00", + "modified_at": "2026-01-09T19:50:54.554989+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rjpruijn", @@ -183,7 +183,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.544208+00:00", + "inferred_at": "2026-01-09T19:50:54.554985+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ANITA-VRIEND.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ANITA-VRIEND.json index 75f33296f7..bcbc026afd 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ANITA-VRIEND.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ANITA-VRIEND.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anita-vriend-5778b110_20251214T110013Z.json" ], - "modified_at": "2026-01-09T19:18:15.946559+00:00", + "modified_at": "2026-01-09T19:51:15.188796+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anita-vriend-5778b110", @@ -152,7 +152,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.946550+00:00", + "inferred_at": "2026-01-09T19:51:15.188791+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ANNELIES-LOON.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ANNELIES-LOON.json index d6e9c08565..95b3f7cf71 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ANNELIES-LOON.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ANNELIES-LOON.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annelies-van-loon-91334849_20251214T111651Z.json" ], - "modified_at": "2026-01-09T19:18:13.887500+00:00", + "modified_at": "2026-01-09T19:50:47.210025+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annelies-van-loon-91334849", @@ -184,7 +184,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.887493+00:00", + "inferred_at": "2026-01-09T19:50:47.210019+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_BEN-STOOP.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_BEN-STOOP.json index ddd9eb9808..a93800479d 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_BEN-STOOP.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_BEN-STOOP.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/benvdstoop24051967_20251214T110219Z.json" ], - "modified_at": "2026-01-09T19:18:18.184752+00:00", + "modified_at": "2026-01-09T19:51:05.138633+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "benvdstoop24051967", @@ -162,7 +162,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:18.184742+00:00", + "inferred_at": "2026-01-09T19:51:05.138624+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_BRIGITTE-HEWITT.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_BRIGITTE-HEWITT.json index 12525a3c25..2321a1fbc1 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_BRIGITTE-HEWITT.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_BRIGITTE-HEWITT.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/brigitte-hewitt-30a6b730_20251214T111749Z.json" ], - "modified_at": "2026-01-09T19:18:13.160113+00:00", + "modified_at": "2026-01-09T19:50:52.993828+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "brigitte-hewitt-30a6b730", @@ -136,7 +136,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.160109+00:00", + "inferred_at": "2026-01-09T19:50:52.993822+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_BRIGITTE-PARO.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_BRIGITTE-PARO.json index 0b1da6aa8c..c4fbb97bca 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_BRIGITTE-PARO.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_BRIGITTE-PARO.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/brigitteparo_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:14.019681+00:00", + "modified_at": "2026-01-09T19:51:23.195935+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "brigitteparo", @@ -164,7 +164,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.019676+00:00", + "inferred_at": "2026-01-09T19:51:23.195931+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_CEES-HOF.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_CEES-HOF.json index f5198cbeea..032cbbfc4b 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_CEES-HOF.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_CEES-HOF.json @@ -217,7 +217,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ceeshof_20251214T110500Z.json" ], - "modified_at": "2026-01-09T19:18:15.634354+00:00", + "modified_at": "2026-01-09T19:51:30.248089+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ceeshof", @@ -255,7 +255,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -304,7 +304,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.634347+00:00", + "inferred_at": "2026-01-09T19:51:30.248081+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_CHRISTIANE-NAEGELE.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_CHRISTIANE-NAEGELE.json index 84f88ef27e..64ab9a664e 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_CHRISTIANE-NAEGELE.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_CHRISTIANE-NAEGELE.json @@ -174,7 +174,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/christianenaegele_20251214T111456Z.json" ], - "modified_at": "2026-01-09T19:18:13.441546+00:00", + "modified_at": "2026-01-09T19:50:53.714127+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "christianenaegele", @@ -212,7 +212,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -261,7 +261,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.441540+00:00", + "inferred_at": "2026-01-09T19:50:53.714123+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_DANIELLE-JANSEN.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_DANIELLE-JANSEN.json index 51267b03e4..f9c2066924 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_DANIELLE-JANSEN.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_DANIELLE-JANSEN.json @@ -210,7 +210,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daniellejansen_20251214T113224Z.json" ], - "modified_at": "2026-01-09T19:18:15.183638+00:00", + "modified_at": "2026-01-09T19:51:14.940193+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daniellejansen", @@ -242,7 +242,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -283,7 +283,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.183631+00:00", + "inferred_at": "2026-01-09T19:51:14.940185+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ED-PITSTRA.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ED-PITSTRA.json index c228c9fd9e..0f19d9074b 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ED-PITSTRA.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ED-PITSTRA.json @@ -87,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ed-pitstra-b8ba1816a_20251214T111630Z.json" ], - "modified_at": "2026-01-09T19:18:16.972023+00:00", + "modified_at": "2026-01-09T19:51:22.806007+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ed-pitstra-b8ba1816a", @@ -116,7 +116,7 @@ "primary_rationale": "1963 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1963 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.972017+00:00", + "inferred_at": "2026-01-09T19:51:22.806003+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ED-SEWALT.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ED-SEWALT.json index ffdbed0632..9cf0f16fea 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ED-SEWALT.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_ED-SEWALT.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ed-sewalt-614b647_20251214T102702Z.json" ], - "modified_at": "2026-01-09T19:18:11.283814+00:00", + "modified_at": "2026-01-09T19:51:06.700513+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ed-sewalt-614b647", @@ -219,7 +219,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -268,7 +268,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:11.283804+00:00", + "inferred_at": "2026-01-09T19:51:06.700507+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_EIKE-HERTOG.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_EIKE-HERTOG.json index 00fc90b466..c028d9c3df 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_EIKE-HERTOG.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_EIKE-HERTOG.json @@ -262,7 +262,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eikedh_20251214T104132Z.json" ], - "modified_at": "2026-01-09T19:18:16.163130+00:00", + "modified_at": "2026-01-09T19:50:47.244053+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eikedh", @@ -300,7 +300,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -349,7 +349,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.163122+00:00", + "inferred_at": "2026-01-09T19:50:47.244037+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_GWEN-TAUBER.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_GWEN-TAUBER.json index 5be0ed920f..62ac24b3ea 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_GWEN-TAUBER.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_GWEN-TAUBER.json @@ -89,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gwen-tauber-3b4b8210_20251214T111525Z.json" ], - "modified_at": "2026-01-09T19:18:15.288898+00:00", + "modified_at": "2026-01-09T19:51:08.359123+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gwen-tauber-3b4b8210", @@ -118,7 +118,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.288894+00:00", + "inferred_at": "2026-01-09T19:51:08.359118+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_HILDA-TOMASOUW.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_HILDA-TOMASOUW.json index 918da2e75b..bcc80a103a 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_HILDA-TOMASOUW.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_HILDA-TOMASOUW.json @@ -87,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hilda-tomasouw-48a8a42b_20251214T111753Z.json" ], - "modified_at": "2026-01-09T19:18:18.038853+00:00", + "modified_at": "2026-01-09T19:51:02.697545+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hilda-tomasouw-48a8a42b", @@ -119,7 +119,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.038843+00:00", + "inferred_at": "2026-01-09T19:51:02.697538+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_IRMA-ZEEGERS.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_IRMA-ZEEGERS.json index bfab2406ad..a1e8cf9157 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_IRMA-ZEEGERS.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_IRMA-ZEEGERS.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/irma-zeegers-15120a187_20251214T111724Z.json" ], - "modified_at": "2026-01-09T19:18:18.460970+00:00", + "modified_at": "2026-01-09T19:51:22.961560+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "irma-zeegers-15120a187", @@ -146,7 +146,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:18.460962+00:00", + "inferred_at": "2026-01-09T19:51:22.961557+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_JANNEKE-WIJK.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_JANNEKE-WIJK.json index bf4f323136..941d9854fd 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_JANNEKE-WIJK.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_JANNEKE-WIJK.json @@ -208,7 +208,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janneke-van-der-wijk_20251214T111544Z.json" ], - "modified_at": "2026-01-09T19:18:14.358009+00:00", + "modified_at": "2026-01-09T19:50:51.773496+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janneke-van-der-wijk", @@ -246,7 +246,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -295,7 +295,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.358002+00:00", + "inferred_at": "2026-01-09T19:50:51.773491+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_JOKE-BEGEMAN.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_JOKE-BEGEMAN.json index 73899c0265..4cb8346e1d 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_JOKE-BEGEMAN.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_JOKE-BEGEMAN.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jokebegeman_20251214T111656Z.json" ], - "modified_at": "2026-01-09T19:18:15.039328+00:00", + "modified_at": "2026-01-09T19:51:06.636051+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jokebegeman", @@ -190,7 +190,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.039324+00:00", + "inferred_at": "2026-01-09T19:51:06.636045+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_KARIN-SMOLDERS.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_KARIN-SMOLDERS.json index 84612112a8..f68fb59b70 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_KARIN-SMOLDERS.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_KARIN-SMOLDERS.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karin-smolders-8141a697_20251214T111729Z.json" ], - "modified_at": "2026-01-09T19:18:15.781901+00:00", + "modified_at": "2026-01-09T19:50:52.964388+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karin-smolders-8141a697", @@ -186,7 +186,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.781896+00:00", + "inferred_at": "2026-01-09T19:50:52.964382+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_KARIN-WESTER.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_KARIN-WESTER.json index be21026ac5..7bcf125b57 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_KARIN-WESTER.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_KARIN-WESTER.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karin-wester-795773124_20251214T102940Z.json" ], - "modified_at": "2026-01-09T19:18:13.328018+00:00", + "modified_at": "2026-01-09T19:51:03.359802+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karin-wester-795773124", @@ -136,7 +136,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.328012+00:00", + "inferred_at": "2026-01-09T19:51:03.359794+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_LENNIE-LANGE.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_LENNIE-LANGE.json index 0e1d43be43..423a75907b 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_LENNIE-LANGE.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_LENNIE-LANGE.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lennie-de-lange-a99182a_20251214T113328Z.json" ], - "modified_at": "2026-01-09T19:18:15.018709+00:00", + "modified_at": "2026-01-09T19:51:06.596765+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lennie-de-lange-a99182a", @@ -204,7 +204,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -253,7 +253,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.018703+00:00", + "inferred_at": "2026-01-09T19:51:06.596694+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_LEON-VOSTERS.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_LEON-VOSTERS.json index e8a4463392..b37df7ccc8 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_LEON-VOSTERS.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_LEON-VOSTERS.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/leon-vosters-a10087167_20251214T111321Z.json" ], - "modified_at": "2026-01-09T19:18:14.707536+00:00", + "modified_at": "2026-01-09T19:50:53.835991+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "leon-vosters-a10087167", @@ -172,7 +172,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.707530+00:00", + "inferred_at": "2026-01-09T19:50:53.835980+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MARIANNE-NOUWEN.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MARIANNE-NOUWEN.json index 10d508f33d..63a7de241d 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MARIANNE-NOUWEN.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MARIANNE-NOUWEN.json @@ -163,7 +163,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marianne-nouwen-3a711616_20251214T110019Z.json" ], - "modified_at": "2026-01-09T19:18:11.341948+00:00", + "modified_at": "2026-01-09T19:50:53.269689+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marianne-nouwen-3a711616", @@ -195,7 +195,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.341939+00:00", + "inferred_at": "2026-01-09T19:50:53.269663+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MARK-KRACHT.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MARK-KRACHT.json index fa584a0cdc..5ff84738b9 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MARK-KRACHT.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MARK-KRACHT.json @@ -182,7 +182,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mark-kracht-5b2a5738_20251214T111703Z.json" ], - "modified_at": "2026-01-09T19:18:16.233912+00:00", + "modified_at": "2026-01-09T19:50:47.453556+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mark-kracht-5b2a5738", @@ -220,7 +220,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -269,7 +269,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.233905+00:00", + "inferred_at": "2026-01-09T19:50:47.453551+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MERCIA-KERKHOF.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MERCIA-KERKHOF.json index e7fc63969e..b5d4560c88 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MERCIA-KERKHOF.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MERCIA-KERKHOF.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merciakerkhof_20251214T111441Z.json" ], - "modified_at": "2026-01-09T19:18:14.298311+00:00", + "modified_at": "2026-01-09T19:51:00.077016+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merciakerkhof", @@ -156,7 +156,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.298307+00:00", + "inferred_at": "2026-01-09T19:51:00.077007+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MIRJAM-VENNE.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MIRJAM-VENNE.json index dea052b87a..93c7711def 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MIRJAM-VENNE.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_MIRJAM-VENNE.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mirjam-van-der-venne-6337924b_20251214T111500Z.json" ], - "modified_at": "2026-01-09T19:18:17.834097+00:00", + "modified_at": "2026-01-09T19:51:28.783881+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mirjam-van-der-venne-6337924b", @@ -139,7 +139,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.834091+00:00", + "inferred_at": "2026-01-09T19:51:28.783875+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_NICO-LINGBEEK.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_NICO-LINGBEEK.json index ffe782e58b..3a29541af8 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_NICO-LINGBEEK.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_NICO-LINGBEEK.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nico-lingbeek-47617820_20251214T110054Z.json" ], - "modified_at": "2026-01-09T19:18:13.458164+00:00", + "modified_at": "2026-01-09T19:50:54.440404+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nico-lingbeek-47617820", @@ -146,7 +146,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.458159+00:00", + "inferred_at": "2026-01-09T19:50:54.440398+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_PIETER-DREU.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_PIETER-DREU.json index 5196d1cc58..23a92ef10c 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_PIETER-DREU.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_PIETER-DREU.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pieter-de-dreu-b6a4b34_20251214T112042Z.json" ], - "modified_at": "2026-01-09T19:18:15.692586+00:00", + "modified_at": "2026-01-09T19:50:49.106207+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pieter-de-dreu-b6a4b34", @@ -135,7 +135,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.692581+00:00", + "inferred_at": "2026-01-09T19:50:49.106197+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_RYCLEF-RIENSTRA.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_RYCLEF-RIENSTRA.json index ffec98f21a..6d1d65a661 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_RYCLEF-RIENSTRA.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_RYCLEF-RIENSTRA.json @@ -194,7 +194,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ryclef-rienstra_20251214T112530Z.json" ], - "modified_at": "2026-01-09T19:18:15.734870+00:00", + "modified_at": "2026-01-09T19:50:55.983034+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ryclef-rienstra", @@ -226,7 +226,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -267,7 +267,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.734865+00:00", + "inferred_at": "2026-01-09T19:50:55.983016+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SABINE-AARTS.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SABINE-AARTS.json index 38b0328953..172534f145 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SABINE-AARTS.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SABINE-AARTS.json @@ -177,7 +177,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sabineaarts1_20251214T102859Z.json" ], - "modified_at": "2026-01-09T19:18:15.456695+00:00", + "modified_at": "2026-01-09T19:51:15.187401+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sabineaarts1", @@ -209,7 +209,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -250,7 +250,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.456689+00:00", + "inferred_at": "2026-01-09T19:51:15.187396+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SANDRA-HENNEBERQUE.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SANDRA-HENNEBERQUE.json index 3d99b5583e..a4727dae1a 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SANDRA-HENNEBERQUE.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SANDRA-HENNEBERQUE.json @@ -160,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sandra-henneberque-90b15817a_20251214T112657Z.json" ], - "modified_at": "2026-01-09T19:18:15.373677+00:00", + "modified_at": "2026-01-09T19:51:08.539797+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sandra-henneberque-90b15817a", @@ -198,7 +198,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +247,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.373668+00:00", + "inferred_at": "2026-01-09T19:51:08.539790+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SANDRA-PLUKKER.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SANDRA-PLUKKER.json index 3609b010cc..ce945777c9 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SANDRA-PLUKKER.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SANDRA-PLUKKER.json @@ -88,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sandra-plukker-9090649b_20251214T111420Z.json" ], - "modified_at": "2026-01-09T19:18:15.016796+00:00", + "modified_at": "2026-01-09T19:51:28.793027+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sandra-plukker-9090649b", @@ -126,7 +126,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.016789+00:00", + "inferred_at": "2026-01-09T19:51:28.793021+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SARA-COHEN.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SARA-COHEN.json index 1b304ee3be..0399ace5fa 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SARA-COHEN.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_SARA-COHEN.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saramcohen_20251214T102942Z.json" ], - "modified_at": "2026-01-09T19:18:15.148055+00:00", + "modified_at": "2026-01-09T19:50:58.946685+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saramcohen", @@ -174,7 +174,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.148048+00:00", + "inferred_at": "2026-01-09T19:50:58.946680+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_TESSEL-BEEK.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_TESSEL-BEEK.json index 396740825a..adf553caa5 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_TESSEL-BEEK.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_TESSEL-BEEK.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tessel-beek-b3bb8a26_20251214T110123Z.json" ], - "modified_at": "2026-01-09T19:18:13.937401+00:00", + "modified_at": "2026-01-09T19:51:34.116440+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tessel-beek-b3bb8a26", @@ -196,7 +196,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +245,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.937395+00:00", + "inferred_at": "2026-01-09T19:51:34.116436+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_TINUS-HOLTHUIS.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_TINUS-HOLTHUIS.json index 32ad15a043..f01e6b9678 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_TINUS-HOLTHUIS.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_TINUS-HOLTHUIS.json @@ -592,7 +592,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tinusholthuis_20251214T113033Z.json" ], - "modified_at": "2026-01-09T19:18:12.710421+00:00", + "modified_at": "2026-01-09T19:50:48.665152+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tinusholthuis", @@ -615,7 +615,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -656,7 +656,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.710411+00:00", + "inferred_at": "2026-01-09T19:50:48.665142+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_TITIA-WISSING.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_TITIA-WISSING.json index 66537369bc..d7d51997ae 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_TITIA-WISSING.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_TITIA-WISSING.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/titia-wissing_20251214T112046Z.json" ], - "modified_at": "2026-01-09T19:18:15.209597+00:00", + "modified_at": "2026-01-09T19:51:20.503691+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "titia-wissing", @@ -198,7 +198,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.209592+00:00", + "inferred_at": "2026-01-09T19:51:20.503684+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_WIENEKE-HOEN.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_WIENEKE-HOEN.json index dc25087e08..d07a81b6c4 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_WIENEKE-HOEN.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_WIENEKE-HOEN.json @@ -189,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wieneke-t-hoen-4a74607_20251214T111314Z.json" ], - "modified_at": "2026-01-09T19:18:16.879884+00:00", + "modified_at": "2026-01-09T19:51:12.693974+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wieneke-t-hoen-4a74607", @@ -227,7 +227,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -276,7 +276,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.879878+00:00", + "inferred_at": "2026-01-09T19:51:12.693967+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_WIM-SCHOT.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_WIM-SCHOT.json index 5685f443e2..4c73a25f78 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_WIM-SCHOT.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_WIM-SCHOT.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wim-schot-70319312_20251214T112047Z.json" ], - "modified_at": "2026-01-09T19:18:15.695751+00:00", + "modified_at": "2026-01-09T19:51:28.777818+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wim-schot-70319312", @@ -149,7 +149,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.695745+00:00", + "inferred_at": "2026-01-09T19:51:28.777810+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_WIM-WAGT.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_WIM-WAGT.json index 283b83bedb..abcd8476eb 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_WIM-WAGT.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-AMS_XXXX_WIM-WAGT.json @@ -270,7 +270,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wimdewagt_20251214T102722Z.json" ], - "modified_at": "2026-01-09T19:18:14.361084+00:00", + "modified_at": "2026-01-09T19:51:01.594272+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wimdewagt", @@ -299,7 +299,7 @@ "primary_rationale": "1961 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -348,7 +348,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1961 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:14.361081+00:00", + "inferred_at": "2026-01-09T19:51:01.594266+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-BOV_XXXX_ROLAND-BISSCHEROUX.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-BOV_XXXX_ROLAND-BISSCHEROUX.json index a9d399d76b..e4db9795fe 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-BOV_XXXX_ROLAND-BISSCHEROUX.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-BOV_XXXX_ROLAND-BISSCHEROUX.json @@ -279,7 +279,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rolandbisscheroux_20251214T113208Z.json" ], - "modified_at": "2026-01-09T19:18:15.225468+00:00", + "modified_at": "2026-01-09T19:51:11.040701+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rolandbisscheroux", @@ -311,7 +311,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -352,7 +352,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.225463+00:00", + "inferred_at": "2026-01-09T19:51:11.040696+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-BUS_XXXX_MONIQUE-LINDEN.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-BUS_XXXX_MONIQUE-LINDEN.json similarity index 75% rename from data/person/ID_XX-XX-XXX_196X_NL-NH-BUS_XXXX_MONIQUE-LINDEN.json rename to data/person/ID_NL-NH-AMS_196X_NL-NH-BUS_XXXX_MONIQUE-LINDEN.json index dea5bb640e..48e0b82724 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-BUS_XXXX_MONIQUE-LINDEN.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-BUS_XXXX_MONIQUE-LINDEN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_NL-NH-BUS_XXXX_MONIQUE-LINDEN", + "ppid": "ID_NL-NH-AMS_196X_NL-NH-BUS_XXXX_MONIQUE-LINDEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NH-AMS", "first_date": "196X", "last_location": "NL-NH-BUS", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Monique van der Linden", @@ -175,7 +176,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mvanderlinden1_20251214T104025Z.json" ], - "modified_at": "2026-01-09T19:18:17.402735+00:00", + "modified_at": "2026-01-09T19:51:26.707737+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mvanderlinden1", @@ -189,6 +190,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_NL-NH-BUS_XXXX_MONIQUE-LINDEN", + "new_ppid": "ID_NL-NH-AMS_196X_NL-NH-BUS_XXXX_MONIQUE-LINDEN", + "changed_at": "2026-01-09T19:51:26.707735+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -197,7 +208,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +249,77 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.402646+00:00", + "inferred_at": "2026-01-09T19:51:26.705839+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Amsterdam", + "formatted": "NL-NH-AMS", + "country_code": "NL", + "region_code": "NH", + "settlement_code": "AMS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Amsterdam University of Applied Sciences", + "date_range": "1985 - 1988 • 3 years", + "degree": "Bsc, International Management" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Amsterdam University of Applied Sciences", + "mapping_result": "Amsterdam, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Amsterdam, Netherlands", + "result": { + "geonames_id": 2759794, + "geonames_name": "Amsterdam", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPLC", + "latitude": 52.37403, + "longitude": 4.88969 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NH", + "settlement_code": "AMS" + }, + "result": "NL-NH-AMS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2759794, + "geonames_name": "Amsterdam", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPLC", + "latitude": 52.37403, + "longitude": 4.88969 + }, + "inferred_at": "2026-01-09T19:51:26.707731+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-HAA_XXXX_CHARLOTTE-KOSTERS.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-HAA_XXXX_CHARLOTTE-KOSTERS.json index 927b40f6f8..37990dc374 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-HAA_XXXX_CHARLOTTE-KOSTERS.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-HAA_XXXX_CHARLOTTE-KOSTERS.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/charlottekosters_20251214T110243Z.json" ], - "modified_at": "2026-01-09T19:18:15.462424+00:00", + "modified_at": "2026-01-09T19:50:48.661864+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "charlottekosters", @@ -158,7 +158,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.462419+00:00", + "inferred_at": "2026-01-09T19:50:48.661857+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-HAA_XXXX_GERDA-BRINKMAN.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-HAA_XXXX_GERDA-BRINKMAN.json index c1acf4426c..2fe9a86bea 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-HAA_XXXX_GERDA-BRINKMAN.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-HAA_XXXX_GERDA-BRINKMAN.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerdabrinkman_20251214T112144Z.json" ], - "modified_at": "2026-01-09T19:18:16.316732+00:00", + "modified_at": "2026-01-09T19:51:18.389319+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerdabrinkman", @@ -185,7 +185,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.316727+00:00", + "inferred_at": "2026-01-09T19:51:18.389313+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-HIL_XXXX_JACQUELINE-DIESSEN.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-HIL_XXXX_JACQUELINE-DIESSEN.json index 044630a8d3..0229c37fe4 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-HIL_XXXX_JACQUELINE-DIESSEN.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-HIL_XXXX_JACQUELINE-DIESSEN.json @@ -167,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jacqueline-van-diessen-5b93454_20251214T110128Z.json" ], - "modified_at": "2026-01-09T19:18:13.417217+00:00", + "modified_at": "2026-01-09T19:50:53.699573+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jacqueline-van-diessen-5b93454", @@ -199,7 +199,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.417213+00:00", + "inferred_at": "2026-01-09T19:50:53.699568+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-HIL_XXXX_PAUL-VESTERS.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-HIL_XXXX_PAUL-VESTERS.json index 69de9b6122..8cae37ad3c 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-HIL_XXXX_PAUL-VESTERS.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-HIL_XXXX_PAUL-VESTERS.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paul-vesters-952b391a_20251214T110757Z.json" ], - "modified_at": "2026-01-09T19:18:15.988114+00:00", + "modified_at": "2026-01-09T19:51:15.723269+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paul-vesters-952b391a", @@ -184,7 +184,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.988109+00:00", + "inferred_at": "2026-01-09T19:51:15.723265+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-NH-HOO_XXXX_CORINA-WILLEGEN.json b/data/person/ID_NL-NH-AMS_196X_NL-NH-HOO_XXXX_CORINA-WILLEGEN.json index 85e3ff6aa7..01176c109f 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-NH-HOO_XXXX_CORINA-WILLEGEN.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-NH-HOO_XXXX_CORINA-WILLEGEN.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/corina-schagen-van-willegen-116196268_20251214T113218Z.json" ], - "modified_at": "2026-01-09T19:18:15.504562+00:00", + "modified_at": "2026-01-09T19:51:11.261914+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "corina-schagen-van-willegen-116196268", @@ -129,7 +129,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.504558+00:00", + "inferred_at": "2026-01-09T19:51:11.261891+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-UT-AME_XXXX_MARK-VOORNVELD.json b/data/person/ID_NL-NH-AMS_196X_NL-UT-AME_XXXX_MARK-VOORNVELD.json index 91f0b3c31d..ebdf5b01bd 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-UT-AME_XXXX_MARK-VOORNVELD.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-UT-AME_XXXX_MARK-VOORNVELD.json @@ -287,7 +287,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/markvanvoornveld_20251214T112958Z.json" ], - "modified_at": "2026-01-09T19:18:13.788735+00:00", + "modified_at": "2026-01-09T19:51:19.064336+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "markvanvoornveld", @@ -319,7 +319,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -360,7 +360,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.788730+00:00", + "inferred_at": "2026-01-09T19:51:19.064330+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_CECILE-HARTEN.json b/data/person/ID_NL-NH-AMS_196X_NL-UT-UTR_XXXX_CECILE-HARTEN.json similarity index 67% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_CECILE-HARTEN.json rename to data/person/ID_NL-NH-AMS_196X_NL-UT-UTR_XXXX_CECILE-HARTEN.json index 6285556a6e..e64e25bfa8 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_CECILE-HARTEN.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-UT-UTR_XXXX_CECILE-HARTEN.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_CECILE-HARTEN", + "ppid": "ID_NL-NH-AMS_196X_NL-UT-UTR_XXXX_CECILE-HARTEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "196X", "last_location": "NL-UT-UTR", "last_date": "XXXX", "name_tokens": [ "CECILE", "HARTEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Cécile van der Harten", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -142,63 +148,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/c%C3%A9cile-van-der-harten-3029294_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:53.673302+00:00", + "modified_at": "2026-01-09T19:51:06.608789+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cécile-van-der-harten-3029294", - "inferred_current_settlement": { - "value": "Utrecht", - "formatted": "NL-UT-UTR", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "UTR", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Utrecht, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Utrecht, Netherlands", - "result": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-UTR" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - }, - "inferred_at": "2026-01-09T17:42:53.673031+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CECILE-HARTEN", @@ -208,6 +161,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_CECILE-HARTEN", + "new_ppid": "ID_NL-NH-AMS_196X_NL-UT-UTR_XXXX_CECILE-HARTEN", + "changed_at": "2026-01-09T19:43:41.654568+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "196X", + "primary_rationale": "1965 is in 196X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Self-employed", + "title": "Freelance Art Historian", + "date_range": "1988 - 1992" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1988 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1988 - 23 = 1965", + "result": "Estimated birth year: 1965", + "range": "1960-1970 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1960, + 1970 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1965 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:51:06.608783+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_196X_NL-UT-UTR_XXXX_SABIEN-ONVLEE.json b/data/person/ID_NL-NH-AMS_196X_NL-UT-UTR_XXXX_SABIEN-ONVLEE.json index c31bc75a3b..eb66e23db4 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-UT-UTR_XXXX_SABIEN-ONVLEE.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-UT-UTR_XXXX_SABIEN-ONVLEE.json @@ -268,7 +268,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sabien-onvlee-4026b710_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:15.487516+00:00", + "modified_at": "2026-01-09T19:51:11.077096+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sabien-onvlee-4026b710", @@ -305,7 +305,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -354,7 +354,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.487511+00:00", + "inferred_at": "2026-01-09T19:51:11.077078+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-ZH-LEI_XXXX_RENSKE-HEIJUNGS.json b/data/person/ID_NL-NH-AMS_196X_NL-ZH-LEI_XXXX_RENSKE-HEIJUNGS.json index 1b211727dd..f7cf4e94e0 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-ZH-LEI_XXXX_RENSKE-HEIJUNGS.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-ZH-LEI_XXXX_RENSKE-HEIJUNGS.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/renske-heijungs-75357913_20251214T112725Z.json" ], - "modified_at": "2026-01-09T19:18:15.038358+00:00", + "modified_at": "2026-01-09T19:50:54.608002+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "renske-heijungs-75357913", @@ -138,7 +138,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.038351+00:00", + "inferred_at": "2026-01-09T19:50:54.607997+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_ARJAN-POELWIJK.json b/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_ARJAN-POELWIJK.json index 8db998191d..d443439280 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_ARJAN-POELWIJK.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_ARJAN-POELWIJK.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arjan-poelwijk-682a8221_20251214T112841Z.json" ], - "modified_at": "2026-01-09T19:18:13.122230+00:00", + "modified_at": "2026-01-09T19:51:00.914383+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arjan-poelwijk-682a8221", @@ -150,7 +150,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.122224+00:00", + "inferred_at": "2026-01-09T19:51:00.914376+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_ESTER-BRUIN.json b/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_ESTER-BRUIN.json index df3a4d0e51..7217f1b1b9 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_ESTER-BRUIN.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_ESTER-BRUIN.json @@ -78,7 +78,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ester-de-bruin-86752971_20251214T111810Z.json" ], - "modified_at": "2026-01-09T19:18:15.296444+00:00", + "modified_at": "2026-01-09T19:51:28.910495+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ester-de-bruin-86752971", @@ -117,7 +117,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.296439+00:00", + "inferred_at": "2026-01-09T19:51:28.910489+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_GERA-SNELLER.json b/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_GERA-SNELLER.json index b7a4c850ab..754888e829 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_GERA-SNELLER.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_GERA-SNELLER.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gera-sneller-9a809b17_20251214T103312Z.json" ], - "modified_at": "2026-01-09T19:18:14.602055+00:00", + "modified_at": "2026-01-09T19:51:10.859672+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gera-sneller-9a809b17", @@ -149,7 +149,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.602045+00:00", + "inferred_at": "2026-01-09T19:51:10.859668+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_MARIJE-BALT.json b/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_MARIJE-BALT.json index ce0352284e..6dbb0391ee 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_MARIJE-BALT.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_MARIJE-BALT.json @@ -275,7 +275,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marije-balt-359a5b5_20251214T103239Z.json" ], - "modified_at": "2026-01-09T19:18:11.540332+00:00", + "modified_at": "2026-01-09T19:51:22.066039+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marije-balt-359a5b5", @@ -313,7 +313,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -362,7 +362,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.540319+00:00", + "inferred_at": "2026-01-09T19:51:22.066029+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_MARK-BOOGAARD.json b/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_MARK-BOOGAARD.json index 67de784955..f0c7efa32c 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_MARK-BOOGAARD.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_MARK-BOOGAARD.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mark-van-den-boogaard-62ba417_20251214T103029Z.json" ], - "modified_at": "2026-01-09T19:18:13.070094+00:00", + "modified_at": "2026-01-09T19:50:55.369356+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mark-van-den-boogaard-62ba417", @@ -157,7 +157,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.070088+00:00", + "inferred_at": "2026-01-09T19:50:55.369350+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_NICOLE-HACK.json b/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_NICOLE-HACK.json index b7cdc7870e..765368fb89 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_NICOLE-HACK.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_NICOLE-HACK.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicole-hack-2637aa11_20251214T103239Z.json" ], - "modified_at": "2026-01-09T19:18:16.081539+00:00", + "modified_at": "2026-01-09T19:51:16.874562+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicole-hack-2637aa11", @@ -138,7 +138,7 @@ "primary_rationale": "1960 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1960 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.081534+00:00", + "inferred_at": "2026-01-09T19:51:16.874556+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_WERNER-ZONDEROP.json b/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_WERNER-ZONDEROP.json index 7317f42ca4..6b3cf7c214 100644 --- a/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_WERNER-ZONDEROP.json +++ b/data/person/ID_NL-NH-AMS_196X_NL-ZH-TH_XXXX_WERNER-ZONDEROP.json @@ -176,7 +176,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/werner-zonderop-b0421729_20251214T112925Z.json" ], - "modified_at": "2026-01-09T19:18:13.928534+00:00", + "modified_at": "2026-01-09T19:51:18.460057+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "werner-zonderop-b0421729", @@ -214,7 +214,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -263,7 +263,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.928527+00:00", + "inferred_at": "2026-01-09T19:51:18.460050+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_BJRN-DEKKER.json b/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_BJRN-DEKKER.json index 8067aaec77..a005c34df8 100644 --- a/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_BJRN-DEKKER.json +++ b/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_BJRN-DEKKER.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bjorn-dekker-8447068a_20251213T010000Z.json" ], - "modified_at": "2026-01-09T19:18:17.354225+00:00", + "modified_at": "2026-01-09T19:50:58.733575+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bjorn-dekker-8447068a", @@ -163,7 +163,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.352168+00:00", + "inferred_at": "2026-01-09T19:50:58.731570+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_EVELINE-NICOLAAS.json b/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_EVELINE-NICOLAAS.json index 3ef9b7423a..3ee3fabce4 100644 --- a/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_EVELINE-NICOLAAS.json +++ b/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_EVELINE-NICOLAAS.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/evelinesintnicolaas1_20251214T111304Z.json" ], - "modified_at": "2026-01-09T19:18:17.013265+00:00", + "modified_at": "2026-01-09T19:51:22.354174+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "evelinesintnicolaas1", @@ -129,7 +129,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.011278+00:00", + "inferred_at": "2026-01-09T19:51:22.352472+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_HANS-PIENA.json b/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_HANS-PIENA.json index 4194c67bfa..249a17f946 100644 --- a/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_HANS-PIENA.json +++ b/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_HANS-PIENA.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hans-piena-7a98ab93_20251214T110537Z.json" ], - "modified_at": "2026-01-09T19:18:15.595210+00:00", + "modified_at": "2026-01-09T19:50:55.352433+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hans-piena-7a98ab93", @@ -164,7 +164,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.595199+00:00", + "inferred_at": "2026-01-09T19:50:55.352382+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_MARC-MOQUETTE.json b/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_MARC-MOQUETTE.json index c3230b5aaa..c68afe4008 100644 --- a/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_MARC-MOQUETTE.json +++ b/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_MARC-MOQUETTE.json @@ -188,7 +188,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marcmoquette_20251214T102852Z.json" ], - "modified_at": "2026-01-09T19:18:14.180266+00:00", + "modified_at": "2026-01-09T19:50:58.805244+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marcmoquette", @@ -216,7 +216,7 @@ "primary_rationale": "1960 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -265,7 +265,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1960 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:14.177031+00:00", + "inferred_at": "2026-01-09T19:50:58.797644+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_MARLIES-LOUZ.json b/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_MARLIES-LOUZ.json index d885c4e345..b690faa0aa 100644 --- a/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_MARLIES-LOUZ.json +++ b/data/person/ID_NL-NH-AMS_196X_XX-XX-XXX_XXXX_MARLIES-LOUZ.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marlieslouz_20251214T112917Z.json" ], - "modified_at": "2026-01-09T19:18:16.011054+00:00", + "modified_at": "2026-01-09T19:51:15.733705+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marlieslouz", @@ -209,7 +209,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.008497+00:00", + "inferred_at": "2026-01-09T19:51:15.731464+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_BE-VL-ANT_XXXX_JEROEN-MEESTER.json b/data/person/ID_NL-NH-AMS_197X_BE-VL-ANT_XXXX_JEROEN-MEESTER.json index 57fea48a8b..ba2a73dd46 100644 --- a/data/person/ID_NL-NH-AMS_197X_BE-VL-ANT_XXXX_JEROEN-MEESTER.json +++ b/data/person/ID_NL-NH-AMS_197X_BE-VL-ANT_XXXX_JEROEN-MEESTER.json @@ -234,7 +234,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeroen-de-meester-3ba6b2b_20251214T111441Z.json" ], - "modified_at": "2026-01-09T19:18:14.599973+00:00", + "modified_at": "2026-01-09T19:51:06.589046+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeroen-de-meester-3ba6b2b", @@ -266,7 +266,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -307,7 +307,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.599965+00:00", + "inferred_at": "2026-01-09T19:51:06.589041+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_BE-VL-HOE_XXXX_GWENDOLINE-FIFE.json b/data/person/ID_NL-NH-AMS_197X_BE-VL-HOE_XXXX_GWENDOLINE-FIFE.json index 15882d96ce..eccf3f7722 100644 --- a/data/person/ID_NL-NH-AMS_197X_BE-VL-HOE_XXXX_GWENDOLINE-FIFE.json +++ b/data/person/ID_NL-NH-AMS_197X_BE-VL-HOE_XXXX_GWENDOLINE-FIFE.json @@ -202,7 +202,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gwendoline-fife-2497a0159_20251214T111920Z.json" ], - "modified_at": "2026-01-09T19:18:15.540916+00:00", + "modified_at": "2026-01-09T19:51:11.852346+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gwendoline-fife-2497a0159", @@ -225,7 +225,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -266,7 +266,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.540911+00:00", + "inferred_at": "2026-01-09T19:51:11.852339+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-FL-AS_XXXX_TIOLITA-PARDEDE.json b/data/person/ID_NL-NH-AMS_197X_NL-FL-AS_XXXX_TIOLITA-PARDEDE.json index 4bf19b692f..e6b8ee1e71 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-FL-AS_XXXX_TIOLITA-PARDEDE.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-FL-AS_XXXX_TIOLITA-PARDEDE.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tiolita-pardede-b83a15152_20251214T103136Z.json" ], - "modified_at": "2026-01-09T19:18:13.816543+00:00", + "modified_at": "2026-01-09T19:50:56.605285+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tiolita-pardede-b83a15152", @@ -149,7 +149,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.816540+00:00", + "inferred_at": "2026-01-09T19:50:56.605279+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-GE-APE_XXXX_HENK-HOVENKAMP.json b/data/person/ID_NL-NH-AMS_197X_NL-GE-APE_XXXX_HENK-HOVENKAMP.json index 538ef3dba6..1d30465fe5 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-GE-APE_XXXX_HENK-HOVENKAMP.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-GE-APE_XXXX_HENK-HOVENKAMP.json @@ -247,7 +247,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henk-hovenkamp-6312857_20251214T104120Z.json" ], - "modified_at": "2026-01-09T19:18:16.535056+00:00", + "modified_at": "2026-01-09T19:50:56.651895+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henk-hovenkamp-6312857", @@ -294,7 +294,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -343,7 +343,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.535047+00:00", + "inferred_at": "2026-01-09T19:50:56.651885+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-GE-CUL_XXXX_KITTY-BOGTE.json b/data/person/ID_NL-NH-AMS_197X_NL-GE-CUL_XXXX_KITTY-BOGTE.json index 32c6800b42..2e68ff9133 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-GE-CUL_XXXX_KITTY-BOGTE.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-GE-CUL_XXXX_KITTY-BOGTE.json @@ -157,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kittybogte_20251214T112843Z.json" ], - "modified_at": "2026-01-09T19:18:15.705210+00:00", + "modified_at": "2026-01-09T19:51:28.156396+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kittybogte", @@ -195,7 +195,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -244,7 +244,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.705203+00:00", + "inferred_at": "2026-01-09T19:51:28.156389+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-GE-CUL_XXXX_MARIA-LIEVENSE.json b/data/person/ID_NL-NH-AMS_197X_NL-GE-CUL_XXXX_MARIA-LIEVENSE.json index 09067aa92a..60e4e53d4f 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-GE-CUL_XXXX_MARIA-LIEVENSE.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-GE-CUL_XXXX_MARIA-LIEVENSE.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maria-lievense-2521399_20251214T110305Z.json" ], - "modified_at": "2026-01-09T19:18:16.257754+00:00", + "modified_at": "2026-01-09T19:51:13.538076+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maria-lievense-2521399", @@ -168,7 +168,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.257732+00:00", + "inferred_at": "2026-01-09T19:51:13.538071+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-GE-DOE_XXXX_HESTER-HUITEMA.json b/data/person/ID_NL-NH-AMS_197X_NL-GE-DOE_XXXX_HESTER-HUITEMA.json index 471509244b..2c25735327 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-GE-DOE_XXXX_HESTER-HUITEMA.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-GE-DOE_XXXX_HESTER-HUITEMA.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hesterjhuitema_20251214T112038Z.json" ], - "modified_at": "2026-01-09T19:18:16.040235+00:00", + "modified_at": "2026-01-09T19:51:15.119104+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hesterjhuitema", @@ -139,7 +139,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.040227+00:00", + "inferred_at": "2026-01-09T19:51:15.119094+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-OTT_XXXX_BENNO-TEMPEL.json b/data/person/ID_NL-NH-AMS_197X_NL-GE-OTT_XXXX_BENNO-TEMPEL.json similarity index 74% rename from data/person/ID_XX-XX-XXX_XXXX_NL-GE-OTT_XXXX_BENNO-TEMPEL.json rename to data/person/ID_NL-NH-AMS_197X_NL-GE-OTT_XXXX_BENNO-TEMPEL.json index 1aff30f1f7..4b2fe41a04 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-OTT_XXXX_BENNO-TEMPEL.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-GE-OTT_XXXX_BENNO-TEMPEL.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-GE-OTT_XXXX_BENNO-TEMPEL", + "ppid": "ID_NL-NH-AMS_197X_NL-GE-OTT_XXXX_BENNO-TEMPEL", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "197X", "last_location": "NL-GE-OTT", "last_date": "XXXX", "name_tokens": [ "BENNO", "TEMPEL" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Benno Tempel", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -216,64 +222,11 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bennotempel_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:04.386294+00:00", + "modified_at": "2026-01-09T19:50:58.668694+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bennotempel", "ppid_collision_suffix": "bennotempel", - "inferred_current_settlement": { - "value": "Otterlo", - "formatted": "NL-GE-OTT", - "country_code": "NL", - "region_code": "GE", - "settlement_code": "OTT", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Otterlo, Gelderland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Otterlo, Gelderland, Netherlands", - "result": { - "geonames_id": 2749203, - "geonames_name": "Otterlo", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPL", - "latitude": 52.1, - "longitude": 5.77222 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-GE-OTT" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2749203, - "geonames_name": "Otterlo", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPL", - "latitude": 52.1, - "longitude": 5.77222 - }, - "inferred_at": "2026-01-09T17:43:04.386288+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BENNO-TEMPEL-bennotempel", @@ -283,6 +236,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-OTT_XXXX_BENNO-TEMPEL", + "new_ppid": "ID_NL-NH-AMS_197X_NL-GE-OTT_XXXX_BENNO-TEMPEL", + "changed_at": "2026-01-09T19:43:38.174243+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1974 is in 197X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Van Gogh Museum", + "title": "Assistant Curator", + "date_range": "1997 - 2000" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1997 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1997 - 23 = 1974", + "result": "Estimated birth year: 1974", + "range": "1969-1979 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1969, + 1979 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:50:58.668688+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_197X_NL-LI-VAA_XXXX_ANDREA-PEETERS.json b/data/person/ID_NL-NH-AMS_197X_NL-LI-VAA_XXXX_ANDREA-PEETERS.json index 448e6931f1..bbf0f09eff 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-LI-VAA_XXXX_ANDREA-PEETERS.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-LI-VAA_XXXX_ANDREA-PEETERS.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/andrea-peeters-384499129_20251214T110442Z.json" ], - "modified_at": "2026-01-09T19:18:16.803654+00:00", + "modified_at": "2026-01-09T19:51:22.046620+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "andrea-peeters-384499129", @@ -153,7 +153,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.803650+00:00", + "inferred_at": "2026-01-09T19:51:22.046614+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-LI-VEN_XXXX_JULIETTA-ZANDERS.json b/data/person/ID_NL-NH-AMS_197X_NL-LI-VEN_XXXX_JULIETTA-ZANDERS.json index f3a1be0d41..9b7d706ac7 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-LI-VEN_XXXX_JULIETTA-ZANDERS.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-LI-VEN_XXXX_JULIETTA-ZANDERS.json @@ -231,7 +231,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/juliettazanders_20251214T112533Z.json" ], - "modified_at": "2026-01-09T19:18:13.491227+00:00", + "modified_at": "2026-01-09T19:50:54.535359+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "juliettazanders", @@ -260,7 +260,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -309,7 +309,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.491220+00:00", + "inferred_at": "2026-01-09T19:50:54.535354+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NB-BRE_XXXX_CHIDO-HOUBRAKEN.json b/data/person/ID_NL-NH-AMS_197X_NL-NB-BRE_XXXX_CHIDO-HOUBRAKEN.json index 6d77fa9437..8b8cfdb398 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NB-BRE_XXXX_CHIDO-HOUBRAKEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NB-BRE_XXXX_CHIDO-HOUBRAKEN.json @@ -275,7 +275,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/houbraken_20251214T104030Z.json" ], - "modified_at": "2026-01-09T19:18:17.244600+00:00", + "modified_at": "2026-01-09T19:51:25.477849+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "houbraken", @@ -304,7 +304,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -353,7 +353,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.244595+00:00", + "inferred_at": "2026-01-09T19:51:25.477845+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ANNE-JANSEN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ANNE-JANSEN.json index 9f1b88053a..76e6c3c96d 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ANNE-JANSEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ANNE-JANSEN.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-jansen-baa92ba_20251214T111704Z.json" ], - "modified_at": "2026-01-09T19:18:16.925181+00:00", + "modified_at": "2026-01-09T19:51:22.516597+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-jansen-baa92ba", @@ -135,7 +135,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.925176+00:00", + "inferred_at": "2026-01-09T19:51:22.516593+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ARJUN-WADHAWAN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ARJUN-WADHAWAN.json index 9853c4e385..a4d89ab477 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ARJUN-WADHAWAN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ARJUN-WADHAWAN.json @@ -311,7 +311,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arjunwadhawan_20251214T111124Z.json" ], - "modified_at": "2026-01-09T19:18:13.794014+00:00", + "modified_at": "2026-01-09T19:51:19.859896+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arjunwadhawan", @@ -349,7 +349,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -398,7 +398,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.794007+00:00", + "inferred_at": "2026-01-09T19:51:19.859882+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ARLETTE-ALTEN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ARLETTE-ALTEN.json index 0814b88a1f..aeddf63a5a 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ARLETTE-ALTEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ARLETTE-ALTEN.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arlette-alten-6947771a_20251214T111827Z.json" ], - "modified_at": "2026-01-09T19:18:16.181596+00:00", + "modified_at": "2026-01-09T19:50:46.996841+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arlette-alten-6947771a", @@ -150,7 +150,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.181590+00:00", + "inferred_at": "2026-01-09T19:50:46.996833+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_AZIZ-LAGNAOUI.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_AZIZ-LAGNAOUI.json index fceab35c5c..62105e22d7 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_AZIZ-LAGNAOUI.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_AZIZ-LAGNAOUI.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aziz-lagnaoui-6a080b23a_20251214T111653Z.json" ], - "modified_at": "2026-01-09T19:18:12.621401+00:00", + "modified_at": "2026-01-09T19:50:48.638718+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aziz-lagnaoui-6a080b23a", @@ -178,7 +178,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.621393+00:00", + "inferred_at": "2026-01-09T19:50:48.638709+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_BAS-NEDERVEEN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_BAS-NEDERVEEN.json index 8eb7e8b9e3..0f3b4a4a90 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_BAS-NEDERVEEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_BAS-NEDERVEEN.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bas-nederveen-5a077b5_20251214T111256Z.json" ], - "modified_at": "2026-01-09T19:18:13.159496+00:00", + "modified_at": "2026-01-09T19:50:52.993147+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bas-nederveen-5a077b5", @@ -170,7 +170,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.159491+00:00", + "inferred_at": "2026-01-09T19:50:52.993138+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_CAMILLA-VERWEEL.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_CAMILLA-VERWEEL.json index 9cdc01e35b..661b4ebb56 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_CAMILLA-VERWEEL.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_CAMILLA-VERWEEL.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/camillaverweel_20251214T111509Z.json" ], - "modified_at": "2026-01-09T19:18:13.087388+00:00", + "modified_at": "2026-01-09T19:50:51.068548+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "camillaverweel", @@ -159,7 +159,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.087384+00:00", + "inferred_at": "2026-01-09T19:50:51.068539+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_CARIANNE-DORST.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_CARIANNE-DORST.json index d951aee8e1..4d280b34ab 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_CARIANNE-DORST.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_CARIANNE-DORST.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carianne-van-dorst-61a43935_20251214T110530Z.json" ], - "modified_at": "2026-01-09T19:18:13.762098+00:00", + "modified_at": "2026-01-09T19:50:56.095028+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carianne-van-dorst-61a43935", @@ -136,7 +136,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.762094+00:00", + "inferred_at": "2026-01-09T19:50:56.095022+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_CARINE-BRINKMAN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_CARINE-BRINKMAN.json index 191f6c8f4d..4baca87361 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_CARINE-BRINKMAN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_CARINE-BRINKMAN.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carine-brinkman-904a0112_20251214T103411Z.json" ], - "modified_at": "2026-01-09T19:18:16.513535+00:00", + "modified_at": "2026-01-09T19:51:18.558995+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carine-brinkman-904a0112", @@ -151,7 +151,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.513528+00:00", + "inferred_at": "2026-01-09T19:51:18.558990+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_COLLIN-HOOGEVEEN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_COLLIN-HOOGEVEEN.json index 75e94427cb..235eb21c21 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_COLLIN-HOOGEVEEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_COLLIN-HOOGEVEEN.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/collin-hoogeveen_20251214T111605Z.json" ], - "modified_at": "2026-01-09T19:18:14.946606+00:00", + "modified_at": "2026-01-09T19:51:05.589269+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "collin-hoogeveen", @@ -153,7 +153,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.946602+00:00", + "inferred_at": "2026-01-09T19:51:05.589260+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_DANIELLE-VERSLUIS.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_DANIELLE-VERSLUIS.json index ab14d4b731..2f01eacb1c 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_DANIELLE-VERSLUIS.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_DANIELLE-VERSLUIS.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daniellezonnetje_20251214T110236Z.json" ], - "modified_at": "2026-01-09T19:18:13.083564+00:00", + "modified_at": "2026-01-09T19:50:58.539003+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daniellezonnetje", @@ -151,7 +151,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.083559+00:00", + "inferred_at": "2026-01-09T19:50:58.538997+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_DIEGO-MILLO.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_DIEGO-MILLO.json index 1a87b28ad0..16649a661e 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_DIEGO-MILLO.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_DIEGO-MILLO.json @@ -159,7 +159,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/diego-millo_20251214T110913Z.json" ], - "modified_at": "2026-01-09T19:18:11.313519+00:00", + "modified_at": "2026-01-09T19:50:46.715088+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "diego-millo", @@ -188,7 +188,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -237,7 +237,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.313506+00:00", + "inferred_at": "2026-01-09T19:50:46.715082+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EEFJE-WEIJDEN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EEFJE-WEIJDEN.json index 0266ac9811..6fb6d73993 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EEFJE-WEIJDEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EEFJE-WEIJDEN.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eefjevanderweijden79_20251214T111315Z.json" ], - "modified_at": "2026-01-09T19:18:15.575418+00:00", + "modified_at": "2026-01-09T19:51:12.121545+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eefjevanderweijden79", @@ -181,7 +181,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.575414+00:00", + "inferred_at": "2026-01-09T19:51:12.121540+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EEFKE-BORNE.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EEFKE-BORNE.json index d124ca7ec5..862e3e4b16 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EEFKE-BORNE.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EEFKE-BORNE.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eefkevandenborne_20251214T111730Z.json" ], - "modified_at": "2026-01-09T19:18:14.877221+00:00", + "modified_at": "2026-01-09T19:51:05.290851+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eefkevandenborne", @@ -150,7 +150,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.877216+00:00", + "inferred_at": "2026-01-09T19:51:05.290839+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ELIF-RONGENKAYNAKCI.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ELIF-RONGENKAYNAKCI.json similarity index 66% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ELIF-RONGENKAYNAKCI.json rename to data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ELIF-RONGENKAYNAKCI.json index dce9c9b361..912224b5f7 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ELIF-RONGENKAYNAKCI.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ELIF-RONGENKAYNAKCI.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ELIF-RONGENKAYNAKCI", + "ppid": "ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ELIF-RONGENKAYNAKCI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "197X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ELIF", "RONGENKAYNAKCI" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Elif Rongen-Kaynakçi", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -133,63 +139,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elif-rongen-kaynak%C3%A7i-35295a17_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:57.416385+00:00", + "modified_at": "2026-01-09T19:50:56.790731+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elif-rongen-kaynakçi-35295a17", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:57.416380+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ELIF-RONGENKAYNAKCI", @@ -199,6 +152,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ELIF-RONGENKAYNAKCI", + "new_ppid": "ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ELIF-RONGENKAYNAKCI", + "changed_at": "2026-01-09T19:43:42.097760+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1976 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "EYE Filmmuseum", + "title": "Curator of Silent Film", + "date_range": "1999" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1999 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1999 - 23 = 1976", + "result": "Estimated birth year: 1976", + "range": "1971-1981 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1971, + 1981 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:50:56.790726+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ENDHI-HOUTHUIJSEN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ENDHI-HOUTHUIJSEN.json index c39cb1aa61..f2e06b47eb 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ENDHI-HOUTHUIJSEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_ENDHI-HOUTHUIJSEN.json @@ -213,7 +213,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/endhihouthuijsen_20251214T110242Z.json" ], - "modified_at": "2026-01-09T19:18:14.594563+00:00", + "modified_at": "2026-01-09T19:51:02.686078+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "endhihouthuijsen", @@ -242,7 +242,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -291,7 +291,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.594555+00:00", + "inferred_at": "2026-01-09T19:51:02.686069+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVA-HERMANS.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVA-HERMANS.json index 943f954f0e..5a906541a4 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVA-HERMANS.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVA-HERMANS.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eva-hermans-7a0854162_20251214T111352Z.json" ], - "modified_at": "2026-01-09T19:18:16.182251+00:00", + "modified_at": "2026-01-09T19:51:29.273157+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eva-hermans-7a0854162", @@ -160,7 +160,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.182245+00:00", + "inferred_at": "2026-01-09T19:51:29.273152+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVA-SCHIEVELD.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVA-SCHIEVELD.json index f72e78b24a..d93f9e4dd3 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVA-SCHIEVELD.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVA-SCHIEVELD.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eva-schieveld-a6281513_20251214T110054Z.json" ], - "modified_at": "2026-01-09T19:18:15.013111+00:00", + "modified_at": "2026-01-09T19:51:18.457476+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eva-schieveld-a6281513", @@ -174,7 +174,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.013104+00:00", + "inferred_at": "2026-01-09T19:51:18.457470+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVELIEN-HOLTROPDOP.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVELIEN-HOLTROPDOP.json index 73880ee1fa..2c83b0ab62 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVELIEN-HOLTROPDOP.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVELIEN-HOLTROPDOP.json @@ -146,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/evelien-holtrop-dop-0590b5a4_20251214T111821Z.json" ], - "modified_at": "2026-01-09T19:18:16.815300+00:00", + "modified_at": "2026-01-09T19:51:22.055771+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "evelien-holtrop-dop-0590b5a4", @@ -169,7 +169,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.815296+00:00", + "inferred_at": "2026-01-09T19:51:22.055767+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVELINE-BOER.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVELINE-BOER.json index 9e3f18c4af..23c5a4a912 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVELINE-BOER.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_EVELINE-BOER.json @@ -229,7 +229,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/evelinedeboer_20251214T113217Z.json" ], - "modified_at": "2026-01-09T19:18:14.051931+00:00", + "modified_at": "2026-01-09T19:50:58.563647+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "evelinedeboer", @@ -252,7 +252,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -293,7 +293,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.051927+00:00", + "inferred_at": "2026-01-09T19:50:58.563637+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_FREDERIQUE-LEEUW.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_FREDERIQUE-LEEUW.json index 2ec87ec6af..eb678ee825 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_FREDERIQUE-LEEUW.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_FREDERIQUE-LEEUW.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frederique-de-leeuw-04819566_20251214T111828Z.json" ], - "modified_at": "2026-01-09T19:18:16.555937+00:00", + "modified_at": "2026-01-09T19:51:18.732425+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frederique-de-leeuw-04819566", @@ -130,7 +130,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.555933+00:00", + "inferred_at": "2026-01-09T19:51:18.732416+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_FYONA-FYONA.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_FYONA-FYONA.json index c4dd4b6f19..e068a37ca1 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_FYONA-FYONA.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_FYONA-FYONA.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fyonadas_20251214T111652Z.json" ], - "modified_at": "2026-01-09T19:18:15.588856+00:00", + "modified_at": "2026-01-09T19:51:12.638983+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fyonadas", @@ -149,7 +149,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.588850+00:00", + "inferred_at": "2026-01-09T19:51:12.638908+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_GERI-KLAZEMA.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_GERI-KLAZEMA.json index aaa1e20e85..5b6adbd316 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_GERI-KLAZEMA.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_GERI-KLAZEMA.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/geriklazema_20251214T111901Z.json" ], - "modified_at": "2026-01-09T19:18:17.751724+00:00", + "modified_at": "2026-01-09T19:51:28.558393+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "geriklazema", @@ -185,7 +185,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.751717+00:00", + "inferred_at": "2026-01-09T19:51:28.558389+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_GIOVANNI-STEFANO.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_GIOVANNI-STEFANO.json index 8d147175d3..d40953bc7a 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_GIOVANNI-STEFANO.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_GIOVANNI-STEFANO.json @@ -29,9 +29,9 @@ "source": "linkedin_profile" }, "birth_date": { - "edtf": "XXXX", - "precision": "unknown", - "note": "See inferred_birth_decade for heuristic estimate" + "edtf": "1979", + "precision": "year", + "note": "Verified from Academia.edu profile" }, "is_living": true, "heritage_relevance": { @@ -109,7 +109,23 @@ ], "profile_image_url": "https://media.licdn.com/dms/image/v2/D4D03AQEIl_z4EtOvyA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1711031804437?e=2147483647&v=beta&t=YzXSY5kJxiTMC1ceDkrNkPdOrLy1qWyw8L4cknetoEE" }, - "web_claims": [], + "web_claims": [ + { + "claim_type": "birth_date", + "claim_value": "1979", + "claim_value_raw": "Born in 1979, he graduated with honors in Art, Music, and Drama Studies from the University of Palermo", + "source_url": "https://rijksmuseum.academia.edu/GiovanniDiStefano", + "retrieved_on": "2025-01-10T00:32:00Z", + "retrieval_agent": "exa_web_search_exa", + "confidence": "high", + "provenance": { + "statement_created_at": "2025-01-10T00:35:00Z", + "source_archived_at": "2025-01-10T00:32:00Z", + "retrieval_method": "exa_web_search_exa", + "search_query": "\"Giovanni Paolo Di Stefano\" curator Rijksmuseum born birthday biography" + } + } + ], "source_observations": [ { "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/giovanni-paolo-di-stefano-43081121_20251214T111852Z.json", @@ -119,8 +135,10 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T00:32:00Z", + "result": "found", + "notes": "Found on Academia.edu profile" } }, "provenance": { @@ -129,8 +147,8 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/giovanni-paolo-di-stefano-43081121_20251214T111852Z.json" ], - "modified_at": "2026-01-09T19:18:15.906591+00:00", - "modified_by": "enrich_ppids.py" + "modified_at": "2025-01-10T00:35:00Z", + "modified_by": "opencode-claude-sonnet-4" }, "linkedin_slug": "giovanni-paolo-di-stefano-43081121", "ppid_history": [ @@ -167,7 +185,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.906585+00:00", + "inferred_at": "2026-01-09T19:50:53.686685+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_GUIDO-BOUW.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_GUIDO-BOUW.json index cbc0574afb..5ad565290b 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_GUIDO-BOUW.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_GUIDO-BOUW.json @@ -237,7 +237,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/guidobouw_20251214T111430Z.json" ], - "modified_at": "2026-01-09T19:18:16.817743+00:00", + "modified_at": "2026-01-09T19:51:22.059840+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "guidobouw", @@ -266,7 +266,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -315,7 +315,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.817739+00:00", + "inferred_at": "2026-01-09T19:51:22.059834+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HANNEKE-ACR.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HANNEKE-ACR.json index d158229b68..fe0ccfa53b 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HANNEKE-ACR.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HANNEKE-ACR.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hanneke-ramakers-acr-7b5657b5_20251214T111508Z.json" ], - "modified_at": "2026-01-09T19:18:14.871116+00:00", + "modified_at": "2026-01-09T19:51:05.256896+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hanneke-ramakers-acr-7b5657b5", @@ -167,7 +167,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.871111+00:00", + "inferred_at": "2026-01-09T19:51:05.256837+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HARM-STEVENS.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HARM-STEVENS.json index 736d524b4a..0f4df7c299 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HARM-STEVENS.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HARM-STEVENS.json @@ -87,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harm-stevens-3b10801b9_20251214T111259Z.json" ], - "modified_at": "2026-01-09T19:18:15.511617+00:00", + "modified_at": "2026-01-09T19:51:18.386000+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harm-stevens-3b10801b9", @@ -125,7 +125,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.511611+00:00", + "inferred_at": "2026-01-09T19:51:18.385994+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HARPERT-MICHIELSEN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HARPERT-MICHIELSEN.json index 14b3dbfa6e..6d9261e111 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HARPERT-MICHIELSEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HARPERT-MICHIELSEN.json @@ -365,7 +365,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harpert-michielsen-9667505_20251214T111737Z.json" ], - "modified_at": "2026-01-09T19:18:16.279611+00:00", + "modified_at": "2026-01-09T19:51:18.363950+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harpert-michielsen-9667505", @@ -388,7 +388,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -429,7 +429,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.279603+00:00", + "inferred_at": "2026-01-09T19:51:18.363945+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HELEEN-DRIEL.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HELEEN-DRIEL.json index 8128104ac5..dc2ded0cec 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HELEEN-DRIEL.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HELEEN-DRIEL.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/heleen-van-driel-b97a11b_20251214T110143Z.json" ], - "modified_at": "2026-01-09T19:18:15.234549+00:00", + "modified_at": "2026-01-09T19:51:14.497619+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "heleen-van-driel-b97a11b", @@ -144,7 +144,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.234542+00:00", + "inferred_at": "2026-01-09T19:51:14.497610+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HESTER-KUIPER.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HESTER-KUIPER.json index f641d7a90c..ead791baf2 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HESTER-KUIPER.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_HESTER-KUIPER.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hester-kuiper-64a321b_20251214T111333Z.json" ], - "modified_at": "2026-01-09T19:18:15.928311+00:00", + "modified_at": "2026-01-09T19:51:15.182678+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hester-kuiper-64a321b", @@ -143,7 +143,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.928307+00:00", + "inferred_at": "2026-01-09T19:51:15.182673+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_INGE-HOVEN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_INGE-HOVEN.json index d4842de490..855b58a8a3 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_INGE-HOVEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_INGE-HOVEN.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/inge-van-den-hoven-8a85961b0_20251214T110307Z.json" ], - "modified_at": "2026-01-09T19:18:13.254319+00:00", + "modified_at": "2026-01-09T19:50:53.708135+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "inge-van-den-hoven-8a85961b0", @@ -190,7 +190,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.254314+00:00", + "inferred_at": "2026-01-09T19:50:53.708130+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_INGE-SCHOONE.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_INGE-SCHOONE.json index 3a3f675869..70ccdda502 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_INGE-SCHOONE.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_INGE-SCHOONE.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ingejolijnschoone_20251214T111416Z.json" ], - "modified_at": "2026-01-09T19:18:18.976927+00:00", + "modified_at": "2026-01-09T19:51:31.811091+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ingejolijnschoone", @@ -178,7 +178,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.976912+00:00", + "inferred_at": "2026-01-09T19:51:31.811087+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_IRIS-KOST.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_IRIS-KOST.json index 8272990c39..e12f5d4c1c 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_IRIS-KOST.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_IRIS-KOST.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/iris-kost-9361077_20251214T112037Z.json" ], - "modified_at": "2026-01-09T19:18:13.865434+00:00", + "modified_at": "2026-01-09T19:51:06.666064+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "iris-kost-9361077", @@ -174,7 +174,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.865427+00:00", + "inferred_at": "2026-01-09T19:51:06.666059+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JAAP-GULDEMOND.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JAAP-GULDEMOND.json similarity index 73% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JAAP-GULDEMOND.json rename to data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JAAP-GULDEMOND.json index 718868c800..b9f82c0275 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JAAP-GULDEMOND.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JAAP-GULDEMOND.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JAAP-GULDEMOND", + "ppid": "ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JAAP-GULDEMOND", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "197X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "JAAP", "GULDEMOND" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Jaap Guldemond", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -185,63 +191,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jaap-guldemond-69044b147_20251214T115050Z.json" ], - "modified_at": "2026-01-09T18:58:11.844408+00:00", + "modified_at": "2026-01-09T19:50:54.116685+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jaap-guldemond-69044b147", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T18:58:11.844395+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAAP-GULDEMOND", @@ -251,6 +204,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JAAP-GULDEMOND", + "new_ppid": "ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JAAP-GULDEMOND", + "changed_at": "2026-01-09T19:43:41.000816+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1978 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Fondazione La Biennale di Venezia", + "title": "Commissioner and Curator, Dutch Pavilion, 49th Venice Biennale", + "date_range": "2001 - 2001" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2001 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2001 - 23 = 1978", + "result": "Estimated birth year: 1978", + "range": "1973-1983 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1973, + 1983 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:50:54.116678+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JANNEKE-MARTENS.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JANNEKE-MARTENS.json index 1a49cfc48a..2c8e893e3e 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JANNEKE-MARTENS.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JANNEKE-MARTENS.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janneke-martens-44b4079_20251214T111253Z.json" ], - "modified_at": "2026-01-09T19:18:13.422399+00:00", + "modified_at": "2026-01-09T19:51:13.467661+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janneke-martens-44b4079", @@ -161,7 +161,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.422394+00:00", + "inferred_at": "2026-01-09T19:51:13.467655+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JEFF-BERGSTROM.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JEFF-BERGSTROM.json index e85d02df0d..f204688dba 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JEFF-BERGSTROM.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JEFF-BERGSTROM.json @@ -196,7 +196,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeffbergstrom_20251214T111851Z.json" ], - "modified_at": "2026-01-09T19:18:15.996046+00:00", + "modified_at": "2026-01-09T19:51:14.354415+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeffbergstrom", @@ -234,7 +234,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -283,7 +283,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.996038+00:00", + "inferred_at": "2026-01-09T19:51:14.354409+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JELLE-LOTTUM.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JELLE-LOTTUM.json index d411629038..54a53b16ac 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JELLE-LOTTUM.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JELLE-LOTTUM.json @@ -204,7 +204,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jellevanlottum_20251214T104157Z.json" ], - "modified_at": "2026-01-09T19:18:12.606440+00:00", + "modified_at": "2026-01-09T19:50:54.536192+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jellevanlottum", @@ -236,7 +236,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -277,7 +277,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.606434+00:00", + "inferred_at": "2026-01-09T19:50:54.536186+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JONATHAN-BIKKER.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JONATHAN-BIKKER.json index 43d22d9157..073838c1f4 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JONATHAN-BIKKER.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JONATHAN-BIKKER.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jonathan-bikker-35245721b_20251214T111611Z.json" ], - "modified_at": "2026-01-09T19:18:12.874660+00:00", + "modified_at": "2026-01-09T19:50:49.087517+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jonathan-bikker-35245721b", @@ -134,7 +134,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.874653+00:00", + "inferred_at": "2026-01-09T19:50:49.087511+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JOOSJE-BENNEKOM.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JOOSJE-BENNEKOM.json index d48f87b5c2..7739fdace7 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JOOSJE-BENNEKOM.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JOOSJE-BENNEKOM.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joosje_20251214T111403Z.json" ], - "modified_at": "2026-01-09T19:18:13.146429+00:00", + "modified_at": "2026-01-09T19:50:52.949386+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joosje", @@ -124,7 +124,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.146426+00:00", + "inferred_at": "2026-01-09T19:50:52.949375+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JULIA-MOURIK.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JULIA-MOURIK.json index 8e391f486a..83406df60a 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JULIA-MOURIK.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_JULIA-MOURIK.json @@ -453,7 +453,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/juliavanmourik_20251214T112517Z.json" ], - "modified_at": "2026-01-09T19:18:19.001105+00:00", + "modified_at": "2026-01-09T19:51:34.115676+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "juliavanmourik", @@ -482,7 +482,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -531,7 +531,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:19.001098+00:00", + "inferred_at": "2026-01-09T19:51:34.115670+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_KARIEN-BEERENDS.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_KARIEN-BEERENDS.json index d97c5d4083..59314fc091 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_KARIEN-BEERENDS.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_KARIEN-BEERENDS.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karien-beerends-a7907b234_20251214T111736Z.json" ], - "modified_at": "2026-01-09T19:18:16.381394+00:00", + "modified_at": "2026-01-09T19:51:18.418577+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karien-beerends-a7907b234", @@ -173,7 +173,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.381388+00:00", + "inferred_at": "2026-01-09T19:51:18.418570+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_KARIN-AMATMOEKRIM.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_KARIN-AMATMOEKRIM.json index 7761d67050..9ee4d99eef 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_KARIN-AMATMOEKRIM.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_KARIN-AMATMOEKRIM.json @@ -89,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karin-amatmoekrim-a885305_20251214T113333Z.json" ], - "modified_at": "2026-01-09T19:18:16.553440+00:00", + "modified_at": "2026-01-09T19:51:18.280677+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karin-amatmoekrim-a885305", @@ -127,7 +127,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.553432+00:00", + "inferred_at": "2026-01-09T19:51:18.280670+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_KATRIEN-KEUNE.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_KATRIEN-KEUNE.json index 273a176192..b8a46a25c7 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_KATRIEN-KEUNE.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_KATRIEN-KEUNE.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/katrien-keune-a4124722_20251214T111514Z.json" ], - "modified_at": "2026-01-09T19:18:16.789824+00:00", + "modified_at": "2026-01-09T19:51:22.027132+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "katrien-keune-a4124722", @@ -194,7 +194,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.789820+00:00", + "inferred_at": "2026-01-09T19:51:22.027127+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_LIESBETH-GROENEVELD.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_LIESBETH-GROENEVELD.json index 1a953404dc..f65ca41136 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_LIESBETH-GROENEVELD.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_LIESBETH-GROENEVELD.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/liesbeth-dijksma-groeneveld-89439224_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:14.722678+00:00", + "modified_at": "2026-01-09T19:50:50.822100+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "liesbeth-dijksma-groeneveld-89439224", @@ -208,7 +208,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -249,7 +249,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.722673+00:00", + "inferred_at": "2026-01-09T19:50:50.822094+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_LIESBETH-VEN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_LIESBETH-VEN.json index 496cf73351..f231061807 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_LIESBETH-VEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_LIESBETH-VEN.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/liesbethvanderven_20251214T111516Z.json" ], - "modified_at": "2026-01-09T19:18:16.041260+00:00", + "modified_at": "2026-01-09T19:51:08.762973+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "liesbethvanderven", @@ -175,7 +175,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.041254+00:00", + "inferred_at": "2026-01-09T19:51:08.762958+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MAARTJE-BRATTINGA.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MAARTJE-BRATTINGA.json index 7206f476aa..ccb9ef6cea 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MAARTJE-BRATTINGA.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MAARTJE-BRATTINGA.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mbrattinga_20251214T111332Z.json" ], - "modified_at": "2026-01-09T19:18:12.977812+00:00", + "modified_at": "2026-01-09T19:51:03.348106+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mbrattinga", @@ -191,7 +191,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.977805+00:00", + "inferred_at": "2026-01-09T19:51:03.348098+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARIEKE-KLEIN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARIEKE-KLEIN.json index dc1e503e34..71ab95e678 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARIEKE-KLEIN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARIEKE-KLEIN.json @@ -201,7 +201,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marieke-de-klein-161634_20251214T112108Z.json" ], - "modified_at": "2026-01-09T19:18:13.496584+00:00", + "modified_at": "2026-01-09T19:50:54.540548+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marieke-de-klein-161634", @@ -230,7 +230,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -279,7 +279,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.496578+00:00", + "inferred_at": "2026-01-09T19:50:54.540541+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARIJKE-SMALLEGANGE.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARIJKE-SMALLEGANGE.json index df53d748cd..6978e5d0d4 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARIJKE-SMALLEGANGE.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARIJKE-SMALLEGANGE.json @@ -228,7 +228,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marijke-smallegange-0372b2_20251214T111551Z.json" ], - "modified_at": "2026-01-09T19:18:14.715503+00:00", + "modified_at": "2026-01-09T19:51:03.408342+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marijke-smallegange-0372b2", @@ -257,7 +257,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -306,7 +306,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.715499+00:00", + "inferred_at": "2026-01-09T19:51:03.408336+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARLIEKE-SCHOEN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARLIEKE-SCHOEN.json index e186ffadd8..2fe892a275 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARLIEKE-SCHOEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARLIEKE-SCHOEN.json @@ -195,7 +195,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marlieke-schoen-7866954_20251214T111417Z.json" ], - "modified_at": "2026-01-09T19:18:13.300322+00:00", + "modified_at": "2026-01-09T19:50:53.837732+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marlieke-schoen-7866954", @@ -224,7 +224,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -273,7 +273,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.300318+00:00", + "inferred_at": "2026-01-09T19:50:53.837725+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARLON-BRUINHART.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARLON-BRUINHART.json index fe434a3475..e0b3797060 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARLON-BRUINHART.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARLON-BRUINHART.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marlon-bruinhart-2ab7a05_20251214T113007Z.json" ], - "modified_at": "2026-01-09T19:18:15.578853+00:00", + "modified_at": "2026-01-09T19:51:12.180189+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marlon-bruinhart-2ab7a05", @@ -210,7 +210,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.578849+00:00", + "inferred_at": "2026-01-09T19:51:12.180179+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARTIJN-FORM.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARTIJN-FORM.json index 834eed69bb..d630492435 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARTIJN-FORM.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MARTIJN-FORM.json @@ -209,7 +209,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martijn-form-516a8441_20251214T111909Z.json" ], - "modified_at": "2026-01-09T19:18:16.558406+00:00", + "modified_at": "2026-01-09T19:51:18.737015+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martijn-form-516a8441", @@ -232,7 +232,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -273,7 +273,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.558403+00:00", + "inferred_at": "2026-01-09T19:51:18.737007+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MAYKEN-JONKMAN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MAYKEN-JONKMAN.json index 19e9aecf77..7d0829aa6f 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MAYKEN-JONKMAN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MAYKEN-JONKMAN.json @@ -180,7 +180,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maykenjonkman_20251214T111423Z.json" ], - "modified_at": "2026-01-09T19:18:17.803189+00:00", + "modified_at": "2026-01-09T19:51:10.870425+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maykenjonkman", @@ -212,7 +212,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -253,7 +253,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.803182+00:00", + "inferred_at": "2026-01-09T19:51:10.870419+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MIEKE-SCHAAP.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MIEKE-SCHAAP.json index 390acc5c1b..f3576cb358 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MIEKE-SCHAAP.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MIEKE-SCHAAP.json @@ -182,7 +182,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mieke-schaap-5b654814_20251214T102719Z.json" ], - "modified_at": "2026-01-09T19:18:15.100170+00:00", + "modified_at": "2026-01-09T19:51:13.533321+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mieke-schaap-5b654814", @@ -229,7 +229,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -278,7 +278,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.100163+00:00", + "inferred_at": "2026-01-09T19:51:13.533313+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MILOU-HALBESMA.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MILOU-HALBESMA.json index d003e52a90..37f158618a 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MILOU-HALBESMA.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MILOU-HALBESMA.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/milouhalbesma_20251214T112050Z.json" ], - "modified_at": "2026-01-09T19:18:16.000810+00:00", + "modified_at": "2026-01-09T19:51:15.730324+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "milouhalbesma", @@ -166,7 +166,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.000806+00:00", + "inferred_at": "2026-01-09T19:51:15.730320+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MIRJAM-LINDEN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MIRJAM-LINDEN.json index 3be57b668a..0068bc0317 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MIRJAM-LINDEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MIRJAM-LINDEN.json @@ -209,7 +209,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mirjam-van-der-linden-82526213_20251214T112534Z.json" ], - "modified_at": "2026-01-09T19:18:16.720007+00:00", + "modified_at": "2026-01-09T19:51:21.546158+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mirjam-van-der-linden-82526213", @@ -238,7 +238,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -287,7 +287,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.720001+00:00", + "inferred_at": "2026-01-09T19:51:21.546153+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MIRJAM-SHATANAWI.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MIRJAM-SHATANAWI.json index ef8e058c7d..17d256ce34 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MIRJAM-SHATANAWI.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_MIRJAM-SHATANAWI.json @@ -199,7 +199,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mirjamshatanawi_20251214T103723Z.json" ], - "modified_at": "2026-01-09T19:18:16.505515+00:00", + "modified_at": "2026-01-09T19:51:18.557746+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mirjamshatanawi", @@ -222,7 +222,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -263,7 +263,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.505511+00:00", + "inferred_at": "2026-01-09T19:51:18.557740+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_NATHALIE-HEGELSOM.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_NATHALIE-HEGELSOM.json index e40d38287c..a13c88eddc 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_NATHALIE-HEGELSOM.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_NATHALIE-HEGELSOM.json @@ -187,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nathalievanhegelsom_20251214T111848Z.json" ], - "modified_at": "2026-01-09T19:18:12.893349+00:00", + "modified_at": "2026-01-09T19:50:49.106865+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nathalievanhegelsom", @@ -216,7 +216,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -265,7 +265,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.893340+00:00", + "inferred_at": "2026-01-09T19:50:49.106857+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_NOOR-CROISET.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_NOOR-CROISET.json index f58bec26d5..85fafd5e55 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_NOOR-CROISET.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_NOOR-CROISET.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/noor-croiset-71705b8_20251214T110210Z.json" ], - "modified_at": "2026-01-09T19:18:13.045466+00:00", + "modified_at": "2026-01-09T19:50:54.586433+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "noor-croiset-71705b8", @@ -166,7 +166,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.045460+00:00", + "inferred_at": "2026-01-09T19:50:54.586427+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_PIM-SCHOONDERWOERD.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_PIM-SCHOONDERWOERD.json index ecd01e3721..35778762f0 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_PIM-SCHOONDERWOERD.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_PIM-SCHOONDERWOERD.json @@ -266,7 +266,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pimschoonderwoerd_20251214T102720Z.json" ], - "modified_at": "2026-01-09T19:18:15.544718+00:00", + "modified_at": "2026-01-09T19:51:12.017475+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pimschoonderwoerd", @@ -295,7 +295,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -344,7 +344,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.544712+00:00", + "inferred_at": "2026-01-09T19:51:12.017430+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_RENSKE-BRINKMAN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_RENSKE-BRINKMAN.json index 0e7e50c6b5..02304c1262 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_RENSKE-BRINKMAN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_RENSKE-BRINKMAN.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/renske-brinkman-28832b11_20251214T110125Z.json" ], - "modified_at": "2026-01-09T19:18:13.434901+00:00", + "modified_at": "2026-01-09T19:50:54.183007+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "renske-brinkman-28832b11", @@ -175,7 +175,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.434897+00:00", + "inferred_at": "2026-01-09T19:50:54.182990+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_RIK-HOEKSTRA.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_RIK-HOEKSTRA.json similarity index 69% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_RIK-HOEKSTRA.json rename to data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_RIK-HOEKSTRA.json index 4ef6a7db8a..ace3e04c26 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_RIK-HOEKSTRA.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_RIK-HOEKSTRA.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_RIK-HOEKSTRA", + "ppid": "ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_RIK-HOEKSTRA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "197X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "RIK", "HOEKSTRA" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Rik Hoekstra", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -151,63 +157,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rikhoekstra_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:56.456248+00:00", + "modified_at": "2026-01-09T19:50:49.145841+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rikhoekstra", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:56.456235+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RIK-HOEKSTRA", @@ -217,6 +170,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_RIK-HOEKSTRA", + "new_ppid": "ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_RIK-HOEKSTRA", + "changed_at": "2026-01-09T19:43:39.321439+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1977 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Huygens Institute for History and Culture of the Netherlands (KNAW)", + "title": "Digital Historian / Senior Researcher", + "date_range": "2000" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2000 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2000 - 23 = 1977", + "result": "Estimated birth year: 1977", + "range": "1972-1982 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1972, + 1982 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:50:49.145835+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SANDRA-VRIES.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SANDRA-VRIES.json index e865334532..64997d3de5 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SANDRA-VRIES.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SANDRA-VRIES.json @@ -242,7 +242,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sandradevriesprojectmanagement_20251214T110149Z.json" ], - "modified_at": "2026-01-09T19:18:15.237289+00:00", + "modified_at": "2026-01-09T19:51:07.272858+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sandradevriesprojectmanagement", @@ -271,7 +271,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -320,7 +320,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.237283+00:00", + "inferred_at": "2026-01-09T19:51:07.272853+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SASKIA-SCHELTJENS.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SASKIA-SCHELTJENS.json index 44f351e519..e853296132 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SASKIA-SCHELTJENS.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SASKIA-SCHELTJENS.json @@ -281,7 +281,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saskiascheltjens_20251214T111309Z.json" ], - "modified_at": "2026-01-09T19:18:14.871589+00:00", + "modified_at": "2026-01-09T19:51:05.258840+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saskiascheltjens", @@ -304,7 +304,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -345,7 +345,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.871585+00:00", + "inferred_at": "2026-01-09T19:51:05.258821+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SHAN-SWART.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SHAN-SWART.json index 049e2279d7..26ee0d6577 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SHAN-SWART.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SHAN-SWART.json @@ -183,7 +183,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/shanswart_20251214T113318Z.json" ], - "modified_at": "2026-01-09T19:18:11.595828+00:00", + "modified_at": "2026-01-09T19:51:06.736035+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "shanswart", @@ -221,7 +221,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -270,7 +270,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.595820+00:00", + "inferred_at": "2026-01-09T19:51:06.736029+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SUZAN-MEIJER.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SUZAN-MEIJER.json index 963a0c170f..7899ae65b4 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SUZAN-MEIJER.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SUZAN-MEIJER.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/suzan-meijer-799666b_20251214T111455Z.json" ], - "modified_at": "2026-01-09T19:18:13.711103+00:00", + "modified_at": "2026-01-09T19:50:55.890220+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "suzan-meijer-799666b", @@ -128,7 +128,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.711100+00:00", + "inferred_at": "2026-01-09T19:50:55.890213+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SUZANNE-LEEUWEN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SUZANNE-LEEUWEN.json index 965344b47c..291a6034ae 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SUZANNE-LEEUWEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_SUZANNE-LEEUWEN.json @@ -167,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/suzanneleeuwen_20251214T111509Z.json" ], - "modified_at": "2026-01-09T19:18:17.047470+00:00", + "modified_at": "2026-01-09T19:50:57.667096+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "suzanneleeuwen", @@ -205,7 +205,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -254,7 +254,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.047464+00:00", + "inferred_at": "2026-01-09T19:50:57.667087+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_TESSA-HAAN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_TESSA-HAAN.json index 1432286d63..cdddeb07aa 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_TESSA-HAAN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_TESSA-HAAN.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tessadehaan_20251214T103255Z.json" ], - "modified_at": "2026-01-09T19:18:15.826674+00:00", + "modified_at": "2026-01-09T19:50:51.057684+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tessadehaan", @@ -179,7 +179,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.826668+00:00", + "inferred_at": "2026-01-09T19:50:51.057679+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_TIJMEN-KWANT.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_TIJMEN-KWANT.json index b4f538d325..a5fed99d06 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_TIJMEN-KWANT.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_TIJMEN-KWANT.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tijmen-kwant-9061045_20251214T113341Z.json" ], - "modified_at": "2026-01-09T19:18:11.194756+00:00", + "modified_at": "2026-01-09T19:50:46.682672+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tijmen-kwant-9061045", @@ -178,7 +178,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.194745+00:00", + "inferred_at": "2026-01-09T19:50:46.682666+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_VERA-BLOK.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_VERA-BLOK.json index 5fbe19b6de..f19bfc8441 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_VERA-BLOK.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_VERA-BLOK.json @@ -173,7 +173,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vera-blok_20251214T110104Z.json" ], - "modified_at": "2026-01-09T19:18:17.637354+00:00", + "modified_at": "2026-01-09T19:51:28.539265+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vera-blok", @@ -196,7 +196,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -237,7 +237,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.637347+00:00", + "inferred_at": "2026-01-09T19:51:28.539261+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_VYACHESLAV-TYKHONOV.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_VYACHESLAV-TYKHONOV.json index 30d10bffe3..30b6f044b4 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_VYACHESLAV-TYKHONOV.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-AMS_XXXX_VYACHESLAV-TYKHONOV.json @@ -263,7 +263,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vyacheslavtikhonov_20251214T110457Z.json" ], - "modified_at": "2026-01-09T19:18:14.252343+00:00", + "modified_at": "2026-01-09T19:50:59.300971+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vyacheslavtikhonov", @@ -292,7 +292,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -341,7 +341,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.252338+00:00", + "inferred_at": "2026-01-09T19:50:59.300959+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-ASS_XXXX_SANNE-HOFF.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-ASS_XXXX_SANNE-HOFF.json index 90c972c127..c5ecdd95a3 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-ASS_XXXX_SANNE-HOFF.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-ASS_XXXX_SANNE-HOFF.json @@ -211,7 +211,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sanne-mulder-van-t-hoff-96b58aa3_20251214T111419Z.json" ], - "modified_at": "2026-01-09T19:18:14.626186+00:00", + "modified_at": "2026-01-09T19:51:03.095102+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sanne-mulder-van-t-hoff-96b58aa3", @@ -240,7 +240,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -289,7 +289,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.626179+00:00", + "inferred_at": "2026-01-09T19:51:03.095096+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-BUS_XXXX_EDO-RIGHINI.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-BUS_XXXX_EDO-RIGHINI.json index fff9a177bb..c7f7607ef5 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-BUS_XXXX_EDO-RIGHINI.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-BUS_XXXX_EDO-RIGHINI.json @@ -358,7 +358,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/edo-righini-7b303129_20251214T112526Z.json" ], - "modified_at": "2026-01-09T19:18:14.025393+00:00", + "modified_at": "2026-01-09T19:50:58.351979+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "edo-righini-7b303129", @@ -381,7 +381,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -422,7 +422,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.025390+00:00", + "inferred_at": "2026-01-09T19:50:58.351972+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_FLEUR-SMITH.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_FLEUR-SMITH.json index a357c55813..2d7259499b 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_FLEUR-SMITH.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_FLEUR-SMITH.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fleur-howes-smith-23b4b7b_20251214T111258Z.json" ], - "modified_at": "2026-01-09T19:18:15.974293+00:00", + "modified_at": "2026-01-09T19:51:28.837058+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fleur-howes-smith-23b4b7b", @@ -164,7 +164,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.974284+00:00", + "inferred_at": "2026-01-09T19:51:28.837053+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_FRANK-SMEETS.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_FRANK-SMEETS.json index feb688f966..9a186204be 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_FRANK-SMEETS.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_FRANK-SMEETS.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frank-smeets-088284375_20251214T112857Z.json" ], - "modified_at": "2026-01-09T19:18:14.947171+00:00", + "modified_at": "2026-01-09T19:51:05.520940+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frank-smeets-088284375", @@ -117,7 +117,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -166,7 +166,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.947165+00:00", + "inferred_at": "2026-01-09T19:51:05.520930+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_PATRIS-BOXEL.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_PATRIS-BOXEL.json index a6ae5fe521..fa4787680c 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_PATRIS-BOXEL.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_PATRIS-BOXEL.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/patrisvanboxel_20251214T110507Z.json" ], - "modified_at": "2026-01-09T19:18:14.171664+00:00", + "modified_at": "2026-01-09T19:50:58.752823+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "patrisvanboxel", @@ -187,7 +187,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.171656+00:00", + "inferred_at": "2026-01-09T19:50:58.752795+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_WILLEKE-GROOT.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_WILLEKE-GROOT.json index 1eae972b36..cd984aacbf 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_WILLEKE-GROOT.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_WILLEKE-GROOT.json @@ -270,7 +270,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/willeke-de-groot-10982b_20251214T102723Z.json" ], - "modified_at": "2026-01-09T19:18:11.469061+00:00", + "modified_at": "2026-01-09T19:50:46.988928+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "willeke-de-groot-10982b", @@ -299,7 +299,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -348,7 +348,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.469054+00:00", + "inferred_at": "2026-01-09T19:50:46.988916+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_YVETTE-KOPIJN.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_YVETTE-KOPIJN.json index efa4e3fad3..eb22af6e17 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_YVETTE-KOPIJN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-HAA_XXXX_YVETTE-KOPIJN.json @@ -259,7 +259,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yvette-kopijn-phd-4b65498_20251214T103732Z.json" ], - "modified_at": "2026-01-09T19:18:11.454781+00:00", + "modified_at": "2026-01-09T19:50:46.918777+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yvette-kopijn-phd-4b65498", @@ -288,7 +288,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -337,7 +337,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.454775+00:00", + "inferred_at": "2026-01-09T19:50:46.918004+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-HEI_XXXX_LOEK-ZOON.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-HEI_XXXX_LOEK-ZOON.json index 0f3604eb28..89668cb83b 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-HEI_XXXX_LOEK-ZOON.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-HEI_XXXX_LOEK-ZOON.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/loek-zoon-47a425230_20251214T113209Z.json" ], - "modified_at": "2026-01-09T19:18:17.546739+00:00", + "modified_at": "2026-01-09T19:50:51.069241+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "loek-zoon-47a425230", @@ -136,7 +136,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.546731+00:00", + "inferred_at": "2026-01-09T19:50:51.069234+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-HIL_XXXX_MARIEKE-MSC.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-HIL_XXXX_MARIEKE-MSC.json index 713762b0ca..d3e94dad23 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-HIL_XXXX_MARIEKE-MSC.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-HIL_XXXX_MARIEKE-MSC.json @@ -184,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marieke-van-der-ros-msc-63447b22_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:15.229901+00:00", + "modified_at": "2026-01-09T19:51:07.167448+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marieke-van-der-ros-msc-63447b22", @@ -222,7 +222,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -271,7 +271,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.229897+00:00", + "inferred_at": "2026-01-09T19:51:07.167434+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-PUR_XXXX_DIRK-STAM.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-PUR_XXXX_DIRK-STAM.json index 5e1438322b..dcef687ddf 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-PUR_XXXX_DIRK-STAM.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-PUR_XXXX_DIRK-STAM.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dirk-stam-85902549_20251214T111703Z.json" ], - "modified_at": "2026-01-09T19:18:16.280589+00:00", + "modified_at": "2026-01-09T19:51:00.099742+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dirk-stam-85902549", @@ -165,7 +165,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.280580+00:00", + "inferred_at": "2026-01-09T19:51:00.099735+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-NH-ZAA_XXXX_BAYRAM-GOKCE.json b/data/person/ID_NL-NH-AMS_197X_NL-NH-ZAA_XXXX_BAYRAM-GOKCE.json index eeb1849cea..255cb8c378 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-NH-ZAA_XXXX_BAYRAM-GOKCE.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-NH-ZAA_XXXX_BAYRAM-GOKCE.json @@ -157,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bayram-gokce-8b6678175_20251214T110127Z.json" ], - "modified_at": "2026-01-09T19:18:18.176727+00:00", + "modified_at": "2026-01-09T19:51:29.005061+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bayram-gokce-8b6678175", @@ -186,7 +186,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -235,7 +235,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.176720+00:00", + "inferred_at": "2026-01-09T19:51:29.005055+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-OV-DEV_XXXX_GIJS-BOON.json b/data/person/ID_NL-NH-AMS_197X_NL-OV-DEV_XXXX_GIJS-BOON.json index c520d0183f..b62b71ca75 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-OV-DEV_XXXX_GIJS-BOON.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-OV-DEV_XXXX_GIJS-BOON.json @@ -208,7 +208,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gijs-boon-89b3927_20251214T104129Z.json" ], - "modified_at": "2026-01-09T19:18:13.423770+00:00", + "modified_at": "2026-01-09T19:51:34.142492+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gijs-boon-89b3927", @@ -240,7 +240,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -281,7 +281,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.423765+00:00", + "inferred_at": "2026-01-09T19:51:34.142488+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-UT-BAA_XXXX_MIRJAM-SNEEUWLOPER.json b/data/person/ID_NL-NH-AMS_197X_NL-UT-BAA_XXXX_MIRJAM-SNEEUWLOPER.json index 67b56a904e..744129f47f 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-UT-BAA_XXXX_MIRJAM-SNEEUWLOPER.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-UT-BAA_XXXX_MIRJAM-SNEEUWLOPER.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mirjamsneeuwloper_20251214T112440Z.json" ], - "modified_at": "2026-01-09T19:18:13.842990+00:00", + "modified_at": "2026-01-09T19:50:56.690036+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mirjamsneeuwloper", @@ -180,7 +180,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.842987+00:00", + "inferred_at": "2026-01-09T19:50:56.690027+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-UT-UTR_XXXX_STELLA-BEMMELEN.json b/data/person/ID_NL-NH-AMS_197X_NL-UT-UTR_XXXX_STELLA-BEMMELEN.json index fe0e89d718..64d1307f8d 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-UT-UTR_XXXX_STELLA-BEMMELEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-UT-UTR_XXXX_STELLA-BEMMELEN.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stella-van-bemmelen-050b6b6_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:16.126818+00:00", + "modified_at": "2026-01-09T19:51:14.351864+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stella-van-bemmelen-050b6b6", @@ -180,7 +180,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.126813+00:00", + "inferred_at": "2026-01-09T19:51:14.351858+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-UT-WBD_XXXX_MARIANNE-RENSE.json b/data/person/ID_NL-NH-AMS_197X_NL-UT-WBD_XXXX_MARIANNE-RENSE.json index b3722f68c5..6766e10714 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-UT-WBD_XXXX_MARIANNE-RENSE.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-UT-WBD_XXXX_MARIANNE-RENSE.json @@ -254,7 +254,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marianne-rense-142b811b_20251214T110429Z.json" ], - "modified_at": "2026-01-09T19:18:11.447658+00:00", + "modified_at": "2026-01-09T19:50:50.801066+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marianne-rense-142b811b", @@ -292,7 +292,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -341,7 +341,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.447649+00:00", + "inferred_at": "2026-01-09T19:50:50.801025+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-DOR_XXXX_ANNEKE-HEIJDEN.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-DOR_XXXX_ANNEKE-HEIJDEN.json index af529b5790..b657c2061e 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-DOR_XXXX_ANNEKE-HEIJDEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-DOR_XXXX_ANNEKE-HEIJDEN.json @@ -182,7 +182,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anneke-van-der-heijden-7871a125_20251214T112157Z.json" ], - "modified_at": "2026-01-09T19:18:14.721559+00:00", + "modified_at": "2026-01-09T19:51:29.268208+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anneke-van-der-heijden-7871a125", @@ -220,7 +220,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -269,7 +269,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.721553+00:00", + "inferred_at": "2026-01-09T19:51:29.268203+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-LEI_XXXX_OLGA-CRAPELS.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-LEI_XXXX_OLGA-CRAPELS.json index 290dc998e9..b4f8f2a59d 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-LEI_XXXX_OLGA-CRAPELS.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-LEI_XXXX_OLGA-CRAPELS.json @@ -196,7 +196,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/olgacrapels_20251214T113412Z.json" ], - "modified_at": "2026-01-09T19:18:13.826235+00:00", + "modified_at": "2026-01-09T19:50:56.648249+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "olgacrapels", @@ -225,7 +225,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -274,7 +274,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.826230+00:00", + "inferred_at": "2026-01-09T19:50:56.648236+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-ROT_XXXX_CATELIJNE-MIDDELKOOP.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-ROT_XXXX_CATELIJNE-MIDDELKOOP.json index 8d8b9242f8..7deda7fa5b 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-ROT_XXXX_CATELIJNE-MIDDELKOOP.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-ROT_XXXX_CATELIJNE-MIDDELKOOP.json @@ -279,7 +279,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/catelijne-van-middelkoop-8a15aa57_20251214T112537Z.json" ], - "modified_at": "2026-01-09T19:18:15.527352+00:00", + "modified_at": "2026-01-09T19:51:22.032439+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "catelijne-van-middelkoop-8a15aa57", @@ -317,7 +317,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -366,7 +366,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.527345+00:00", + "inferred_at": "2026-01-09T19:51:22.032431+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ANNELIES-NISPEN.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_ANNELIES-NISPEN.json similarity index 83% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ANNELIES-NISPEN.json rename to data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_ANNELIES-NISPEN.json index c540712a39..e0a26cf842 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ANNELIES-NISPEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_ANNELIES-NISPEN.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ANNELIES-NISPEN", + "ppid": "ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_ANNELIES-NISPEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "197X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "ANNELIES", "NISPEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Annelies van Nispen", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -328,63 +334,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annelies-van-nispen-37b91225_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:04.253744+00:00", + "modified_at": "2026-01-09T19:51:06.732884+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annelies-van-nispen-37b91225", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, Netherlands", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:43:04.253738+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNELIES-NISPEN", @@ -394,6 +347,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ANNELIES-NISPEN", + "new_ppid": "ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_ANNELIES-NISPEN", + "changed_at": "2026-01-09T19:43:38.482064+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1974 is in 197X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "NHDA (Netherlands Historical Data Archive)", + "title": "Information Specialist", + "date_range": "1997 - 1999" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1997 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1997 - 23 = 1974", + "result": "Estimated birth year: 1974", + "range": "1969-1979 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1969, + 1979 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:51:06.732879+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_ARNOLD-OPPELAAR.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_ARNOLD-OPPELAAR.json index 703caf65fe..0e69fee38a 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_ARNOLD-OPPELAAR.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_ARNOLD-OPPELAAR.json @@ -81,7 +81,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arnold-oppelaar-b2139a23_20251214T112853Z.json" ], - "modified_at": "2026-01-09T19:18:17.695062+00:00", + "modified_at": "2026-01-09T19:51:28.550694+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arnold-oppelaar-b2139a23", @@ -110,7 +110,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +159,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.695056+00:00", + "inferred_at": "2026-01-09T19:51:28.550688+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_CHARLENE-DONALD.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_CHARLENE-DONALD.json index fea700a394..ccaadefe5d 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_CHARLENE-DONALD.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_CHARLENE-DONALD.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/charlene-mac-donald-6791a516_20251214T112907Z.json" ], - "modified_at": "2026-01-09T19:18:13.509991+00:00", + "modified_at": "2026-01-09T19:50:54.553889+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "charlene-mac-donald-6791a516", @@ -131,7 +131,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.509985+00:00", + "inferred_at": "2026-01-09T19:50:54.553882+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_CHRISTIAN-LINDHOUT.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_CHRISTIAN-LINDHOUT.json index e5bf0bff07..f1a6093d13 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_CHRISTIAN-LINDHOUT.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_CHRISTIAN-LINDHOUT.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/christian-lindhout-36225839_20251214T112803Z.json" ], - "modified_at": "2026-01-09T19:18:15.771185+00:00", + "modified_at": "2026-01-09T19:51:22.516172+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "christian-lindhout-36225839", @@ -162,7 +162,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.771179+00:00", + "inferred_at": "2026-01-09T19:51:22.516168+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_DORINE-NORREN.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_DORINE-NORREN.json index 4c29384c94..bc752e2874 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_DORINE-NORREN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_DORINE-NORREN.json @@ -217,7 +217,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dorine-van-norren-6950b27_20251214T102803Z.json" ], - "modified_at": "2026-01-09T19:18:15.621052+00:00", + "modified_at": "2026-01-09T19:51:12.720017+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dorine-van-norren-6950b27", @@ -246,7 +246,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -295,7 +295,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.621048+00:00", + "inferred_at": "2026-01-09T19:51:12.720012+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_JEROEN-VANDOMMELE.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_JEROEN-VANDOMMELE.json index b68cac4b4e..4e79b1be89 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_JEROEN-VANDOMMELE.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_JEROEN-VANDOMMELE.json @@ -199,7 +199,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeroen-vandommele-2799188_20251214T113221Z.json" ], - "modified_at": "2026-01-09T19:18:16.515730+00:00", + "modified_at": "2026-01-09T19:50:55.984927+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeroen-vandommele-2799188", @@ -231,7 +231,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -272,7 +272,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.515721+00:00", + "inferred_at": "2026-01-09T19:50:55.984918+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_LINDA-REIJNHOUDT.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_LINDA-REIJNHOUDT.json index 30f4172cad..650bc27287 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_LINDA-REIJNHOUDT.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_LINDA-REIJNHOUDT.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/linda-reijnhoudt-34597242_20251214T110516Z.json" ], - "modified_at": "2026-01-09T19:18:13.692361+00:00", + "modified_at": "2026-01-09T19:51:21.927686+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "linda-reijnhoudt-34597242", @@ -128,7 +128,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.692355+00:00", + "inferred_at": "2026-01-09T19:51:21.927682+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_MARCIA-VALKENHOFF.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_MARCIA-VALKENHOFF.json index 00ef1f6f6b..28ab05bfd4 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_MARCIA-VALKENHOFF.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_MARCIA-VALKENHOFF.json @@ -234,7 +234,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marcia-valkenhoff-45a458b9_20251214T102852Z.json" ], - "modified_at": "2026-01-09T19:18:12.730204+00:00", + "modified_at": "2026-01-09T19:50:48.670197+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marcia-valkenhoff-45a458b9", @@ -263,7 +263,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -312,7 +312,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.730197+00:00", + "inferred_at": "2026-01-09T19:50:48.670191+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_MICK-POUWELS.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_MICK-POUWELS.json index d63b07fb15..56c8a3243e 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_MICK-POUWELS.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_MICK-POUWELS.json @@ -163,7 +163,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mpouwels_20251214T113421Z.json" ], - "modified_at": "2026-01-09T19:18:14.844188+00:00", + "modified_at": "2026-01-09T19:51:05.109339+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mpouwels", @@ -192,7 +192,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.844184+00:00", + "inferred_at": "2026-01-09T19:51:05.109329+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_MINE-TEMURHAN.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_MINE-TEMURHAN.json index 1764753bb0..58abf9c982 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_MINE-TEMURHAN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_MINE-TEMURHAN.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/minetemurhan_20251214T103003Z.json" ], - "modified_at": "2026-01-09T19:18:16.502276+00:00", + "modified_at": "2026-01-09T19:51:18.551341+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "minetemurhan", @@ -198,7 +198,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.502272+00:00", + "inferred_at": "2026-01-09T19:51:18.551335+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_PETER-KROESKAMP.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_PETER-KROESKAMP.json index c04b50455e..7d97380b5d 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_PETER-KROESKAMP.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_PETER-KROESKAMP.json @@ -198,7 +198,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/peter-kroeskamp-6165009_20251214T103341Z.json" ], - "modified_at": "2026-01-09T19:18:17.504936+00:00", + "modified_at": "2026-01-09T19:51:28.199883+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "peter-kroeskamp-6165009", @@ -227,7 +227,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -276,7 +276,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.504931+00:00", + "inferred_at": "2026-01-09T19:51:28.199880+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_RICK-KAMPEN.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_RICK-KAMPEN.json index 532ef239a8..048e2b41ce 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_RICK-KAMPEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_RICK-KAMPEN.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rick-van-kampen-830b623b_20251214T113427Z.json" ], - "modified_at": "2026-01-09T19:18:16.137747+00:00", + "modified_at": "2026-01-09T19:51:17.596888+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rick-van-kampen-830b623b", @@ -174,7 +174,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.137743+00:00", + "inferred_at": "2026-01-09T19:51:17.596882+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_NL-ZH-VOO_XXXX_ILSE-REIJDEN.json b/data/person/ID_NL-NH-AMS_197X_NL-ZH-VOO_XXXX_ILSE-REIJDEN.json index 57fc3b7a5a..348bd850c0 100644 --- a/data/person/ID_NL-NH-AMS_197X_NL-ZH-VOO_XXXX_ILSE-REIJDEN.json +++ b/data/person/ID_NL-NH-AMS_197X_NL-ZH-VOO_XXXX_ILSE-REIJDEN.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ilse-van-der-reijden-247395230_20251214T112950Z.json" ], - "modified_at": "2026-01-09T19:18:14.840404+00:00", + "modified_at": "2026-01-09T19:51:04.977391+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ilse-van-der-reijden-247395230", @@ -131,7 +131,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.840399+00:00", + "inferred_at": "2026-01-09T19:51:04.977364+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AXEL-RUGER.json b/data/person/ID_NL-NH-AMS_197X_US-NY-NYC_XXXX_AXEL-RUGER.json similarity index 62% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AXEL-RUGER.json rename to data/person/ID_NL-NH-AMS_197X_US-NY-NYC_XXXX_AXEL-RUGER.json index 062ef004f5..400914a41b 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AXEL-RUGER.json +++ b/data/person/ID_NL-NH-AMS_197X_US-NY-NYC_XXXX_AXEL-RUGER.json @@ -1,16 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AXEL-RUGER", + "ppid": "ID_NL-NH-AMS_197X_US-NY-NYC_XXXX_AXEL-RUGER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "first_location": "NL-NH-AMS", + "first_date": "197X", + "last_location": "US-NY-NYC", "last_date": "XXXX", "name_tokens": [ "AXEL", "RUGER" - ] + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Axel Rüger", @@ -24,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -210,7 +217,149 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/axel-r%C3%BCger-8b86188_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:21.923884+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "axel-rüger-8b86188" + "linkedin_slug": "axel-rüger-8b86188", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AXEL-RUGER", + "new_ppid": "ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_AXEL-RUGER", + "changed_at": "2026-01-09T19:43:41.641489+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] + }, + { + "previous_ppid": "ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_AXEL-RUGER", + "new_ppid": "ID_NL-NH-AMS_197X_US-NY-NYC_XXXX_AXEL-RUGER", + "changed_at": "2026-01-09T19:51:21.923881+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1976 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "The National Gallery", + "title": "Curator of Dutch Paintings 1600-1800", + "date_range": "1999 - 2006" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1999 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1999 - 23 = 1976", + "result": "Estimated birth year: 1976", + "range": "1971-1981 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1971, + 1981 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:21.822037+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "New York City", + "formatted": "US-NY-NYC", + "country_code": "US", + "region_code": "NY", + "settlement_code": "NYC", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "New York, New York, United States" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "New York, New York, United States", + "result": { + "geonames_id": 5128581, + "geonames_name": "New York City", + "admin1_code": "NY", + "admin1_name": "New York", + "feature_code": "PPL", + "latitude": 40.71427, + "longitude": -74.00597 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-NY-NYC" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 5128581, + "geonames_name": "New York City", + "admin1_code": "NY", + "admin1_name": "New York", + "feature_code": "PPL", + "latitude": 40.71427, + "longitude": -74.00597 + }, + "inferred_at": "2026-01-09T19:51:21.923862+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_ABEL-BANUS.json b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_ABEL-BANUS.json index 6daba42afa..bf90dbb098 100644 --- a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_ABEL-BANUS.json +++ b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_ABEL-BANUS.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/abel-banus-94aa6566_20251214T112419Z.json" ], - "modified_at": "2026-01-09T19:18:11.910896+00:00", + "modified_at": "2026-01-09T19:51:14.435398+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "abel-banus-94aa6566", @@ -136,7 +136,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.907340+00:00", + "inferred_at": "2026-01-09T19:51:14.433221+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_ANN-BLOKLAND.json b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_ANN-BLOKLAND.json index 5c4c5c8281..72a7104626 100644 --- a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_ANN-BLOKLAND.json +++ b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_ANN-BLOKLAND.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ann-blokland-52410348_20251214T110318Z.json" ], - "modified_at": "2026-01-09T19:18:13.055798+00:00", + "modified_at": "2026-01-09T19:50:54.588934+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ann-blokland-52410348", @@ -137,7 +137,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.053918+00:00", + "inferred_at": "2026-01-09T19:50:54.586843+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_BERTHIL-HULSEBOS.json b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_BERTHIL-HULSEBOS.json index 7ab4af935e..ebe21ad048 100644 --- a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_BERTHIL-HULSEBOS.json +++ b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_BERTHIL-HULSEBOS.json @@ -157,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/berthil-hulsebos-762a545_20251214T112928Z.json" ], - "modified_at": "2026-01-09T19:18:13.444051+00:00", + "modified_at": "2026-01-09T19:50:54.326622+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "berthil-hulsebos-762a545", @@ -179,7 +179,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.442183+00:00", + "inferred_at": "2026-01-09T19:50:54.324348+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_CINDY-S.json b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_CINDY-S.json index d005aac859..54b0f7bdd8 100644 --- a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_CINDY-S.json +++ b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_CINDY-S.json @@ -186,7 +186,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cindystijger_20251214T110006Z.json" ], - "modified_at": "2026-01-09T19:18:14.597960+00:00", + "modified_at": "2026-01-09T19:51:02.691210+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cindystijger", @@ -214,7 +214,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -263,7 +263,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.596022+00:00", + "inferred_at": "2026-01-09T19:51:02.688841+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_ERIK-TIGELAAR.json b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_ERIK-TIGELAAR.json index bcc866edf0..749d48b93a 100644 --- a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_ERIK-TIGELAAR.json +++ b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_ERIK-TIGELAAR.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eriktigelaar_20251214T110524Z.json" ], - "modified_at": "2026-01-09T19:18:15.126776+00:00", + "modified_at": "2026-01-09T19:51:18.556974+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eriktigelaar", @@ -184,7 +184,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.123645+00:00", + "inferred_at": "2026-01-09T19:51:18.553548+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_LIESJE-KLOMP.json b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_LIESJE-KLOMP.json index 0bfd178422..f2967748c5 100644 --- a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_LIESJE-KLOMP.json +++ b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_LIESJE-KLOMP.json @@ -185,7 +185,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/liesjeklomp_20251214T103004Z.json" ], - "modified_at": "2026-01-09T19:18:16.990987+00:00", + "modified_at": "2026-01-09T19:51:29.488296+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "liesjeklomp", @@ -222,7 +222,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -271,7 +271,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.988530+00:00", + "inferred_at": "2026-01-09T19:51:29.484721+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_MAARTEN-RADEMAKER.json b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_MAARTEN-RADEMAKER.json index 61b56f536a..2f0f9d4cd0 100644 --- a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_MAARTEN-RADEMAKER.json +++ b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_MAARTEN-RADEMAKER.json @@ -222,7 +222,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maartenrademaker_20251214T110535Z.json" ], - "modified_at": "2026-01-09T19:18:13.049509+00:00", + "modified_at": "2026-01-09T19:50:50.825929+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maartenrademaker", @@ -250,7 +250,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -299,7 +299,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.049502+00:00", + "inferred_at": "2026-01-09T19:50:50.825918+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_NICOLINE-WIJNJA.json b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_NICOLINE-WIJNJA.json index 2b8528122e..6a2e4c407f 100644 --- a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_NICOLINE-WIJNJA.json +++ b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_NICOLINE-WIJNJA.json @@ -195,7 +195,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicoline-wijnja-454288a_20251214T113202Z.json" ], - "modified_at": "2026-01-09T19:18:13.659918+00:00", + "modified_at": "2026-01-09T19:50:55.397892+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicoline-wijnja-454288a", @@ -217,7 +217,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.658004+00:00", + "inferred_at": "2026-01-09T19:50:55.394875+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_NINA-DUGGEN.json b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_NINA-DUGGEN.json index 05bb27b2fa..69f5ac9962 100644 --- a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_NINA-DUGGEN.json +++ b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_NINA-DUGGEN.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nina-duggen-3819b410_20251214T112417Z.json" ], - "modified_at": "2026-01-09T19:18:15.927102+00:00", + "modified_at": "2026-01-09T19:51:15.178146+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nina-duggen-3819b410", @@ -170,7 +170,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.925183+00:00", + "inferred_at": "2026-01-09T19:51:15.176211+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_OSKAR-HEK.json b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_OSKAR-HEK.json index 9c73e6dd25..2e6473df98 100644 --- a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_OSKAR-HEK.json +++ b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_OSKAR-HEK.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/oskarhek_20251214T112903Z.json" ], - "modified_at": "2026-01-09T19:18:16.945688+00:00", + "modified_at": "2026-01-09T19:51:22.796640+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "oskarhek", @@ -183,7 +183,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.937890+00:00", + "inferred_at": "2026-01-09T19:51:22.790310+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_SASKIA-MEY.json b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_SASKIA-MEY.json index 5a9ead2425..d6cc3a62ee 100644 --- a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_SASKIA-MEY.json +++ b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_SASKIA-MEY.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saskia-mey_20251214T110218Z.json" ], - "modified_at": "2026-01-09T19:18:18.381586+00:00", + "modified_at": "2026-01-09T19:51:29.299596+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saskia-mey", @@ -163,7 +163,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.379670+00:00", + "inferred_at": "2026-01-09T19:51:29.297808+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_THEO-SANDE.json b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_THEO-SANDE.json index ff988b7929..783767a5ef 100644 --- a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_THEO-SANDE.json +++ b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_THEO-SANDE.json @@ -167,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/theo-van-de-sande-a6776112_20251214T104117Z.json" ], - "modified_at": "2026-01-09T19:18:14.235591+00:00", + "modified_at": "2026-01-09T19:51:31.808908+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "theo-van-de-sande-a6776112", @@ -203,7 +203,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.232450+00:00", + "inferred_at": "2026-01-09T19:51:31.806958+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_WOUTER-JURGENS.json b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_WOUTER-JURGENS.json index 667a12f4af..a9b5452c69 100644 --- a/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_WOUTER-JURGENS.json +++ b/data/person/ID_NL-NH-AMS_197X_XX-XX-XXX_XXXX_WOUTER-JURGENS.json @@ -173,7 +173,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wouter-jurgens-46099a9_20251214T103151Z.json" ], - "modified_at": "2026-01-09T19:18:14.242196+00:00", + "modified_at": "2026-01-09T19:50:58.955609+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wouter-jurgens-46099a9", @@ -201,7 +201,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -250,7 +250,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.238277+00:00", + "inferred_at": "2026-01-09T19:50:58.948605+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_BE-BR-BRU_XXXX_MARGAUX-ROBERTILINTERMANS.json b/data/person/ID_NL-NH-AMS_198X_BE-BR-BRU_XXXX_MARGAUX-ROBERTILINTERMANS.json index f53f773d39..f4a9662699 100644 --- a/data/person/ID_NL-NH-AMS_198X_BE-BR-BRU_XXXX_MARGAUX-ROBERTILINTERMANS.json +++ b/data/person/ID_NL-NH-AMS_198X_BE-BR-BRU_XXXX_MARGAUX-ROBERTILINTERMANS.json @@ -217,7 +217,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/margaux-roberti-lintermans-059a28145_20251214T102654Z.json" ], - "modified_at": "2026-01-09T19:18:12.345178+00:00", + "modified_at": "2026-01-09T19:51:26.708333+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "margaux-roberti-lintermans-059a28145", @@ -255,7 +255,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -304,7 +304,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.345162+00:00", + "inferred_at": "2026-01-09T19:51:26.708329+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_BE-VL-ANT_XXXX_SOUFIANE-AMRANI.json b/data/person/ID_NL-NH-AMS_198X_BE-VL-ANT_XXXX_SOUFIANE-AMRANI.json index 91e1050133..dd660d7e51 100644 --- a/data/person/ID_NL-NH-AMS_198X_BE-VL-ANT_XXXX_SOUFIANE-AMRANI.json +++ b/data/person/ID_NL-NH-AMS_198X_BE-VL-ANT_XXXX_SOUFIANE-AMRANI.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/soufiane-amrani-a79276203_20251214T110316Z.json" ], - "modified_at": "2026-01-09T19:18:15.108236+00:00", + "modified_at": "2026-01-09T19:51:06.732254+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "soufiane-amrani-a79276203", @@ -190,7 +190,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.108228+00:00", + "inferred_at": "2026-01-09T19:51:06.732250+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-DR-ASS_XXXX_CAROLA-STEENBERGEN.json b/data/person/ID_NL-NH-AMS_198X_NL-DR-ASS_XXXX_CAROLA-STEENBERGEN.json index 1a45f2d036..3999fbfcf8 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-DR-ASS_XXXX_CAROLA-STEENBERGEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-DR-ASS_XXXX_CAROLA-STEENBERGEN.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carola-steenbergen-66b4375_20251214T110012Z.json" ], - "modified_at": "2026-01-09T19:18:16.623557+00:00", + "modified_at": "2026-01-09T19:51:21.091655+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carola-steenbergen-66b4375", @@ -154,7 +154,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.623553+00:00", + "inferred_at": "2026-01-09T19:51:21.091648+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-DR-COE_XXXX_ALBERT-TIESINGA.json b/data/person/ID_NL-NH-AMS_198X_NL-DR-COE_XXXX_ALBERT-TIESINGA.json index bd5661af48..24a9114c2b 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-DR-COE_XXXX_ALBERT-TIESINGA.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-DR-COE_XXXX_ALBERT-TIESINGA.json @@ -202,7 +202,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alberttiesinga_20251214T112127Z.json" ], - "modified_at": "2026-01-09T19:18:15.494284+00:00", + "modified_at": "2026-01-09T19:51:11.088817+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alberttiesinga", @@ -231,7 +231,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -280,7 +280,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.494280+00:00", + "inferred_at": "2026-01-09T19:51:11.088810+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-GE-NIJ_XXXX_GERRIT-ENGBERTS.json b/data/person/ID_NL-NH-AMS_198X_NL-GE-NIJ_XXXX_GERRIT-ENGBERTS.json index 3a495f1ca4..ce1214c3d1 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-GE-NIJ_XXXX_GERRIT-ENGBERTS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-GE-NIJ_XXXX_GERRIT-ENGBERTS.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerrit-engberts-b398086_20251214T111436Z.json" ], - "modified_at": "2026-01-09T19:18:13.394667+00:00", + "modified_at": "2026-01-09T19:50:49.141532+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerrit-engberts-b398086", @@ -191,7 +191,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.394660+00:00", + "inferred_at": "2026-01-09T19:50:49.141525+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-GE-NUN_XXXX_ANGELIQUE-AARDEN.json b/data/person/ID_NL-NH-AMS_198X_NL-GE-NUN_XXXX_ANGELIQUE-AARDEN.json index 71cc6f0d9f..1b1a8c8108 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-GE-NUN_XXXX_ANGELIQUE-AARDEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-GE-NUN_XXXX_ANGELIQUE-AARDEN.json @@ -184,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/angeliquevanaarden_20251214T103208Z.json" ], - "modified_at": "2026-01-09T19:18:15.428547+00:00", + "modified_at": "2026-01-09T19:51:10.854787+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "angeliquevanaarden", @@ -213,7 +213,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.428542+00:00", + "inferred_at": "2026-01-09T19:51:10.854782+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-LI-MAA_XXXX_BRUNO-BOURS.json b/data/person/ID_NL-NH-AMS_198X_NL-LI-MAA_XXXX_BRUNO-BOURS.json index 417efb93dc..37cb54e64d 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-LI-MAA_XXXX_BRUNO-BOURS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-LI-MAA_XXXX_BRUNO-BOURS.json @@ -225,7 +225,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bruno-bours-2a73584b_20251214T110436Z.json" ], - "modified_at": "2026-01-09T19:18:13.129690+00:00", + "modified_at": "2026-01-09T19:50:51.775025+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bruno-bours-2a73584b", @@ -254,7 +254,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -303,7 +303,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.129687+00:00", + "inferred_at": "2026-01-09T19:50:51.775021+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-LI-MAA_XXXX_IRENE-SCHRIER.json b/data/person/ID_NL-NH-AMS_198X_NL-LI-MAA_XXXX_IRENE-SCHRIER.json index 12d9c74661..8548716099 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-LI-MAA_XXXX_IRENE-SCHRIER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-LI-MAA_XXXX_IRENE-SCHRIER.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ireneschrier_20251214T110434Z.json" ], - "modified_at": "2026-01-09T19:18:14.342256+00:00", + "modified_at": "2026-01-09T19:51:00.911061+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ireneschrier", @@ -137,7 +137,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.342248+00:00", + "inferred_at": "2026-01-09T19:51:00.911048+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NB-BOZ_XXXX_ANNA-LINGEN.json b/data/person/ID_NL-NH-AMS_198X_NL-NB-BOZ_XXXX_ANNA-LINGEN.json index ec3e9040c9..1157389c93 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NB-BOZ_XXXX_ANNA-LINGEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NB-BOZ_XXXX_ANNA-LINGEN.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-van-lingen-39557027_20251214T111354Z.json" ], - "modified_at": "2026-01-09T19:18:14.350368+00:00", + "modified_at": "2026-01-09T19:51:00.915480+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anna-van-lingen-39557027", @@ -141,7 +141,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.350364+00:00", + "inferred_at": "2026-01-09T19:51:00.915475+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NB-BOZ_XXXX_JEAN-POOT.json b/data/person/ID_NL-NH-AMS_198X_NL-NB-BOZ_XXXX_JEAN-POOT.json index 59eb755272..b569b18e6f 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NB-BOZ_XXXX_JEAN-POOT.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NB-BOZ_XXXX_JEAN-POOT.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jean-marieke-poot-09ab3a63_20251214T113148Z.json" ], - "modified_at": "2026-01-09T19:18:17.067874+00:00", + "modified_at": "2026-01-09T19:51:23.212161+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jean-marieke-poot-09ab3a63", @@ -158,7 +158,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.067868+00:00", + "inferred_at": "2026-01-09T19:51:23.212155+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NB-TIL_XXXX_SASKIA-OUDHEUSDEN.json b/data/person/ID_NL-NH-AMS_198X_NL-NB-TIL_XXXX_SASKIA-OUDHEUSDEN.json index 6896fe4cca..0c44357622 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NB-TIL_XXXX_SASKIA-OUDHEUSDEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NB-TIL_XXXX_SASKIA-OUDHEUSDEN.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saskia-van-oudheusden-b9448968_20251214T110032Z.json" ], - "modified_at": "2026-01-09T19:18:18.968524+00:00", + "modified_at": "2026-01-09T19:51:31.810135+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saskia-van-oudheusden-b9448968", @@ -174,7 +174,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.968518+00:00", + "inferred_at": "2026-01-09T19:51:31.810131+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_DANIELLE-MOURIK.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_DANIELLE-MOURIK.json index 0852163707..8943c4ecc3 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_DANIELLE-MOURIK.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_DANIELLE-MOURIK.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daniellevanmourik_20251214T113139Z.json" ], - "modified_at": "2026-01-09T19:18:13.628664+00:00", + "modified_at": "2026-01-09T19:50:55.250566+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daniellevanmourik", @@ -174,7 +174,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.628660+00:00", + "inferred_at": "2026-01-09T19:50:55.250557+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_FREDERIEK-BROEKE.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_FREDERIEK-BROEKE.json index 090940b1eb..203bb5da31 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_FREDERIEK-BROEKE.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_FREDERIEK-BROEKE.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frederiek-ten-broeke-0a272a83_20251214T113137Z.json" ], - "modified_at": "2026-01-09T19:18:13.283495+00:00", + "modified_at": "2026-01-09T19:50:53.740705+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frederiek-ten-broeke-0a272a83", @@ -130,7 +130,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.283489+00:00", + "inferred_at": "2026-01-09T19:50:53.740699+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_MARK-BOER.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_MARK-BOER.json index c6c9643ee2..c962f8eafb 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_MARK-BOER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_MARK-BOER.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/boermde_20251214T112148Z.json" ], - "modified_at": "2026-01-09T19:18:13.158951+00:00", + "modified_at": "2026-01-09T19:51:03.561753+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "boermde", @@ -141,7 +141,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.158942+00:00", + "inferred_at": "2026-01-09T19:51:03.561745+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_SARA-DOORN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_SARA-DOORN.json index d8e2183cf5..a6863a7e56 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_SARA-DOORN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-ALK_XXXX_SARA-DOORN.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sara-van-doorn-a6940b111_20251214T111323Z.json" ], - "modified_at": "2026-01-09T19:18:11.764685+00:00", + "modified_at": "2026-01-09T19:50:47.284120+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sara-van-doorn-a6940b111", @@ -191,7 +191,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.764670+00:00", + "inferred_at": "2026-01-09T19:50:47.284100+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_AMBER-CHIJS.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_AMBER-CHIJS.json index d80ca72056..847f23b923 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_AMBER-CHIJS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_AMBER-CHIJS.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amber-van-der-chijs-b9969482_20251214T111651Z.json" ], - "modified_at": "2026-01-09T19:18:15.365375+00:00", + "modified_at": "2026-01-09T19:51:08.608200+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "amber-van-der-chijs-b9969482", @@ -138,7 +138,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.365371+00:00", + "inferred_at": "2026-01-09T19:51:08.608194+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNA-DABROWSKA.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNA-DABROWSKA.json similarity index 69% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNA-DABROWSKA.json rename to data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNA-DABROWSKA.json index 1b9ce3edd6..8b6b6b59ac 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNA-DABROWSKA.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNA-DABROWSKA.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNA-DABROWSKA", + "ppid": "ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNA-DABROWSKA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "198X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ANNA", "DABROWSKA" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Anna Dabrowska", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -140,63 +146,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-dabrowska-78724418_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:57.659928+00:00", + "modified_at": "2026-01-09T19:50:48.651225+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anna-dabrowska-78724418", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:57.659922+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-DABROWSKA", @@ -206,6 +159,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNA-DABROWSKA", + "new_ppid": "ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNA-DABROWSKA", + "changed_at": "2026-01-09T19:43:41.184429+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1989 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Eye Filmmuseum", + "title": "Co-founder, E*Cinema Academy", + "date_range": "2012" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2012 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2012 - 23 = 1989", + "result": "Estimated birth year: 1989", + "range": "1984-1994 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1984, + 1994 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:48.651217+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNA-MEIJER.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNA-MEIJER.json similarity index 68% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNA-MEIJER.json rename to data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNA-MEIJER.json index 8a6b9440d1..7e25977462 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNA-MEIJER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNA-MEIJER.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNA-MEIJER", + "ppid": "ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNA-MEIJER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "198X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ANNA", "MEIJER" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Anna Meijer", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -146,63 +152,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annameijer_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:06.776809+00:00", + "modified_at": "2026-01-09T19:50:50.802480+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annameijer", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Noord-Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Noord-Holland, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:06.776801+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-MEIJER", @@ -212,6 +165,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNA-MEIJER", + "new_ppid": "ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNA-MEIJER", + "changed_at": "2026-01-09T19:43:42.760248+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1989 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Lomography Netherlands", + "title": "Internship - Digital Online Marketing", + "date_range": "2012 - 2013" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2012 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2012 - 23 = 1989", + "result": "Estimated birth year: 1989", + "range": "1984-1994 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1984, + 1994 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:50.802474+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNEKE-RUBBENS.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNEKE-RUBBENS.json index d7565f23ed..c231b1bbe8 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNEKE-RUBBENS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNEKE-RUBBENS.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anneke-rubbens-bb98a5159_20251214T110256Z.json" ], - "modified_at": "2026-01-09T19:18:18.999856+00:00", + "modified_at": "2026-01-09T19:51:34.114661+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anneke-rubbens-bb98a5159", @@ -111,7 +111,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.999847+00:00", + "inferred_at": "2026-01-09T19:51:34.114653+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNEMIEKE-BOUWMANS.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNEMIEKE-BOUWMANS.json index e3c90decdf..ab5e76db9f 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNEMIEKE-BOUWMANS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNEMIEKE-BOUWMANS.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annemieke-bouma-bouwmans-55b25113_20251214T110216Z.json" ], - "modified_at": "2026-01-09T19:18:13.042214+00:00", + "modified_at": "2026-01-09T19:50:50.800104+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annemieke-bouma-bouwmans-55b25113", @@ -191,7 +191,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.042210+00:00", + "inferred_at": "2026-01-09T19:50:50.800095+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNETTE-MATSER.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNETTE-MATSER.json index d7ea4a8771..cc3ec6c4fd 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNETTE-MATSER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNETTE-MATSER.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annette-matser-22262241_20251214T110315Z.json" ], - "modified_at": "2026-01-09T19:18:13.638916+00:00", + "modified_at": "2026-01-09T19:51:15.707521+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annette-matser-22262241", @@ -170,7 +170,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.638910+00:00", + "inferred_at": "2026-01-09T19:51:15.707514+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNIEK-VRIJ.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNIEK-VRIJ.json index 15eee399a0..2974c633b9 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNIEK-VRIJ.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ANNIEK-VRIJ.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anniek-vrij-4a71a817_20251214T111705Z.json" ], - "modified_at": "2026-01-09T19:18:15.661714+00:00", + "modified_at": "2026-01-09T19:51:13.294790+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anniek-vrij-4a71a817", @@ -137,7 +137,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.661708+00:00", + "inferred_at": "2026-01-09T19:51:13.294785+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ARMAN-SAHIN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ARMAN-SAHIN.json index bfb159979f..f102b85e6f 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ARMAN-SAHIN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ARMAN-SAHIN.json @@ -196,7 +196,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arman-sahin-372496187_20251214T111817Z.json" ], - "modified_at": "2026-01-09T19:18:15.855410+00:00", + "modified_at": "2026-01-09T19:50:50.803871+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arman-sahin-372496187", @@ -234,7 +234,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -283,7 +283,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.855402+00:00", + "inferred_at": "2026-01-09T19:50:50.803863+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BABETTE-WEHKAMP.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BABETTE-WEHKAMP.json index 32f1e8a4bd..36a0659e50 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BABETTE-WEHKAMP.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BABETTE-WEHKAMP.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/babette-wehkamp-5296b024_20251214T111825Z.json" ], - "modified_at": "2026-01-09T19:18:16.282712+00:00", + "modified_at": "2026-01-09T19:51:18.376102+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "babette-wehkamp-5296b024", @@ -151,7 +151,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.282707+00:00", + "inferred_at": "2026-01-09T19:51:18.376092+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BARBARA-OUDEJANS.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BARBARA-OUDEJANS.json index 8978f6098b..0852d2a54b 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BARBARA-OUDEJANS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BARBARA-OUDEJANS.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/barbara-oudejans-2a552822_20251214T111350Z.json" ], - "modified_at": "2026-01-09T19:18:15.680403+00:00", + "modified_at": "2026-01-09T19:51:13.397037+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "barbara-oudejans-2a552822", @@ -154,7 +154,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.680398+00:00", + "inferred_at": "2026-01-09T19:51:13.397011+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BASTIAAN-STEVERINK.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BASTIAAN-STEVERINK.json index d069c3a03a..071db6f8ff 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BASTIAAN-STEVERINK.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BASTIAAN-STEVERINK.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bastiaan-steverink-a565109_20251214T111446Z.json" ], - "modified_at": "2026-01-09T19:18:14.364826+00:00", + "modified_at": "2026-01-09T19:51:01.708105+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bastiaan-steverink-a565109", @@ -184,7 +184,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.364823+00:00", + "inferred_at": "2026-01-09T19:51:01.708096+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BENJAMIN-STIPHOUT.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BENJAMIN-STIPHOUT.json similarity index 75% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BENJAMIN-STIPHOUT.json rename to data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BENJAMIN-STIPHOUT.json index a6fee4412a..45d72e05a3 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BENJAMIN-STIPHOUT.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BENJAMIN-STIPHOUT.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BENJAMIN-STIPHOUT", + "ppid": "ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BENJAMIN-STIPHOUT", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "198X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "BENJAMIN", "STIPHOUT" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Benjamin Stiphout", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -208,63 +214,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/benjaminstiphout_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:55.819032+00:00", + "modified_at": "2026-01-09T19:51:23.684614+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "benjaminstiphout", - "inferred_current_settlement": { - "value": "Amstelveen", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amstelveen, Noord-Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amstelveen, Noord-Holland, Netherlands", - "result": { - "geonames_id": 2759798, - "geonames_name": "Amstelveen", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPL", - "latitude": 52.30083, - "longitude": 4.86389 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759798, - "geonames_name": "Amstelveen", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPL", - "latitude": 52.30083, - "longitude": 4.86389 - }, - "inferred_at": "2026-01-09T17:42:55.819026+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BENJAMIN-STIPHOUT", @@ -274,6 +227,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BENJAMIN-STIPHOUT", + "new_ppid": "ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_BENJAMIN-STIPHOUT", + "changed_at": "2026-01-09T19:43:41.968075+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1985 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Dok-Direct", + "title": "Senior-medewerker archiefbewerking", + "date_range": "2008 - 2011" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2008 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2008 - 23 = 1985", + "result": "Estimated birth year: 1985", + "range": "1980-1990 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1980, + 1990 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:23.684608+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CHANTALLE-VALENTIJN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CHANTALLE-VALENTIJN.json index 89b6f55dda..f06822c0d4 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CHANTALLE-VALENTIJN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CHANTALLE-VALENTIJN.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chantallevalentijn_20251214T111609Z.json" ], - "modified_at": "2026-01-09T19:18:16.164818+00:00", + "modified_at": "2026-01-09T19:51:17.894218+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "chantallevalentijn", @@ -132,7 +132,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.164813+00:00", + "inferred_at": "2026-01-09T19:51:17.894210+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CHRIS-DIJKSHOORN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CHRIS-DIJKSHOORN.json index ecca4c1364..a97eab5773 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CHRIS-DIJKSHOORN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CHRIS-DIJKSHOORN.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chrisdijkshoorn_20251214T111257Z.json" ], - "modified_at": "2026-01-09T19:18:16.160932+00:00", + "modified_at": "2026-01-09T19:51:18.291266+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "chrisdijkshoorn", @@ -185,7 +185,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.160922+00:00", + "inferred_at": "2026-01-09T19:51:18.291261+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CISKA-VEREERTBRUGGHEN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CISKA-VEREERTBRUGGHEN.json index 3c5b7306b7..a1daa86c41 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CISKA-VEREERTBRUGGHEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CISKA-VEREERTBRUGGHEN.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ciska-vereertbrugghen-48b46263_20251214T111852Z.json" ], - "modified_at": "2026-01-09T19:18:13.079971+00:00", + "modified_at": "2026-01-09T19:50:51.053984+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ciska-vereertbrugghen-48b46263", @@ -171,7 +171,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.079968+00:00", + "inferred_at": "2026-01-09T19:50:51.053977+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CONNY-KRISTEL.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CONNY-KRISTEL.json similarity index 74% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CONNY-KRISTEL.json rename to data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CONNY-KRISTEL.json index 4c4d76ea9b..a55ff255a7 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CONNY-KRISTEL.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CONNY-KRISTEL.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CONNY-KRISTEL", + "ppid": "ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CONNY-KRISTEL", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "198X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "CONNY", "KRISTEL" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Conny Kristel", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -171,63 +177,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/conny-kristel-2980513_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:02.632911+00:00", + "modified_at": "2026-01-09T19:50:54.098412+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "conny-kristel-2980513", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:02.632906+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CONNY-KRISTEL", @@ -237,6 +190,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CONNY-KRISTEL", + "new_ppid": "ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CONNY-KRISTEL", + "changed_at": "2026-01-09T19:43:38.019367+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1987 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "NIOD Institute for War, Holocaust and Genocide Studies", + "title": "Senior Researcher and Project Director EHRI", + "date_range": "2010 - 2018-10" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2010 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2010 - 23 = 1987", + "result": "Estimated birth year: 1987", + "range": "1982-1992 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1982, + 1992 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:54.098407+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CORNELIE-MUHREN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CORNELIE-MUHREN.json index 5656571190..e1cb83425b 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CORNELIE-MUHREN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_CORNELIE-MUHREN.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cornelie-muhren-1b584b1b_20251214T112715Z.json" ], - "modified_at": "2026-01-09T19:18:13.649063+00:00", + "modified_at": "2026-01-09T19:50:55.379276+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cornelie-muhren-1b584b1b", @@ -190,7 +190,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.649060+00:00", + "inferred_at": "2026-01-09T19:50:55.379269+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DANA-MELCHAR.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DANA-MELCHAR.json index 588e707c0f..0e0ebedaf0 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DANA-MELCHAR.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DANA-MELCHAR.json @@ -87,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dana-melchar-9441955_20251214T111537Z.json" ], - "modified_at": "2026-01-09T19:18:11.869214+00:00", + "modified_at": "2026-01-09T19:50:55.264333+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dana-melchar-9441955", @@ -119,7 +119,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.869183+00:00", + "inferred_at": "2026-01-09T19:50:55.264328+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DANIEL-BOTTELIER.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DANIEL-BOTTELIER.json index abc752dbdb..dc5b34d2d9 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DANIEL-BOTTELIER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DANIEL-BOTTELIER.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daniel-bottelier-25ab4514b_20251214T111350Z.json" ], - "modified_at": "2026-01-09T19:18:15.582437+00:00", + "modified_at": "2026-01-09T19:51:02.694065+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daniel-bottelier-25ab4514b", @@ -163,7 +163,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.582429+00:00", + "inferred_at": "2026-01-09T19:51:02.694059+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DANIELLE-MEESTER.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DANIELLE-MEESTER.json index 2baa9f8269..fe3c9eef5c 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DANIELLE-MEESTER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DANIELLE-MEESTER.json @@ -185,7 +185,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/danielle-meester-b7a54932_20251214T113336Z.json" ], - "modified_at": "2026-01-09T19:18:15.537784+00:00", + "modified_at": "2026-01-09T19:51:11.850086+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "danielle-meester-b7a54932", @@ -214,7 +214,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -263,7 +263,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.537780+00:00", + "inferred_at": "2026-01-09T19:51:11.850079+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DAVID-KLOOS.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DAVID-KLOOS.json index 08c667723f..99e05cd3c9 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DAVID-KLOOS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_DAVID-KLOOS.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/david-kloos-35827513_20251214T103720Z.json" ], - "modified_at": "2026-01-09T19:18:13.976575+00:00", + "modified_at": "2026-01-09T19:50:57.664949+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "david-kloos-35827513", @@ -185,7 +185,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.976568+00:00", + "inferred_at": "2026-01-09T19:50:57.664941+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ELLEN-BORK.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ELLEN-BORK.json index 32d8fc5b61..f2f9347083 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ELLEN-BORK.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ELLEN-BORK.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ellen-van-bork-2944a133_20251214T111510Z.json" ], - "modified_at": "2026-01-09T19:18:15.632516+00:00", + "modified_at": "2026-01-09T19:51:12.735404+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ellen-van-bork-2944a133", @@ -170,7 +170,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.632510+00:00", + "inferred_at": "2026-01-09T19:51:12.735391+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_FRANCK-NEDERSTIGT.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_FRANCK-NEDERSTIGT.json index 0cfaf724ce..fea66fa448 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_FRANCK-NEDERSTIGT.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_FRANCK-NEDERSTIGT.json @@ -184,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/francknederstigt_20251214T110242Z.json" ], - "modified_at": "2026-01-09T19:18:17.433322+00:00", + "modified_at": "2026-01-09T19:51:28.006766+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "francknederstigt", @@ -213,7 +213,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.433316+00:00", + "inferred_at": "2026-01-09T19:51:28.006762+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_GEERKE-CATSHOEK.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_GEERKE-CATSHOEK.json index e4d346e587..dc407d0329 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_GEERKE-CATSHOEK.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_GEERKE-CATSHOEK.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/geerkecatshoek_20251214T111908Z.json" ], - "modified_at": "2026-01-09T19:18:13.308396+00:00", + "modified_at": "2026-01-09T19:50:53.861264+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "geerkecatshoek", @@ -168,7 +168,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.308392+00:00", + "inferred_at": "2026-01-09T19:50:53.861257+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_GEOFFREY-BOSCH.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_GEOFFREY-BOSCH.json index 5e7daa41df..bd99476ecc 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_GEOFFREY-BOSCH.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_GEOFFREY-BOSCH.json @@ -94,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/geoffreybosch_20251214T110123Z.json" ], - "modified_at": "2026-01-09T19:18:16.904133+00:00", + "modified_at": "2026-01-09T19:51:22.356377+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "geoffreybosch", @@ -117,7 +117,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.904129+00:00", + "inferred_at": "2026-01-09T19:51:22.356373+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_GIJS-ANSEEUW.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_GIJS-ANSEEUW.json index a7f47b364b..318eed82d1 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_GIJS-ANSEEUW.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_GIJS-ANSEEUW.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gijs-anseeuw-1a051b119_20251214T111420Z.json" ], - "modified_at": "2026-01-09T19:18:14.730679+00:00", + "modified_at": "2026-01-09T19:51:03.813308+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gijs-anseeuw-1a051b119", @@ -149,7 +149,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.730676+00:00", + "inferred_at": "2026-01-09T19:51:03.813296+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_HANSMARTIJN-GROENEVELD.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_HANSMARTIJN-GROENEVELD.json index 51e4121d7d..4a06236329 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_HANSMARTIJN-GROENEVELD.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_HANSMARTIJN-GROENEVELD.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hans-martijn-groeneveld-78600721_20251214T110036Z.json" ], - "modified_at": "2026-01-09T19:18:16.710513+00:00", + "modified_at": "2026-01-09T19:51:21.536665+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hans-martijn-groeneveld-78600721", @@ -153,7 +153,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.710507+00:00", + "inferred_at": "2026-01-09T19:51:21.536659+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_HARMA-UFFELEN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_HARMA-UFFELEN.json index 6b293cecd5..b350d7c378 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_HARMA-UFFELEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_HARMA-UFFELEN.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harma-van-uffelen-4b50b721_20251214T110103Z.json" ], - "modified_at": "2026-01-09T19:18:15.477084+00:00", + "modified_at": "2026-01-09T19:51:11.049105+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harma-van-uffelen-4b50b721", @@ -180,7 +180,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.477080+00:00", + "inferred_at": "2026-01-09T19:51:11.049099+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_HYLKE-STREEF.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_HYLKE-STREEF.json index 5ea0ab9b9b..06added44f 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_HYLKE-STREEF.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_HYLKE-STREEF.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hylke-streef-b98b7418a_20251214T103338Z.json" ], - "modified_at": "2026-01-09T19:18:12.962460+00:00", + "modified_at": "2026-01-09T19:50:49.604894+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hylke-streef-b98b7418a", @@ -141,7 +141,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.962455+00:00", + "inferred_at": "2026-01-09T19:50:49.604887+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ILIAS-ZIAN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ILIAS-ZIAN.json index d4722540b4..883b695554 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ILIAS-ZIAN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ILIAS-ZIAN.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ilias-zian-63490719b_20251214T110035Z.json" ], - "modified_at": "2026-01-09T19:18:15.963563+00:00", + "modified_at": "2026-01-09T19:51:15.714364+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ilias-zian-63490719b", @@ -198,7 +198,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +247,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.963558+00:00", + "inferred_at": "2026-01-09T19:51:15.714359+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_INGE-WILLEMSEN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_INGE-WILLEMSEN.json index c691730eca..ad1e765c54 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_INGE-WILLEMSEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_INGE-WILLEMSEN.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/inge-willemsen-5838066_20251214T111346Z.json" ], - "modified_at": "2026-01-09T19:18:14.174564+00:00", + "modified_at": "2026-01-09T19:50:58.794029+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "inge-willemsen-5838066", @@ -135,7 +135,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.174558+00:00", + "inferred_at": "2026-01-09T19:50:58.794019+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_INKA-PIJPER.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_INKA-PIJPER.json index 424b5cc38f..1bca28464c 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_INKA-PIJPER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_INKA-PIJPER.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/inka-de-pijper-67502019_20251214T110358Z.json" ], - "modified_at": "2026-01-09T19:18:12.510900+00:00", + "modified_at": "2026-01-09T19:50:48.494469+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "inka-de-pijper-67502019", @@ -125,7 +125,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.510890+00:00", + "inferred_at": "2026-01-09T19:50:48.494464+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ISABEL-ERISMAN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ISABEL-ERISMAN.json index b154012908..3ed806ff3d 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ISABEL-ERISMAN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ISABEL-ERISMAN.json @@ -163,7 +163,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/isabel-erisman-92a69b68_20251214T111613Z.json" ], - "modified_at": "2026-01-09T19:18:11.635248+00:00", + "modified_at": "2026-01-09T19:50:47.245171+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "isabel-erisman-92a69b68", @@ -186,7 +186,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.635192+00:00", + "inferred_at": "2026-01-09T19:50:47.245162+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_IZAK-DREU.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_IZAK-DREU.json index 038ef34080..a6a57d1f07 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_IZAK-DREU.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_IZAK-DREU.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/izak-de-dreu-810214196_20251214T111611Z.json" ], - "modified_at": "2026-01-09T19:18:12.037621+00:00", + "modified_at": "2026-01-09T19:50:47.425917+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "izak-de-dreu-810214196", @@ -137,7 +137,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.037608+00:00", + "inferred_at": "2026-01-09T19:50:47.425906+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JAN-ADRICHEM.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JAN-ADRICHEM.json similarity index 63% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JAN-ADRICHEM.json rename to data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JAN-ADRICHEM.json index a4003c3150..84070d9b45 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JAN-ADRICHEM.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JAN-ADRICHEM.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JAN-ADRICHEM", + "ppid": "ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JAN-ADRICHEM", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "198X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "JAN", "ADRICHEM" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Jan Van Adrichem", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -108,73 +114,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-van-adrichem-933a406_20251214T115050Z.json" ], - "modified_at": "2026-01-09T18:58:11.962929+00:00", + "modified_at": "2026-01-09T19:51:10.855915+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-van-adrichem-933a406", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Netherlands" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "Stedelijk Museum Amsterdam", - "title": "Head of Collections", - "location": "Amsterdam, Netherlands" - } - }, - { - "step": 3, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 4, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T18:58:11.962914+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAN-ADRICHEM", @@ -184,6 +127,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JAN-ADRICHEM", + "new_ppid": "ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JAN-ADRICHEM", + "changed_at": "2026-01-09T19:43:43.075478+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1983 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Stedelijk Museum Amsterdam", + "title": "Head of Collections", + "date_range": "2006" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2006 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2006 - 23 = 1983", + "result": "Estimated birth year: 1983", + "range": "1978-1988 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1978, + 1988 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:10.855908+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JASPER-HORN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JASPER-HORN.json index af2b65d9dc..8aea916a61 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JASPER-HORN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JASPER-HORN.json @@ -222,7 +222,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jasper-horn-34094b16a_20251214T102729Z.json" ], - "modified_at": "2026-01-09T19:18:13.398421+00:00", + "modified_at": "2026-01-09T19:51:06.656808+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jasper-horn-34094b16a", @@ -260,7 +260,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -309,7 +309,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.398415+00:00", + "inferred_at": "2026-01-09T19:51:06.656804+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JOOST-BURGT.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JOOST-BURGT.json index 850d6ca760..adaeeff6a0 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JOOST-BURGT.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JOOST-BURGT.json @@ -204,7 +204,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jvdburgt_20251214T112619Z.json" ], - "modified_at": "2026-01-09T19:18:18.004706+00:00", + "modified_at": "2026-01-09T19:51:28.877920+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jvdburgt", @@ -227,7 +227,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -268,7 +268,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.004696+00:00", + "inferred_at": "2026-01-09T19:51:28.877916+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JOOST-HULST.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JOOST-HULST.json index 5f9de6e4b7..371fa5aa84 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JOOST-HULST.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JOOST-HULST.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joostvanhulst_20251214T111543Z.json" ], - "modified_at": "2026-01-09T19:18:11.465110+00:00", + "modified_at": "2026-01-09T19:50:46.976113+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joostvanhulst", @@ -193,7 +193,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +242,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.465104+00:00", + "inferred_at": "2026-01-09T19:50:46.976100+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JOSHUA-DOBBS.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JOSHUA-DOBBS.json index 705945e824..67e3615401 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JOSHUA-DOBBS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JOSHUA-DOBBS.json @@ -195,7 +195,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joshua-dobbs-b9685013_20251214T110941Z.json" ], - "modified_at": "2026-01-09T19:18:18.215910+00:00", + "modified_at": "2026-01-09T19:51:29.223281+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joshua-dobbs-b9685013", @@ -218,7 +218,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.215905+00:00", + "inferred_at": "2026-01-09T19:51:29.223276+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JULIA-WAGNER.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JULIA-WAGNER.json index f195d602a6..ce12f06ff7 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JULIA-WAGNER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_JULIA-WAGNER.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/julia-johanna-wagner_20251214T111307Z.json" ], - "modified_at": "2026-01-09T19:18:15.465463+00:00", + "modified_at": "2026-01-09T19:51:11.028860+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "julia-johanna-wagner", @@ -180,7 +180,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.465460+00:00", + "inferred_at": "2026-01-09T19:51:11.028852+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_KASHIF-AMIN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_KASHIF-AMIN.json index a5ef4b4389..c13b3506fb 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_KASHIF-AMIN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_KASHIF-AMIN.json @@ -247,7 +247,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kashifaminnl_20251214T110021Z.json" ], - "modified_at": "2026-01-09T19:18:15.615610+00:00", + "modified_at": "2026-01-09T19:51:12.710136+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kashifaminnl", @@ -276,7 +276,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -325,7 +325,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.615605+00:00", + "inferred_at": "2026-01-09T19:51:12.710128+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_KELLY-DAVIS.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_KELLY-DAVIS.json index fed8b36a9e..9553126bef 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_KELLY-DAVIS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_KELLY-DAVIS.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daviskellyk_20251214T111248Z.json" ], - "modified_at": "2026-01-09T19:18:14.587234+00:00", + "modified_at": "2026-01-09T19:51:22.265566+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daviskellyk", @@ -189,7 +189,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.587226+00:00", + "inferred_at": "2026-01-09T19:51:22.265561+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LISA-SMITVERMEER.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LISA-SMITVERMEER.json index da31485c90..35ac4da1eb 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LISA-SMITVERMEER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LISA-SMITVERMEER.json @@ -199,7 +199,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lisa-smit-vermeer_20251214T110057Z.json" ], - "modified_at": "2026-01-09T19:18:15.645218+00:00", + "modified_at": "2026-01-09T19:51:12.757312+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lisa-smit-vermeer", @@ -228,7 +228,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -277,7 +277,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.645213+00:00", + "inferred_at": "2026-01-09T19:51:12.757307+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LISE-LISE.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LISE-LISE.json index 0917ab9ca9..1d64d0600e 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LISE-LISE.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LISE-LISE.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lise-lise-a7588895_20251214T111918Z.json" ], - "modified_at": "2026-01-09T19:18:14.737051+00:00", + "modified_at": "2026-01-09T19:50:51.771847+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lise-lise-a7588895", @@ -174,7 +174,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.737046+00:00", + "inferred_at": "2026-01-09T19:50:51.771841+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LISELOTTE-MEIJER.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LISELOTTE-MEIJER.json index dfd3594a2b..98d1cb3dd4 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LISELOTTE-MEIJER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LISELOTTE-MEIJER.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/liselotte-meijer-b897aa43_20251214T110158Z.json" ], - "modified_at": "2026-01-09T19:18:15.741302+00:00", + "modified_at": "2026-01-09T19:51:14.181724+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "liselotte-meijer-b897aa43", @@ -190,7 +190,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.741297+00:00", + "inferred_at": "2026-01-09T19:51:14.181719+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LOTTE-JAEGER.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LOTTE-JAEGER.json index e854fd7c03..bf20e1c525 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LOTTE-JAEGER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_LOTTE-JAEGER.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lotte-jaeger-40159b35_20251214T111312Z.json" ], - "modified_at": "2026-01-09T19:18:14.754394+00:00", + "modified_at": "2026-01-09T19:50:58.642949+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lotte-jaeger-40159b35", @@ -117,7 +117,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -166,7 +166,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.754388+00:00", + "inferred_at": "2026-01-09T19:50:58.642938+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MANOUK-HEIDEN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MANOUK-HEIDEN.json index 7eb6c55f54..8fc4406be6 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MANOUK-HEIDEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MANOUK-HEIDEN.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/manouk-van-der-heiden-62a724a8_20251214T111757Z.json" ], - "modified_at": "2026-01-09T19:18:11.876212+00:00", + "modified_at": "2026-01-09T19:50:47.338115+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "manouk-van-der-heiden-62a724a8", @@ -134,7 +134,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.876200+00:00", + "inferred_at": "2026-01-09T19:50:47.338106+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARA-LAGERWEIJ.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARA-LAGERWEIJ.json index 17f7ce5555..3eb9ecb323 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARA-LAGERWEIJ.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARA-LAGERWEIJ.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mara-lagerweij-34852b4b_20251214T111305Z.json" ], - "modified_at": "2026-01-09T19:18:14.667251+00:00", + "modified_at": "2026-01-09T19:51:03.251363+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mara-lagerweij-34852b4b", @@ -124,7 +124,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.667246+00:00", + "inferred_at": "2026-01-09T19:51:03.251356+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARGOT-SANDE.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARGOT-SANDE.json index 5ef4a1d40f..f944d93a84 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARGOT-SANDE.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARGOT-SANDE.json @@ -227,7 +227,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/margot-van-der-sande-b51919151_20251214T110541Z.json" ], - "modified_at": "2026-01-09T19:18:15.760914+00:00", + "modified_at": "2026-01-09T19:51:14.202211+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "margot-van-der-sande-b51919151", @@ -256,7 +256,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -305,7 +305,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.760908+00:00", + "inferred_at": "2026-01-09T19:51:14.202203+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARIEKE-JONG.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARIEKE-JONG.json index 7a41a2ee64..49420b97c1 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARIEKE-JONG.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARIEKE-JONG.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dejongmarieke_20251214T111504Z.json" ], - "modified_at": "2026-01-09T19:18:14.937024+00:00", + "modified_at": "2026-01-09T19:51:05.552764+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dejongmarieke", @@ -152,7 +152,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.937018+00:00", + "inferred_at": "2026-01-09T19:51:05.552755+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARION-CONNECT.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARION-CONNECT.json index 4534d5d09d..1392128931 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARION-CONNECT.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARION-CONNECT.json @@ -214,7 +214,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marion-jonk-cultuur-connect_20251214T112536Z.json" ], - "modified_at": "2026-01-09T19:18:17.788907+00:00", + "modified_at": "2026-01-09T19:51:28.576787+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marion-jonk-cultuur-connect", @@ -243,7 +243,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -292,7 +292,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.788872+00:00", + "inferred_at": "2026-01-09T19:51:28.576784+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARJOLEIN-KOEK.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARJOLEIN-KOEK.json index 35ddb0b039..895fcc0abe 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARJOLEIN-KOEK.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARJOLEIN-KOEK.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjolein-koek-445a4311_20251214T111834Z.json" ], - "modified_at": "2026-01-09T19:18:14.699009+00:00", + "modified_at": "2026-01-09T19:51:03.371826+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjolein-koek-445a4311", @@ -159,7 +159,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.699006+00:00", + "inferred_at": "2026-01-09T19:51:03.371821+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARK-COLLY.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARK-COLLY.json index 156f09c1c6..486aa7d8f0 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARK-COLLY.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARK-COLLY.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/markcolly_20251214T111430Z.json" ], - "modified_at": "2026-01-09T19:18:16.744070+00:00", + "modified_at": "2026-01-09T19:51:21.806664+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "markcolly", @@ -142,7 +142,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.744065+00:00", + "inferred_at": "2026-01-09T19:51:21.806656+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARLIES-CORDIAROELOFFS.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARLIES-CORDIAROELOFFS.json index 7605518ca2..4632cb2d62 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARLIES-CORDIAROELOFFS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MARLIES-CORDIAROELOFFS.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marlies-cordia-roeloffs-3aa4787_20251214T110121Z.json" ], - "modified_at": "2026-01-09T19:18:17.281610+00:00", + "modified_at": "2026-01-09T19:50:58.092621+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marlies-cordia-roeloffs-3aa4787", @@ -173,7 +173,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.281598+00:00", + "inferred_at": "2026-01-09T19:50:58.092610+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MIGUEL-HEILBRON.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MIGUEL-HEILBRON.json index f39e4d0793..1a6d459d57 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MIGUEL-HEILBRON.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MIGUEL-HEILBRON.json @@ -342,7 +342,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/miguelheilbron_20251214T112551Z.json" ], - "modified_at": "2026-01-09T19:18:16.891582+00:00", + "modified_at": "2026-01-09T19:51:22.337981+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "miguelheilbron", @@ -365,7 +365,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -406,7 +406,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.891576+00:00", + "inferred_at": "2026-01-09T19:51:22.337978+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MIRJAM-LOBBES.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MIRJAM-LOBBES.json index 083d3d1aa0..7b46ec890b 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MIRJAM-LOBBES.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MIRJAM-LOBBES.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mirjam-elizabeth-lobbes-20647b17_20251214T111446Z.json" ], - "modified_at": "2026-01-09T19:18:13.128061+00:00", + "modified_at": "2026-01-09T19:50:51.773976+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mirjam-elizabeth-lobbes-20647b17", @@ -159,7 +159,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.128056+00:00", + "inferred_at": "2026-01-09T19:50:51.773970+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MITCHELL-ESAJAS.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MITCHELL-ESAJAS.json index 149b03e2ae..004c260313 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MITCHELL-ESAJAS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_MITCHELL-ESAJAS.json @@ -146,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mitchellesajas_20251214T112551Z.json" ], - "modified_at": "2026-01-09T19:18:16.039489+00:00", + "modified_at": "2026-01-09T19:51:12.635075+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mitchellesajas", @@ -184,7 +184,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.039481+00:00", + "inferred_at": "2026-01-09T19:51:12.634855+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_NICKY-SLINGERLAND.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_NICKY-SLINGERLAND.json index c4b8de8121..0c9f8cda3c 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_NICKY-SLINGERLAND.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_NICKY-SLINGERLAND.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicky-slingerland-ba226544_20251214T111502Z.json" ], - "modified_at": "2026-01-09T19:18:18.137212+00:00", + "modified_at": "2026-01-09T19:51:28.927076+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicky-slingerland-ba226544", @@ -114,7 +114,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +163,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.137203+00:00", + "inferred_at": "2026-01-09T19:51:28.927071+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_NIENKE-WOLTMAN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_NIENKE-WOLTMAN.json index a529322c4c..e7d492bb72 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_NIENKE-WOLTMAN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_NIENKE-WOLTMAN.json @@ -190,7 +190,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nienke-woltman-a119a12a_20251214T111547Z.json" ], - "modified_at": "2026-01-09T19:18:13.439548+00:00", + "modified_at": "2026-01-09T19:50:54.312651+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nienke-woltman-a119a12a", @@ -213,7 +213,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -254,7 +254,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.439545+00:00", + "inferred_at": "2026-01-09T19:50:54.312640+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_NINA-FOLKERSMA.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_NINA-FOLKERSMA.json similarity index 74% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_NINA-FOLKERSMA.json rename to data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_NINA-FOLKERSMA.json index ab9a116637..4d5ccf5f4f 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_NINA-FOLKERSMA.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_NINA-FOLKERSMA.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_NINA-FOLKERSMA", + "ppid": "ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_NINA-FOLKERSMA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "198X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "NINA", "FOLKERSMA" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Nina Folkersma", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -206,63 +212,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ninafolkersma_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:57.940721+00:00", + "modified_at": "2026-01-09T19:50:48.895544+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ninafolkersma", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:57.940715+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NINA-FOLKERSMA", @@ -272,6 +225,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_NINA-FOLKERSMA", + "new_ppid": "ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_NINA-FOLKERSMA", + "changed_at": "2026-01-09T19:43:41.092718+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1980 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Metropolis M", + "title": "Art Critic and Editor", + "date_range": "2003" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2003 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2003 - 23 = 1980", + "result": "Estimated birth year: 1980", + "range": "1975-1985 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1975, + 1985 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:50:48.895536+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RAINIER-STAAL.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RAINIER-STAAL.json index de14825645..2bb9aafac0 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RAINIER-STAAL.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RAINIER-STAAL.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rcwstaal_20251214T102844Z.json" ], - "modified_at": "2026-01-09T19:18:15.368560+00:00", + "modified_at": "2026-01-09T19:51:08.612935+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rcwstaal", @@ -191,7 +191,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.368553+00:00", + "inferred_at": "2026-01-09T19:51:08.612930+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RENSKE-SUIJVER.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RENSKE-SUIJVER.json index 002a2b2e38..a5d7ceedbb 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RENSKE-SUIJVER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RENSKE-SUIJVER.json @@ -180,7 +180,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/renske-suijver-96b65014_20251214T110043Z.json" ], - "modified_at": "2026-01-09T19:18:13.880031+00:00", + "modified_at": "2026-01-09T19:50:56.754776+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "renske-suijver-96b65014", @@ -203,7 +203,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -244,7 +244,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.880026+00:00", + "inferred_at": "2026-01-09T19:50:56.754768+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RETO-SPECK.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RETO-SPECK.json index e1ddf0ece5..875e8d639b 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RETO-SPECK.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RETO-SPECK.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/reto-speck-3345931ab_20251214T113120Z.json" ], - "modified_at": "2026-01-09T19:18:13.527110+00:00", + "modified_at": "2026-01-09T19:50:54.570491+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "reto-speck-3345931ab", @@ -120,7 +120,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.527103+00:00", + "inferred_at": "2026-01-09T19:50:54.570484+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ROBIN-FOK.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ROBIN-FOK.json index ea9f43e1bc..9481b58294 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ROBIN-FOK.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ROBIN-FOK.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robin-fok_20251214T111717Z.json" ], - "modified_at": "2026-01-09T19:18:13.962637+00:00", + "modified_at": "2026-01-09T19:50:46.879050+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robin-fok", @@ -181,7 +181,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.962630+00:00", + "inferred_at": "2026-01-09T19:50:46.879021+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ROEL-SPRANGERS.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ROEL-SPRANGERS.json index 2c94b09c49..2388ac109b 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ROEL-SPRANGERS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_ROEL-SPRANGERS.json @@ -173,7 +173,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roelsprangers_20251214T111550Z.json" ], - "modified_at": "2026-01-09T19:18:17.908599+00:00", + "modified_at": "2026-01-09T19:51:06.606769+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "roelsprangers", @@ -205,7 +205,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +246,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.908593+00:00", + "inferred_at": "2026-01-09T19:51:06.606762+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RONALD-NIJBOER.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RONALD-NIJBOER.json index ee6fbbad6f..3873acc525 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RONALD-NIJBOER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_RONALD-NIJBOER.json @@ -214,7 +214,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ronaldnijboer_20251214T112443Z.json" ], - "modified_at": "2026-01-09T19:18:15.078025+00:00", + "modified_at": "2026-01-09T19:51:06.701065+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ronaldnijboer", @@ -237,7 +237,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -278,7 +278,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.078022+00:00", + "inferred_at": "2026-01-09T19:51:06.701059+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_SANDER-DAAMS.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SANDER-DAAMS.json similarity index 77% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_SANDER-DAAMS.json rename to data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SANDER-DAAMS.json index 22140315ba..4305454628 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_SANDER-DAAMS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SANDER-DAAMS.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_SANDER-DAAMS", + "ppid": "ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SANDER-DAAMS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "198X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "SANDER", "DAAMS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Sander Daams", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -205,73 +211,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sander-daams-97705965_20251214T111341Z.json" ], - "modified_at": "2026-01-09T18:58:10.997981+00:00", + "modified_at": "2026-01-09T19:50:59.311102+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sander-daams-97705965", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Greater Groningen Area (NL)" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "Rijksmuseum", - "title": "Hoofd Onderwijs / Head of Schoolprogrammes", - "location": "Amsterdam, Netherlands" - } - }, - { - "step": 3, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 4, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T18:58:10.997967+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SANDER-DAAMS", @@ -281,6 +224,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_SANDER-DAAMS", + "new_ppid": "ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SANDER-DAAMS", + "changed_at": "2026-01-09T19:43:38.648005+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1989 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "BURO KOM", + "title": "Founder", + "date_range": "2012" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2012 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2012 - 23 = 1989", + "result": "Estimated birth year: 1989", + "range": "1984-1994 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1984, + 1994 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:59.311095+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SANDRA-PASTOOR.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SANDRA-PASTOOR.json index 061e20bbfc..eb14e5b50f 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SANDRA-PASTOOR.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SANDRA-PASTOOR.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sandrapastoor_20251214T111413Z.json" ], - "modified_at": "2026-01-09T19:18:17.457510+00:00", + "modified_at": "2026-01-09T19:51:28.156852+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sandrapastoor", @@ -138,7 +138,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.457505+00:00", + "inferred_at": "2026-01-09T19:51:28.156848+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SARA-TAS.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SARA-TAS.json index 5519d35635..d3ff157fa5 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SARA-TAS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SARA-TAS.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sara-tas-b092692b_20251214T110052Z.json" ], - "modified_at": "2026-01-09T19:18:13.489483+00:00", + "modified_at": "2026-01-09T19:50:54.533334+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sara-tas-b092692b", @@ -159,7 +159,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.489476+00:00", + "inferred_at": "2026-01-09T19:50:54.533327+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SARAH-SPRENGER.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SARAH-SPRENGER.json index 28db67c7b5..4e11b1a10e 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SARAH-SPRENGER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SARAH-SPRENGER.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sarah-sprenger-3888369_20251214T110203Z.json" ], - "modified_at": "2026-01-09T19:18:12.954180+00:00", + "modified_at": "2026-01-09T19:50:49.597214+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sarah-sprenger-3888369", @@ -146,7 +146,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.954176+00:00", + "inferred_at": "2026-01-09T19:50:49.597208+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SASHA-STONE.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SASHA-STONE.json index 7c9ad42c6a..4a25ca78ca 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SASHA-STONE.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SASHA-STONE.json @@ -255,7 +255,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sasha-stone-29156a10_20251214T111614Z.json" ], - "modified_at": "2026-01-09T19:18:16.027905+00:00", + "modified_at": "2026-01-09T19:51:16.722537+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sasha-stone-29156a10", @@ -284,7 +284,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -333,7 +333,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.027899+00:00", + "inferred_at": "2026-01-09T19:51:16.722529+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SHANNON-MUIJDEN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SHANNON-MUIJDEN.json index a2c7e4140e..746d6dad49 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SHANNON-MUIJDEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SHANNON-MUIJDEN.json @@ -186,7 +186,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/svmuijden_20251214T111300Z.json" ], - "modified_at": "2026-01-09T19:18:15.284925+00:00", + "modified_at": "2026-01-09T19:51:08.354193+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "svmuijden", @@ -215,7 +215,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -264,7 +264,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.284921+00:00", + "inferred_at": "2026-01-09T19:51:08.354184+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SHANOY-KOEL.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SHANOY-KOEL.json index 3296295f2e..2cf725a8fd 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SHANOY-KOEL.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SHANOY-KOEL.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/shanoy-koel-050b6361_20251214T110225Z.json" ], - "modified_at": "2026-01-09T19:18:11.663199+00:00", + "modified_at": "2026-01-09T19:51:17.607029+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "shanoy-koel-050b6361", @@ -136,7 +136,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.663185+00:00", + "inferred_at": "2026-01-09T19:51:17.607021+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SIETSE-WIELENGA.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SIETSE-WIELENGA.json index 3dc3cce7ec..b653043ae7 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SIETSE-WIELENGA.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SIETSE-WIELENGA.json @@ -212,7 +212,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sietsewielenga_20251214T110252Z.json" ], - "modified_at": "2026-01-09T19:18:14.044583+00:00", + "modified_at": "2026-01-09T19:51:05.504199+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sietsewielenga", @@ -250,7 +250,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -299,7 +299,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.044577+00:00", + "inferred_at": "2026-01-09T19:51:05.504193+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SIHAM-RAZOUKI.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SIHAM-RAZOUKI.json index 8fedd4b99f..aa35597fbd 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SIHAM-RAZOUKI.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SIHAM-RAZOUKI.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/siham-el-razouki-20099858_20251214T112125Z.json" ], - "modified_at": "2026-01-09T19:18:13.397219+00:00", + "modified_at": "2026-01-09T19:51:04.031616+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "siham-el-razouki-20099858", @@ -163,7 +163,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.397212+00:00", + "inferred_at": "2026-01-09T19:51:04.031612+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SONIA-GUNNINGLIEVAART.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SONIA-GUNNINGLIEVAART.json index 06e70b4db0..b5728538f8 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SONIA-GUNNINGLIEVAART.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SONIA-GUNNINGLIEVAART.json @@ -194,7 +194,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sonia-gunning-lievaart-364a1665_20251214T110048Z.json" ], - "modified_at": "2026-01-09T19:18:14.146479+00:00", + "modified_at": "2026-01-09T19:50:48.896747+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sonia-gunning-lievaart-364a1665", @@ -226,7 +226,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -267,7 +267,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.146472+00:00", + "inferred_at": "2026-01-09T19:50:48.896740+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_STEFANIE-WEELAND.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_STEFANIE-WEELAND.json index 42a73dbaa7..1905cf7652 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_STEFANIE-WEELAND.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_STEFANIE-WEELAND.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stefanie-weeland-53970b25_20251214T112657Z.json" ], - "modified_at": "2026-01-09T19:18:16.883599+00:00", + "modified_at": "2026-01-09T19:51:22.334624+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stefanie-weeland-53970b25", @@ -193,7 +193,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +242,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.883594+00:00", + "inferred_at": "2026-01-09T19:51:22.334620+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_STEPHANIE-ARCHANGEL.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_STEPHANIE-ARCHANGEL.json index 77e7f6c2b0..f87e0c39d5 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_STEPHANIE-ARCHANGEL.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_STEPHANIE-ARCHANGEL.json @@ -175,8 +175,14 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T01:30:00Z", + "search_queries": [ + "\"Stephanie Archangel\" conservator Rijksmuseum born birthday biography", + "\"Stephanie Archangel\" geboren 1980 1981 1982 1983 1984 1985 biography" + ], + "result": "not_found", + "notes": "Web search conducted via Exa; found extensive professional info (Slavery exhibition, Black in Rembrandt's Time) but no birth date" } }, "provenance": { @@ -185,7 +191,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stephanie-archangel-86495b30_20251214T111311Z.json" ], - "modified_at": "2026-01-09T19:18:15.998100+00:00", + "modified_at": "2026-01-09T19:50:46.682105+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stephanie-archangel-86495b30", @@ -223,7 +229,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -272,7 +278,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.998089+00:00", + "inferred_at": "2026-01-09T19:50:46.682099+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SVEN-STEVENSON.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SVEN-STEVENSON.json index e45d24b0d4..285dba84ed 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SVEN-STEVENSON.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_SVEN-STEVENSON.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/svenstevenson_20251214T112612Z.json" ], - "modified_at": "2026-01-09T19:18:15.071665+00:00", + "modified_at": "2026-01-09T19:51:06.675927+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "svenstevenson", @@ -167,7 +167,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.071661+00:00", + "inferred_at": "2026-01-09T19:51:06.675916+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_THIJS-GERBRANDY.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_THIJS-GERBRANDY.json index fa9d0c1d51..913cc5c185 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_THIJS-GERBRANDY.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_THIJS-GERBRANDY.json @@ -216,7 +216,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thijs-gerbrandy-029a1534_20251214T110010Z.json" ], - "modified_at": "2026-01-09T19:18:15.258513+00:00", + "modified_at": "2026-01-09T19:51:07.641900+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thijs-gerbrandy-029a1534", @@ -245,7 +245,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -294,7 +294,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.258509+00:00", + "inferred_at": "2026-01-09T19:51:07.641890+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_VALERIA-MARTIELLI.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_VALERIA-MARTIELLI.json index 2902192cab..ec6b749863 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_VALERIA-MARTIELLI.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_VALERIA-MARTIELLI.json @@ -252,7 +252,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/valeriamartielli_20251214T111326Z.json" ], - "modified_at": "2026-01-09T19:18:15.028732+00:00", + "modified_at": "2026-01-09T19:51:06.608207+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "valeriamartielli", @@ -281,7 +281,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -330,7 +330,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.028728+00:00", + "inferred_at": "2026-01-09T19:51:06.608195+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_VALERIA-VASILYEVA.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_VALERIA-VASILYEVA.json index 3316530af7..e14ffa8282 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_VALERIA-VASILYEVA.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_VALERIA-VASILYEVA.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/valeriavasilyeva_20251214T110330Z.json" ], - "modified_at": "2026-01-09T19:18:17.115637+00:00", + "modified_at": "2026-01-09T19:50:49.076601+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "valeriavasilyeva", @@ -146,7 +146,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.115632+00:00", + "inferred_at": "2026-01-09T19:50:49.076596+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_VIRGINIO-MIDILI.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_VIRGINIO-MIDILI.json index c92c911990..114a77dde3 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_VIRGINIO-MIDILI.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_VIRGINIO-MIDILI.json @@ -194,7 +194,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/virginiomidili_20251214T110821Z.json" ], - "modified_at": "2026-01-09T19:18:15.029586+00:00", + "modified_at": "2026-01-09T19:51:06.610182+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "virginiomidili", @@ -217,7 +217,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.029583+00:00", + "inferred_at": "2026-01-09T19:51:06.610177+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_WARD-BERENSCHOT.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_WARD-BERENSCHOT.json index d2b2a9efbb..0ee81d6c0e 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_WARD-BERENSCHOT.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_WARD-BERENSCHOT.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ward-berenschot-a14ab534_20251214T103727Z.json" ], - "modified_at": "2026-01-09T19:18:13.827008+00:00", + "modified_at": "2026-01-09T19:50:56.653322+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ward-berenschot-a14ab534", @@ -127,7 +127,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.827004+00:00", + "inferred_at": "2026-01-09T19:50:56.653299+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_WILLEMIJN-BERG.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_WILLEMIJN-BERG.json index 2b23941294..031a4db53f 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_WILLEMIJN-BERG.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-AMS_XXXX_WILLEMIJN-BERG.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vandenbergwillemijn_20251214T111412Z.json" ], - "modified_at": "2026-01-09T19:18:15.281147+00:00", + "modified_at": "2026-01-09T19:50:46.715901+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vandenbergwillemijn", @@ -183,7 +183,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.281140+00:00", + "inferred_at": "2026-01-09T19:50:46.715893+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-BUS_XXXX_ROOS-MUNTENRONNER.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-BUS_XXXX_ROOS-MUNTENRONNER.json index 5c89e87670..d6606df940 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-BUS_XXXX_ROOS-MUNTENRONNER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-BUS_XXXX_ROOS-MUNTENRONNER.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roos-munten-ronner-8698ab9a_20251214T111425Z.json" ], - "modified_at": "2026-01-09T19:18:16.768122+00:00", + "modified_at": "2026-01-09T19:51:21.927320+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "roos-munten-ronner-8698ab9a", @@ -148,7 +148,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.768118+00:00", + "inferred_at": "2026-01-09T19:51:21.927314+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_ALISSA-REIJNDERS.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_ALISSA-REIJNDERS.json index 81ca63bb9f..2f72196120 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_ALISSA-REIJNDERS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_ALISSA-REIJNDERS.json @@ -299,7 +299,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alissareijnders_20251214T102734Z.json" ], - "modified_at": "2026-01-09T19:18:16.912653+00:00", + "modified_at": "2026-01-09T19:51:22.508170+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alissareijnders", @@ -328,7 +328,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -377,7 +377,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.912648+00:00", + "inferred_at": "2026-01-09T19:51:22.508164+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_ANTOINET-NIJSSEN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_ANTOINET-NIJSSEN.json index 1bde2b1da1..c3fd2bb50f 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_ANTOINET-NIJSSEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_ANTOINET-NIJSSEN.json @@ -197,7 +197,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/antoinet-nijssen-2b5722146_20251214T102656Z.json" ], - "modified_at": "2026-01-09T19:18:14.994723+00:00", + "modified_at": "2026-01-09T19:51:05.898271+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "antoinet-nijssen-2b5722146", @@ -235,7 +235,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -284,7 +284,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.994716+00:00", + "inferred_at": "2026-01-09T19:51:05.898204+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_HANNAH-GOEDBLOED.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_HANNAH-GOEDBLOED.json index a93f37d859..d097dae741 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_HANNAH-GOEDBLOED.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_HANNAH-GOEDBLOED.json @@ -215,7 +215,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hannah-goedbloed-95b66227_20251214T102714Z.json" ], - "modified_at": "2026-01-09T19:18:12.107939+00:00", + "modified_at": "2026-01-09T19:50:47.445101+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hannah-goedbloed-95b66227", @@ -238,7 +238,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -279,7 +279,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.107932+00:00", + "inferred_at": "2026-01-09T19:50:47.445094+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_WENDY-LITH.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_WENDY-LITH.json index 40b97931f4..7cf0021260 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_WENDY-LITH.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-HAA_XXXX_WENDY-LITH.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wendyvanlith_20251214T111523Z.json" ], - "modified_at": "2026-01-09T19:18:15.720194+00:00", + "modified_at": "2026-01-09T19:51:05.600984+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wendyvanlith", @@ -198,7 +198,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.720189+00:00", + "inferred_at": "2026-01-09T19:51:05.600975+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-HEE_XXXX_SARAH-BROEKHOVEN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-HEE_XXXX_SARAH-BROEKHOVEN.json index 88f9589997..8b4c48c5aa 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-HEE_XXXX_SARAH-BROEKHOVEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-HEE_XXXX_SARAH-BROEKHOVEN.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sarah-broekhoven-5753aa5_20251214T110011Z.json" ], - "modified_at": "2026-01-09T19:18:14.746729+00:00", + "modified_at": "2026-01-09T19:51:03.369284+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sarah-broekhoven-5753aa5", @@ -179,7 +179,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.746724+00:00", + "inferred_at": "2026-01-09T19:51:03.369279+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-HEE_XXXX_VERA-WIERSEMA.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-HEE_XXXX_VERA-WIERSEMA.json index 3e1975a85e..10d6494d36 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-HEE_XXXX_VERA-WIERSEMA.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-HEE_XXXX_VERA-WIERSEMA.json @@ -179,7 +179,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vera-wiersema-00832088_20251212T180000Z.json" ], - "modified_at": "2026-01-09T19:18:14.382017+00:00", + "modified_at": "2026-01-09T19:50:48.673438+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vera-wiersema-00832088", @@ -218,7 +218,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.382012+00:00", + "inferred_at": "2026-01-09T19:50:48.673430+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-HEI_XXXX_BARTJAN-STEEN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-HEI_XXXX_BARTJAN-STEEN.json index 5e2dd7c222..4a7b425c8f 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-HEI_XXXX_BARTJAN-STEEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-HEI_XXXX_BARTJAN-STEEN.json @@ -163,7 +163,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bart-jan-van-der-steen-574b4231_20251214T111402Z.json" ], - "modified_at": "2026-01-09T19:18:15.281825+00:00", + "modified_at": "2026-01-09T19:51:07.896872+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bart-jan-van-der-steen-574b4231", @@ -186,7 +186,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.281820+00:00", + "inferred_at": "2026-01-09T19:51:07.896847+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-HIL_XXXX_CLAIRE-PHANTANLUU.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-HIL_XXXX_CLAIRE-PHANTANLUU.json index 849b18e9eb..6dc7d81589 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-HIL_XXXX_CLAIRE-PHANTANLUU.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-HIL_XXXX_CLAIRE-PHANTANLUU.json @@ -194,7 +194,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cphantanluu_20251214T112920Z.json" ], - "modified_at": "2026-01-09T19:18:12.753818+00:00", + "modified_at": "2026-01-09T19:50:48.804582+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cphantanluu", @@ -217,7 +217,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.753811+00:00", + "inferred_at": "2026-01-09T19:50:48.804574+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-KRO_XXXX_SUZANNE-KROM.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-KRO_XXXX_SUZANNE-KROM.json index b81855dc63..289adb68d6 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-KRO_XXXX_SUZANNE-KROM.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-KRO_XXXX_SUZANNE-KROM.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/suzannekrom_20251214T110226Z.json" ], - "modified_at": "2026-01-09T19:18:15.457663+00:00", + "modified_at": "2026-01-09T19:51:10.882190+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "suzannekrom", @@ -204,7 +204,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -253,7 +253,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.457659+00:00", + "inferred_at": "2026-01-09T19:51:10.882186+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-PUR_XXXX_MATHILDE-KORS.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-PUR_XXXX_MATHILDE-KORS.json index 6a02382f06..b1898b1687 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-PUR_XXXX_MATHILDE-KORS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-PUR_XXXX_MATHILDE-KORS.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mathilde-kors-08b63930_20251214T113213Z.json" ], - "modified_at": "2026-01-09T19:18:14.626802+00:00", + "modified_at": "2026-01-09T19:51:22.510344+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mathilde-kors-08b63930", @@ -134,7 +134,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.626796+00:00", + "inferred_at": "2026-01-09T19:51:22.510340+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-NH-ZAA_XXXX_BRIAN-KERKHOVEN.json b/data/person/ID_NL-NH-AMS_198X_NL-NH-ZAA_XXXX_BRIAN-KERKHOVEN.json index 1e2fe2ccb6..86b32bbe3c 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-NH-ZAA_XXXX_BRIAN-KERKHOVEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-NH-ZAA_XXXX_BRIAN-KERKHOVEN.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/brian-kerkhoven-106a01a_20251214T110031Z.json" ], - "modified_at": "2026-01-09T19:18:13.555593+00:00", + "modified_at": "2026-01-09T19:50:54.653803+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "brian-kerkhoven-106a01a", @@ -145,7 +145,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.555589+00:00", + "inferred_at": "2026-01-09T19:50:54.653798+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-OV-NED_XXXX_ROXANNE-DEKKER.json b/data/person/ID_NL-NH-AMS_198X_NL-OV-NED_XXXX_ROXANNE-DEKKER.json index 68e165b8e8..9fcd70de41 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-OV-NED_XXXX_ROXANNE-DEKKER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-OV-NED_XXXX_ROXANNE-DEKKER.json @@ -391,7 +391,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roxanne-dekker-35567617_20251214T110329Z.json" ], - "modified_at": "2026-01-09T19:18:13.232366+00:00", + "modified_at": "2026-01-09T19:50:53.679139+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "roxanne-dekker-35567617", @@ -420,7 +420,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -469,7 +469,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.232362+00:00", + "inferred_at": "2026-01-09T19:50:53.679131+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-OV-ZWO_XXXX_ANNEMIEK-PUNTER.json b/data/person/ID_NL-NH-AMS_198X_NL-OV-ZWO_XXXX_ANNEMIEK-PUNTER.json index e928c1150b..57d285d161 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-OV-ZWO_XXXX_ANNEMIEK-PUNTER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-OV-ZWO_XXXX_ANNEMIEK-PUNTER.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annemiekpunter_20251212T233000Z.json" ], - "modified_at": "2026-01-09T19:18:13.702588+00:00", + "modified_at": "2026-01-09T19:50:55.774684+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annemiekpunter", @@ -201,7 +201,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -250,7 +250,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.702584+00:00", + "inferred_at": "2026-01-09T19:50:55.774677+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-UT-AME_XXXX_MARLIJN-FLEER.json b/data/person/ID_NL-NH-AMS_198X_NL-UT-AME_XXXX_MARLIJN-FLEER.json index 22eced6da8..69d2643b0e 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-UT-AME_XXXX_MARLIJN-FLEER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-UT-AME_XXXX_MARLIJN-FLEER.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marlijn-fleer-7535a0113_20251214T111802Z.json" ], - "modified_at": "2026-01-09T19:18:16.763363+00:00", + "modified_at": "2026-01-09T19:51:21.821055+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marlijn-fleer-7535a0113", @@ -149,7 +149,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.763359+00:00", + "inferred_at": "2026-01-09T19:51:21.821048+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-UT-AME_XXXX_PETRA-LINKS.json b/data/person/ID_NL-NH-AMS_198X_NL-UT-AME_XXXX_PETRA-LINKS.json index dad941aae4..e4829f79e9 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-UT-AME_XXXX_PETRA-LINKS.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-UT-AME_XXXX_PETRA-LINKS.json @@ -183,7 +183,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/petralinks_20251214T113100Z.json" ], - "modified_at": "2026-01-09T19:18:12.267982+00:00", + "modified_at": "2026-01-09T19:50:47.494231+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "petralinks", @@ -206,7 +206,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +247,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.267975+00:00", + "inferred_at": "2026-01-09T19:50:47.494224+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-UT-SOE_XXXX_DENNIS-VELTROP.json b/data/person/ID_NL-NH-AMS_198X_NL-UT-SOE_XXXX_DENNIS-VELTROP.json index 8ab776c1ad..2453b4ca5a 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-UT-SOE_XXXX_DENNIS-VELTROP.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-UT-SOE_XXXX_DENNIS-VELTROP.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dennisveltrop_20251214T112936Z.json" ], - "modified_at": "2026-01-09T19:18:14.880967+00:00", + "modified_at": "2026-01-09T19:51:05.308099+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dennisveltrop", @@ -165,7 +165,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.880961+00:00", + "inferred_at": "2026-01-09T19:51:05.308085+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_ARTHUR-MULLER.json b/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_ARTHUR-MULLER.json index 7981d01b4e..36eb71dcde 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_ARTHUR-MULLER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_ARTHUR-MULLER.json @@ -183,7 +183,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mullerarthur_20251214T113325Z.json" ], - "modified_at": "2026-01-09T19:18:12.975633+00:00", + "modified_at": "2026-01-09T19:50:49.619479+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mullerarthur", @@ -212,7 +212,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -261,7 +261,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.975629+00:00", + "inferred_at": "2026-01-09T19:50:49.619473+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_FRANCISCA-PRIEM.json b/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_FRANCISCA-PRIEM.json index bdade766a8..c73d1c4b69 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_FRANCISCA-PRIEM.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_FRANCISCA-PRIEM.json @@ -280,7 +280,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/franciscapriem_20251214T113012Z.json" ], - "modified_at": "2026-01-09T19:18:13.662629+00:00", + "modified_at": "2026-01-09T19:51:03.397713+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "franciscapriem", @@ -318,7 +318,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -367,7 +367,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.662623+00:00", + "inferred_at": "2026-01-09T19:51:03.397709+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_IVAN-HENCZYK.json b/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_IVAN-HENCZYK.json index baf0ffbc7d..b725940a33 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_IVAN-HENCZYK.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_IVAN-HENCZYK.json @@ -167,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ivanhenczyk_20251214T102743Z.json" ], - "modified_at": "2026-01-09T19:18:13.395558+00:00", + "modified_at": "2026-01-09T19:50:54.015496+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ivanhenczyk", @@ -196,7 +196,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +245,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.395554+00:00", + "inferred_at": "2026-01-09T19:50:54.015489+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_NINA-POST.json b/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_NINA-POST.json index 019a2f9fd0..a03c18dc2f 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_NINA-POST.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-UT-UTR_XXXX_NINA-POST.json @@ -172,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nina-post-09643027_20251212T181500Z.json" ], - "modified_at": "2026-01-09T19:18:14.143158+00:00", + "modified_at": "2026-01-09T19:50:58.713224+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nina-post-09643027", @@ -209,7 +209,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.143151+00:00", + "inferred_at": "2026-01-09T19:50:58.713215+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-UT-WOE_XXXX_DEBORA-DHONTDIELEMAN.json b/data/person/ID_NL-NH-AMS_198X_NL-UT-WOE_XXXX_DEBORA-DHONTDIELEMAN.json index 511eaa99a9..ef1381bcc5 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-UT-WOE_XXXX_DEBORA-DHONTDIELEMAN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-UT-WOE_XXXX_DEBORA-DHONTDIELEMAN.json @@ -303,7 +303,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mijndma_20251214T104138Z.json" ], - "modified_at": "2026-01-09T19:18:16.190564+00:00", + "modified_at": "2026-01-09T19:51:18.281432+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mijndma", @@ -332,7 +332,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -381,7 +381,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.190560+00:00", + "inferred_at": "2026-01-09T19:51:18.281425+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-AAD_XXXX_MARCO-ROLING.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-AAD_XXXX_MARCO-ROLING.json index ac4d073f7a..de02f0d8d3 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-AAD_XXXX_MARCO-ROLING.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-AAD_XXXX_MARCO-ROLING.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marcoroling_20251214T104212Z.json" ], - "modified_at": "2026-01-09T19:18:13.709475+00:00", + "modified_at": "2026-01-09T19:50:55.888649+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marcoroling", @@ -174,7 +174,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.709471+00:00", + "inferred_at": "2026-01-09T19:50:55.888643+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-DOR_XXXX_ELLA-KOKMAJEWSKA.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-DOR_XXXX_ELLA-KOKMAJEWSKA.json index 56516915fd..772e2ef624 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-DOR_XXXX_ELLA-KOKMAJEWSKA.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-DOR_XXXX_ELLA-KOKMAJEWSKA.json @@ -211,7 +211,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ellakokmajewska_20251214T110334Z.json" ], - "modified_at": "2026-01-09T19:18:17.413400+00:00", + "modified_at": "2026-01-09T19:51:28.001790+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ellakokmajewska", @@ -240,7 +240,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -289,7 +289,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.413381+00:00", + "inferred_at": "2026-01-09T19:51:28.001782+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-HIL_XXXX_NATALIE-GROOT.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-HIL_XXXX_NATALIE-GROOT.json index 7f0148583c..102f2c2c32 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-HIL_XXXX_NATALIE-GROOT.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-HIL_XXXX_NATALIE-GROOT.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nataliedegroot_20251214T111726Z.json" ], - "modified_at": "2026-01-09T19:18:11.366815+00:00", + "modified_at": "2026-01-09T19:50:46.730288+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nataliedegroot", @@ -156,7 +156,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.366809+00:00", + "inferred_at": "2026-01-09T19:50:46.730280+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_GRACIELLA-ROOSIEN.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_GRACIELLA-ROOSIEN.json index 93fcd2ccdf..b80d55ba73 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_GRACIELLA-ROOSIEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_GRACIELLA-ROOSIEN.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/graciellaroosien_20251214T111338Z.json" ], - "modified_at": "2026-01-09T19:18:13.264856+00:00", + "modified_at": "2026-01-09T19:50:53.722446+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "graciellaroosien", @@ -176,7 +176,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.264852+00:00", + "inferred_at": "2026-01-09T19:50:53.722439+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_JOS-BOERTIES.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_JOS-BOERTIES.json index 3b9c526797..0c319ae4da 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_JOS-BOERTIES.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_JOS-BOERTIES.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/josboerties_20251214T112601Z.json" ], - "modified_at": "2026-01-09T19:18:11.853699+00:00", + "modified_at": "2026-01-09T19:50:47.331146+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "josboerties", @@ -191,7 +191,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.853670+00:00", + "inferred_at": "2026-01-09T19:50:47.331139+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_MAAIKE-PILGRAM.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_MAAIKE-PILGRAM.json index 5bea4ddfc4..dbd2923164 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_MAAIKE-PILGRAM.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_MAAIKE-PILGRAM.json @@ -307,7 +307,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maaikepilgram_20251214T111532Z.json" ], - "modified_at": "2026-01-09T19:18:13.798282+00:00", + "modified_at": "2026-01-09T19:50:56.589926+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maaikepilgram", @@ -330,7 +330,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -371,7 +371,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.798277+00:00", + "inferred_at": "2026-01-09T19:50:56.589921+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_URI-SHIMRON.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_URI-SHIMRON.json index 7e78067aee..807d9ff1d5 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_URI-SHIMRON.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-LEI_XXXX_URI-SHIMRON.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/urishimron_20251214T112735Z.json" ], - "modified_at": "2026-01-09T19:18:16.432397+00:00", + "modified_at": "2026-01-09T19:51:18.481957+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "urishimron", @@ -184,7 +184,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.432390+00:00", + "inferred_at": "2026-01-09T19:51:18.481951+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-ROT_XXXX_LIES-BRILLEMAN.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-ROT_XXXX_LIES-BRILLEMAN.json index 0659fc037d..5e91dd8884 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-ROT_XXXX_LIES-BRILLEMAN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-ROT_XXXX_LIES-BRILLEMAN.json @@ -191,7 +191,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lies-brilleman-05081794_20251214T110304Z.json" ], - "modified_at": "2026-01-09T19:18:16.027116+00:00", + "modified_at": "2026-01-09T19:51:16.721791+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lies-brilleman-05081794", @@ -220,7 +220,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -269,7 +269,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.027111+00:00", + "inferred_at": "2026-01-09T19:51:16.721782+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-ROT_XXXX_STEFAN-KULK.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-ROT_XXXX_STEFAN-KULK.json index 3b07318b1e..ff59e874bd 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-ROT_XXXX_STEFAN-KULK.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-ROT_XXXX_STEFAN-KULK.json @@ -215,7 +215,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stefankulk_20251214T112606Z.json" ], - "modified_at": "2026-01-09T19:18:19.011370+00:00", + "modified_at": "2026-01-09T19:51:34.140937+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stefankulk", @@ -238,7 +238,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -279,7 +279,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:19.011364+00:00", + "inferred_at": "2026-01-09T19:51:34.140932+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ANNEKATELIJNE-ROTTEVEEL.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ANNEKATELIJNE-ROTTEVEEL.json index 3de5ee0fb4..4b5ccf7bb6 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ANNEKATELIJNE-ROTTEVEEL.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ANNEKATELIJNE-ROTTEVEEL.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-katelijne-rotteveel-9716bb79_20251214T113428Z.json" ], - "modified_at": "2026-01-09T19:18:11.618935+00:00", + "modified_at": "2026-01-09T19:50:47.216955+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-katelijne-rotteveel-9716bb79", @@ -174,7 +174,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.618925+00:00", + "inferred_at": "2026-01-09T19:50:47.216924+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ARJAN-JONG.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ARJAN-JONG.json index 4f405484a4..28f3d590a8 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ARJAN-JONG.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ARJAN-JONG.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arrjan_20251214T102925Z.json" ], - "modified_at": "2026-01-09T19:18:14.694091+00:00", + "modified_at": "2026-01-09T19:51:03.365722+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arrjan", @@ -153,7 +153,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.694086+00:00", + "inferred_at": "2026-01-09T19:51:03.365716+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_DR-JANSSEN.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_DR-JANSSEN.json similarity index 75% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_DR-JANSSEN.json rename to data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_DR-JANSSEN.json index 3e88077fd6..22bf14b3d8 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_DR-JANSSEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_DR-JANSSEN.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_DR-JANSSEN", + "ppid": "ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_DR-JANSSEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "198X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "DR", "JANSSEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "dr. mr. A.N.P. (Anouk Neeltje Pauline) Janssen", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -171,73 +177,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anouk-janssen-29b8339_20251214T113253Z.json" ], - "modified_at": "2026-01-09T18:58:13.296069+00:00", + "modified_at": "2026-01-09T19:51:29.493967+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anouk-janssen-29b8339", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Randstad, Netherlands (NL)" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "KB nationale bibliotheek", - "title": "Hoofd Bestuurs- en Organisatiezaken / Directiesecretaris", - "location": "The Hague, Netherlands" - } - }, - { - "step": 3, - "geocoding": "GeoNames resolution", - "query": "The Hague, Netherlands", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 4, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T18:58:13.296050+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DR-JANSSEN", @@ -247,6 +190,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_DR-JANSSEN", + "new_ppid": "ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_DR-JANSSEN", + "changed_at": "2026-01-09T19:43:39.997201+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1984 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Rijksmuseum", + "title": "Conservator, Afdeling Nederlandse Geschiedenis", + "date_range": "2007 - 2008" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2007 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2007 - 23 = 1984", + "result": "Estimated birth year: 1984", + "range": "1979-1989 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1979, + 1989 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:29.493962+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ERWIN-VISSER.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ERWIN-VISSER.json index 08055ad08d..687aed098a 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ERWIN-VISSER.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ERWIN-VISSER.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erwinvisser_20251214T103317Z.json" ], - "modified_at": "2026-01-09T19:18:16.110188+00:00", + "modified_at": "2026-01-09T19:50:46.863609+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erwinvisser", @@ -161,7 +161,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.110181+00:00", + "inferred_at": "2026-01-09T19:50:46.863594+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ILONKA-KOLTHOF.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ILONKA-KOLTHOF.json index f3cccb1484..54df2a4dd1 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ILONKA-KOLTHOF.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_ILONKA-KOLTHOF.json @@ -187,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ilonkakolthof_20251214T112523Z.json" ], - "modified_at": "2026-01-09T19:18:15.729913+00:00", + "modified_at": "2026-01-09T19:51:25.531772+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ilonkakolthof", @@ -225,7 +225,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -274,7 +274,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.729906+00:00", + "inferred_at": "2026-01-09T19:51:25.531769+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_LISA-KLEYENBERG.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_LISA-KLEYENBERG.json index 1372a79355..f6a7e1cc39 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_LISA-KLEYENBERG.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_LISA-KLEYENBERG.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lisavandenkleyenberg_20251214T110506Z.json" ], - "modified_at": "2026-01-09T19:18:16.117184+00:00", + "modified_at": "2026-01-09T19:51:17.562953+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lisavandenkleyenberg", @@ -174,7 +174,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.117180+00:00", + "inferred_at": "2026-01-09T19:51:17.562949+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_NOUT-WOUDENBERG.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_NOUT-WOUDENBERG.json index b72b86bc75..60e0b2fe22 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_NOUT-WOUDENBERG.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_NOUT-WOUDENBERG.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nout-van-woudenberg-473ab116_20251214T103043Z.json" ], - "modified_at": "2026-01-09T19:18:13.019284+00:00", + "modified_at": "2026-01-09T19:51:08.780841+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nout-van-woudenberg-473ab116", @@ -167,7 +167,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.019276+00:00", + "inferred_at": "2026-01-09T19:51:08.780832+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_SIMONE-POST.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_SIMONE-POST.json index 9ff76fe9be..686ae4cdb8 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_SIMONE-POST.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_SIMONE-POST.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/simone-van-der-post-24747a44_20251214T103234Z.json" ], - "modified_at": "2026-01-09T19:18:18.250144+00:00", + "modified_at": "2026-01-09T19:51:29.239249+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "simone-van-der-post-24747a44", @@ -171,7 +171,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.250132+00:00", + "inferred_at": "2026-01-09T19:51:29.239245+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_STEPHANIE-DEIJEN.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_STEPHANIE-DEIJEN.json index 3e9a9370fd..5267d94974 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_STEPHANIE-DEIJEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_STEPHANIE-DEIJEN.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stephanie-deijen-bb8263b_20251214T111621Z.json" ], - "modified_at": "2026-01-09T19:18:15.554629+00:00", + "modified_at": "2026-01-09T19:51:12.099619+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stephanie-deijen-bb8263b", @@ -140,7 +140,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.554625+00:00", + "inferred_at": "2026-01-09T19:51:12.099605+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_TAMARA-VENEMA.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_TAMARA-VENEMA.json index 8231111cf3..98c21a8918 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_TAMARA-VENEMA.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_TAMARA-VENEMA.json @@ -160,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tamara-venema-b1505722_20251214T111705Z.json" ], - "modified_at": "2026-01-09T19:18:13.175613+00:00", + "modified_at": "2026-01-09T19:50:53.216665+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tamara-venema-b1505722", @@ -183,7 +183,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.175608+00:00", + "inferred_at": "2026-01-09T19:50:53.216659+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_THOMAS-VERGNA.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_THOMAS-VERGNA.json index e46c8f8151..6a4f4c0f8e 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_THOMAS-VERGNA.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_THOMAS-VERGNA.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thomas-vergna-88631727_20251214T102926Z.json" ], - "modified_at": "2026-01-09T19:18:13.766472+00:00", + "modified_at": "2026-01-09T19:50:46.720481+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thomas-vergna-88631727", @@ -199,7 +199,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -248,7 +248,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.766466+00:00", + "inferred_at": "2026-01-09T19:50:46.720476+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_VINCENT-KLEIJNEN.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_VINCENT-KLEIJNEN.json index a9e3792127..f050f798ca 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_VINCENT-KLEIJNEN.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_VINCENT-KLEIJNEN.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vincentkleijnen_20251214T112914Z.json" ], - "modified_at": "2026-01-09T19:18:13.893516+00:00", + "modified_at": "2026-01-09T19:50:56.763888+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vincentkleijnen", @@ -131,7 +131,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.893512+00:00", + "inferred_at": "2026-01-09T19:50:56.763878+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_WOUTERJAN-WOUDE.json b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_WOUTERJAN-WOUDE.json index 69e23895a0..24e36bc636 100644 --- a/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_WOUTERJAN-WOUDE.json +++ b/data/person/ID_NL-NH-AMS_198X_NL-ZH-TH_XXXX_WOUTERJAN-WOUDE.json @@ -265,7 +265,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wouter-jan-van-der-woude-525ba63_20251214T112628Z.json" ], - "modified_at": "2026-01-09T19:18:16.924430+00:00", + "modified_at": "2026-01-09T19:51:22.515069+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wouter-jan-van-der-woude-525ba63", @@ -294,7 +294,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -343,7 +343,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.924405+00:00", + "inferred_at": "2026-01-09T19:51:22.515064+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_CARLIJN-LIESHOUT.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_CARLIJN-LIESHOUT.json index db88fe31be..1f5617e393 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_CARLIJN-LIESHOUT.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_CARLIJN-LIESHOUT.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carlijn-van-lieshout-68465548_20251214T102754Z.json" ], - "modified_at": "2026-01-09T19:18:12.936092+00:00", + "modified_at": "2026-01-09T19:50:48.649752+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carlijn-van-lieshout-68465548", @@ -178,7 +178,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.931078+00:00", + "inferred_at": "2026-01-09T19:50:48.646702+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_CARMEN-GIMENEZ.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_CARMEN-GIMENEZ.json index 70bb5b3877..1834f405d6 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_CARMEN-GIMENEZ.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_CARMEN-GIMENEZ.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carmen-gimenez-3ab02a8b_20251214T113058Z.json" ], - "modified_at": "2026-01-09T19:18:16.709423+00:00", + "modified_at": "2026-01-09T19:51:21.535733+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carmen-gimenez-3ab02a8b", @@ -138,7 +138,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.707406+00:00", + "inferred_at": "2026-01-09T19:51:21.533857+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_CHRIS-PIETERSON.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_CHRIS-PIETERSON.json index 7f18e27f26..25d04c938c 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_CHRIS-PIETERSON.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_CHRIS-PIETERSON.json @@ -210,7 +210,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chris-pieterson-a851407b_20251214T103015Z.json" ], - "modified_at": "2026-01-09T19:18:13.291280+00:00", + "modified_at": "2026-01-09T19:50:47.042286+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "chris-pieterson-a851407b", @@ -247,7 +247,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -296,7 +296,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.289382+00:00", + "inferred_at": "2026-01-09T19:50:47.040092+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_DAVID-BOER.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_DAVID-BOER.json index 036dc25bfa..125f43a811 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_DAVID-BOER.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_DAVID-BOER.json @@ -304,7 +304,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daviddeboer_20251212T200000Z.json" ], - "modified_at": "2026-01-09T19:18:15.280328+00:00", + "modified_at": "2026-01-09T19:51:07.896039+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daviddeboer", @@ -326,7 +326,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -367,7 +367,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.278434+00:00", + "inferred_at": "2026-01-09T19:51:07.893807+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_EVELINE-BAAS.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_EVELINE-BAAS.json index 2380ff0490..063ccea91e 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_EVELINE-BAAS.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_EVELINE-BAAS.json @@ -273,7 +273,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/evelinebaas_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:13.564327+00:00", + "modified_at": "2026-01-09T19:50:55.063973+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "evelinebaas", @@ -301,7 +301,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -350,7 +350,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.562407+00:00", + "inferred_at": "2026-01-09T19:50:55.061850+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_FATIN-LUIJSTER.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_FATIN-LUIJSTER.json index ed689ca8e7..70a2aa0f99 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_FATIN-LUIJSTER.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_FATIN-LUIJSTER.json @@ -327,7 +327,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fatin-van-de-luijster-7a48b39a_20251214T111706Z.json" ], - "modified_at": "2026-01-09T19:18:11.271724+00:00", + "modified_at": "2026-01-09T19:50:46.709052+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fatin-van-de-luijster-7a48b39a", @@ -349,7 +349,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -390,7 +390,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.267239+00:00", + "inferred_at": "2026-01-09T19:50:46.706868+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_FLOOR-TEMPELAARS.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_FLOOR-TEMPELAARS.json index 9deb20f0f6..035380a25c 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_FLOOR-TEMPELAARS.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_FLOOR-TEMPELAARS.json @@ -288,7 +288,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/floor-tempelaars-31954a4a_20251214T102659Z.json" ], - "modified_at": "2026-01-09T19:18:16.354114+00:00", + "modified_at": "2026-01-09T19:51:18.406256+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "floor-tempelaars-31954a4a", @@ -316,7 +316,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -365,7 +365,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.351976+00:00", + "inferred_at": "2026-01-09T19:51:18.404353+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_HELEN-JOHNSON.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_HELEN-JOHNSON.json index 3c33fdf48b..5ee012b144 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_HELEN-JOHNSON.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_HELEN-JOHNSON.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/helenlydiajohnson_20251214T113408Z.json" ], - "modified_at": "2026-01-09T19:18:15.331617+00:00", + "modified_at": "2026-01-09T19:51:08.568130+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "helenlydiajohnson", @@ -170,7 +170,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.329684+00:00", + "inferred_at": "2026-01-09T19:51:08.565590+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_IRIS-FRERICHS.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_IRIS-FRERICHS.json index 5d20ea2c38..4003861cd0 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_IRIS-FRERICHS.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_IRIS-FRERICHS.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/irisfrerichs_20251214T112059Z.json" ], - "modified_at": "2026-01-09T19:18:11.446928+00:00", + "modified_at": "2026-01-09T19:50:46.902611+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "irisfrerichs", @@ -150,7 +150,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.444433+00:00", + "inferred_at": "2026-01-09T19:50:46.899051+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_IRMA-VRIES.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_IRMA-VRIES.json index 1f31f9619a..9f335fbf74 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_IRMA-VRIES.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_IRMA-VRIES.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/irma-de-vries-44749858_20251214T111710Z.json" ], - "modified_at": "2026-01-09T19:18:15.664669+00:00", + "modified_at": "2026-01-09T19:51:06.333039+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "irma-de-vries-44749858", @@ -206,7 +206,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -255,7 +255,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.662696+00:00", + "inferred_at": "2026-01-09T19:51:06.327934+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_JOERI-VOOGT.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_JOERI-VOOGT.json index b23d0d1e41..6a4a6f63ca 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_JOERI-VOOGT.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_JOERI-VOOGT.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joeri-voogt-138a80b_20251214T112433Z.json" ], - "modified_at": "2026-01-09T19:18:15.196672+00:00", + "modified_at": "2026-01-09T19:51:07.001485+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joeri-voogt-138a80b", @@ -163,7 +163,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.194646+00:00", + "inferred_at": "2026-01-09T19:51:06.999354+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_JORINDE-KOENEN.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_JORINDE-KOENEN.json index f3faf430c1..7630b164d3 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_JORINDE-KOENEN.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_JORINDE-KOENEN.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jorinde-koenen-368b101b_20251214T111806Z.json" ], - "modified_at": "2026-01-09T19:18:16.948079+00:00", + "modified_at": "2026-01-09T19:51:22.797290+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jorinde-koenen-368b101b", @@ -146,7 +146,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.948068+00:00", + "inferred_at": "2026-01-09T19:51:22.797279+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_MARGJE-VUGT.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_MARGJE-VUGT.json index 4787d69f3d..a8787903ba 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_MARGJE-VUGT.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_MARGJE-VUGT.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/margje-van-vugt-70401932_20251214T111352Z.json" ], - "modified_at": "2026-01-09T19:18:16.061837+00:00", + "modified_at": "2026-01-09T19:51:16.857242+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "margje-van-vugt-70401932", @@ -135,7 +135,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.058114+00:00", + "inferred_at": "2026-01-09T19:51:16.854992+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_MARIAN-COUSIJN.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_MARIAN-COUSIJN.json index 31578be419..8639647a8c 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_MARIAN-COUSIJN.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_MARIAN-COUSIJN.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marian-cousijn-b07a7849_20251214T111649Z.json" ], - "modified_at": "2026-01-09T19:18:13.755630+00:00", + "modified_at": "2026-01-09T19:51:20.514071+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marian-cousijn-b07a7849", @@ -189,7 +189,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.753733+00:00", + "inferred_at": "2026-01-09T19:51:20.512063+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_RABIEN-BABOELAL.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_RABIEN-BABOELAL.json index fb35608b0d..209ba3c35e 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_RABIEN-BABOELAL.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_RABIEN-BABOELAL.json @@ -189,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rabienbaboelal_20251214T103349Z.json" ], - "modified_at": "2026-01-09T19:18:14.302586+00:00", + "modified_at": "2026-01-09T19:51:00.094524+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rabienbaboelal", @@ -217,7 +217,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -266,7 +266,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.300491+00:00", + "inferred_at": "2026-01-09T19:51:00.091918+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_RANA-ABBAWI.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_RANA-ABBAWI.json index 3275f91a92..0300318599 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_RANA-ABBAWI.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_RANA-ABBAWI.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rana-abbawi-5058a75_20251214T102952Z.json" ], - "modified_at": "2026-01-09T19:18:13.062343+00:00", + "modified_at": "2026-01-09T19:51:10.691389+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rana-abbawi-5058a75", @@ -195,7 +195,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.060499+00:00", + "inferred_at": "2026-01-09T19:51:10.679694+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_ROBIN-MAAT.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_ROBIN-MAAT.json index b745011526..696832ed2b 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_ROBIN-MAAT.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_ROBIN-MAAT.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robin-van-der-maat-aa482333_20251214T111421Z.json" ], - "modified_at": "2026-01-09T19:18:15.328661+00:00", + "modified_at": "2026-01-09T19:50:58.343033+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robin-van-der-maat-aa482333", @@ -155,7 +155,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.326689+00:00", + "inferred_at": "2026-01-09T19:50:58.340912+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_ROMY-MUSTE.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_ROMY-MUSTE.json index 82fac2d8f0..e553613e78 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_ROMY-MUSTE.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_ROMY-MUSTE.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/romy-muste-a090a81a_20251214T110021Z.json" ], - "modified_at": "2026-01-09T19:18:14.216761+00:00", + "modified_at": "2026-01-09T19:50:58.914084+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "romy-muste-a090a81a", @@ -190,7 +190,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +231,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.209126+00:00", + "inferred_at": "2026-01-09T19:50:58.902895+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_SASCHA-MEER.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_SASCHA-MEER.json index aa303a9f46..b9d743d7a1 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_SASCHA-MEER.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_SASCHA-MEER.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sascha-van-der-meer-a9a6a110_20251214T104020Z.json" ], - "modified_at": "2026-01-09T19:18:16.850475+00:00", + "modified_at": "2026-01-09T19:51:22.311920+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sascha-van-der-meer-a9a6a110", @@ -197,7 +197,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +246,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.848560+00:00", + "inferred_at": "2026-01-09T19:51:22.310135+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_SERWENDA-JONGBLOED.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_SERWENDA-JONGBLOED.json index 0705b9679e..78361e4be6 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_SERWENDA-JONGBLOED.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_SERWENDA-JONGBLOED.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/serwenda-jongbloed-8289b821_20251214T104025Z.json" ], - "modified_at": "2026-01-09T19:18:17.461659+00:00", + "modified_at": "2026-01-09T19:51:29.314462+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "serwenda-jongbloed-8289b821", @@ -192,7 +192,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.458831+00:00", + "inferred_at": "2026-01-09T19:51:29.312647+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_SIMON-KONING.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_SIMON-KONING.json index 1ba9719135..31dc518ac5 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_SIMON-KONING.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_SIMON-KONING.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/simondekoning_20251214T112454Z.json" ], - "modified_at": "2026-01-09T19:18:13.008460+00:00", + "modified_at": "2026-01-09T19:50:50.292400+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "simondekoning", @@ -203,7 +203,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.004642+00:00", + "inferred_at": "2026-01-09T19:50:50.281970+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_TANYA-BELIAEVA.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_TANYA-BELIAEVA.json index 6b55f0c5a3..5caea6b339 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_TANYA-BELIAEVA.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_TANYA-BELIAEVA.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tanya-beliaeva-95825a17_20251214T112121Z.json" ], - "modified_at": "2026-01-09T19:18:14.815110+00:00", + "modified_at": "2026-01-09T19:51:04.566401+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tanya-beliaeva-95825a17", @@ -122,7 +122,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +163,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.813128+00:00", + "inferred_at": "2026-01-09T19:51:04.564287+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_TIM-ESSEN.json b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_TIM-ESSEN.json index 86b648f0af..8954d6fb1c 100644 --- a/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_TIM-ESSEN.json +++ b/data/person/ID_NL-NH-AMS_198X_XX-XX-XXX_XXXX_TIM-ESSEN.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/timvanessen_20251214T103328Z.json" ], - "modified_at": "2026-01-09T19:18:15.603230+00:00", + "modified_at": "2026-01-09T19:51:22.039576+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "timvanessen", @@ -168,7 +168,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.601277+00:00", + "inferred_at": "2026-01-09T19:51:22.037592+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_BE-BR-BRU_XXXX_BABETTE-MAGERMAN.json b/data/person/ID_NL-NH-AMS_199X_BE-BR-BRU_XXXX_BABETTE-MAGERMAN.json index 64d5d4ea2e..7f4ae2304c 100644 --- a/data/person/ID_NL-NH-AMS_199X_BE-BR-BRU_XXXX_BABETTE-MAGERMAN.json +++ b/data/person/ID_NL-NH-AMS_199X_BE-BR-BRU_XXXX_BABETTE-MAGERMAN.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/babette-magerman-512487286_20251214T101445Z.json" ], - "modified_at": "2026-01-09T19:18:18.887132+00:00", + "modified_at": "2026-01-09T19:51:29.492963+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "babette-magerman-512487286", @@ -183,7 +183,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.887124+00:00", + "inferred_at": "2026-01-09T19:51:29.492958+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_BE-BR-BRU_XXXX_ISAURE-MAHIAT.json b/data/person/ID_NL-NH-AMS_199X_BE-BR-BRU_XXXX_ISAURE-MAHIAT.json index 1b12ab40bc..84cd10bc7d 100644 --- a/data/person/ID_NL-NH-AMS_199X_BE-BR-BRU_XXXX_ISAURE-MAHIAT.json +++ b/data/person/ID_NL-NH-AMS_199X_BE-BR-BRU_XXXX_ISAURE-MAHIAT.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/isaure-mahiat-2b87b324a_20251214T102653Z.json" ], - "modified_at": "2026-01-09T19:18:16.405298+00:00", + "modified_at": "2026-01-09T19:51:21.971911+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "isaure-mahiat-2b87b324a", @@ -129,7 +129,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.405290+00:00", + "inferred_at": "2026-01-09T19:51:21.971904+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-FL-AS_XXXX_REMCO-ZWEZEREIJN.json b/data/person/ID_NL-NH-AMS_199X_NL-FL-AS_XXXX_REMCO-ZWEZEREIJN.json index 9a658ca268..44e4fc9bf9 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-FL-AS_XXXX_REMCO-ZWEZEREIJN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-FL-AS_XXXX_REMCO-ZWEZEREIJN.json @@ -97,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/remco-zwezereijn-b1b044168_20251214T110124Z.json" ], - "modified_at": "2026-01-09T19:18:15.480363+00:00", + "modified_at": "2026-01-09T19:51:11.059945+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "remco-zwezereijn-b1b044168", @@ -126,7 +126,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.480360+00:00", + "inferred_at": "2026-01-09T19:51:11.059941+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-GE-APE_XXXX_INEKE-VRIES.json b/data/person/ID_NL-NH-AMS_199X_NL-GE-APE_XXXX_INEKE-VRIES.json index dff9c56ec1..80ef9c5571 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-GE-APE_XXXX_INEKE-VRIES.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-GE-APE_XXXX_INEKE-VRIES.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/inekedevries68_20251214T103354Z.json" ], - "modified_at": "2026-01-09T19:18:13.888355+00:00", + "modified_at": "2026-01-09T19:51:18.254219+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "inekedevries68", @@ -184,7 +184,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.888349+00:00", + "inferred_at": "2026-01-09T19:51:18.254214+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-GE-APE_XXXX_STEFAN-RUTTEN.json b/data/person/ID_NL-NH-AMS_199X_NL-GE-APE_XXXX_STEFAN-RUTTEN.json index 1340522c07..476fcec92e 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-GE-APE_XXXX_STEFAN-RUTTEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-GE-APE_XXXX_STEFAN-RUTTEN.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stefan-rutten-a5437525_20251214T103352Z.json" ], - "modified_at": "2026-01-09T19:18:13.894047+00:00", + "modified_at": "2026-01-09T19:50:56.765719+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stefan-rutten-a5437525", @@ -124,7 +124,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.894043+00:00", + "inferred_at": "2026-01-09T19:50:56.765712+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-GE-ARN_XXXX_PAULIEN-COOPMANS.json b/data/person/ID_NL-NH-AMS_199X_NL-GE-ARN_XXXX_PAULIEN-COOPMANS.json index 17b51e9e99..3fa91a786b 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-GE-ARN_XXXX_PAULIEN-COOPMANS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-GE-ARN_XXXX_PAULIEN-COOPMANS.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paulien-coopmans-4b2aa7104_20251214T111641Z.json" ], - "modified_at": "2026-01-09T19:18:16.326499+00:00", + "modified_at": "2026-01-09T19:51:18.393666+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paulien-coopmans-4b2aa7104", @@ -162,7 +162,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.326489+00:00", + "inferred_at": "2026-01-09T19:51:18.393660+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-GE-REN_XXXX_GERLINE-SONNEVELDTREURNIET.json b/data/person/ID_NL-NH-AMS_199X_NL-GE-REN_XXXX_GERLINE-SONNEVELDTREURNIET.json index 1a5567a149..ce6b6042a8 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-GE-REN_XXXX_GERLINE-SONNEVELDTREURNIET.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-GE-REN_XXXX_GERLINE-SONNEVELDTREURNIET.json @@ -179,7 +179,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerlinesonneveld_20251214T104209Z.json" ], - "modified_at": "2026-01-09T19:18:13.503040+00:00", + "modified_at": "2026-01-09T19:50:54.546770+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerlinesonneveld", @@ -202,7 +202,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.503035+00:00", + "inferred_at": "2026-01-09T19:50:54.546763+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-GE-WAR_XXXX_MARTE-BARENDREGT.json b/data/person/ID_NL-NH-AMS_199X_NL-GE-WAR_XXXX_MARTE-BARENDREGT.json index b86009c0d2..52b41b243c 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-GE-WAR_XXXX_MARTE-BARENDREGT.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-GE-WAR_XXXX_MARTE-BARENDREGT.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marte-barendregt-72124a17_20251214T110531Z.json" ], - "modified_at": "2026-01-09T19:18:14.181015+00:00", + "modified_at": "2026-01-09T19:50:59.809613+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marte-barendregt-72124a17", @@ -155,7 +155,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.181007+00:00", + "inferred_at": "2026-01-09T19:50:59.809607+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-LI-MAA_XXXX_STERRE-BOESSEN.json b/data/person/ID_NL-NH-AMS_199X_NL-LI-MAA_XXXX_STERRE-BOESSEN.json index e11836893e..3d852a7135 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-LI-MAA_XXXX_STERRE-BOESSEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-LI-MAA_XXXX_STERRE-BOESSEN.json @@ -167,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sterrestof_20251214T110446Z.json" ], - "modified_at": "2026-01-09T19:18:15.728647+00:00", + "modified_at": "2026-01-09T19:51:13.558957+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sterrestof", @@ -196,7 +196,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +245,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.728644+00:00", + "inferred_at": "2026-01-09T19:51:13.558952+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NB-BOZ_XXXX_KARIN-HARTEN.json b/data/person/ID_NL-NH-AMS_199X_NL-NB-BOZ_XXXX_KARIN-HARTEN.json index 7e516faade..bc34b675c5 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NB-BOZ_XXXX_KARIN-HARTEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NB-BOZ_XXXX_KARIN-HARTEN.json @@ -235,7 +235,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karinvanharten_20251214T112322Z.json" ], - "modified_at": "2026-01-09T19:18:14.834707+00:00", + "modified_at": "2026-01-09T19:51:04.783391+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karinvanharten", @@ -264,7 +264,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -313,7 +313,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.834701+00:00", + "inferred_at": "2026-01-09T19:51:04.783374+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NB-EIN_XXXX_CHUCHEN-CAI.json b/data/person/ID_NL-NH-AMS_199X_NL-NB-EIN_XXXX_CHUCHEN-CAI.json index ac374c10cb..29e0bb2966 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NB-EIN_XXXX_CHUCHEN-CAI.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NB-EIN_XXXX_CHUCHEN-CAI.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/caichuchen_20251214T111152Z.json" ], - "modified_at": "2026-01-09T19:18:17.365085+00:00", + "modified_at": "2026-01-09T19:51:26.683262+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "caichuchen", @@ -180,7 +180,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.365078+00:00", + "inferred_at": "2026-01-09T19:51:26.683257+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NB-EIN_XXXX_DAVID-VOCHT.json b/data/person/ID_NL-NH-AMS_199X_NL-NB-EIN_XXXX_DAVID-VOCHT.json index 3ed5bfc2f6..0f6aa2a226 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NB-EIN_XXXX_DAVID-VOCHT.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NB-EIN_XXXX_DAVID-VOCHT.json @@ -150,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/david-de-vocht_20251214T111035Z.json" ], - "modified_at": "2026-01-09T19:18:15.908120+00:00", + "modified_at": "2026-01-09T19:50:53.903072+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "david-de-vocht", @@ -182,7 +182,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.908114+00:00", + "inferred_at": "2026-01-09T19:50:53.903067+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NB-EIN_XXXX_ZEINAB-B.json b/data/person/ID_NL-NH-AMS_199X_NL-NB-EIN_XXXX_ZEINAB-B.json index 28fb148cf7..a5cf03e7f5 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NB-EIN_XXXX_ZEINAB-B.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NB-EIN_XXXX_ZEINAB-B.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/zeinab-bakhtiari_20251214T110941Z.json" ], - "modified_at": "2026-01-09T19:18:14.607830+00:00", + "modified_at": "2026-01-09T19:51:02.995452+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "zeinab-bakhtiari", @@ -130,7 +130,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.607826+00:00", + "inferred_at": "2026-01-09T19:51:02.995446+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AAL_XXXX_BENTE-TAS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AAL_XXXX_BENTE-TAS.json index d7409dfe0e..55cef0ffad 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AAL_XXXX_BENTE-TAS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AAL_XXXX_BENTE-TAS.json @@ -197,7 +197,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bente-tas-297465174_20251214T111906Z.json" ], - "modified_at": "2026-01-09T19:18:17.609150+00:00", + "modified_at": "2026-01-09T19:51:28.448669+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bente-tas-297465174", @@ -226,7 +226,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -275,7 +275,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.609143+00:00", + "inferred_at": "2026-01-09T19:51:28.448662+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-ALK_XXXX_ANNEMAARTJE-STRIEN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-ALK_XXXX_ANNEMAARTJE-STRIEN.json index 13aa69fcd6..53b4179f83 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-ALK_XXXX_ANNEMAARTJE-STRIEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-ALK_XXXX_ANNEMAARTJE-STRIEN.json @@ -88,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annemaartje-van-strien-589681123_20251214T113143Z.json" ], - "modified_at": "2026-01-09T19:18:15.164619+00:00", + "modified_at": "2026-01-09T19:51:21.360058+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annemaartje-van-strien-589681123", @@ -126,7 +126,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.164612+00:00", + "inferred_at": "2026-01-09T19:51:21.360055+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AAFKE-WELLER.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AAFKE-WELLER.json index 26efe1d2d8..d5a279a6c8 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AAFKE-WELLER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AAFKE-WELLER.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aafke-weller-8907a136_20251214T115050Z.json" ], - "modified_at": "2026-01-09T19:18:13.272950+00:00", + "modified_at": "2026-01-09T19:50:53.727814+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aafke-weller-8907a136", @@ -178,7 +178,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.272946+00:00", + "inferred_at": "2026-01-09T19:50:53.727810+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AHLEM-T.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AHLEM-T.json index 7360437b6b..b07a98fe54 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AHLEM-T.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AHLEM-T.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ahlem-t-43006463_20251214T111505Z.json" ], - "modified_at": "2026-01-09T19:18:15.587895+00:00", + "modified_at": "2026-01-09T19:51:12.223911+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ahlem-t-43006463", @@ -151,7 +151,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.587891+00:00", + "inferred_at": "2026-01-09T19:51:12.223901+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_ALBA-ALVAREZMARTIN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALBA-ALVAREZMARTIN.json similarity index 92% rename from data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_ALBA-ALVAREZMARTIN.json rename to data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALBA-ALVAREZMARTIN.json index ba42043270..a3d9595d4f 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_ALBA-ALVAREZMARTIN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALBA-ALVAREZMARTIN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_ALBA-ALVAREZMARTIN", + "ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALBA-ALVAREZMARTIN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NH-AMS", "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", @@ -15,7 +15,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Alba Álvarez-Martín", @@ -152,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alba-%C3%A1lvarez-mart%C3%ADn-a19059a0_20251214T115050Z.json" ], - "modified_at": "2026-01-09T19:18:15.978223+00:00", + "modified_at": "2026-01-09T19:50:55.258999+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alba-álvarez-martín-a19059a0", @@ -174,6 +175,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_ALBA-ALVAREZMARTIN", + "new_ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALBA-ALVAREZMARTIN", + "changed_at": "2026-01-09T19:43:41.468565+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -188,7 +199,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -237,7 +248,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.978202+00:00", + "inferred_at": "2026-01-09T19:50:55.258992+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ALEXANDRA-NEDERLOF.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALEXANDRA-NEDERLOF.json similarity index 72% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ALEXANDRA-NEDERLOF.json rename to data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALEXANDRA-NEDERLOF.json index 9e0c07cc93..a3b1e972f0 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ALEXANDRA-NEDERLOF.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALEXANDRA-NEDERLOF.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ALEXANDRA-NEDERLOF", + "ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALEXANDRA-NEDERLOF", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ALEXANDRA", "NEDERLOF" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Alexandra Nederlof", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -167,63 +173,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alexandra-nederlof-74b7a341_20251214T112933Z.json" ], - "modified_at": "2026-01-09T17:43:06.642465+00:00", + "modified_at": "2026-01-09T19:51:12.742822+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alexandra-nederlof-74b7a341", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam Area, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam Area, Netherlands (NL)", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:06.642457+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEXANDRA-NEDERLOF", @@ -233,6 +186,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ALEXANDRA-NEDERLOF", + "new_ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALEXANDRA-NEDERLOF", + "changed_at": "2026-01-09T19:43:43.057018+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1992 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Rijksmuseum", + "title": "Junior Paper Conservator (Junior Papierrestaurator)", + "date_range": "by April 2015" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2015 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2015 - 23 = 1992", + "result": "Estimated birth year: 1992", + "range": "1987-1997 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1987, + 1997 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:12.742814+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALICIA-HOOST.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALICIA-HOOST.json index 4403e69e13..1474599383 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALICIA-HOOST.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ALICIA-HOOST.json @@ -259,7 +259,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alicia-hoost-7ab92a153_20251214T112549Z.json" ], - "modified_at": "2026-01-09T19:18:15.202138+00:00", + "modified_at": "2026-01-09T19:51:07.003163+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alicia-hoost-7ab92a153", @@ -288,7 +288,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -337,7 +337,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.202133+00:00", + "inferred_at": "2026-01-09T19:51:07.003156+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AMIE-GALBRAITH.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AMIE-GALBRAITH.json index 0e1e5681ab..ade78bcf60 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AMIE-GALBRAITH.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AMIE-GALBRAITH.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amiegalbraith_20251214T111623Z.json" ], - "modified_at": "2026-01-09T19:18:15.565185+00:00", + "modified_at": "2026-01-09T19:51:12.112838+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "amiegalbraith", @@ -168,7 +168,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.565181+00:00", + "inferred_at": "2026-01-09T19:51:12.112832+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANGELA-V.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANGELA-V.json index 008aadb4e6..f0ceb0aa01 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANGELA-V.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANGELA-V.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/angela-v-41a742153_20251214T111715Z.json" ], - "modified_at": "2026-01-09T19:18:13.814558+00:00", + "modified_at": "2026-01-09T19:50:56.603988+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "angela-v-41a742153", @@ -111,7 +111,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.814554+00:00", + "inferred_at": "2026-01-09T19:50:56.603981+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANGUELITO-KERTOKARIJO.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANGUELITO-KERTOKARIJO.json index bd7e3a6a27..0ead1cf9c9 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANGUELITO-KERTOKARIJO.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANGUELITO-KERTOKARIJO.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anguelito-kertokarijo-1a7996143_20251214T112040Z.json" ], - "modified_at": "2026-01-09T19:18:13.020862+00:00", + "modified_at": "2026-01-09T19:50:50.594965+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anguelito-kertokarijo-1a7996143", @@ -180,7 +180,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.020858+00:00", + "inferred_at": "2026-01-09T19:50:50.594957+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNA-LINDERS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNA-LINDERS.json index 49f6187d88..ffb51d372a 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNA-LINDERS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNA-LINDERS.json @@ -176,7 +176,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-linders-304108a9_20251214T102946Z.json" ], - "modified_at": "2026-01-09T19:18:13.203544+00:00", + "modified_at": "2026-01-09T19:50:53.283791+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anna-linders-304108a9", @@ -199,7 +199,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.203540+00:00", + "inferred_at": "2026-01-09T19:50:53.283785+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-MOURIK.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-MOURIK.json similarity index 81% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-MOURIK.json rename to data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-MOURIK.json index 5fdd77567c..cc16247c42 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-MOURIK.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-MOURIK.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-MOURIK", + "ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-MOURIK", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ANNE", "MOURIK" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Anne van Mourik", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -289,63 +295,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-van-mourik-87955327_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:04.836870+00:00", + "modified_at": "2026-01-09T19:51:21.107551+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-van-mourik-87955327", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:04.836864+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNE-MOURIK", @@ -355,6 +308,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-MOURIK", + "new_ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-MOURIK", + "changed_at": "2026-01-09T19:43:40.649541+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1994 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "NIOD Institute for War, Holocaust and Genocide Studies", + "title": "Researcher", + "date_range": "2017 - 2020" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2017 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2017 - 23 = 1994", + "result": "Estimated birth year: 1994", + "range": "1989-1999 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1989, + 1999 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:21.107546+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-SCHMID.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-SCHMID.json similarity index 74% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-SCHMID.json rename to data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-SCHMID.json index a4af926818..9e12117c93 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-SCHMID.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-SCHMID.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-SCHMID", + "ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-SCHMID", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ANNE", "SCHMID" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Anne Schmid", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -204,63 +210,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-schmid-5a764053_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:08.013731+00:00", + "modified_at": "2026-01-09T19:51:06.642449+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-schmid-5a764053", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:08.013726+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNE-SCHMID", @@ -270,6 +223,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-SCHMID", + "new_ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-SCHMID", + "changed_at": "2026-01-09T19:43:41.928497+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1991 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Fondation Beyeler", + "title": "Assistant Conservator", + "date_range": "2014 - 2017" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2014 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2014 - 23 = 1991", + "result": "Estimated birth year: 1991", + "range": "1986-1996 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1986, + 1996 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:06.642445+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-STEEGSTRA.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-STEEGSTRA.json index a8440ce594..79a6f6b8e2 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-STEEGSTRA.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNE-STEEGSTRA.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-marije-steegstra-893b6859_20251214T110025Z.json" ], - "modified_at": "2026-01-09T19:18:14.367135+00:00", + "modified_at": "2026-01-09T19:51:01.711261+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-marije-steegstra-893b6859", @@ -180,7 +180,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.367129+00:00", + "inferred_at": "2026-01-09T19:51:01.711253+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNELIZE-BOURCIER.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNELIZE-BOURCIER.json index 02756a452b..bbf416996b 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNELIZE-BOURCIER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANNELIZE-BOURCIER.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annelize-bourcier-224a24165_20251214T103119Z.json" ], - "modified_at": "2026-01-09T19:18:14.676866+00:00", + "modified_at": "2026-01-09T19:51:03.351590+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annelize-bourcier-224a24165", @@ -193,7 +193,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +242,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.676861+00:00", + "inferred_at": "2026-01-09T19:51:03.351584+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANTHONY-DEAN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANTHONY-DEAN.json index 47041a2662..c512d7843f 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANTHONY-DEAN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANTHONY-DEAN.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anthony-dean-bb2015174_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:14.242725+00:00", + "modified_at": "2026-01-09T19:50:58.956351+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anthony-dean-bb2015174", @@ -189,7 +189,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.242720+00:00", + "inferred_at": "2026-01-09T19:50:58.956344+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANTHONY-TEODOSIO.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANTHONY-TEODOSIO.json index dd45a91936..e6f50ba2d3 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANTHONY-TEODOSIO.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANTHONY-TEODOSIO.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anthony-teodosio-b270b7103_20251214T111511Z.json" ], - "modified_at": "2026-01-09T19:18:16.042028+00:00", + "modified_at": "2026-01-09T19:51:16.740903+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anthony-teodosio-b270b7103", @@ -146,7 +146,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.042024+00:00", + "inferred_at": "2026-01-09T19:51:16.740898+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANTONIO-MSEC.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANTONIO-MSEC.json index 67dc88b1af..a762f8364f 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANTONIO-MSEC.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ANTONIO-MSEC.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/antoniopesare_20251214T110259Z.json" ], - "modified_at": "2026-01-09T19:18:14.384391+00:00", + "modified_at": "2026-01-09T19:51:01.731697+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "antoniopesare", @@ -174,7 +174,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.384387+00:00", + "inferred_at": "2026-01-09T19:51:01.731691+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARDJUNA-CANDOTTI.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ARDJUNA-CANDOTTI.json similarity index 78% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARDJUNA-CANDOTTI.json rename to data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ARDJUNA-CANDOTTI.json index e4dfa3374b..1f1c6ae09b 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARDJUNA-CANDOTTI.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ARDJUNA-CANDOTTI.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARDJUNA-CANDOTTI", + "ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ARDJUNA-CANDOTTI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ARDJUNA", "CANDOTTI" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Ardjuna Candotti", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -202,63 +208,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ardjuna-candotti-71936ba_20251214T111306Z.json" ], - "modified_at": "2026-01-09T17:42:56.222589+00:00", + "modified_at": "2026-01-09T19:51:06.317487+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ardjuna-candotti-71936ba", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands (NL)", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:56.222582+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARDJUNA-CANDOTTI", @@ -268,6 +221,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARDJUNA-CANDOTTI", + "new_ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ARDJUNA-CANDOTTI", + "changed_at": "2026-01-09T19:43:38.828311+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1998 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "NEMO Science Museum", + "title": "Inclusion Advisor", + "date_range": "2021 - 2021" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2021 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2021 - 23 = 1998", + "result": "Estimated birth year: 1998", + "range": "1993-2003 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1993, + 2003 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:06.317474+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ASPASIA-KOPSIDA.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ASPASIA-KOPSIDA.json index 24e304fd35..3902ecd0af 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ASPASIA-KOPSIDA.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ASPASIA-KOPSIDA.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aspasia-kopsida-7124aa1bb_20251214T111755Z.json" ], - "modified_at": "2026-01-09T19:18:18.402470+00:00", + "modified_at": "2026-01-09T19:51:18.513408+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aspasia-kopsida-7124aa1bb", @@ -161,7 +161,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.402458+00:00", + "inferred_at": "2026-01-09T19:51:18.513401+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_AUSTEJA-MACKELAITE.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AUSTEJA-MACKELAITE.json similarity index 80% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_AUSTEJA-MACKELAITE.json rename to data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AUSTEJA-MACKELAITE.json index 9bc1db21fb..f3b98e1cc5 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_AUSTEJA-MACKELAITE.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AUSTEJA-MACKELAITE.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_AUSTEJA-MACKELAITE", + "ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AUSTEJA-MACKELAITE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "AUSTEJA", "MACKELAITE" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Austėja Mackelaitė", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -257,63 +263,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aust%C4%97ja-mackelait%C4%97-55893140_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:07.988605+00:00", + "modified_at": "2026-01-09T19:51:07.016929+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "austėja-mackelaitė-55893140", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:07.988599+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AUSTEJA-MACKELAITE", @@ -323,6 +276,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_AUSTEJA-MACKELAITE", + "new_ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_AUSTEJA-MACKELAITE", + "changed_at": "2026-01-09T19:43:42.286825+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1990 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Courtauld Gallery", + "title": "Prints and Drawings Study Room Assistant", + "date_range": "2013-10" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2013 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2013 - 23 = 1990", + "result": "Estimated birth year: 1990", + "range": "1985-1995 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1985, + 1995 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:07.016923+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_BASTIENNE-JANSEN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_BASTIENNE-JANSEN.json index aa8375cb82..bfebbc0197 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_BASTIENNE-JANSEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_BASTIENNE-JANSEN.json @@ -172,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bastienne-jansen-392088215_20251214T112752Z.json" ], - "modified_at": "2026-01-09T19:18:17.942463+00:00", + "modified_at": "2026-01-09T19:50:48.417357+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bastienne-jansen-392088215", @@ -204,7 +204,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +245,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.942454+00:00", + "inferred_at": "2026-01-09T19:50:48.417349+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BRAM-BERG.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_BRAM-BERG.json similarity index 70% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BRAM-BERG.json rename to data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_BRAM-BERG.json index e0aa6d7406..b3be5abe59 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BRAM-BERG.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_BRAM-BERG.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BRAM-BERG", + "ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_BRAM-BERG", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "BRAM", "BERG" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Bram van den Berg", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -143,63 +149,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bram-van-den-berg-98127314b_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:57.756343+00:00", + "modified_at": "2026-01-09T19:50:46.634441+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bram-van-den-berg-98127314b", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:57.756338+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BRAM-BERG", @@ -209,6 +162,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BRAM-BERG", + "new_ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_BRAM-BERG", + "changed_at": "2026-01-09T19:43:41.725766+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1998 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Huygens Institute (Huygens Instituut)", + "title": "Gastonderzoeker (Guest Researcher) - PhD Candidate", + "date_range": "2021" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2021 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2021 - 23 = 1998", + "result": "Estimated birth year: 1998", + "range": "1993-2003 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1993, + 2003 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:46.633895+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_BURHAN-UYGUN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_BURHAN-UYGUN.json index 6260015129..236490d9c7 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_BURHAN-UYGUN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_BURHAN-UYGUN.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/burhan-uygun-0ba109162_20251214T111033Z.json" ], - "modified_at": "2026-01-09T19:18:11.709925+00:00", + "modified_at": "2026-01-09T19:50:47.274267+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "burhan-uygun-0ba109162", @@ -180,7 +180,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.709916+00:00", + "inferred_at": "2026-01-09T19:50:47.274260+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CARMEN-MANDUAPESSY.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CARMEN-MANDUAPESSY.json index dd047b4cb2..95aebc9183 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CARMEN-MANDUAPESSY.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CARMEN-MANDUAPESSY.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carmen-manduapessy-66b63a83_20251214T111604Z.json" ], - "modified_at": "2026-01-09T19:18:16.809378+00:00", + "modified_at": "2026-01-09T19:51:22.048840+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carmen-manduapessy-66b63a83", @@ -157,7 +157,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.809374+00:00", + "inferred_at": "2026-01-09T19:51:22.048836+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CEES-GROOT.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CEES-GROOT.json index 7e5e357627..852458c286 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CEES-GROOT.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CEES-GROOT.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cees-de-groot-30282aa3_20251214T113212Z.json" ], - "modified_at": "2026-01-09T19:18:15.911462+00:00", + "modified_at": "2026-01-09T19:51:29.505255+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cees-de-groot-30282aa3", @@ -143,7 +143,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.911456+00:00", + "inferred_at": "2026-01-09T19:51:29.505250+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHANGDUK-KANG.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHANGDUK-KANG.json similarity index 76% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHANGDUK-KANG.json rename to data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHANGDUK-KANG.json index 7aae186829..3be732d0d0 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHANGDUK-KANG.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHANGDUK-KANG.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHANGDUK-KANG", + "ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHANGDUK-KANG", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "CHANGDUK", "KANG" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Changduk Charles Kang", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -209,63 +215,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/charles-kang-curator_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:00.485706+00:00", + "modified_at": "2026-01-09T19:51:08.649510+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "charles-kang-curator", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Noord-Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Noord-Holland, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:00.485700+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHANGDUK-KANG", @@ -275,6 +228,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHANGDUK-KANG", + "new_ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHANGDUK-KANG", + "changed_at": "2026-01-09T19:43:42.745782+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1993 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "The Frick Collection", + "title": "Interpretive Fellow", + "date_range": "2016 - 2017" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2016 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2016 - 23 = 1993", + "result": "Estimated birth year: 1993", + "range": "1988-1998 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1988, + 1998 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:08.649498+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHARL-LANDVREUGD.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHARL-LANDVREUGD.json similarity index 77% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHARL-LANDVREUGD.json rename to data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHARL-LANDVREUGD.json index ba0dd9e90c..1aa35f2888 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHARL-LANDVREUGD.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHARL-LANDVREUGD.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHARL-LANDVREUGD", + "ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHARL-LANDVREUGD", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "CHARL", "LANDVREUGD" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Charl Landvreugd", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -231,63 +237,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/charl-landvreugd_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:06.962712+00:00", + "modified_at": "2026-01-09T19:51:06.737255+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "charl-landvreugd", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:06.962706+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHARL-LANDVREUGD", @@ -297,6 +250,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CHARL-LANDVREUGD", + "new_ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHARL-LANDVREUGD", + "changed_at": "2026-01-09T19:43:42.003976+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1997 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Stedelijk Museum Amsterdam", + "title": "Head of Research & Curatorial Practice", + "date_range": "2020-10-01" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2020 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2020 - 23 = 1997", + "result": "Estimated birth year: 1997", + "range": "1992-2002 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1992, + 2002 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:06.737249+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHARLOTTE-SCHOON.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHARLOTTE-SCHOON.json index 920613eb2d..70001afd9b 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHARLOTTE-SCHOON.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHARLOTTE-SCHOON.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/charlotte-schoon-a1b0a5110_20251214T111606Z.json" ], - "modified_at": "2026-01-09T19:18:17.705846+00:00", + "modified_at": "2026-01-09T19:51:28.553759+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "charlotte-schoon-a1b0a5110", @@ -126,7 +126,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.705835+00:00", + "inferred_at": "2026-01-09T19:51:28.553753+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHARLOTTE-SPIERING.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHARLOTTE-SPIERING.json index d7da91e9a6..584ee8afae 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHARLOTTE-SPIERING.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CHARLOTTE-SPIERING.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/charlotte-spiering_20251214T110025Z.json" ], - "modified_at": "2026-01-09T19:18:16.101052+00:00", + "modified_at": "2026-01-09T19:51:17.468539+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "charlotte-spiering", @@ -158,7 +158,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +207,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.101045+00:00", + "inferred_at": "2026-01-09T19:51:17.468532+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CLAIRE-BOOGAARD.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CLAIRE-BOOGAARD.json index 24653855cf..0be080fe1f 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CLAIRE-BOOGAARD.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CLAIRE-BOOGAARD.json @@ -193,7 +193,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/claire-boogaard_20251214T112554Z.json" ], - "modified_at": "2026-01-09T19:18:11.367601+00:00", + "modified_at": "2026-01-09T19:50:46.731252+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "claire-boogaard", @@ -222,7 +222,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -271,7 +271,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.367593+00:00", + "inferred_at": "2026-01-09T19:50:46.731246+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CLAIRE-ELS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CLAIRE-ELS.json similarity index 62% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CLAIRE-ELS.json rename to data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CLAIRE-ELS.json index a566dbfc2b..4c8babc74c 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CLAIRE-ELS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CLAIRE-ELS.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CLAIRE-ELS", + "ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CLAIRE-ELS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "CLAIRE", "ELS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Claire van Els", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -108,63 +114,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/claire-van-els-7635b02_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:00.713718+00:00", + "modified_at": "2026-01-09T19:51:26.678140+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "claire-van-els-7635b02", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:00.713710+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CLAIRE-ELS", @@ -174,6 +127,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CLAIRE-ELS", + "new_ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_CLAIRE-ELS", + "changed_at": "2026-01-09T19:43:42.508842+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1996 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Stedelijk Museum Amsterdam", + "title": "Junior Curator", + "date_range": "2019 - 2021" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2019 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2019 - 23 = 1996", + "result": "Estimated birth year: 1996", + "range": "1991-2001 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1991, + 2001 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:26.678135+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_DIDO-WOLF.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_DIDO-WOLF.json index fe6a2aa308..24e2be5405 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_DIDO-WOLF.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_DIDO-WOLF.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dido-de-wolf-ab97bb140_20251214T113249Z.json" ], - "modified_at": "2026-01-09T19:18:12.968862+00:00", + "modified_at": "2026-01-09T19:50:49.613531+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dido-de-wolf-ab97bb140", @@ -187,7 +187,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.968857+00:00", + "inferred_at": "2026-01-09T19:50:49.613526+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_DIRKJE-KROM.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_DIRKJE-KROM.json index 66ba7c155d..5aefdbd065 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_DIRKJE-KROM.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_DIRKJE-KROM.json @@ -208,7 +208,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dirkje-cil-krom-207352141_20251214T110011Z.json" ], - "modified_at": "2026-01-09T19:18:16.152108+00:00", + "modified_at": "2026-01-09T19:51:17.856754+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dirkje-cil-krom-207352141", @@ -237,7 +237,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -286,7 +286,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.152103+00:00", + "inferred_at": "2026-01-09T19:51:17.856736+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ELINE-PALTHE.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ELINE-PALTHE.json index 4ce580843c..36fae45e3a 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ELINE-PALTHE.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ELINE-PALTHE.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elinepalthe_20251214T110633Z.json" ], - "modified_at": "2026-01-09T19:18:14.885787+00:00", + "modified_at": "2026-01-09T19:51:05.320972+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elinepalthe", @@ -127,7 +127,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.885783+00:00", + "inferred_at": "2026-01-09T19:51:05.320963+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ELIZA-WALRAVEN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ELIZA-WALRAVEN.json similarity index 72% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ELIZA-WALRAVEN.json rename to data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ELIZA-WALRAVEN.json index 7a4f7daba2..d04a565454 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ELIZA-WALRAVEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ELIZA-WALRAVEN.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ELIZA-WALRAVEN", + "ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ELIZA-WALRAVEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ELIZA", "WALRAVEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Eliza van Walraven", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -172,63 +178,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eliza-van-walraven-597b96200_20251214T112421Z.json" ], - "modified_at": "2026-01-09T17:43:01.456310+00:00", + "modified_at": "2026-01-09T19:51:13.293040+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eliza-van-walraven-597b96200", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands (NL)", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:01.456304+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ELIZA-WALRAVEN", @@ -238,6 +191,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ELIZA-WALRAVEN", + "new_ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ELIZA-WALRAVEN", + "changed_at": "2026-01-09T19:43:40.931955+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1999 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Arti et Amicitiae", + "title": "Researcher and Co-Curator", + "date_range": "2022 - 2022" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2022 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2022 - 23 = 1999", + "result": "Estimated birth year: 1999", + "range": "1994-2004 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1994, + 2004 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:13.293033+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_EPCO-RUNIA.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_EPCO-RUNIA.json index c747f40420..7229541d8a 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_EPCO-RUNIA.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_EPCO-RUNIA.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/epco-runia-332a68b_20251214T112044Z.json" ], - "modified_at": "2026-01-09T19:18:13.863870+00:00", + "modified_at": "2026-01-09T19:50:56.720920+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "epco-runia-332a68b", @@ -124,7 +124,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.863864+00:00", + "inferred_at": "2026-01-09T19:50:56.720914+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ERIK-BOELS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ERIK-BOELS.json index 480e4e863d..2e4c2073a3 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ERIK-BOELS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ERIK-BOELS.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erik-boels-1458818_20251214T112052Z.json" ], - "modified_at": "2026-01-09T19:18:11.459205+00:00", + "modified_at": "2026-01-09T19:51:22.337306+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erik-boels-1458818", @@ -187,7 +187,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.459197+00:00", + "inferred_at": "2026-01-09T19:51:22.337302+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FABIO-ZAFFORA.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FABIO-ZAFFORA.json index 9c4b2aea77..2624ff370b 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FABIO-ZAFFORA.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FABIO-ZAFFORA.json @@ -241,7 +241,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fabio-zaffora-69155214_20251214T102736Z.json" ], - "modified_at": "2026-01-09T19:18:14.758586+00:00", + "modified_at": "2026-01-09T19:51:04.038036+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fabio-zaffora-69155214", @@ -264,7 +264,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -305,7 +305,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.758582+00:00", + "inferred_at": "2026-01-09T19:51:04.038031+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FANNY-BAARS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FANNY-BAARS.json index b6005aecff..f2cabc237c 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FANNY-BAARS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FANNY-BAARS.json @@ -133,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fanny-baars-696807a9_20251214T111322Z.json" ], - "modified_at": "2026-01-09T19:18:17.300548+00:00", + "modified_at": "2026-01-09T19:51:25.510672+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fanny-baars-696807a9", @@ -156,7 +156,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.300541+00:00", + "inferred_at": "2026-01-09T19:51:25.510668+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FEMKE-HUISMAN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FEMKE-HUISMAN.json index 57bfd17494..8c077a55f3 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FEMKE-HUISMAN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FEMKE-HUISMAN.json @@ -210,7 +210,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/femke-huisman-b9583253_20251214T110204Z.json" ], - "modified_at": "2026-01-09T19:18:14.942607+00:00", + "modified_at": "2026-01-09T19:51:05.579053+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "femke-huisman-b9583253", @@ -239,7 +239,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -288,7 +288,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.942602+00:00", + "inferred_at": "2026-01-09T19:51:05.579042+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FLOOR-MAFAIT.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FLOOR-MAFAIT.json index ce67daaaea..505af3484a 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FLOOR-MAFAIT.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FLOOR-MAFAIT.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/floor-mafait-841309129_20251214T110200Z.json" ], - "modified_at": "2026-01-09T19:18:14.715026+00:00", + "modified_at": "2026-01-09T19:51:03.407635+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "floor-mafait-841309129", @@ -141,7 +141,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.715021+00:00", + "inferred_at": "2026-01-09T19:51:03.407630+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FREIJA-DIJK.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FREIJA-DIJK.json index f8255fd60b..d2682b79ce 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FREIJA-DIJK.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FREIJA-DIJK.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/freija-van-dijk-427b2712b_20251214T111807Z.json" ], - "modified_at": "2026-01-09T19:18:14.736588+00:00", + "modified_at": "2026-01-09T19:51:03.975530+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "freija-van-dijk-427b2712b", @@ -191,7 +191,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.736585+00:00", + "inferred_at": "2026-01-09T19:51:03.975516+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FROUKE-VELDEN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FROUKE-VELDEN.json index 424d220d58..f5afdef912 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FROUKE-VELDEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_FROUKE-VELDEN.json @@ -203,7 +203,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frouke-ten-velden-13455b77_20251214T110326Z.json" ], - "modified_at": "2026-01-09T19:18:15.685565+00:00", + "modified_at": "2026-01-09T19:51:13.439036+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frouke-ten-velden-13455b77", @@ -232,7 +232,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -281,7 +281,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.685561+00:00", + "inferred_at": "2026-01-09T19:51:13.439029+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_GAIA-JOOR.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_GAIA-JOOR.json index d28ace94d2..e5a59eb4f3 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_GAIA-JOOR.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_GAIA-JOOR.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gaia-joor-944234254_20251214T113149Z.json" ], - "modified_at": "2026-01-09T19:18:17.622078+00:00", + "modified_at": "2026-01-09T19:51:28.538013+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gaia-joor-944234254", @@ -120,7 +120,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.622067+00:00", + "inferred_at": "2026-01-09T19:51:28.538009+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_GIOVANNI-VECCARO.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_GIOVANNI-VECCARO.json index f9c065de9d..a736d71956 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_GIOVANNI-VECCARO.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_GIOVANNI-VECCARO.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/giovanni-battista-veccaro-524747168_20251214T111721Z.json" ], - "modified_at": "2026-01-09T19:18:17.094144+00:00", + "modified_at": "2026-01-09T19:51:23.901457+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "giovanni-battista-veccaro-524747168", @@ -170,7 +170,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.094134+00:00", + "inferred_at": "2026-01-09T19:51:23.901448+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HANNA-TIEL.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HANNA-TIEL.json index 18c2f0edbc..626ae7fb95 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HANNA-TIEL.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HANNA-TIEL.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hanna-tiel-90b3b194_20251214T113430Z.json" ], - "modified_at": "2026-01-09T19:18:13.919342+00:00", + "modified_at": "2026-01-09T19:50:56.841930+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hanna-tiel-90b3b194", @@ -158,7 +158,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +207,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.919338+00:00", + "inferred_at": "2026-01-09T19:50:56.841924+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HANNAH-ZWAVING.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HANNAH-ZWAVING.json index e15a556fac..2adb2a4435 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HANNAH-ZWAVING.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HANNAH-ZWAVING.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hannah-zwaving-76ab5b7b_20251214T111804Z.json" ], - "modified_at": "2026-01-09T19:18:17.948856+00:00", + "modified_at": "2026-01-09T19:51:28.861023+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hannah-zwaving-76ab5b7b", @@ -127,7 +127,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.948849+00:00", + "inferred_at": "2026-01-09T19:51:28.861019+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HANNEKE-KESSEL.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HANNEKE-KESSEL.json index adb45909ca..1ce2b464fa 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HANNEKE-KESSEL.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HANNEKE-KESSEL.json @@ -188,7 +188,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hanneke-van-kessel-07254b62_20251214T113053Z.json" ], - "modified_at": "2026-01-09T19:18:16.083036+00:00", + "modified_at": "2026-01-09T19:51:16.875882+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hanneke-van-kessel-07254b62", @@ -217,7 +217,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -266,7 +266,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.083030+00:00", + "inferred_at": "2026-01-09T19:51:16.875876+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HARRIET-SMITH.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HARRIET-SMITH.json index 186de02bfa..4d1d565319 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HARRIET-SMITH.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_HARRIET-SMITH.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harriet-smith-26521542_20251214T112558Z.json" ], - "modified_at": "2026-01-09T19:18:13.272436+00:00", + "modified_at": "2026-01-09T19:50:53.727345+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harriet-smith-26521542", @@ -184,7 +184,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.272431+00:00", + "inferred_at": "2026-01-09T19:50:53.727340+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ILAN-VERMEULEN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ILAN-VERMEULEN.json index c8ddfb8754..30e1f82ac3 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ILAN-VERMEULEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ILAN-VERMEULEN.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ilan-vermeulen-a1819b102_20251214T111802Z.json" ], - "modified_at": "2026-01-09T19:18:11.990574+00:00", + "modified_at": "2026-01-09T19:50:47.376442+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ilan-vermeulen-a1819b102", @@ -140,7 +140,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.990561+00:00", + "inferred_at": "2026-01-09T19:50:47.376432+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ILSE-STEEMAN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ILSE-STEEMAN.json index 552d51c845..175e5de2cc 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ILSE-STEEMAN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ILSE-STEEMAN.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ilse-steeman-104815a1_20251214T111444Z.json" ], - "modified_at": "2026-01-09T19:18:14.155219+00:00", + "modified_at": "2026-01-09T19:50:58.734271+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ilse-steeman-104815a1", @@ -164,7 +164,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.155214+00:00", + "inferred_at": "2026-01-09T19:50:58.734266+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_IMARA-LIMON.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_IMARA-LIMON.json similarity index 74% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_IMARA-LIMON.json rename to data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_IMARA-LIMON.json index 6bd6151aa7..29b3e23d57 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_IMARA-LIMON.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_IMARA-LIMON.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_IMARA-LIMON", + "ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_IMARA-LIMON", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "IMARA", "LIMON" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Imara Limon", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -207,63 +213,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/imaralimon_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:59.617948+00:00", + "modified_at": "2026-01-09T19:50:53.875746+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "imaralimon", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:59.617939+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_IMARA-LIMON", @@ -273,6 +226,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_IMARA-LIMON", + "new_ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_IMARA-LIMON", + "changed_at": "2026-01-09T19:43:39.976370+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1993 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Amsterdam Museum", + "title": "Curator", + "date_range": "2016 - 2024-06" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2016 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2016 - 23 = 1993", + "result": "Estimated birth year: 1993", + "range": "1988-1998 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1988, + 1998 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:53.875736+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_INGEBORG-SANDERS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_INGEBORG-SANDERS.json index df15aa16e8..dcb7791dc0 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_INGEBORG-SANDERS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_INGEBORG-SANDERS.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ingeborg-sanders-b18884110_20251214T111638Z.json" ], - "modified_at": "2026-01-09T19:18:16.398567+00:00", + "modified_at": "2026-01-09T19:51:18.549684+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ingeborg-sanders-b18884110", @@ -201,7 +201,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +242,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.398561+00:00", + "inferred_at": "2026-01-09T19:51:18.549676+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_IRIS-RIJSMAN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_IRIS-RIJSMAN.json index 5c651de29a..9c0c949fe5 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_IRIS-RIJSMAN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_IRIS-RIJSMAN.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/irisrijsman_20251214T111452Z.json" ], - "modified_at": "2026-01-09T19:18:13.457207+00:00", + "modified_at": "2026-01-09T19:50:54.439267+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "irisrijsman", @@ -171,7 +171,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.457203+00:00", + "inferred_at": "2026-01-09T19:50:54.439261+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JALEESA-CLOWS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JALEESA-CLOWS.json index 82f647d13e..2d82190e25 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JALEESA-CLOWS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JALEESA-CLOWS.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jaleesa-clows-11b70059_20251214T112106Z.json" ], - "modified_at": "2026-01-09T19:18:14.940521+00:00", + "modified_at": "2026-01-09T19:51:05.572296+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jaleesa-clows-11b70059", @@ -198,7 +198,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +247,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.940516+00:00", + "inferred_at": "2026-01-09T19:51:05.572280+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JAN-SENGERS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JAN-SENGERS.json index a164261197..15e1ffcda5 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JAN-SENGERS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JAN-SENGERS.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-sengers-701545a3_20251214T111337Z.json" ], - "modified_at": "2026-01-09T19:18:15.667985+00:00", + "modified_at": "2026-01-09T19:51:13.388858+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-sengers-701545a3", @@ -120,7 +120,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.667980+00:00", + "inferred_at": "2026-01-09T19:51:13.388845+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JANNEKE-WESSELING.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JANNEKE-WESSELING.json index f66a03a498..a48dc1fe42 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JANNEKE-WESSELING.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JANNEKE-WESSELING.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janneke-wesseling-69709b179_20251214T111831Z.json" ], - "modified_at": "2026-01-09T19:18:16.892454+00:00", + "modified_at": "2026-01-09T19:51:22.341046+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janneke-wesseling-69709b179", @@ -182,7 +182,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +231,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.892449+00:00", + "inferred_at": "2026-01-09T19:51:22.341039+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JESSE-POSTHUMUS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JESSE-POSTHUMUS.json index 399eda5e19..b903f78950 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JESSE-POSTHUMUS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JESSE-POSTHUMUS.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jesse-posthumus-426425123_20251214T111601Z.json" ], - "modified_at": "2026-01-09T19:18:17.843778+00:00", + "modified_at": "2026-01-09T19:51:28.822027+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jesse-posthumus-426425123", @@ -204,7 +204,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +245,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.843774+00:00", + "inferred_at": "2026-01-09T19:51:28.822020+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JESSICA-SANDE.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JESSICA-SANDE.json index b4afe42c80..0ac36a386c 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JESSICA-SANDE.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JESSICA-SANDE.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jessica-van-de-sande-4b5358a5_20251214T111540Z.json" ], - "modified_at": "2026-01-09T19:18:17.970040+00:00", + "modified_at": "2026-01-09T19:51:28.870093+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jessica-van-de-sande-4b5358a5", @@ -153,7 +153,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.970033+00:00", + "inferred_at": "2026-01-09T19:51:28.870087+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JOHN-KEIZER.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JOHN-KEIZER.json index 0708e3cccc..0efed78f3a 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JOHN-KEIZER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JOHN-KEIZER.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/john-keizer-b9a144226_20251214T110154Z.json" ], - "modified_at": "2026-01-09T19:18:15.665220+00:00", + "modified_at": "2026-01-09T19:50:55.095187+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "john-keizer-b9a144226", @@ -141,7 +141,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.665214+00:00", + "inferred_at": "2026-01-09T19:50:55.095176+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JOKO-WIT.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JOKO-WIT.json index c4602d1603..5ba42e01bf 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JOKO-WIT.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JOKO-WIT.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joko-de-wit-7961b46a_20251214T111512Z.json" ], - "modified_at": "2026-01-09T19:18:13.917890+00:00", + "modified_at": "2026-01-09T19:50:56.839905+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joko-de-wit-7961b46a", @@ -147,7 +147,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.917886+00:00", + "inferred_at": "2026-01-09T19:50:56.839895+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JOSEPHINA-FOUW.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JOSEPHINA-FOUW.json index 672cdb1d70..fd406eaf3f 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JOSEPHINA-FOUW.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JOSEPHINA-FOUW.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/josephina-de-fouw-6522aa163_20251214T111444Z.json" ], - "modified_at": "2026-01-09T19:18:13.302375+00:00", + "modified_at": "2026-01-09T19:50:53.840287+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "josephina-de-fouw-6522aa163", @@ -195,7 +195,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -244,7 +244,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.302370+00:00", + "inferred_at": "2026-01-09T19:50:53.840280+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JULIA-ALVARES.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JULIA-ALVARES.json index ae3a08ab3f..ac8a63be37 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JULIA-ALVARES.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_JULIA-ALVARES.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/julia-alvares-56221aaa_20251214T112102Z.json" ], - "modified_at": "2026-01-09T19:18:14.225687+00:00", + "modified_at": "2026-01-09T19:50:58.930120+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "julia-alvares-56221aaa", @@ -183,7 +183,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.225684+00:00", + "inferred_at": "2026-01-09T19:50:58.930112+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KAMELIA-ERICH.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KAMELIA-ERICH.json index 62e8592773..a68e79cd5f 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KAMELIA-ERICH.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KAMELIA-ERICH.json @@ -265,7 +265,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kamelia-erich-548033191_20251214T110220Z.json" ], - "modified_at": "2026-01-09T19:18:15.870249+00:00", + "modified_at": "2026-01-09T19:51:14.944997+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kamelia-erich-548033191", @@ -294,7 +294,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -343,7 +343,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.870244+00:00", + "inferred_at": "2026-01-09T19:51:14.944990+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KAY-KOK.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KAY-KOK.json index dafab54fb4..b4e38e18e8 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KAY-KOK.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KAY-KOK.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kay-kok-b70693b9_20251214T112354Z.json" ], - "modified_at": "2026-01-09T19:18:16.132459+00:00", + "modified_at": "2026-01-09T19:51:07.019471+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kay-kok-b70693b9", @@ -167,7 +167,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.132453+00:00", + "inferred_at": "2026-01-09T19:51:07.019466+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KAYLEIGH-W.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KAYLEIGH-W.json index 81493d5c4e..224a714365 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KAYLEIGH-W.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KAYLEIGH-W.json @@ -157,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kayleigh-w-733a7618a_20251214T110119Z.json" ], - "modified_at": "2026-01-09T19:18:16.762748+00:00", + "modified_at": "2026-01-09T19:51:22.557021+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kayleigh-w-733a7618a", @@ -189,7 +189,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.762742+00:00", + "inferred_at": "2026-01-09T19:51:22.557017+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KIM-IJNTEMA.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KIM-IJNTEMA.json index 7060f3bab4..b901c76db5 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KIM-IJNTEMA.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KIM-IJNTEMA.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kim-ijntema-687406224_20251214T110224Z.json" ], - "modified_at": "2026-01-09T19:18:11.470311+00:00", + "modified_at": "2026-01-09T19:50:46.992397+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kim-ijntema-687406224", @@ -154,7 +154,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.470306+00:00", + "inferred_at": "2026-01-09T19:50:46.992388+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KONSTANTINOS-DIMOS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KONSTANTINOS-DIMOS.json index 26e6862519..b27a06e394 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KONSTANTINOS-DIMOS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KONSTANTINOS-DIMOS.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/konstantinos-dimos-4013b0203_20251214T110251Z.json" ], - "modified_at": "2026-01-09T19:18:12.930090+00:00", + "modified_at": "2026-01-09T19:50:49.140077+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "konstantinos-dimos-4013b0203", @@ -170,7 +170,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.930083+00:00", + "inferred_at": "2026-01-09T19:50:49.140067+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KOOT-LUTON.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KOOT-LUTON.json index b40cee1b03..4acff5623e 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KOOT-LUTON.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_KOOT-LUTON.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/koot-luton-817941221_20251214T111826Z.json" ], - "modified_at": "2026-01-09T19:18:18.077948+00:00", + "modified_at": "2026-01-09T19:51:28.918558+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "koot-luton-817941221", @@ -178,7 +178,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.077944+00:00", + "inferred_at": "2026-01-09T19:51:28.918553+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LAURIEN-WERFF.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LAURIEN-WERFF.json index 27221adf4d..7d60a78d92 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LAURIEN-WERFF.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LAURIEN-WERFF.json @@ -199,7 +199,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laurienvanderwerff_20251214T111340Z.json" ], - "modified_at": "2026-01-09T19:18:15.030532+00:00", + "modified_at": "2026-01-09T19:51:06.620009+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laurienvanderwerff", @@ -228,7 +228,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -277,7 +277,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.030528+00:00", + "inferred_at": "2026-01-09T19:51:06.619998+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LENTINE-SCHOUTEN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LENTINE-SCHOUTEN.json index 0398eebe18..1a31348fe4 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LENTINE-SCHOUTEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LENTINE-SCHOUTEN.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lentine-schouten-29469529_20251214T102913Z.json" ], - "modified_at": "2026-01-09T19:18:15.689533+00:00", + "modified_at": "2026-01-09T19:51:13.464999+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lentine-schouten-29469529", @@ -181,7 +181,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.689529+00:00", + "inferred_at": "2026-01-09T19:51:13.464989+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LISA-G.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LISA-G.json index e37b64a1bb..691ab84ca2 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LISA-G.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LISA-G.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lisa-g-1b384b221_20251214T110201Z.json" ], - "modified_at": "2026-01-09T19:18:13.799550+00:00", + "modified_at": "2026-01-09T19:50:56.594195+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lisa-g-1b384b221", @@ -135,7 +135,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.799546+00:00", + "inferred_at": "2026-01-09T19:50:56.594191+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LOES-ARK.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LOES-ARK.json index 727b006cf6..62e39afb38 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LOES-ARK.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LOES-ARK.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/loes-van-ark_20251214T110121Z.json" ], - "modified_at": "2026-01-09T19:18:13.082043+00:00", + "modified_at": "2026-01-09T19:50:51.056538+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "loes-van-ark", @@ -130,7 +130,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -171,7 +171,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.082039+00:00", + "inferred_at": "2026-01-09T19:50:51.056531+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LOUISA-MIESEN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LOUISA-MIESEN.json index 7ec88374f6..a39249621f 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LOUISA-MIESEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LOUISA-MIESEN.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/louisa-miesen-390557181_20251214T111813Z.json" ], - "modified_at": "2026-01-09T19:18:17.015253+00:00", + "modified_at": "2026-01-09T19:51:22.967996+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "louisa-miesen-390557181", @@ -185,7 +185,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.015247+00:00", + "inferred_at": "2026-01-09T19:51:22.967991+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LOVRO-KRALJ.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LOVRO-KRALJ.json index 885afe8051..54b37b67c3 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LOVRO-KRALJ.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LOVRO-KRALJ.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lovro-kralj-7126a31a2_20251214T113123Z.json" ], - "modified_at": "2026-01-09T19:18:16.911200+00:00", + "modified_at": "2026-01-09T19:51:22.506955+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lovro-kralj-7126a31a2", @@ -161,7 +161,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.911194+00:00", + "inferred_at": "2026-01-09T19:51:22.506948+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LUCA-MERLIJN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LUCA-MERLIJN.json index 9f27549358..dde193fe0b 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LUCA-MERLIJN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LUCA-MERLIJN.json @@ -234,7 +234,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/luca-merlijn-844408166_20251214T112441Z.json" ], - "modified_at": "2026-01-09T19:18:16.468429+00:00", + "modified_at": "2026-01-09T19:51:18.544425+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "luca-merlijn-844408166", @@ -263,7 +263,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -312,7 +312,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.468423+00:00", + "inferred_at": "2026-01-09T19:51:18.544417+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LUCAS-VRIES.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LUCAS-VRIES.json index 4b1e11a0f1..1b2bd2f91a 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LUCAS-VRIES.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_LUCAS-VRIES.json @@ -238,7 +238,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lucas-de-vries-9421585b_20251214T102713Z.json" ], - "modified_at": "2026-01-09T19:18:13.450528+00:00", + "modified_at": "2026-01-09T19:50:54.334321+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lucas-de-vries-9421585b", @@ -261,7 +261,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -302,7 +302,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.450523+00:00", + "inferred_at": "2026-01-09T19:50:54.334315+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MAAIKE-GRINSVEN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MAAIKE-GRINSVEN.json index 8ee6dd5319..5f28b2ddad 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MAAIKE-GRINSVEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MAAIKE-GRINSVEN.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maaike-van-grinsven-609879205_20251214T111640Z.json" ], - "modified_at": "2026-01-09T19:18:15.172655+00:00", + "modified_at": "2026-01-09T19:51:18.242876+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maaike-van-grinsven-609879205", @@ -148,7 +148,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.172650+00:00", + "inferred_at": "2026-01-09T19:51:18.242866+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MAARTJE-VERINGA.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MAARTJE-VERINGA.json index 439aa2de7b..b87ad2bc74 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MAARTJE-VERINGA.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MAARTJE-VERINGA.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maartje-veringa-0804a7151_20251214T111345Z.json" ], - "modified_at": "2026-01-09T19:18:12.845611+00:00", + "modified_at": "2026-01-09T19:50:49.073293+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maartje-veringa-0804a7151", @@ -148,7 +148,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.845604+00:00", + "inferred_at": "2026-01-09T19:50:49.073285+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MADE-PINATIH.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MADE-PINATIH.json similarity index 72% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MADE-PINATIH.json rename to data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MADE-PINATIH.json index 168d1db7f2..a9237b531a 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MADE-PINATIH.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MADE-PINATIH.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MADE-PINATIH", + "ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MADE-PINATIH", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-AMS", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "MADE", "PINATIH" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Made Ngurah Amanda Pinatih", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -149,63 +155,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amanda-pinatih-4b872211_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:08.122217+00:00", + "modified_at": "2026-01-09T19:51:14.173888+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "amanda-pinatih-4b872211", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:08.122211+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MADE-PINATIH", @@ -215,6 +168,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MADE-PINATIH", + "new_ppid": "ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MADE-PINATIH", + "changed_at": "2026-01-09T19:43:40.581102+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1997 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Stedelijk Museum Amsterdam", + "title": "Curator of Design and Contemporary Art", + "date_range": "2020-02" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2020 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2020 - 23 = 1997", + "result": "Estimated birth year: 1997", + "range": "1992-2002 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1992, + 2002 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:14.173882+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARC-BOLLE.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARC-BOLLE.json index e9ef70ed8e..ede1b42c72 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARC-BOLLE.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARC-BOLLE.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marc-bolle_20251214T102914Z.json" ], - "modified_at": "2026-01-09T19:18:15.334976+00:00", + "modified_at": "2026-01-09T19:51:08.572737+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marc-bolle", @@ -181,7 +181,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.334971+00:00", + "inferred_at": "2026-01-09T19:51:08.572731+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARCIN-KLAZES.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARCIN-KLAZES.json index 3221dae217..1ff2cf3ba4 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARCIN-KLAZES.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARCIN-KLAZES.json @@ -244,7 +244,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marcin-klazes-68a06b71_20251214T111709Z.json" ], - "modified_at": "2026-01-09T19:18:14.728181+00:00", + "modified_at": "2026-01-09T19:51:03.738051+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marcin-klazes-68a06b71", @@ -273,7 +273,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -322,7 +322,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.728177+00:00", + "inferred_at": "2026-01-09T19:51:03.738039+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARGUERITE-POLL.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARGUERITE-POLL.json index bddc4b88f9..51a157269b 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARGUERITE-POLL.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARGUERITE-POLL.json @@ -184,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/margueritevanpoll_20251214T110029Z.json" ], - "modified_at": "2026-01-09T19:18:13.123395+00:00", + "modified_at": "2026-01-09T19:50:51.766466+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "margueritevanpoll", @@ -213,7 +213,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.123392+00:00", + "inferred_at": "2026-01-09T19:50:51.766457+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIBEL-HETHARIA.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIBEL-HETHARIA.json index 585269868d..2d4bd55430 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIBEL-HETHARIA.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIBEL-HETHARIA.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maribel-beekman-hetharia-000296236_20251214T110234Z.json" ], - "modified_at": "2026-01-09T19:18:16.196421+00:00", + "modified_at": "2026-01-09T19:51:18.288863+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maribel-beekman-hetharia-000296236", @@ -129,7 +129,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.196414+00:00", + "inferred_at": "2026-01-09T19:51:18.288857+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIJE-HAAN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIJE-HAAN.json index 46e9b2f9ab..62f10320f3 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIJE-HAAN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIJE-HAAN.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marije-dekker-haan-747aab13_20251214T111637Z.json" ], - "modified_at": "2026-01-09T19:18:14.305392+00:00", + "modified_at": "2026-01-09T19:51:00.100324+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marije-dekker-haan-747aab13", @@ -141,7 +141,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.305388+00:00", + "inferred_at": "2026-01-09T19:51:00.100319+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIJE-JANSEN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIJE-JANSEN.json index 09e9c852ce..3b4a1c440d 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIJE-JANSEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIJE-JANSEN.json @@ -89,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marije-jansen-35b86a7_20251214T111401Z.json" ], - "modified_at": "2026-01-09T19:18:18.146160+00:00", + "modified_at": "2026-01-09T19:51:28.930291+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marije-jansen-35b86a7", @@ -118,7 +118,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.146130+00:00", + "inferred_at": "2026-01-09T19:51:28.930285+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIJE-VELLEKOOP.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIJE-VELLEKOOP.json index cdf8771313..68762ced90 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIJE-VELLEKOOP.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIJE-VELLEKOOP.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marije-vellekoop-b7a28892_20251214T110015Z.json" ], - "modified_at": "2026-01-09T19:18:14.625203+00:00", + "modified_at": "2026-01-09T19:51:03.093215+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marije-vellekoop-b7a28892", @@ -113,7 +113,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.625199+00:00", + "inferred_at": "2026-01-09T19:51:03.093204+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIN-RAPPARD.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIN-RAPPARD.json index 76efd9f508..c872c661b5 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIN-RAPPARD.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MARIN-RAPPARD.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marin-rappard-7baa2a206_20251214T112842Z.json" ], - "modified_at": "2026-01-09T19:18:15.600568+00:00", + "modified_at": "2026-01-09T19:51:12.696940+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marin-rappard-7baa2a206", @@ -136,7 +136,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.600564+00:00", + "inferred_at": "2026-01-09T19:51:12.696935+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MAUREEN-SCHEPEL.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MAUREEN-SCHEPEL.json index c458a0ee14..c6694e5c8c 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MAUREEN-SCHEPEL.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MAUREEN-SCHEPEL.json @@ -167,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maureen-schepel-a42665136_20251214T112754Z.json" ], - "modified_at": "2026-01-09T19:18:13.463884+00:00", + "modified_at": "2026-01-09T19:50:54.507131+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maureen-schepel-a42665136", @@ -196,7 +196,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +245,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.463880+00:00", + "inferred_at": "2026-01-09T19:50:54.507120+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MEHMET-KOCAOGLU.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MEHMET-KOCAOGLU.json index 99f9984bb2..3ccc7c2f8e 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MEHMET-KOCAOGLU.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MEHMET-KOCAOGLU.json @@ -94,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mehmet-kocaoglu-085b15168_20251214T110102Z.json" ], - "modified_at": "2026-01-09T19:18:14.885195+00:00", + "modified_at": "2026-01-09T19:51:05.318125+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mehmet-kocaoglu-085b15168", @@ -123,7 +123,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.885192+00:00", + "inferred_at": "2026-01-09T19:51:05.317335+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MIEL-SCHREUDER.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MIEL-SCHREUDER.json index 354d468fd4..08ac1d1c09 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MIEL-SCHREUDER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MIEL-SCHREUDER.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/miel-schreuder-45b1a7141_20251214T103333Z.json" ], - "modified_at": "2026-01-09T19:18:16.745504+00:00", + "modified_at": "2026-01-09T19:50:55.257452+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "miel-schreuder-45b1a7141", @@ -203,7 +203,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.745497+00:00", + "inferred_at": "2026-01-09T19:50:55.257444+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MILES-NIEMEIJER.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MILES-NIEMEIJER.json index 44ffe73e31..6a30f2a5b0 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MILES-NIEMEIJER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_MILES-NIEMEIJER.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/miles-philip-niemeijer-28020430_20251214T113340Z.json" ], - "modified_at": "2026-01-09T19:18:15.826027+00:00", + "modified_at": "2026-01-09T19:51:14.500002+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "miles-philip-niemeijer-28020430", @@ -166,7 +166,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.826022+00:00", + "inferred_at": "2026-01-09T19:51:14.499995+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NADINE-BOERS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NADINE-BOERS.json index ffec602234..75500d099c 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NADINE-BOERS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NADINE-BOERS.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nadine-boers-04285411b_20251214T103023Z.json" ], - "modified_at": "2026-01-09T19:18:16.789161+00:00", + "modified_at": "2026-01-09T19:51:22.023891+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nadine-boers-04285411b", @@ -154,7 +154,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.789157+00:00", + "inferred_at": "2026-01-09T19:51:22.023886+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NATHALIE-MACIESZA.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NATHALIE-MACIESZA.json index 39962668ae..19306fc0f3 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NATHALIE-MACIESZA.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NATHALIE-MACIESZA.json @@ -205,7 +205,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nathalie-maciesza-51780082_20251214T112105Z.json" ], - "modified_at": "2026-01-09T19:18:11.441323+00:00", + "modified_at": "2026-01-09T19:50:46.894113+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nathalie-maciesza-51780082", @@ -234,7 +234,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -283,7 +283,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.441314+00:00", + "inferred_at": "2026-01-09T19:50:46.894103+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NIELS-RAS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NIELS-RAS.json index b66b1a406a..40a1865a7f 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NIELS-RAS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NIELS-RAS.json @@ -201,7 +201,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/niels-ras_20251214T102745Z.json" ], - "modified_at": "2026-01-09T19:18:11.430862+00:00", + "modified_at": "2026-01-09T19:50:46.873619+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "niels-ras", @@ -230,7 +230,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -279,7 +279,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.430855+00:00", + "inferred_at": "2026-01-09T19:50:46.873587+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NOUCHKA-KEYSER.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NOUCHKA-KEYSER.json index d2b1cf4fd8..ca8846afd3 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NOUCHKA-KEYSER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_NOUCHKA-KEYSER.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nouchka-de-keyser-9b1274109_20251214T111323Z.json" ], - "modified_at": "2026-01-09T19:18:13.710399+00:00", + "modified_at": "2026-01-09T19:50:55.889665+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nouchka-de-keyser-9b1274109", @@ -166,7 +166,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.710395+00:00", + "inferred_at": "2026-01-09T19:50:55.889659+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_PAUL-JONG.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_PAUL-JONG.json index 1f328f3328..b82e61c786 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_PAUL-JONG.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_PAUL-JONG.json @@ -258,7 +258,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ptdejong1_20251214T102718Z.json" ], - "modified_at": "2026-01-09T19:18:14.686337+00:00", + "modified_at": "2026-01-09T19:51:03.362179+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ptdejong1", @@ -287,7 +287,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -336,7 +336,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.686332+00:00", + "inferred_at": "2026-01-09T19:51:03.362173+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_PIETER-BOTS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_PIETER-BOTS.json index f4602d61da..b2225f2e14 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_PIETER-BOTS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_PIETER-BOTS.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pieter-bots-78140a22_20251214T112438Z.json" ], - "modified_at": "2026-01-09T19:18:15.216326+00:00", + "modified_at": "2026-01-09T19:51:07.019983+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pieter-bots-78140a22", @@ -131,7 +131,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.216322+00:00", + "inferred_at": "2026-01-09T19:51:07.019979+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_RIK-HELWEGEN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_RIK-HELWEGEN.json index 81d08f9ac1..af2aff12ba 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_RIK-HELWEGEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_RIK-HELWEGEN.json @@ -140,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rikhelwegen_20251214T112559Z.json" ], - "modified_at": "2026-01-09T19:18:15.909173+00:00", + "modified_at": "2026-01-09T19:51:15.065316+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rikhelwegen", @@ -163,7 +163,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.909169+00:00", + "inferred_at": "2026-01-09T19:51:15.065309+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_RODMER-LANGE.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_RODMER-LANGE.json index f4675408ad..55f2c12116 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_RODMER-LANGE.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_RODMER-LANGE.json @@ -272,7 +272,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rodmerdelange_20251214T112107Z.json" ], - "modified_at": "2026-01-09T19:18:16.224213+00:00", + "modified_at": "2026-01-09T19:51:18.320119+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rodmerdelange", @@ -295,7 +295,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -336,7 +336,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.224209+00:00", + "inferred_at": "2026-01-09T19:51:18.320113+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ROLIEN-BAART.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ROLIEN-BAART.json index 00582317a2..4a41114824 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ROLIEN-BAART.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ROLIEN-BAART.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rolien-baart-9a1233161_20251214T111747Z.json" ], - "modified_at": "2026-01-09T19:18:15.283970+00:00", + "modified_at": "2026-01-09T19:51:08.352423+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rolien-baart-9a1233161", @@ -141,7 +141,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.283967+00:00", + "inferred_at": "2026-01-09T19:51:08.352417+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_RONALD-ANSMINK.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_RONALD-ANSMINK.json index 683e50bb88..d4d9833895 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_RONALD-ANSMINK.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_RONALD-ANSMINK.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ronald-ansmink-amsterdam_20251214T111820Z.json" ], - "modified_at": "2026-01-09T19:18:12.929132+00:00", + "modified_at": "2026-01-09T19:50:49.137296+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ronald-ansmink-amsterdam", @@ -125,7 +125,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.929123+00:00", + "inferred_at": "2026-01-09T19:50:49.137247+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ROWAN-OLIEROOK.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ROWAN-OLIEROOK.json index b458fb976b..f025f02d20 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ROWAN-OLIEROOK.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_ROWAN-OLIEROOK.json @@ -223,7 +223,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rowanolierook_20251214T113406Z.json" ], - "modified_at": "2026-01-09T19:18:15.834342+00:00", + "modified_at": "2026-01-09T19:51:14.705348+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rowanolierook", @@ -252,7 +252,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -301,7 +301,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.834337+00:00", + "inferred_at": "2026-01-09T19:51:14.705337+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SARA-BOCCARDO.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SARA-BOCCARDO.json index c2b4dc68b0..8b97c28a68 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SARA-BOCCARDO.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SARA-BOCCARDO.json @@ -171,7 +171,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saraboccardo_20251214T110109Z.json" ], - "modified_at": "2026-01-09T19:18:11.506014+00:00", + "modified_at": "2026-01-09T19:50:47.035782+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saraboccardo", @@ -200,7 +200,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -249,7 +249,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.506006+00:00", + "inferred_at": "2026-01-09T19:50:47.035774+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SARA-WIEMAN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SARA-WIEMAN.json index b3476c65bd..be4d5ae58e 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SARA-WIEMAN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SARA-WIEMAN.json @@ -229,7 +229,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sara-wieman-b24a23225_20251214T104136Z.json" ], - "modified_at": "2026-01-09T19:18:14.967227+00:00", + "modified_at": "2026-01-09T19:51:06.334328+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sara-wieman-b24a23225", @@ -258,7 +258,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -307,7 +307,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.967223+00:00", + "inferred_at": "2026-01-09T19:51:06.334316+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SASCHA-HEIJ.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SASCHA-HEIJ.json index 1aadbdf204..a715953f48 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SASCHA-HEIJ.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SASCHA-HEIJ.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sascha-heij-92811b125_20251214T111646Z.json" ], - "modified_at": "2026-01-09T19:18:14.772239+00:00", + "modified_at": "2026-01-09T19:51:04.060497+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sascha-heij-92811b125", @@ -145,7 +145,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.772235+00:00", + "inferred_at": "2026-01-09T19:51:04.060492+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SASKIA-ALTENA.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SASKIA-ALTENA.json index 1a86436f65..b4fa6d4c5e 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SASKIA-ALTENA.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SASKIA-ALTENA.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saskia-van-altena-680b495a_20251214T111332Z.json" ], - "modified_at": "2026-01-09T19:18:15.864880+00:00", + "modified_at": "2026-01-09T19:51:14.934872+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saskia-van-altena-680b495a", @@ -197,7 +197,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +246,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.864875+00:00", + "inferred_at": "2026-01-09T19:51:14.934858+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SHIVANI-JAGROEP.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SHIVANI-JAGROEP.json index 8a32d2a865..d759f50388 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SHIVANI-JAGROEP.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SHIVANI-JAGROEP.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/shivani-jagroep-67a36b27_20251214T112557Z.json" ], - "modified_at": "2026-01-09T19:18:16.792045+00:00", + "modified_at": "2026-01-09T19:51:22.031257+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "shivani-jagroep-67a36b27", @@ -143,7 +143,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.792040+00:00", + "inferred_at": "2026-01-09T19:51:22.031252+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SJOERD-AARDEN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SJOERD-AARDEN.json index 4eaca4261c..59dcd17957 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SJOERD-AARDEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SJOERD-AARDEN.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sjoerd-aarden-1326501b2_20251214T111439Z.json" ], - "modified_at": "2026-01-09T19:18:14.664162+00:00", + "modified_at": "2026-01-09T19:51:03.248099+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sjoerd-aarden-1326501b2", @@ -162,7 +162,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.664159+00:00", + "inferred_at": "2026-01-09T19:51:03.248092+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SUZANNE-REUS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SUZANNE-REUS.json index 400b033737..f50ac89975 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SUZANNE-REUS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SUZANNE-REUS.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/suzanne-reus-87080821b_20251214T110048Z.json" ], - "modified_at": "2026-01-09T19:18:13.176616+00:00", + "modified_at": "2026-01-09T19:50:53.220421+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "suzanne-reus-87080821b", @@ -140,7 +140,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.176612+00:00", + "inferred_at": "2026-01-09T19:50:53.220415+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SYLKE-C.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SYLKE-C.json index b8fc9f909a..627593616c 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SYLKE-C.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_SYLKE-C.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sylkeclemens_20251214T110113Z.json" ], - "modified_at": "2026-01-09T19:18:15.764318+00:00", + "modified_at": "2026-01-09T19:51:14.348928+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sylkeclemens", @@ -150,7 +150,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.764314+00:00", + "inferred_at": "2026-01-09T19:51:14.348923+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TAMARA-SCHUKKING.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TAMARA-SCHUKKING.json index f9c3d9cd4d..37e79feac1 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TAMARA-SCHUKKING.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TAMARA-SCHUKKING.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tamaracandra58_20251214T110209Z.json" ], - "modified_at": "2026-01-09T19:18:13.396842+00:00", + "modified_at": "2026-01-09T19:50:54.016889+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tamaracandra58", @@ -129,7 +129,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.396838+00:00", + "inferred_at": "2026-01-09T19:50:54.016883+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TARIQ-ETTAJI.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TARIQ-ETTAJI.json index 3f9cd1b46f..fb9ac90567 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TARIQ-ETTAJI.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TARIQ-ETTAJI.json @@ -184,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tariqettaji_20251214T111319Z.json" ], - "modified_at": "2026-01-09T19:18:14.116395+00:00", + "modified_at": "2026-01-09T19:50:58.620953+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tariqettaji", @@ -213,7 +213,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.116390+00:00", + "inferred_at": "2026-01-09T19:50:58.620943+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TESS-ROOIJ.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TESS-ROOIJ.json index 4bdceb7beb..a24b6b31a9 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TESS-ROOIJ.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TESS-ROOIJ.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tess-de-rooij-_20251214T103016Z.json" ], - "modified_at": "2026-01-09T19:18:14.956816+00:00", + "modified_at": "2026-01-09T19:51:05.637931+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tess-de-rooij-", @@ -190,7 +190,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.956813+00:00", + "inferred_at": "2026-01-09T19:51:05.637919+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_THOMAS-GROOT.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_THOMAS-GROOT.json index 98b4534b9b..769af5bbda 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_THOMAS-GROOT.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_THOMAS-GROOT.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thomas-groot-058a4b283_20251214T111746Z.json" ], - "modified_at": "2026-01-09T19:18:13.864883+00:00", + "modified_at": "2026-01-09T19:50:54.552932+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thomas-groot-058a4b283", @@ -172,7 +172,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.864877+00:00", + "inferred_at": "2026-01-09T19:50:54.552926+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TJITSKE-SCHILTMAN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TJITSKE-SCHILTMAN.json index 51a3f85349..ad3156b995 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TJITSKE-SCHILTMAN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_TJITSKE-SCHILTMAN.json @@ -87,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tjitske-schiltman-22852b101_20251214T111906Z.json" ], - "modified_at": "2026-01-09T19:18:15.698448+00:00", + "modified_at": "2026-01-09T19:51:13.471689+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tjitske-schiltman-22852b101", @@ -116,7 +116,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.698445+00:00", + "inferred_at": "2026-01-09T19:51:13.471682+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_VALENTINA-INFANTI.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_VALENTINA-INFANTI.json index 41037ae26b..e4fd0c6247 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_VALENTINA-INFANTI.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_VALENTINA-INFANTI.json @@ -221,7 +221,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/valentinainfanti_20251214T102655Z.json" ], - "modified_at": "2026-01-09T19:18:13.650622+00:00", + "modified_at": "2026-01-09T19:50:55.380953+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "valentinainfanti", @@ -244,7 +244,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -285,7 +285,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.650618+00:00", + "inferred_at": "2026-01-09T19:50:55.380949+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_VICTORIA-WARD.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_VICTORIA-WARD.json index c9a14428a5..ccf20685de 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_VICTORIA-WARD.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_VICTORIA-WARD.json @@ -187,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/victoria-ward-42bab320b_20251214T111749Z.json" ], - "modified_at": "2026-01-09T19:18:14.778583+00:00", + "modified_at": "2026-01-09T19:51:01.591004+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "victoria-ward-42bab320b", @@ -225,7 +225,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -274,7 +274,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.778575+00:00", + "inferred_at": "2026-01-09T19:51:01.590990+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_VINCENT-GORTER.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_VINCENT-GORTER.json index 19ca083e73..9e6b89f964 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_VINCENT-GORTER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_VINCENT-GORTER.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vincent-gorter-878471138_20251214T111541Z.json" ], - "modified_at": "2026-01-09T19:18:16.876435+00:00", + "modified_at": "2026-01-09T19:51:22.330328+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vincent-gorter-878471138", @@ -172,7 +172,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.876430+00:00", + "inferred_at": "2026-01-09T19:51:22.330323+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_WENDY-OAKES.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_WENDY-OAKES.json index a7feb01539..383bbac89b 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_WENDY-OAKES.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-AMS_XXXX_WENDY-OAKES.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wendyoakesfilmfoto_20251214T110042Z.json" ], - "modified_at": "2026-01-09T19:18:16.408725+00:00", + "modified_at": "2026-01-09T19:51:18.464008+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wendyoakesfilmfoto", @@ -193,7 +193,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +242,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.408718+00:00", + "inferred_at": "2026-01-09T19:51:18.464002+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-BUS_XXXX_JACQUELINE-DEKNATEL.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-BUS_XXXX_JACQUELINE-DEKNATEL.json index fecae14efe..407b391c53 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-BUS_XXXX_JACQUELINE-DEKNATEL.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-BUS_XXXX_JACQUELINE-DEKNATEL.json @@ -97,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jacqueline-deknatel-58025714_20251214T104021Z.json" ], - "modified_at": "2026-01-09T19:18:16.729306+00:00", + "modified_at": "2026-01-09T19:51:21.775578+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jacqueline-deknatel-58025714", @@ -120,7 +120,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -161,7 +161,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.729302+00:00", + "inferred_at": "2026-01-09T19:51:21.775531+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-BUS_XXXX_SARAH-VRIES.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-BUS_XXXX_SARAH-VRIES.json index 359d8483d5..c325796a5c 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-BUS_XXXX_SARAH-VRIES.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-BUS_XXXX_SARAH-VRIES.json @@ -283,7 +283,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sarahremmertsdevries_20251214T102712Z.json" ], - "modified_at": "2026-01-09T19:18:13.936838+00:00", + "modified_at": "2026-01-09T19:50:56.859305+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sarahremmertsdevries", @@ -312,7 +312,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -361,7 +361,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.936834+00:00", + "inferred_at": "2026-01-09T19:50:56.859296+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_ERNST-PLEIJSIER.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_ERNST-PLEIJSIER.json index e28a904112..4e30784b6a 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_ERNST-PLEIJSIER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_ERNST-PLEIJSIER.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ernst-pleijsier-8b239b12b_20251214T110203Z.json" ], - "modified_at": "2026-01-09T19:18:13.888873+00:00", + "modified_at": "2026-01-09T19:50:56.758263+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ernst-pleijsier-8b239b12b", @@ -131,7 +131,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.888868+00:00", + "inferred_at": "2026-01-09T19:50:56.758255+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_LOES-DORRESTEIN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_LOES-DORRESTEIN.json index c93b5ba79e..ba422b5429 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_LOES-DORRESTEIN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_LOES-DORRESTEIN.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/loes-dorrestein-41a85895_20251214T113425Z.json" ], - "modified_at": "2026-01-09T19:18:18.079689+00:00", + "modified_at": "2026-01-09T19:51:28.922132+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "loes-dorrestein-41a85895", @@ -166,7 +166,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +207,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.079684+00:00", + "inferred_at": "2026-01-09T19:51:28.922127+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_MEREL-DIJKHUIZEN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_MEREL-DIJKHUIZEN.json index b50378c645..c7ead7d2d3 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_MEREL-DIJKHUIZEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_MEREL-DIJKHUIZEN.json @@ -173,7 +173,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merel-dijkhuizen-11a6201b8_20251214T110303Z.json" ], - "modified_at": "2026-01-09T19:18:13.552723+00:00", + "modified_at": "2026-01-09T19:50:54.629819+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merel-dijkhuizen-11a6201b8", @@ -202,7 +202,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -251,7 +251,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.552719+00:00", + "inferred_at": "2026-01-09T19:50:54.629810+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_SUUS-LOPES.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_SUUS-LOPES.json index fa44b53521..db861cfe62 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_SUUS-LOPES.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_SUUS-LOPES.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/suus-lopes-2b06ba252_20251214T111502Z.json" ], - "modified_at": "2026-01-09T19:18:13.030714+00:00", + "modified_at": "2026-01-09T19:50:50.614144+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "suus-lopes-2b06ba252", @@ -133,7 +133,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.030710+00:00", + "inferred_at": "2026-01-09T19:50:50.614138+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_ZORA-ONINK.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_ZORA-ONINK.json index 3038b91528..aec3b8829f 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_ZORA-ONINK.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-DIE_XXXX_ZORA-ONINK.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/zora-onink-9506a4216_20251214T112636Z.json" ], - "modified_at": "2026-01-09T19:18:14.038074+00:00", + "modified_at": "2026-01-09T19:50:58.535261+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "zora-onink-9506a4216", @@ -167,7 +167,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.038069+00:00", + "inferred_at": "2026-01-09T19:50:58.535252+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-DUI_XXXX_KARIN-LIEFTINK.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-DUI_XXXX_KARIN-LIEFTINK.json index 971261b9b5..b20942a06b 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-DUI_XXXX_KARIN-LIEFTINK.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-DUI_XXXX_KARIN-LIEFTINK.json @@ -163,7 +163,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karinlieftink_20251214T111405Z.json" ], - "modified_at": "2026-01-09T19:18:16.810181+00:00", + "modified_at": "2026-01-09T19:51:22.049439+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karinlieftink", @@ -192,7 +192,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.810177+00:00", + "inferred_at": "2026-01-09T19:51:22.049433+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-ENK_XXXX_AYSENUR-GOGEBAKAN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-ENK_XXXX_AYSENUR-GOGEBAKAN.json index ec594b90a7..137cdb2548 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-ENK_XXXX_AYSENUR-GOGEBAKAN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-ENK_XXXX_AYSENUR-GOGEBAKAN.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aysenur-gogebakan-aa6a39221_20251214T111554Z.json" ], - "modified_at": "2026-01-09T19:18:16.859325+00:00", + "modified_at": "2026-01-09T19:51:22.324540+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aysenur-gogebakan-aa6a39221", @@ -141,7 +141,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.859321+00:00", + "inferred_at": "2026-01-09T19:51:22.324537+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_ANNA-LAKMAKER.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_ANNA-LAKMAKER.json index 052f6f72b7..ee2b0396cb 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_ANNA-LAKMAKER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_ANNA-LAKMAKER.json @@ -343,7 +343,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-lakmaker-a0bb8519_20251214T102724Z.json" ], - "modified_at": "2026-01-09T19:18:15.684925+00:00", + "modified_at": "2026-01-09T19:51:13.438259+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anna-lakmaker-a0bb8519", @@ -372,7 +372,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -421,7 +421,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.684919+00:00", + "inferred_at": "2026-01-09T19:51:13.438250+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_IRIS-BLOKKER.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_IRIS-BLOKKER.json index 3e494237ab..4ee57b38d7 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_IRIS-BLOKKER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_IRIS-BLOKKER.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/iris-blokker-2a108a1a1_20251214T111748Z.json" ], - "modified_at": "2026-01-09T19:18:14.018921+00:00", + "modified_at": "2026-01-09T19:50:51.735120+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "iris-blokker-2a108a1a1", @@ -200,7 +200,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -249,7 +249,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.018914+00:00", + "inferred_at": "2026-01-09T19:50:51.735112+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_KOEN-SNIJDERS.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_KOEN-SNIJDERS.json index 97c2b506e5..9adfd72597 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_KOEN-SNIJDERS.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_KOEN-SNIJDERS.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/koen-snijders-5a1847a5_20251214T111334Z.json" ], - "modified_at": "2026-01-09T19:18:18.168917+00:00", + "modified_at": "2026-01-09T19:51:29.002934+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "koen-snijders-5a1847a5", @@ -153,7 +153,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.168911+00:00", + "inferred_at": "2026-01-09T19:51:29.002927+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_MARTINE-HULSHOF.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_MARTINE-HULSHOF.json index 05681ad7a3..25568f4188 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_MARTINE-HULSHOF.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_MARTINE-HULSHOF.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martinehulshof_20251214T111452Z.json" ], - "modified_at": "2026-01-09T19:18:18.947674+00:00", + "modified_at": "2026-01-09T19:51:18.403238+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martinehulshof", @@ -148,7 +148,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.947667+00:00", + "inferred_at": "2026-01-09T19:51:18.403233+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_ROSANNE-SPEET.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_ROSANNE-SPEET.json index 60452e0648..f50f5a1143 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_ROSANNE-SPEET.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-HAA_XXXX_ROSANNE-SPEET.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rosanne-speet-75a9b4108_20251214T111437Z.json" ], - "modified_at": "2026-01-09T19:18:15.574854+00:00", + "modified_at": "2026-01-09T19:51:08.359987+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rosanne-speet-75a9b4108", @@ -200,7 +200,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.574849+00:00", + "inferred_at": "2026-01-09T19:51:08.359983+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-HIL_XXXX_DAAN-PLAIZIER.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-HIL_XXXX_DAAN-PLAIZIER.json index 31d2f8cb1d..5cb9ba26b0 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-HIL_XXXX_DAAN-PLAIZIER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-HIL_XXXX_DAAN-PLAIZIER.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daan-plaizier-689005214_20251214T110005Z.json" ], - "modified_at": "2026-01-09T19:18:17.590872+00:00", + "modified_at": "2026-01-09T19:51:28.442558+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daan-plaizier-689005214", @@ -159,7 +159,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.590856+00:00", + "inferred_at": "2026-01-09T19:51:28.442554+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-HIL_XXXX_EMMA-SLUYTER.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-HIL_XXXX_EMMA-SLUYTER.json index 9311cf0886..5d8734c727 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-HIL_XXXX_EMMA-SLUYTER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-HIL_XXXX_EMMA-SLUYTER.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emma-sluyter_20251214T110146Z.json" ], - "modified_at": "2026-01-09T19:18:17.779945+00:00", + "modified_at": "2026-01-09T19:51:28.572462+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emma-sluyter", @@ -135,7 +135,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.779940+00:00", + "inferred_at": "2026-01-09T19:51:28.572459+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-HIL_XXXX_SANDER-BLIKMAN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-HIL_XXXX_SANDER-BLIKMAN.json index a42e3729cb..6bfc2b32a9 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-HIL_XXXX_SANDER-BLIKMAN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-HIL_XXXX_SANDER-BLIKMAN.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sander-blikman-98b2a9129_20251214T111830Z.json" ], - "modified_at": "2026-01-09T19:18:14.973649+00:00", + "modified_at": "2026-01-09T19:51:06.341438+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sander-blikman-98b2a9129", @@ -168,7 +168,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.973646+00:00", + "inferred_at": "2026-01-09T19:51:06.341433+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_LOES-EKHARTKNIJN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_LOES-EKHARTKNIJN.json index 07e8f8070c..d114762c57 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_LOES-EKHARTKNIJN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_LOES-EKHARTKNIJN.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/loes-ekhart-knijn-0528b515a_20251214T113146Z.json" ], - "modified_at": "2026-01-09T19:18:15.255673+00:00", + "modified_at": "2026-01-09T19:51:07.586818+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "loes-ekhart-knijn-0528b515a", @@ -131,7 +131,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.255670+00:00", + "inferred_at": "2026-01-09T19:51:07.586814+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_LOES-PITSTRA.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_LOES-PITSTRA.json index 3a4f3cd3da..39e5c36413 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_LOES-PITSTRA.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_LOES-PITSTRA.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/loes-pitstra-82164a145_20251214T111600Z.json" ], - "modified_at": "2026-01-09T19:18:14.218322+00:00", + "modified_at": "2026-01-09T19:50:53.719788+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "loes-pitstra-82164a145", @@ -144,7 +144,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.218316+00:00", + "inferred_at": "2026-01-09T19:50:53.719784+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_PIETER-PLOMP.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_PIETER-PLOMP.json index d4f97d68c8..8ac7d176bf 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_PIETER-PLOMP.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_PIETER-PLOMP.json @@ -140,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pieter-plomp-51bb282b_20251214T110046Z.json" ], - "modified_at": "2026-01-09T19:18:16.076665+00:00", + "modified_at": "2026-01-09T19:51:22.053378+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pieter-plomp-51bb282b", @@ -172,7 +172,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.076658+00:00", + "inferred_at": "2026-01-09T19:51:22.053374+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_REMCO-BOUWLAND.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_REMCO-BOUWLAND.json index 6a3917427b..b5a35727ac 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_REMCO-BOUWLAND.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_REMCO-BOUWLAND.json @@ -87,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/remco-bouwland-ba264a228_20251214T111408Z.json" ], - "modified_at": "2026-01-09T19:18:15.182063+00:00", + "modified_at": "2026-01-09T19:51:06.997772+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "remco-bouwland-ba264a228", @@ -116,7 +116,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.182059+00:00", + "inferred_at": "2026-01-09T19:51:06.997766+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_ROOS-KAAGMAN.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_ROOS-KAAGMAN.json index e9c9bc9fc1..205cc9be41 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_ROOS-KAAGMAN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-HOO_XXXX_ROOS-KAAGMAN.json @@ -189,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roos-kaagman-60a917ba_20251214T111848Z.json" ], - "modified_at": "2026-01-09T19:18:15.964717+00:00", + "modified_at": "2026-01-09T19:51:15.715364+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "roos-kaagman-60a917ba", @@ -212,7 +212,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -253,7 +253,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.964712+00:00", + "inferred_at": "2026-01-09T19:51:15.715360+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-SCH_XXXX_LISETTE-BLOKKER.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-SCH_XXXX_LISETTE-BLOKKER.json index f024d1465a..f8715e45e8 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-SCH_XXXX_LISETTE-BLOKKER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-SCH_XXXX_LISETTE-BLOKKER.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lisette-blokker-57aa77b9_20251214T113143Z.json" ], - "modified_at": "2026-01-09T19:18:15.565853+00:00", + "modified_at": "2026-01-09T19:51:12.113605+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lisette-blokker-57aa77b9", @@ -150,7 +150,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.565848+00:00", + "inferred_at": "2026-01-09T19:51:12.113599+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-UIT_XXXX_MAJORIE-BOER.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-UIT_XXXX_MAJORIE-BOER.json index 04dbb19bd7..14ecd56d08 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-UIT_XXXX_MAJORIE-BOER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-UIT_XXXX_MAJORIE-BOER.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/majorie-de-boer-3a377b143_20251214T111834Z.json" ], - "modified_at": "2026-01-09T19:18:14.645162+00:00", + "modified_at": "2026-01-09T19:50:49.070662+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "majorie-de-boer-3a377b143", @@ -208,7 +208,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -257,7 +257,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.645155+00:00", + "inferred_at": "2026-01-09T19:50:49.070652+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-ZAA_XXXX_AMBER-HONING.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-ZAA_XXXX_AMBER-HONING.json index 60caf0f07d..0a0b0fedf7 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-ZAA_XXXX_AMBER-HONING.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-ZAA_XXXX_AMBER-HONING.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amber-honing-08bb7b9b_20251214T110155Z.json" ], - "modified_at": "2026-01-09T19:18:13.532857+00:00", + "modified_at": "2026-01-09T19:50:54.577750+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "amber-honing-08bb7b9b", @@ -156,7 +156,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.532852+00:00", + "inferred_at": "2026-01-09T19:50:54.577743+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-ZAA_XXXX_FRANCIS-BEEKINK.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-ZAA_XXXX_FRANCIS-BEEKINK.json index 6d2bcac8bc..9f5657a5b6 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-ZAA_XXXX_FRANCIS-BEEKINK.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-ZAA_XXXX_FRANCIS-BEEKINK.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/francis-beekink-8b1546153_20251214T110130Z.json" ], - "modified_at": "2026-01-09T19:18:14.835424+00:00", + "modified_at": "2026-01-09T19:51:04.784599+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "francis-beekink-8b1546153", @@ -178,7 +178,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.835419+00:00", + "inferred_at": "2026-01-09T19:51:04.784589+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-NH-ZAA_XXXX_SANDER-HEHANUSSA.json b/data/person/ID_NL-NH-AMS_199X_NL-NH-ZAA_XXXX_SANDER-HEHANUSSA.json index 8eaa549416..377ec144f9 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-NH-ZAA_XXXX_SANDER-HEHANUSSA.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-NH-ZAA_XXXX_SANDER-HEHANUSSA.json @@ -172,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sander-hehanussa-4b302a28_20251214T102750Z.json" ], - "modified_at": "2026-01-09T19:18:15.697750+00:00", + "modified_at": "2026-01-09T19:51:12.751276+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sander-hehanussa-4b302a28", @@ -210,7 +210,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.697745+00:00", + "inferred_at": "2026-01-09T19:51:12.751268+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-OV-OLS_XXXX_LEONIEK-DAMMANVRIELINK.json b/data/person/ID_NL-NH-AMS_199X_NL-OV-OLS_XXXX_LEONIEK-DAMMANVRIELINK.json index 5913784257..ba1715bd46 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-OV-OLS_XXXX_LEONIEK-DAMMANVRIELINK.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-OV-OLS_XXXX_LEONIEK-DAMMANVRIELINK.json @@ -215,7 +215,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/leoniekvrielink_20251214T110410Z.json" ], - "modified_at": "2026-01-09T19:18:13.033803+00:00", + "modified_at": "2026-01-09T19:50:50.621576+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "leoniekvrielink", @@ -244,7 +244,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -293,7 +293,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.033799+00:00", + "inferred_at": "2026-01-09T19:50:50.621571+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-UT-MAA_XXXX_LIEKE-BREMER.json b/data/person/ID_NL-NH-AMS_199X_NL-UT-MAA_XXXX_LIEKE-BREMER.json index 423ea88560..21768e0c98 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-UT-MAA_XXXX_LIEKE-BREMER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-UT-MAA_XXXX_LIEKE-BREMER.json @@ -133,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lieke-bremer-b806a293_20251214T112553Z.json" ], - "modified_at": "2026-01-09T19:18:15.496338+00:00", + "modified_at": "2026-01-09T19:51:11.091728+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lieke-bremer-b806a293", @@ -156,7 +156,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.496335+00:00", + "inferred_at": "2026-01-09T19:51:11.091723+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_FOUAD-BOUKRAA.json b/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_FOUAD-BOUKRAA.json index b0d14b45d7..a4fda7710a 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_FOUAD-BOUKRAA.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_FOUAD-BOUKRAA.json @@ -187,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fouad-boukraa-71b927124_20251214T110305Z.json" ], - "modified_at": "2026-01-09T19:18:16.369650+00:00", + "modified_at": "2026-01-09T19:51:18.410982+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fouad-boukraa-71b927124", @@ -216,7 +216,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -265,7 +265,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.369644+00:00", + "inferred_at": "2026-01-09T19:51:18.410978+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_IMKE-LANGE.json b/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_IMKE-LANGE.json index 793c9d694c..03f278a345 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_IMKE-LANGE.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_IMKE-LANGE.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/imke-de-lange-7a3061228_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:14.912075+00:00", + "modified_at": "2026-01-09T19:51:05.498355+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "imke-de-lange-7a3061228", @@ -184,7 +184,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.912070+00:00", + "inferred_at": "2026-01-09T19:51:05.498341+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_JANNEKE-WONING.json b/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_JANNEKE-WONING.json index 17dce98641..c31759d84a 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_JANNEKE-WONING.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_JANNEKE-WONING.json @@ -77,7 +77,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janneke-woning-aa271022a_20251214T110422Z.json" ], - "modified_at": "2026-01-09T19:18:16.001620+00:00", + "modified_at": "2026-01-09T19:50:54.584683+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janneke-woning-aa271022a", @@ -116,7 +116,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.001614+00:00", + "inferred_at": "2026-01-09T19:50:54.584677+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_MYRTE-LEGERSTEE.json b/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_MYRTE-LEGERSTEE.json index e38ac77c0b..287e8e2fdf 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_MYRTE-LEGERSTEE.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_MYRTE-LEGERSTEE.json @@ -167,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/myrte-legerstee-862796142_20251214T110433Z.json" ], - "modified_at": "2026-01-09T19:18:12.862877+00:00", + "modified_at": "2026-01-09T19:50:53.692536+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "myrte-legerstee-862796142", @@ -205,7 +205,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -254,7 +254,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.862871+00:00", + "inferred_at": "2026-01-09T19:50:53.692531+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_SANDER-KEIJZER.json b/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_SANDER-KEIJZER.json index f844984d5a..5169fc1293 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_SANDER-KEIJZER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-UT-UTR_XXXX_SANDER-KEIJZER.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sander-keijzer-21b537b5_20251214T112103Z.json" ], - "modified_at": "2026-01-09T19:18:13.325002+00:00", + "modified_at": "2026-01-09T19:50:53.883323+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sander-keijzer-21b537b5", @@ -139,7 +139,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.324997+00:00", + "inferred_at": "2026-01-09T19:50:53.883318+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-UT-VEE_XXXX_WILLEMIJN-BOLDERMAN.json b/data/person/ID_NL-NH-AMS_199X_NL-UT-VEE_XXXX_WILLEMIJN-BOLDERMAN.json index 09f3385faa..77155d4bd7 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-UT-VEE_XXXX_WILLEMIJN-BOLDERMAN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-UT-VEE_XXXX_WILLEMIJN-BOLDERMAN.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/willemijn-bolderman-879430176_20251214T111753Z.json" ], - "modified_at": "2026-01-09T19:18:16.418850+00:00", + "modified_at": "2026-01-09T19:50:56.590668+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "willemijn-bolderman-879430176", @@ -161,7 +161,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.418843+00:00", + "inferred_at": "2026-01-09T19:50:56.590663+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-UT-ZEI_XXXX_JOCHEM-EIJSDEN.json b/data/person/ID_NL-NH-AMS_199X_NL-UT-ZEI_XXXX_JOCHEM-EIJSDEN.json index b92079e1e2..6869a25c94 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-UT-ZEI_XXXX_JOCHEM-EIJSDEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-UT-ZEI_XXXX_JOCHEM-EIJSDEN.json @@ -239,7 +239,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jochemvaneijsden_20251214T112038Z.json" ], - "modified_at": "2026-01-09T19:18:17.783259+00:00", + "modified_at": "2026-01-09T19:51:28.573768+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jochemvaneijsden", @@ -268,7 +268,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -317,7 +317,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.783254+00:00", + "inferred_at": "2026-01-09T19:51:28.573764+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-BER_XXXX_GHYSLAINE-TROMP.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-BER_XXXX_GHYSLAINE-TROMP.json index b0a88019ae..82dc3fc732 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-BER_XXXX_GHYSLAINE-TROMP.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-BER_XXXX_GHYSLAINE-TROMP.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ghyslaine-tromp_20251214T110312Z.json" ], - "modified_at": "2026-01-09T19:18:14.982589+00:00", + "modified_at": "2026-01-09T19:51:06.349138+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ghyslaine-tromp", @@ -152,7 +152,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.982583+00:00", + "inferred_at": "2026-01-09T19:51:06.349131+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-DEL_XXXX_SHAHRAM-JANBAZ.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-DEL_XXXX_SHAHRAM-JANBAZ.json index 18ba90cc05..dd07bce7d5 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-DEL_XXXX_SHAHRAM-JANBAZ.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-DEL_XXXX_SHAHRAM-JANBAZ.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/shahram-janbaz-b877058a_20251214T111005Z.json" ], - "modified_at": "2026-01-09T19:18:17.508143+00:00", + "modified_at": "2026-01-09T19:51:28.202567+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "shahram-janbaz-b877058a", @@ -136,7 +136,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.508137+00:00", + "inferred_at": "2026-01-09T19:51:28.202562+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-LEI_XXXX_NICOLE-COLLAZO.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-LEI_XXXX_NICOLE-COLLAZO.json index 481d007c36..1175668de7 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-LEI_XXXX_NICOLE-COLLAZO.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-LEI_XXXX_NICOLE-COLLAZO.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicole-medina-collazo-05510993_20251214T103738Z.json" ], - "modified_at": "2026-01-09T19:18:17.841499+00:00", + "modified_at": "2026-01-09T19:51:28.792643+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicole-medina-collazo-05510993", @@ -174,7 +174,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.841494+00:00", + "inferred_at": "2026-01-09T19:51:28.792635+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-LEI_XXXX_OLAF-WALLE.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-LEI_XXXX_OLAF-WALLE.json index 889d891462..47fb062a14 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-LEI_XXXX_OLAF-WALLE.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-LEI_XXXX_OLAF-WALLE.json @@ -362,7 +362,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ovdwalle_20251214T112632Z.json" ], - "modified_at": "2026-01-09T19:18:16.677432+00:00", + "modified_at": "2026-01-09T19:51:21.405954+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ovdwalle", @@ -391,7 +391,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -440,7 +440,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.677426+00:00", + "inferred_at": "2026-01-09T19:51:21.405948+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-ROT_XXXX_GHIZLAN-HACHIMI.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-ROT_XXXX_GHIZLAN-HACHIMI.json index 790c78c5a7..ea93fd7d6c 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-ROT_XXXX_GHIZLAN-HACHIMI.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-ROT_XXXX_GHIZLAN-HACHIMI.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ghizlan-el-hachimi-60b377207_20251214T111302Z.json" ], - "modified_at": "2026-01-09T19:18:13.308941+00:00", + "modified_at": "2026-01-09T19:50:53.861898+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ghizlan-el-hachimi-60b377207", @@ -156,7 +156,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.308937+00:00", + "inferred_at": "2026-01-09T19:50:53.861891+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_ADISHA-MARTEN.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_ADISHA-MARTEN.json index 5a39c563f9..cd47191d09 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_ADISHA-MARTEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_ADISHA-MARTEN.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/adisha-marten_20251214T112720Z.json" ], - "modified_at": "2026-01-09T19:18:15.597699+00:00", + "modified_at": "2026-01-09T19:51:12.693210+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "adisha-marten", @@ -134,7 +134,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.597695+00:00", + "inferred_at": "2026-01-09T19:51:12.693203+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_ANNEMARIE-BEGHEIJN.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_ANNEMARIE-BEGHEIJN.json index 259db4040e..1916752a9f 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_ANNEMARIE-BEGHEIJN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_ANNEMARIE-BEGHEIJN.json @@ -184,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annemariebegheyn_20251214T112244Z.json" ], - "modified_at": "2026-01-09T19:18:14.856332+00:00", + "modified_at": "2026-01-09T19:51:05.152566+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annemariebegheyn", @@ -207,7 +207,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -248,7 +248,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.856327+00:00", + "inferred_at": "2026-01-09T19:51:05.152556+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_ANNEMARIJE-STAAIJ.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_ANNEMARIJE-STAAIJ.json index 3bc126b269..13d06d7662 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_ANNEMARIJE-STAAIJ.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_ANNEMARIJE-STAAIJ.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annemarijevandestaaij_20251214T102937Z.json" ], - "modified_at": "2026-01-09T19:18:16.463257+00:00", + "modified_at": "2026-01-09T19:51:18.458465+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annemarijevandestaaij", @@ -213,7 +213,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.463251+00:00", + "inferred_at": "2026-01-09T19:51:18.458461+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_GERALD-HOPSTER.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_GERALD-HOPSTER.json index 64826f687e..136d70c9d5 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_GERALD-HOPSTER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_GERALD-HOPSTER.json @@ -190,7 +190,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerald-hopster-88641612_20251214T112625Z.json" ], - "modified_at": "2026-01-09T19:18:12.731980+00:00", + "modified_at": "2026-01-09T19:50:48.671441+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerald-hopster-88641612", @@ -219,7 +219,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -268,7 +268,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.731973+00:00", + "inferred_at": "2026-01-09T19:50:48.671437+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_JESPER-DEKKER.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_JESPER-DEKKER.json index 4fc9749e95..2fb012282a 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_JESPER-DEKKER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_JESPER-DEKKER.json @@ -177,7 +177,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jesper-dekker-31647667_20251214T102951Z.json" ], - "modified_at": "2026-01-09T19:18:15.732402+00:00", + "modified_at": "2026-01-09T19:51:13.591412+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jesper-dekker-31647667", @@ -206,7 +206,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -255,7 +255,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.732398+00:00", + "inferred_at": "2026-01-09T19:51:13.591406+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_KELLY-WARNAARBOENDER.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_KELLY-WARNAARBOENDER.json index 5fa832c953..1f7af27d8d 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_KELLY-WARNAARBOENDER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_KELLY-WARNAARBOENDER.json @@ -81,7 +81,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kelly-warnaar-boender-8b976010a_20251214T110754Z.json" ], - "modified_at": "2026-01-09T19:18:15.458481+00:00", + "modified_at": "2026-01-09T19:51:10.882744+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kelly-warnaar-boender-8b976010a", @@ -104,7 +104,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -145,7 +145,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.458478+00:00", + "inferred_at": "2026-01-09T19:51:10.882740+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_KOEN-HOCKER.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_KOEN-HOCKER.json index 5effb451f5..dde6d9a614 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_KOEN-HOCKER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_KOEN-HOCKER.json @@ -183,7 +183,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/koenhocker_20251214T102947Z.json" ], - "modified_at": "2026-01-09T19:18:13.156287+00:00", + "modified_at": "2026-01-09T19:50:52.972109+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "koenhocker", @@ -212,7 +212,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -261,7 +261,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.156283+00:00", + "inferred_at": "2026-01-09T19:50:52.972101+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_LAUREN-ROMIJN.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_LAUREN-ROMIJN.json index a326cbb44e..7b267ddf41 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_LAUREN-ROMIJN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_LAUREN-ROMIJN.json @@ -172,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lauren-romijn-744215a2_20251214T112849Z.json" ], - "modified_at": "2026-01-09T19:18:14.016461+00:00", + "modified_at": "2026-01-09T19:50:58.094415+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lauren-romijn-744215a2", @@ -195,7 +195,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.016457+00:00", + "inferred_at": "2026-01-09T19:50:58.094406+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_LISA-GOTOH.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_LISA-GOTOH.json index 54d9ab8672..664950485b 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_LISA-GOTOH.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_LISA-GOTOH.json @@ -191,7 +191,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lisa-gotoh_20251214T102918Z.json" ], - "modified_at": "2026-01-09T19:18:14.258681+00:00", + "modified_at": "2026-01-09T19:50:59.324842+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lisa-gotoh", @@ -220,7 +220,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -269,7 +269,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.258677+00:00", + "inferred_at": "2026-01-09T19:50:59.324827+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_MARION-ANKER.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_MARION-ANKER.json index 7c9aa5b43e..d1c8fa9583 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_MARION-ANKER.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_MARION-ANKER.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marion-anker-b7a4a690_20251214T111309Z.json" ], - "modified_at": "2026-01-09T19:18:13.092649+00:00", + "modified_at": "2026-01-09T19:50:51.085355+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marion-anker-b7a4a690", @@ -159,7 +159,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.092644+00:00", + "inferred_at": "2026-01-09T19:50:51.085350+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_REINOUD-LINSCHOTEN.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_REINOUD-LINSCHOTEN.json index 683d93f33d..16db7dbae6 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_REINOUD-LINSCHOTEN.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_REINOUD-LINSCHOTEN.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/reinoudlinschoten_20251214T103050Z.json" ], - "modified_at": "2026-01-09T19:18:13.333297+00:00", + "modified_at": "2026-01-09T19:50:53.887389+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "reinoudlinschoten", @@ -185,7 +185,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.333292+00:00", + "inferred_at": "2026-01-09T19:50:53.887382+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_SAID-HAKIMIKARACA.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_SAID-HAKIMIKARACA.json index 0fc3c8d635..d582e7a092 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_SAID-HAKIMIKARACA.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_SAID-HAKIMIKARACA.json @@ -187,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/said-hakimi-karaca-8a26133b_20251214T102935Z.json" ], - "modified_at": "2026-01-09T19:18:17.534296+00:00", + "modified_at": "2026-01-09T19:51:28.395924+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "said-hakimi-karaca-8a26133b", @@ -216,7 +216,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -265,7 +265,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.534290+00:00", + "inferred_at": "2026-01-09T19:51:28.395919+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_STERRE-STOLK.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_STERRE-STOLK.json index 2948b7d807..d9ea4203c4 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_STERRE-STOLK.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-TH_XXXX_STERRE-STOLK.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sterre-stolk-755222173_20251214T112816Z.json" ], - "modified_at": "2026-01-09T19:18:19.014345+00:00", + "modified_at": "2026-01-09T19:51:00.918139+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sterre-stolk-755222173", @@ -191,7 +191,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:19.014316+00:00", + "inferred_at": "2026-01-09T19:51:00.918133+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_NL-ZH-ZOE_XXXX_ROAR-WESTERDIJK.json b/data/person/ID_NL-NH-AMS_199X_NL-ZH-ZOE_XXXX_ROAR-WESTERDIJK.json index 9eb246ab23..475e348a45 100644 --- a/data/person/ID_NL-NH-AMS_199X_NL-ZH-ZOE_XXXX_ROAR-WESTERDIJK.json +++ b/data/person/ID_NL-NH-AMS_199X_NL-ZH-ZOE_XXXX_ROAR-WESTERDIJK.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roar-westerdijk-37394a18a_20251214T110309Z.json" ], - "modified_at": "2026-01-09T19:18:16.949858+00:00", + "modified_at": "2026-01-09T19:51:22.797838+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "roar-westerdijk-37394a18a", @@ -170,7 +170,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.949819+00:00", + "inferred_at": "2026-01-09T19:51:22.797830+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ALEX-WITKAMP.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ALEX-WITKAMP.json index e48544bfe5..ce161c284b 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ALEX-WITKAMP.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ALEX-WITKAMP.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alex-witkamp_20251214T103118Z.json" ], - "modified_at": "2026-01-09T19:18:13.681284+00:00", + "modified_at": "2026-01-09T19:50:55.424938+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alex-witkamp", @@ -156,7 +156,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.677652+00:00", + "inferred_at": "2026-01-09T19:50:55.421184+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_AMANDINE-PERZYNA.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_AMANDINE-PERZYNA.json index 066496f93c..91fd12dffe 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_AMANDINE-PERZYNA.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_AMANDINE-PERZYNA.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amandine-perzyna-b38000276_20251214T101445Z.json" ], - "modified_at": "2026-01-09T19:18:17.036254+00:00", + "modified_at": "2026-01-09T19:51:23.186313+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "amandine-perzyna-b38000276", @@ -148,7 +148,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.032481+00:00", + "inferred_at": "2026-01-09T19:51:23.167099+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ANA-HARSENHORST.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ANA-HARSENHORST.json index 55f580963e..34e2973837 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ANA-HARSENHORST.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ANA-HARSENHORST.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ana-lucinda-de-velde-harsenhorst-433a945a_20251214T103040Z.json" ], - "modified_at": "2026-01-09T19:18:16.910406+00:00", + "modified_at": "2026-01-09T19:51:22.505408+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ana-lucinda-de-velde-harsenhorst-433a945a", @@ -192,7 +192,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.908419+00:00", + "inferred_at": "2026-01-09T19:51:22.503376+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ANNABEL-WILDSCHUT.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ANNABEL-WILDSCHUT.json index 48903b9283..21b841b00b 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ANNABEL-WILDSCHUT.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ANNABEL-WILDSCHUT.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annabel-wildschut-175018120_20251214T102934Z.json" ], - "modified_at": "2026-01-09T19:18:17.319562+00:00", + "modified_at": "2026-01-09T19:51:25.524824+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annabel-wildschut-175018120", @@ -156,7 +156,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.317455+00:00", + "inferred_at": "2026-01-09T19:51:25.522918+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ANNE-GRONINGEN.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ANNE-GRONINGEN.json index 8be9574084..8f0ef44956 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ANNE-GRONINGEN.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_ANNE-GRONINGEN.json @@ -202,7 +202,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annevangroningen_20251214T112608Z.json" ], - "modified_at": "2026-01-09T19:18:17.561156+00:00", + "modified_at": "2026-01-09T19:51:28.406839+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annevangroningen", @@ -230,7 +230,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -279,7 +279,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.559090+00:00", + "inferred_at": "2026-01-09T19:51:28.405106+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_BOU-WONG.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_BOU-WONG.json index 6a8ce4aa7f..0433cd9cc8 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_BOU-WONG.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_BOU-WONG.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bou-laam-wong-79bb8a1b6_20251214T113236Z.json" ], - "modified_at": "2026-01-09T19:18:14.674976+00:00", + "modified_at": "2026-01-09T19:51:03.350775+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bou-laam-wong-79bb8a1b6", @@ -166,7 +166,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.673082+00:00", + "inferred_at": "2026-01-09T19:51:03.348818+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_DAISY-SLAVENBURG.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_DAISY-SLAVENBURG.json index a95a89597f..5853a08384 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_DAISY-SLAVENBURG.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_DAISY-SLAVENBURG.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daisy-slavenburg-6198a5175_20251214T112707Z.json" ], - "modified_at": "2026-01-09T19:18:13.748117+00:00", + "modified_at": "2026-01-09T19:50:56.069455+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daisy-slavenburg-6198a5175", @@ -155,7 +155,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.746254+00:00", + "inferred_at": "2026-01-09T19:50:56.067560+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_DRIES-THIELEN.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_DRIES-THIELEN.json index e2bc191310..0a34491ce8 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_DRIES-THIELEN.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_DRIES-THIELEN.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dries-van-thielen-81704b67_20251214T104155Z.json" ], - "modified_at": "2026-01-09T19:18:14.898828+00:00", + "modified_at": "2026-01-09T19:51:05.340825+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dries-van-thielen-81704b67", @@ -180,7 +180,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.896151+00:00", + "inferred_at": "2026-01-09T19:51:05.336622+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_FARILYANN-MUZO.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_FARILYANN-MUZO.json index 60d2885743..ddadea8e0d 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_FARILYANN-MUZO.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_FARILYANN-MUZO.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/farilyannmuzo_20251214T112939Z.json" ], - "modified_at": "2026-01-09T19:18:14.612184+00:00", + "modified_at": "2026-01-09T19:51:03.014473+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "farilyannmuzo", @@ -193,7 +193,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +242,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.608269+00:00", + "inferred_at": "2026-01-09T19:51:02.995956+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_FREDERIKE-JUNGHEIM.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_FREDERIKE-JUNGHEIM.json index 274a8f2d12..557c5c9f75 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_FREDERIKE-JUNGHEIM.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_FREDERIKE-JUNGHEIM.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frederike-jungheim-1a30b1a2_20251214T111658Z.json" ], - "modified_at": "2026-01-09T19:18:13.437341+00:00", + "modified_at": "2026-01-09T19:50:54.191163+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frederike-jungheim-1a30b1a2", @@ -135,7 +135,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.435457+00:00", + "inferred_at": "2026-01-09T19:50:54.186556+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_FRICKE-OOSTEN.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_FRICKE-OOSTEN.json index 9daad8bdf7..46a16e5257 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_FRICKE-OOSTEN.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_FRICKE-OOSTEN.json @@ -214,7 +214,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fricke-oosten-62a34b4a_20251214T111258Z.json" ], - "modified_at": "2026-01-09T19:18:14.124534+00:00", + "modified_at": "2026-01-09T19:50:58.658587+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fricke-oosten-62a34b4a", @@ -242,7 +242,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -291,7 +291,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.120879+00:00", + "inferred_at": "2026-01-09T19:50:58.652393+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_HANNA-SMIT.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_HANNA-SMIT.json index 619af7d23e..b76ed48850 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_HANNA-SMIT.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_HANNA-SMIT.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hannasmit_20251214T102904Z.json" ], - "modified_at": "2026-01-09T19:18:16.574079+00:00", + "modified_at": "2026-01-09T19:51:19.069620+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hannasmit", @@ -190,7 +190,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.567942+00:00", + "inferred_at": "2026-01-09T19:51:19.065431+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_HIMAYA-AYO.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_HIMAYA-AYO.json index b32d29736e..16128b27a0 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_HIMAYA-AYO.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_HIMAYA-AYO.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/himaya-ayo-a2b4b4258_20251214T110258Z.json" ], - "modified_at": "2026-01-09T19:18:17.298746+00:00", + "modified_at": "2026-01-09T19:51:25.501680+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "himaya-ayo-a2b4b4258", @@ -143,7 +143,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.291756+00:00", + "inferred_at": "2026-01-09T19:51:25.497476+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_JAMIE-CHEN.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_JAMIE-CHEN.json index eea66863cc..1d3c29e4d1 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_JAMIE-CHEN.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_JAMIE-CHEN.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jamie-chen-28704b168_20251214T110142Z.json" ], - "modified_at": "2026-01-09T19:18:15.716012+00:00", + "modified_at": "2026-01-09T19:51:14.704385+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jamie-chen-28704b168", @@ -150,7 +150,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.714172+00:00", + "inferred_at": "2026-01-09T19:51:14.686218+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_KAJ-BRENS.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_KAJ-BRENS.json index 655155c56f..371ce1e2ab 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_KAJ-BRENS.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_KAJ-BRENS.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kaj-brens-b34879140_20251214T111359Z.json" ], - "modified_at": "2026-01-09T19:18:13.634871+00:00", + "modified_at": "2026-01-09T19:50:55.262435+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kaj-brens-b34879140", @@ -138,7 +138,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.634866+00:00", + "inferred_at": "2026-01-09T19:50:55.262427+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_LAURENS-VERBEEK.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_LAURENS-VERBEEK.json index a7c738315a..906dff178a 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_LAURENS-VERBEEK.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_LAURENS-VERBEEK.json @@ -94,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laurens-verbeek-151296105_20251214T112425Z.json" ], - "modified_at": "2026-01-09T19:18:13.706931+00:00", + "modified_at": "2026-01-09T19:50:55.779798+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laurens-verbeek-151296105", @@ -116,7 +116,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.703330+00:00", + "inferred_at": "2026-01-09T19:50:55.775738+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_LODEWIJK-RIJKSBARON.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_LODEWIJK-RIJKSBARON.json index c51cfc8e00..b239d3590d 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_LODEWIJK-RIJKSBARON.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_LODEWIJK-RIJKSBARON.json @@ -223,7 +223,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lodewijk-rijksbaron-392ba994_20251214T102918Z.json" ], - "modified_at": "2026-01-09T19:18:15.442147+00:00", + "modified_at": "2026-01-09T19:51:10.862956+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lodewijk-rijksbaron-392ba994", @@ -251,7 +251,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -300,7 +300,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.440017+00:00", + "inferred_at": "2026-01-09T19:51:10.860174+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_MAARTJE-SLIJKHUIS.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_MAARTJE-SLIJKHUIS.json index 08c00f6a77..8089afd03c 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_MAARTJE-SLIJKHUIS.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_MAARTJE-SLIJKHUIS.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maartje-slijkhuis-82a283165_20251214T110432Z.json" ], - "modified_at": "2026-01-09T19:18:14.312293+00:00", + "modified_at": "2026-01-09T19:50:50.145245+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maartje-slijkhuis-82a283165", @@ -130,7 +130,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.312285+00:00", + "inferred_at": "2026-01-09T19:50:50.145235+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_MARLOES-FULPEN.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_MARLOES-FULPEN.json index 62686071a5..5324f1d9f1 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_MARLOES-FULPEN.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_MARLOES-FULPEN.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marloes-van-fulpen-80b13287_20251214T103020Z.json" ], - "modified_at": "2026-01-09T19:18:14.591270+00:00", + "modified_at": "2026-01-09T19:51:02.682895+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marloes-van-fulpen-80b13287", @@ -138,7 +138,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.589129+00:00", + "inferred_at": "2026-01-09T19:51:02.680153+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_MARTIN-BRUIJN.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_MARTIN-BRUIJN.json index 1d0035d8c6..148ac2c2ec 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_MARTIN-BRUIJN.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_MARTIN-BRUIJN.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martin-de-bruijn-869b022a_20251214T110338Z.json" ], - "modified_at": "2026-01-09T19:18:13.462727+00:00", + "modified_at": "2026-01-09T19:51:05.106653+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martin-de-bruijn-869b022a", @@ -135,7 +135,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.460780+00:00", + "inferred_at": "2026-01-09T19:51:05.099990+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_RANISH-BALAK.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_RANISH-BALAK.json index ab84df1d4d..e97a3a63a9 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_RANISH-BALAK.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_RANISH-BALAK.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ranish-balak-a25607196_20251214T112941Z.json" ], - "modified_at": "2026-01-09T19:18:15.769877+00:00", + "modified_at": "2026-01-09T19:51:22.805356+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ranish-balak-a25607196", @@ -144,7 +144,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.769866+00:00", + "inferred_at": "2026-01-09T19:51:22.805323+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_RIMA-G.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_RIMA-G.json index 5c74e61a52..ef96eabd96 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_RIMA-G.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_RIMA-G.json @@ -88,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rima-g-6b471325a_20251214T102742Z.json" ], - "modified_at": "2026-01-09T19:18:16.586026+00:00", + "modified_at": "2026-01-09T19:51:04.044042+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rima-g-6b471325a", @@ -125,7 +125,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.584159+00:00", + "inferred_at": "2026-01-09T19:51:04.042081+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SHERILYN-DEEN.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SHERILYN-DEEN.json index f9b8bdcdd9..dad8713bc7 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SHERILYN-DEEN.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SHERILYN-DEEN.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sherilyn-deen-6273b625_20251214T112648Z.json" ], - "modified_at": "2026-01-09T19:18:15.559493+00:00", + "modified_at": "2026-01-09T19:51:12.109037+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sherilyn-deen-6273b625", @@ -196,7 +196,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +245,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.557239+00:00", + "inferred_at": "2026-01-09T19:51:12.105775+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SIMONE-GIEBELEN.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SIMONE-GIEBELEN.json index 402fa5d6a0..9ffc75d8dc 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SIMONE-GIEBELEN.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SIMONE-GIEBELEN.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/simone-giebelen-b56b5192_20251214T112429Z.json" ], - "modified_at": "2026-01-09T19:18:12.426646+00:00", + "modified_at": "2026-01-09T19:50:48.481164+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "simone-giebelen-b56b5192", @@ -191,7 +191,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.423840+00:00", + "inferred_at": "2026-01-09T19:50:48.479022+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SIMONE-HOUBEN.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SIMONE-HOUBEN.json index f2dcc15434..8e8b8e56b1 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SIMONE-HOUBEN.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SIMONE-HOUBEN.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/simone-houben-033583194_20251214T103300Z.json" ], - "modified_at": "2026-01-09T19:18:15.145946+00:00", + "modified_at": "2026-01-09T19:51:06.755209+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "simone-houben-033583194", @@ -158,7 +158,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +207,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.143910+00:00", + "inferred_at": "2026-01-09T19:51:06.744599+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SOLEIMAN-GHAFOURI.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SOLEIMAN-GHAFOURI.json index f9e9e00c66..86f6e6c69a 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SOLEIMAN-GHAFOURI.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SOLEIMAN-GHAFOURI.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/soleiman-ghafouri-2485bb162_20251214T102933Z.json" ], - "modified_at": "2026-01-09T19:18:15.703679+00:00", + "modified_at": "2026-01-09T19:51:13.477557+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "soleiman-ghafouri-2485bb162", @@ -143,7 +143,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.699745+00:00", + "inferred_at": "2026-01-09T19:51:13.472748+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SOPHIE-HUUT.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SOPHIE-HUUT.json index e8239d539d..bbae7b8922 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SOPHIE-HUUT.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_SOPHIE-HUUT.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sophie-van-huut-b02b5b131_20251214T102920Z.json" ], - "modified_at": "2026-01-09T19:18:13.875754+00:00", + "modified_at": "2026-01-09T19:50:56.732238+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sophie-van-huut-b02b5b131", @@ -166,7 +166,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +207,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.872638+00:00", + "inferred_at": "2026-01-09T19:50:56.730061+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_TESS-PRIESTER.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_TESS-PRIESTER.json index 97dbf2639d..ec9e9bd1c4 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_TESS-PRIESTER.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_TESS-PRIESTER.json @@ -160,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tess-razenberg-priester-a972a94b_20251214T112723Z.json" ], - "modified_at": "2026-01-09T19:18:15.160532+00:00", + "modified_at": "2026-01-09T19:51:06.955354+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tess-razenberg-priester-a972a94b", @@ -188,7 +188,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -237,7 +237,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.154909+00:00", + "inferred_at": "2026-01-09T19:51:06.947975+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_WOUTER-KLARENBEEK.json b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_WOUTER-KLARENBEEK.json index d45bc403b8..a5f89b2144 100644 --- a/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_WOUTER-KLARENBEEK.json +++ b/data/person/ID_NL-NH-AMS_199X_XX-XX-XXX_XXXX_WOUTER-KLARENBEEK.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wouter-klarenbeek-009820139_20251214T102923Z.json" ], - "modified_at": "2026-01-09T19:18:14.744153+00:00", + "modified_at": "2026-01-09T19:51:03.993691+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wouter-klarenbeek-009820139", @@ -183,7 +183,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.740378+00:00", + "inferred_at": "2026-01-09T19:51:03.988921+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-GE-ARN_XXXX_ANNELOT-BRUIN.json b/data/person/ID_NL-NH-AMS_200X_NL-GE-ARN_XXXX_ANNELOT-BRUIN.json index 5b0bc78fd5..29e28ecf06 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-GE-ARN_XXXX_ANNELOT-BRUIN.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-GE-ARN_XXXX_ANNELOT-BRUIN.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annelot-de-bruin-085174297_20251214T110553Z.json" ], - "modified_at": "2026-01-09T19:18:13.862856+00:00", + "modified_at": "2026-01-09T19:50:56.719729+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annelot-de-bruin-085174297", @@ -123,7 +123,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.862852+00:00", + "inferred_at": "2026-01-09T19:50:56.719722+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-GE-ARN_XXXX_MARTEN-VERHEIJ.json b/data/person/ID_NL-NH-AMS_200X_NL-GE-ARN_XXXX_MARTEN-VERHEIJ.json index baf039585a..3d9efbc42e 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-GE-ARN_XXXX_MARTEN-VERHEIJ.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-GE-ARN_XXXX_MARTEN-VERHEIJ.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marten-verheij_20251214T110642Z.json" ], - "modified_at": "2026-01-09T19:18:15.491259+00:00", + "modified_at": "2026-01-09T19:51:11.081748+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marten-verheij", @@ -120,7 +120,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.491254+00:00", + "inferred_at": "2026-01-09T19:51:11.081739+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-GE-HIE_XXXX_JANNEKE-BERG.json b/data/person/ID_NL-NH-AMS_200X_NL-GE-HIE_XXXX_JANNEKE-BERG.json index 00ed066f8a..68b3764dd3 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-GE-HIE_XXXX_JANNEKE-BERG.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-GE-HIE_XXXX_JANNEKE-BERG.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janneke-van-den-berg-6b3aa3194_20251214T110100Z.json" ], - "modified_at": "2026-01-09T19:18:13.409800+00:00", + "modified_at": "2026-01-09T19:50:54.096101+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janneke-van-den-berg-6b3aa3194", @@ -152,7 +152,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.409795+00:00", + "inferred_at": "2026-01-09T19:50:54.096096+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NB-EIN_XXXX_JAISHANI-AMARASEKARA.json b/data/person/ID_NL-NH-AMS_200X_NL-NB-EIN_XXXX_JAISHANI-AMARASEKARA.json index 28af43fe13..38f37930ce 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NB-EIN_XXXX_JAISHANI-AMARASEKARA.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NB-EIN_XXXX_JAISHANI-AMARASEKARA.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jaishani-amarasekara-26077a201_20251214T111213Z.json" ], - "modified_at": "2026-01-09T19:18:13.235773+00:00", + "modified_at": "2026-01-09T19:50:53.690936+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jaishani-amarasekara-26077a201", @@ -118,7 +118,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +159,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.235770+00:00", + "inferred_at": "2026-01-09T19:50:53.690929+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NB-VEL_XXXX_MINA-SONG.json b/data/person/ID_NL-NH-AMS_200X_NL-NB-VEL_XXXX_MINA-SONG.json index a3faae3734..57480eb48b 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NB-VEL_XXXX_MINA-SONG.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NB-VEL_XXXX_MINA-SONG.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/minakimsong_20251214T111218Z.json" ], - "modified_at": "2026-01-09T19:18:15.366461+00:00", + "modified_at": "2026-01-09T19:51:08.609306+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "minakimsong", @@ -132,7 +132,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.366456+00:00", + "inferred_at": "2026-01-09T19:51:08.609299+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-ALK_XXXX_IRMA-GROOTHOOGEBOOM.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-ALK_XXXX_IRMA-GROOTHOOGEBOOM.json index a68db4dced..ac804d2845 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-ALK_XXXX_IRMA-GROOTHOOGEBOOM.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-ALK_XXXX_IRMA-GROOTHOOGEBOOM.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/irma-j-groot-hoogeboom-853b6789_20251214T113138Z.json" ], - "modified_at": "2026-01-09T19:18:12.370683+00:00", + "modified_at": "2026-01-09T19:50:48.270329+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "irma-j-groot-hoogeboom-853b6789", @@ -160,7 +160,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.370673+00:00", + "inferred_at": "2026-01-09T19:50:48.270312+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_AGLAIA-GROMMERS.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_AGLAIA-GROMMERS.json index 01fd1a72fd..19deda9b1a 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_AGLAIA-GROMMERS.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_AGLAIA-GROMMERS.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aglaia-grommers-144665197_20251214T110051Z.json" ], - "modified_at": "2026-01-09T19:18:15.835105+00:00", + "modified_at": "2026-01-09T19:51:14.706193+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aglaia-grommers-144665197", @@ -140,7 +140,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.835100+00:00", + "inferred_at": "2026-01-09T19:51:14.706186+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ANNEMARIE-BLOEMENPATBERG.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ANNEMARIE-BLOEMENPATBERG.json index 4c0006cdbf..fc685c828e 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ANNEMARIE-BLOEMENPATBERG.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ANNEMARIE-BLOEMENPATBERG.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annemarie-bloemen-patberg-2203bb5_20251214T112615Z.json" ], - "modified_at": "2026-01-09T19:18:14.993061+00:00", + "modified_at": "2026-01-09T19:51:05.556562+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annemarie-bloemen-patberg-2203bb5", @@ -152,7 +152,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.993055+00:00", + "inferred_at": "2026-01-09T19:51:05.556556+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_BENTE-POLDERMAN.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_BENTE-POLDERMAN.json index fe77cdc110..a452453a0f 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_BENTE-POLDERMAN.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_BENTE-POLDERMAN.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bente-polderman-69993a236_20251214T111636Z.json" ], - "modified_at": "2026-01-09T19:18:15.745479+00:00", + "modified_at": "2026-01-09T19:51:14.183373+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bente-polderman-69993a236", @@ -128,7 +128,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.745475+00:00", + "inferred_at": "2026-01-09T19:51:14.183366+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_BRAM-KRANENDONK.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_BRAM-KRANENDONK.json index 172a1d1871..a324452c62 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_BRAM-KRANENDONK.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_BRAM-KRANENDONK.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bramkranendonk_20251214T111546Z.json" ], - "modified_at": "2026-01-09T19:18:13.507247+00:00", + "modified_at": "2026-01-09T19:50:54.552315+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bramkranendonk", @@ -122,7 +122,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -171,7 +171,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.507242+00:00", + "inferred_at": "2026-01-09T19:50:54.552308+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_BRAM-PRINS.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_BRAM-PRINS.json index 5692e68238..dca4e0eb2d 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_BRAM-PRINS.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_BRAM-PRINS.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bram-prins-75092a43_20251214T111428Z.json" ], - "modified_at": "2026-01-09T19:18:17.378775+00:00", + "modified_at": "2026-01-09T19:51:28.550364+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bram-prins-75092a43", @@ -206,7 +206,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -255,7 +255,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.378768+00:00", + "inferred_at": "2026-01-09T19:51:28.550360+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_CHARLOTTE-VERWEIJ.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_CHARLOTTE-VERWEIJ.json index 1f68be32de..e24d1af204 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_CHARLOTTE-VERWEIJ.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_CHARLOTTE-VERWEIJ.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/charlotte-verweij-00145a205_20251214T110111Z.json" ], - "modified_at": "2026-01-09T19:18:14.845746+00:00", + "modified_at": "2026-01-09T19:51:05.116854+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "charlotte-verweij-00145a205", @@ -144,7 +144,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.845743+00:00", + "inferred_at": "2026-01-09T19:51:05.116848+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_DOUAA-BENZZINE.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_DOUAA-BENZZINE.json index 2b430e05d3..e130434960 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_DOUAA-BENZZINE.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_DOUAA-BENZZINE.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/douaa-benzzine-08bb831b3_20251214T110229Z.json" ], - "modified_at": "2026-01-09T19:18:15.510802+00:00", + "modified_at": "2026-01-09T19:51:05.305618+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "douaa-benzzine-08bb831b3", @@ -131,7 +131,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.510796+00:00", + "inferred_at": "2026-01-09T19:51:05.305607+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_DYLAN-GIESBERGEN.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_DYLAN-GIESBERGEN.json index 917999ee19..4fd14976c7 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_DYLAN-GIESBERGEN.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_DYLAN-GIESBERGEN.json @@ -146,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dylan-giesbergen-ab6256173_20251214T111744Z.json" ], - "modified_at": "2026-01-09T19:18:13.396007+00:00", + "modified_at": "2026-01-09T19:50:54.016038+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dylan-giesbergen-ab6256173", @@ -175,7 +175,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.396003+00:00", + "inferred_at": "2026-01-09T19:50:54.016032+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ELLA-BRETHERTON.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ELLA-BRETHERTON.json index e75e119312..cb9c1668b7 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ELLA-BRETHERTON.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ELLA-BRETHERTON.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ella-bretherton-3b42b71b1_20251214T110136Z.json" ], - "modified_at": "2026-01-09T19:18:18.214156+00:00", + "modified_at": "2026-01-09T19:51:29.222831+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ella-bretherton-3b42b71b1", @@ -174,7 +174,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.214149+00:00", + "inferred_at": "2026-01-09T19:51:29.222825+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_EMMA-CROK.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_EMMA-CROK.json index 3bfc8800c9..8673823a67 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_EMMA-CROK.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_EMMA-CROK.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emma-crok-5469ba294_20251214T112045Z.json" ], - "modified_at": "2026-01-09T19:18:12.746503+00:00", + "modified_at": "2026-01-09T19:50:48.674798+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emma-crok-5469ba294", @@ -146,7 +146,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.746489+00:00", + "inferred_at": "2026-01-09T19:50:48.674794+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_EOGHAN-NEILL.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_EOGHAN-NEILL.json index 8c364ef934..f041ce3e4a 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_EOGHAN-NEILL.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_EOGHAN-NEILL.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eoghan-o-neill-386516245_20251214T110508Z.json" ], - "modified_at": "2026-01-09T19:18:15.389321+00:00", + "modified_at": "2026-01-09T19:51:08.764803+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eoghan-o-neill-386516245", @@ -135,7 +135,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.389317+00:00", + "inferred_at": "2026-01-09T19:51:08.764796+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_EVA-T.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_EVA-T.json index 534924092c..1bd11aa897 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_EVA-T.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_EVA-T.json @@ -89,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eva-tsjazjajeva_20251214T112807Z.json" ], - "modified_at": "2026-01-09T19:18:12.169750+00:00", + "modified_at": "2026-01-09T19:50:47.455789+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eva-tsjazjajeva", @@ -118,7 +118,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.169740+00:00", + "inferred_at": "2026-01-09T19:50:47.455783+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_FABIENNE-KES.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_FABIENNE-KES.json index 4e40fa6c48..915473bf9c 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_FABIENNE-KES.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_FABIENNE-KES.json @@ -179,7 +179,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fabienne-kes-176726133_20251214T111316Z.json" ], - "modified_at": "2026-01-09T19:18:11.594333+00:00", + "modified_at": "2026-01-09T19:50:47.206400+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fabienne-kes-176726133", @@ -208,7 +208,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -257,7 +257,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.594323+00:00", + "inferred_at": "2026-01-09T19:50:47.206298+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_FLAVIA-TERZIAN.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_FLAVIA-TERZIAN.json index 8ba53d9d57..db64ea88e3 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_FLAVIA-TERZIAN.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_FLAVIA-TERZIAN.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/flavia-terzian-801a65185_20251214T110114Z.json" ], - "modified_at": "2026-01-09T19:18:14.839040+00:00", + "modified_at": "2026-01-09T19:51:11.834506+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "flavia-terzian-801a65185", @@ -188,7 +188,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.839035+00:00", + "inferred_at": "2026-01-09T19:51:11.834497+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ILSE-BURGHT.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ILSE-BURGHT.json index e174ce85e9..9a03254d4d 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ILSE-BURGHT.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ILSE-BURGHT.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ilse-van-der-burght-16784912a_20251214T111330Z.json" ], - "modified_at": "2026-01-09T19:18:12.736426+00:00", + "modified_at": "2026-01-09T19:50:48.672353+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ilse-van-der-burght-16784912a", @@ -161,7 +161,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.736418+00:00", + "inferred_at": "2026-01-09T19:50:48.672349+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_JOS-KREEFT.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_JOS-KREEFT.json index d6bb7b9482..a1d2be8ed6 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_JOS-KREEFT.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_JOS-KREEFT.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jos-van-der-kreeft-218129283_20251214T113149Z.json" ], - "modified_at": "2026-01-09T19:18:16.531348+00:00", + "modified_at": "2026-01-09T19:51:18.572153+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jos-van-der-kreeft-218129283", @@ -158,7 +158,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +207,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.531342+00:00", + "inferred_at": "2026-01-09T19:51:18.572147+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_KARLA-MEDAKOV.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_KARLA-MEDAKOV.json index d6761fe926..0f7aca4f54 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_KARLA-MEDAKOV.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_KARLA-MEDAKOV.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karla-medakov-70180a264_20251214T111814Z.json" ], - "modified_at": "2026-01-09T19:18:15.658190+00:00", + "modified_at": "2026-01-09T19:51:13.288814+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karla-medakov-70180a264", @@ -130,7 +130,7 @@ "primary_rationale": "2007 is in 200X, but range extends into 201X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2007 spans decades 200X/201X", - "inferred_at": "2026-01-09T19:18:15.658187+00:00", + "inferred_at": "2026-01-09T19:51:13.288807+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_LIDWIEN-GRIEKEN.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_LIDWIEN-GRIEKEN.json index 42dd485c48..80dd9ac3ce 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_LIDWIEN-GRIEKEN.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_LIDWIEN-GRIEKEN.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lidwien-van-grieken-771ba219_20251214T111528Z.json" ], - "modified_at": "2026-01-09T19:18:16.537638+00:00", + "modified_at": "2026-01-09T19:50:55.393198+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lidwien-van-grieken-771ba219", @@ -168,7 +168,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.537632+00:00", + "inferred_at": "2026-01-09T19:50:55.393192+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MANON-MOUSSAROODENBURG.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MANON-MOUSSAROODENBURG.json index 5efeee65cf..c4bba27d7f 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MANON-MOUSSAROODENBURG.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MANON-MOUSSAROODENBURG.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/manon-moussa-roodenburg-67464817_20251214T110037Z.json" ], - "modified_at": "2026-01-09T19:18:17.130390+00:00", + "modified_at": "2026-01-09T19:51:06.735248+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "manon-moussa-roodenburg-67464817", @@ -179,7 +179,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.130377+00:00", + "inferred_at": "2026-01-09T19:51:06.735242+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MARANTHE-LAMERS.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MARANTHE-LAMERS.json index 1a94b44812..2ef8a8a106 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MARANTHE-LAMERS.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MARANTHE-LAMERS.json @@ -90,7 +90,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maranthe-lamers-20b66582_20251214T110040Z.json" ], - "modified_at": "2026-01-09T19:18:15.768764+00:00", + "modified_at": "2026-01-09T19:51:14.351313+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maranthe-lamers-20b66582", @@ -119,7 +119,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.768760+00:00", + "inferred_at": "2026-01-09T19:51:14.351307+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MARIEKE-BREMMERS.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MARIEKE-BREMMERS.json index fe259fc83e..e76a5fb324 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MARIEKE-BREMMERS.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MARIEKE-BREMMERS.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marieke-bremmers-10527224b_20251214T110220Z.json" ], - "modified_at": "2026-01-09T19:18:16.808044+00:00", + "modified_at": "2026-01-09T19:51:13.547069+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marieke-bremmers-10527224b", @@ -125,7 +125,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.808037+00:00", + "inferred_at": "2026-01-09T19:51:13.547063+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MARTJE-ONIKOYI.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MARTJE-ONIKOYI.json index a1e8f08319..1c62363b3b 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MARTJE-ONIKOYI.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MARTJE-ONIKOYI.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martje-onikoyi-81bb2b1bb_20251214T112042Z.json" ], - "modified_at": "2026-01-09T19:18:12.971971+00:00", + "modified_at": "2026-01-09T19:50:49.616374+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martje-onikoyi-81bb2b1bb", @@ -148,7 +148,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.971964+00:00", + "inferred_at": "2026-01-09T19:50:49.616369+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MEAGAN-BAARS.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MEAGAN-BAARS.json index e83c7c3fa0..bc467bbac2 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MEAGAN-BAARS.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MEAGAN-BAARS.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/meagan-baars-ab1712287_20251214T111250Z.json" ], - "modified_at": "2026-01-09T19:18:14.750684+00:00", + "modified_at": "2026-01-09T19:51:04.028564+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "meagan-baars-ab1712287", @@ -151,7 +151,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.750680+00:00", + "inferred_at": "2026-01-09T19:51:04.028557+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MY-VUONG.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MY-VUONG.json index bc21bb74ee..2994f781ea 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MY-VUONG.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_MY-VUONG.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mydiepv_20251214T112731Z.json" ], - "modified_at": "2026-01-09T19:18:14.269116+00:00", + "modified_at": "2026-01-09T19:51:08.764014+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mydiepv", @@ -150,7 +150,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.269111+00:00", + "inferred_at": "2026-01-09T19:51:08.764007+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_PIETER-METZ.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_PIETER-METZ.json index 04d161e0bd..8ba6e3ba0f 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_PIETER-METZ.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_PIETER-METZ.json @@ -87,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pieter-de-metz-03a772217_20251214T111904Z.json" ], - "modified_at": "2026-01-09T19:18:13.650091+00:00", + "modified_at": "2026-01-09T19:50:55.380378+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pieter-de-metz-03a772217", @@ -116,7 +116,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.650087+00:00", + "inferred_at": "2026-01-09T19:50:55.380373+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ROGIER-HAGEMAN.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ROGIER-HAGEMAN.json index 1f516721e9..2e6af54931 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ROGIER-HAGEMAN.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_ROGIER-HAGEMAN.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rogierhageman_20251214T110114Z.json" ], - "modified_at": "2026-01-09T19:18:13.404885+00:00", + "modified_at": "2026-01-09T19:50:54.091294+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rogierhageman", @@ -131,7 +131,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.404880+00:00", + "inferred_at": "2026-01-09T19:50:54.091288+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_SAMARIA-KIJEWSKA.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_SAMARIA-KIJEWSKA.json index bc8ac7950f..c2a3d56cf4 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_SAMARIA-KIJEWSKA.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_SAMARIA-KIJEWSKA.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/samaria-kijewska-a645a2139_20251214T110144Z.json" ], - "modified_at": "2026-01-09T19:18:14.899412+00:00", + "modified_at": "2026-01-09T19:51:05.470792+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "samaria-kijewska-a645a2139", @@ -148,7 +148,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.899408+00:00", + "inferred_at": "2026-01-09T19:51:05.470757+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_SILVANNA-MAURIK.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_SILVANNA-MAURIK.json index f832f9c23c..4aea29f090 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_SILVANNA-MAURIK.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_SILVANNA-MAURIK.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/silvanna-maurik-348a191a5_20251214T112751Z.json" ], - "modified_at": "2026-01-09T19:18:14.328153+00:00", + "modified_at": "2026-01-09T19:51:00.699585+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "silvanna-maurik-348a191a5", @@ -124,7 +124,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.328148+00:00", + "inferred_at": "2026-01-09T19:51:00.699569+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_STELLA-EERTWEGH.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_STELLA-EERTWEGH.json index f6e9e3e188..3ef995e025 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_STELLA-EERTWEGH.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_STELLA-EERTWEGH.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stella-van-den-eertwegh-87004b135_20251214T110141Z.json" ], - "modified_at": "2026-01-09T19:18:13.813517+00:00", + "modified_at": "2026-01-09T19:51:04.786514+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stella-van-den-eertwegh-87004b135", @@ -165,7 +165,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.813511+00:00", + "inferred_at": "2026-01-09T19:51:04.786505+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_WESLEY-KORFF.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_WESLEY-KORFF.json index b7a967de17..9f71dfcc18 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_WESLEY-KORFF.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_WESLEY-KORFF.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wesley-korff-866680185_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:13.972921+00:00", + "modified_at": "2026-01-09T19:50:56.910603+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wesley-korff-866680185", @@ -173,7 +173,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.972915+00:00", + "inferred_at": "2026-01-09T19:50:56.910595+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_YECHEN-ZHANG.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_YECHEN-ZHANG.json index 8d0bdd2c79..15d3b57ade 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_YECHEN-ZHANG.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-AMS_XXXX_YECHEN-ZHANG.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yechen-zhang-44165725a_20251214T110101Z.json" ], - "modified_at": "2026-01-09T19:18:16.911909+00:00", + "modified_at": "2026-01-09T19:51:22.507437+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yechen-zhang-44165725a", @@ -127,7 +127,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.911903+00:00", + "inferred_at": "2026-01-09T19:51:22.507429+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-BUS_XXXX_MATHILDE-BOGAARDS.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-BUS_XXXX_MATHILDE-BOGAARDS.json index 7a70ed9c15..8f966e45ba 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-BUS_XXXX_MATHILDE-BOGAARDS.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-BUS_XXXX_MATHILDE-BOGAARDS.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mathilde-bogaards-126172206_20251214T112614Z.json" ], - "modified_at": "2026-01-09T19:18:15.040684+00:00", + "modified_at": "2026-01-09T19:51:06.641315+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mathilde-bogaards-126172206", @@ -145,7 +145,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.040680+00:00", + "inferred_at": "2026-01-09T19:51:06.641310+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-HAA_XXXX_HANNAH-VERBEEK.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-HAA_XXXX_HANNAH-VERBEEK.json index 740a221437..0a00165217 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-HAA_XXXX_HANNAH-VERBEEK.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-HAA_XXXX_HANNAH-VERBEEK.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hannah-verbeek-ab5a93280_20251214T111813Z.json" ], - "modified_at": "2026-01-09T19:18:15.763831+00:00", + "modified_at": "2026-01-09T19:51:14.348314+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hannah-verbeek-ab5a93280", @@ -130,7 +130,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.763826+00:00", + "inferred_at": "2026-01-09T19:51:14.348308+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-HAA_XXXX_LAUDONNE-KRONIEGER.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-HAA_XXXX_LAUDONNE-KRONIEGER.json index 937a23280a..885bf191d2 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-HAA_XXXX_LAUDONNE-KRONIEGER.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-HAA_XXXX_LAUDONNE-KRONIEGER.json @@ -198,7 +198,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laudonnekronieger_20251214T111337Z.json" ], - "modified_at": "2026-01-09T19:18:11.314702+00:00", + "modified_at": "2026-01-09T19:50:58.794893+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laudonnekronieger", @@ -230,7 +230,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -271,7 +271,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.314691+00:00", + "inferred_at": "2026-01-09T19:50:58.794886+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-HEE_XXXX_MATTHIJS-MOLLMANN.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-HEE_XXXX_MATTHIJS-MOLLMANN.json index 5b1280261f..7f1376fe90 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-HEE_XXXX_MATTHIJS-MOLLMANN.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-HEE_XXXX_MATTHIJS-MOLLMANN.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/matthijsmollmann_20251214T111850Z.json" ], - "modified_at": "2026-01-09T19:18:11.575607+00:00", + "modified_at": "2026-01-09T19:50:47.196801+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "matthijsmollmann", @@ -198,7 +198,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +247,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.575600+00:00", + "inferred_at": "2026-01-09T19:50:47.196772+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-HOO_XXXX_TEA-BARBATESKOVIC.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-HOO_XXXX_TEA-BARBATESKOVIC.json index e122260457..701c18574e 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-HOO_XXXX_TEA-BARBATESKOVIC.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-HOO_XXXX_TEA-BARBATESKOVIC.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tea-barbateskovic-206b8a21b_20251214T111629Z.json" ], - "modified_at": "2026-01-09T19:18:12.953382+00:00", + "modified_at": "2026-01-09T19:50:49.596461+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tea-barbateskovic-206b8a21b", @@ -195,7 +195,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -244,7 +244,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.953377+00:00", + "inferred_at": "2026-01-09T19:50:49.596452+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-LAR_XXXX_JOS-HILLE.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-LAR_XXXX_JOS-HILLE.json index 3ac9960a7e..21dcb2b943 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-LAR_XXXX_JOS-HILLE.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-LAR_XXXX_JOS-HILLE.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jos-van-hille-761747176_20251214T110208Z.json" ], - "modified_at": "2026-01-09T19:18:17.773372+00:00", + "modified_at": "2026-01-09T19:51:28.568342+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jos-van-hille-761747176", @@ -171,7 +171,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.773366+00:00", + "inferred_at": "2026-01-09T19:51:28.568338+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-UIT_XXXX_BINTOU-KOUROUMA.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-UIT_XXXX_BINTOU-KOUROUMA.json index f806756cc1..ad82e62040 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-UIT_XXXX_BINTOU-KOUROUMA.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-UIT_XXXX_BINTOU-KOUROUMA.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bintou-kourouma-abb044293_20251214T110250Z.json" ], - "modified_at": "2026-01-09T19:18:12.295567+00:00", + "modified_at": "2026-01-09T19:50:47.498117+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bintou-kourouma-abb044293", @@ -171,7 +171,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.295558+00:00", + "inferred_at": "2026-01-09T19:50:47.498111+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-NH-ZAA_XXXX_ANNA-CROK.json b/data/person/ID_NL-NH-AMS_200X_NL-NH-ZAA_XXXX_ANNA-CROK.json index d53dc25992..363bd1abc7 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-NH-ZAA_XXXX_ANNA-CROK.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-NH-ZAA_XXXX_ANNA-CROK.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-crok-1b7554173_20251214T110302Z.json" ], - "modified_at": "2026-01-09T19:18:15.290035+00:00", + "modified_at": "2026-01-09T19:51:08.361057+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anna-crok-1b7554173", @@ -151,7 +151,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.290032+00:00", + "inferred_at": "2026-01-09T19:51:08.361053+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-UT-SOE_XXXX_JORIS-RADEMAKER.json b/data/person/ID_NL-NH-AMS_200X_NL-UT-SOE_XXXX_JORIS-RADEMAKER.json index 2efa6b4c88..cfb5848134 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-UT-SOE_XXXX_JORIS-RADEMAKER.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-UT-SOE_XXXX_JORIS-RADEMAKER.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joris-rademaker-1a7a1617a_20251214T103324Z.json" ], - "modified_at": "2026-01-09T19:18:14.702650+00:00", + "modified_at": "2026-01-09T19:51:03.380338+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joris-rademaker-1a7a1617a", @@ -159,7 +159,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.702644+00:00", + "inferred_at": "2026-01-09T19:51:03.380318+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-UT-UTR_XXXX_OLE-LECHNER.json b/data/person/ID_NL-NH-AMS_200X_NL-UT-UTR_XXXX_OLE-LECHNER.json index 09a1e0afe3..d806dd5bdb 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-UT-UTR_XXXX_OLE-LECHNER.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-UT-UTR_XXXX_OLE-LECHNER.json @@ -242,7 +242,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/olelechner_20251214T104125Z.json" ], - "modified_at": "2026-01-09T19:18:15.687574+00:00", + "modified_at": "2026-01-09T19:51:13.441845+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "olelechner", @@ -271,7 +271,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -320,7 +320,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.687570+00:00", + "inferred_at": "2026-01-09T19:51:13.441840+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-UT-UTR_XXXX_STELLA-BERG.json b/data/person/ID_NL-NH-AMS_200X_NL-UT-UTR_XXXX_STELLA-BERG.json index e730f24b5c..587c0da96a 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-UT-UTR_XXXX_STELLA-BERG.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-UT-UTR_XXXX_STELLA-BERG.json @@ -211,7 +211,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stella-van-den-berg-2923ba208_20251214T104136Z.json" ], - "modified_at": "2026-01-09T19:18:14.956281+00:00", + "modified_at": "2026-01-09T19:51:05.622528+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stella-van-den-berg-2923ba208", @@ -240,7 +240,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -289,7 +289,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.956278+00:00", + "inferred_at": "2026-01-09T19:51:05.622499+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-ZH-TH_XXXX_ANNE-B.json b/data/person/ID_NL-NH-AMS_200X_NL-ZH-TH_XXXX_ANNE-B.json index fef0d5f9eb..7fe65f5329 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-ZH-TH_XXXX_ANNE-B.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-ZH-TH_XXXX_ANNE-B.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-v-b-832796186_20251214T103206Z.json" ], - "modified_at": "2026-01-09T19:18:16.392028+00:00", + "modified_at": "2026-01-09T19:51:18.446048+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-v-b-832796186", @@ -183,7 +183,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.392022+00:00", + "inferred_at": "2026-01-09T19:51:18.446041+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-ZH-TH_XXXX_LARISSA-VIANEN.json b/data/person/ID_NL-NH-AMS_200X_NL-ZH-TH_XXXX_LARISSA-VIANEN.json index 074844d06f..a3b4708fba 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-ZH-TH_XXXX_LARISSA-VIANEN.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-ZH-TH_XXXX_LARISSA-VIANEN.json @@ -239,7 +239,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/larissa-van-vianen-a31684209_20251214T102700Z.json" ], - "modified_at": "2026-01-09T19:18:15.495431+00:00", + "modified_at": "2026-01-09T19:51:11.090497+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "larissa-van-vianen-a31684209", @@ -268,7 +268,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -317,7 +317,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.495428+00:00", + "inferred_at": "2026-01-09T19:51:11.090491+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_NL-ZH-TH_XXXX_LUKA-CHOUARD.json b/data/person/ID_NL-NH-AMS_200X_NL-ZH-TH_XXXX_LUKA-CHOUARD.json index 762978f6c1..88b9db9525 100644 --- a/data/person/ID_NL-NH-AMS_200X_NL-ZH-TH_XXXX_LUKA-CHOUARD.json +++ b/data/person/ID_NL-NH-AMS_200X_NL-ZH-TH_XXXX_LUKA-CHOUARD.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/luka-chouard-04b7251b7_20251214T113006Z.json" ], - "modified_at": "2026-01-09T19:18:14.604466+00:00", + "modified_at": "2026-01-09T19:51:02.697052+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "luka-chouard-04b7251b7", @@ -146,7 +146,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.604462+00:00", + "inferred_at": "2026-01-09T19:51:02.697046+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_CHAIMAE-KHERAZI.json b/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_CHAIMAE-KHERAZI.json index c5cdf1b34d..0e7441ed01 100644 --- a/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_CHAIMAE-KHERAZI.json +++ b/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_CHAIMAE-KHERAZI.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chaimae-kherazi-b53a0923b_20251214T112700Z.json" ], - "modified_at": "2026-01-09T19:18:12.880258+00:00", + "modified_at": "2026-01-09T19:50:49.091958+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "chaimae-kherazi-b53a0923b", @@ -148,7 +148,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.877907+00:00", + "inferred_at": "2026-01-09T19:50:49.089949+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_DEIRDRE-CARASSO.json b/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_DEIRDRE-CARASSO.json index 0ff0785c1e..0808378ab0 100644 --- a/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_DEIRDRE-CARASSO.json +++ b/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_DEIRDRE-CARASSO.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/deirdre-carasso-6ab6555_20251214T112500Z.json" ], - "modified_at": "2026-01-09T19:18:16.007179+00:00", + "modified_at": "2026-01-09T19:50:54.322860+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "deirdre-carasso-6ab6555", @@ -178,7 +178,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.002887+00:00", + "inferred_at": "2026-01-09T19:50:54.313281+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_JUSTINE-ZWARTHOED.json b/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_JUSTINE-ZWARTHOED.json index a54121366c..4f261d958c 100644 --- a/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_JUSTINE-ZWARTHOED.json +++ b/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_JUSTINE-ZWARTHOED.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/justine-zwarthoed-4b6a6b20a_20251214T112701Z.json" ], - "modified_at": "2026-01-09T19:18:18.985349+00:00", + "modified_at": "2026-01-09T19:51:31.813930+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "justine-zwarthoed-4b6a6b20a", @@ -170,7 +170,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.982949+00:00", + "inferred_at": "2026-01-09T19:51:31.812038+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_MARIELLE-KOEVERMANS.json b/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_MARIELLE-KOEVERMANS.json index 7049c8adc8..a4e4b4186f 100644 --- a/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_MARIELLE-KOEVERMANS.json +++ b/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_MARIELLE-KOEVERMANS.json @@ -172,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mkoevermans_20251214T110131Z.json" ], - "modified_at": "2026-01-09T19:18:17.831102+00:00", + "modified_at": "2026-01-09T19:51:12.687550+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mkoevermans", @@ -203,7 +203,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -244,7 +244,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.828968+00:00", + "inferred_at": "2026-01-09T19:51:12.685411+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_MOHAMED-AZTOUTI.json b/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_MOHAMED-AZTOUTI.json index ac9d019b27..5c7c65dab7 100644 --- a/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_MOHAMED-AZTOUTI.json +++ b/data/person/ID_NL-NH-AMS_200X_XX-XX-XXX_XXXX_MOHAMED-AZTOUTI.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mohamed-aztouti-39b3b71b3_20251214T112713Z.json" ], - "modified_at": "2026-01-09T19:18:16.611180+00:00", + "modified_at": "2026-01-09T19:51:20.840242+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mohamed-aztouti-39b3b71b3", @@ -180,7 +180,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.607233+00:00", + "inferred_at": "2026-01-09T19:51:20.836393+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-ASS_198X_NL-NH-AMS_XXXX_VERA-MEEBERG.json b/data/person/ID_NL-NH-ASS_198X_NL-NH-AMS_XXXX_VERA-MEEBERG.json index fb086097ad..eb9c5003fa 100644 --- a/data/person/ID_NL-NH-ASS_198X_NL-NH-AMS_XXXX_VERA-MEEBERG.json +++ b/data/person/ID_NL-NH-ASS_198X_NL-NH-AMS_XXXX_VERA-MEEBERG.json @@ -281,7 +281,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vera-van-de-meeberg-a580a328b_20251214T111559Z.json" ], - "modified_at": "2026-01-09T19:18:15.467654+00:00", + "modified_at": "2026-01-09T19:51:11.035678+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vera-van-de-meeberg-a580a328b", @@ -304,7 +304,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -345,7 +345,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.467650+00:00", + "inferred_at": "2026-01-09T19:51:11.035672+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-BEV_199X_NL-NH-HAA_XXXX_LARS-V.json b/data/person/ID_NL-NH-BEV_199X_NL-NH-HAA_XXXX_LARS-V.json index 2ab27d1fd7..192bcbf1ff 100644 --- a/data/person/ID_NL-NH-BEV_199X_NL-NH-HAA_XXXX_LARS-V.json +++ b/data/person/ID_NL-NH-BEV_199X_NL-NH-HAA_XXXX_LARS-V.json @@ -188,7 +188,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/larsvereecken_20251214T102703Z.json" ], - "modified_at": "2026-01-09T19:18:15.689950+00:00", + "modified_at": "2026-01-09T19:51:13.465616+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "larsvereecken", @@ -217,7 +217,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -266,7 +266,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.689946+00:00", + "inferred_at": "2026-01-09T19:51:13.465608+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-DBU_200X_NL-NH-HOO_XXXX_ARYS-BLANKEN.json b/data/person/ID_NL-NH-DBU_200X_NL-NH-HOO_XXXX_ARYS-BLANKEN.json index 7f74ee92e1..ae896e4397 100644 --- a/data/person/ID_NL-NH-DBU_200X_NL-NH-HOO_XXXX_ARYS-BLANKEN.json +++ b/data/person/ID_NL-NH-DBU_200X_NL-NH-HOO_XXXX_ARYS-BLANKEN.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arys-van-blanken-a670891a1_20251214T110055Z.json" ], - "modified_at": "2026-01-09T19:18:17.215715+00:00", + "modified_at": "2026-01-09T19:51:10.610636+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arys-van-blanken-a670891a1", @@ -181,7 +181,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.215708+00:00", + "inferred_at": "2026-01-09T19:51:10.610630+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_ALEXANDER-BRUIN.json b/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_ALEXANDER-BRUIN.json index df8b734dbf..6da1d5ddee 100644 --- a/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_ALEXANDER-BRUIN.json +++ b/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_ALEXANDER-BRUIN.json @@ -236,8 +236,14 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T01:00:00Z", + "search_queries": [ + "\"Alexander De Bruin\" curator \"Noord-Hollands Archief\" born birthday biography", + "\"Alexander de Bruin\" Haarlem archief geboren" + ], + "result": "not_found", + "notes": "Web search conducted via Exa; no relevant results found containing birth date information" } }, "provenance": { @@ -246,7 +252,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alexander-de-bruin-3559998_20251214T102703Z.json" ], - "modified_at": "2026-01-09T19:18:13.758017+00:00", + "modified_at": "2026-01-09T19:50:56.093045+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alexander-de-bruin-3559998", @@ -275,7 +281,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -324,7 +330,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.758011+00:00", + "inferred_at": "2026-01-09T19:50:56.093039+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_ANNELIES-REUS.json b/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_ANNELIES-REUS.json index e2c036b717..7c200d640c 100644 --- a/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_ANNELIES-REUS.json +++ b/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_ANNELIES-REUS.json @@ -236,7 +236,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annelies-de-reus-6a5a1033_20251214T102731Z.json" ], - "modified_at": "2026-01-09T19:18:14.993605+00:00", + "modified_at": "2026-01-09T19:51:06.504502+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annelies-de-reus-6a5a1033", @@ -259,7 +259,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -300,7 +300,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.993602+00:00", + "inferred_at": "2026-01-09T19:51:06.504496+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_MONIQUE-ZIJDERVELD.json b/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_MONIQUE-ZIJDERVELD.json index f1b067c379..e1f19d0f2e 100644 --- a/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_MONIQUE-ZIJDERVELD.json +++ b/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_MONIQUE-ZIJDERVELD.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/monique-zijderveld-981617207_20251214T110151Z.json" ], - "modified_at": "2026-01-09T19:18:13.321057+00:00", + "modified_at": "2026-01-09T19:50:53.879393+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "monique-zijderveld-981617207", @@ -165,7 +165,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.321047+00:00", + "inferred_at": "2026-01-09T19:50:53.879387+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_STINIE-FRANCKE.json b/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_STINIE-FRANCKE.json index a7557b6f8f..fb9b8a3c9a 100644 --- a/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_STINIE-FRANCKE.json +++ b/data/person/ID_NL-NH-HAA_196X_NL-NH-AMS_XXXX_STINIE-FRANCKE.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stinie-francke-b276841a_20251214T113145Z.json" ], - "modified_at": "2026-01-09T19:18:15.042136+00:00", + "modified_at": "2026-01-09T19:51:06.643905+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stinie-francke-b276841a", @@ -133,7 +133,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.042131+00:00", + "inferred_at": "2026-01-09T19:51:06.643901+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HAA_198X_NL-NH-HAA_XXXX_MAARTJE-PEIJPEELIAS.json b/data/person/ID_NL-NH-HAA_198X_NL-NH-HAA_XXXX_MAARTJE-PEIJPEELIAS.json index 9104f4f6a8..bdd5e972ff 100644 --- a/data/person/ID_NL-NH-HAA_198X_NL-NH-HAA_XXXX_MAARTJE-PEIJPEELIAS.json +++ b/data/person/ID_NL-NH-HAA_198X_NL-NH-HAA_XXXX_MAARTJE-PEIJPEELIAS.json @@ -202,7 +202,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maartje-van-peijpe-elias-ab15108_20251214T111913Z.json" ], - "modified_at": "2026-01-09T19:18:13.056595+00:00", + "modified_at": "2026-01-09T19:50:50.904614+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maartje-van-peijpe-elias-ab15108", @@ -231,7 +231,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -280,7 +280,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.056591+00:00", + "inferred_at": "2026-01-09T19:50:50.904607+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HAA_198X_NL-NH-HAA_XXXX_MARIANNE-HAMERSMA.json b/data/person/ID_NL-NH-HAA_198X_NL-NH-HAA_XXXX_MARIANNE-HAMERSMA.json index a579d1c199..b3eed4f79e 100644 --- a/data/person/ID_NL-NH-HAA_198X_NL-NH-HAA_XXXX_MARIANNE-HAMERSMA.json +++ b/data/person/ID_NL-NH-HAA_198X_NL-NH-HAA_XXXX_MARIANNE-HAMERSMA.json @@ -203,7 +203,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marianne-hotske-hamersma-764b1a227_20251214T102706Z.json" ], - "modified_at": "2026-01-09T19:18:13.255988+00:00", + "modified_at": "2026-01-09T19:50:53.708663+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marianne-hotske-hamersma-764b1a227", @@ -232,7 +232,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -281,7 +281,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.255983+00:00", + "inferred_at": "2026-01-09T19:50:53.708657+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HAA_198X_NL-ZH-LEI_XXXX_IMELDA-HOEBES.json b/data/person/ID_NL-NH-HAA_198X_NL-ZH-LEI_XXXX_IMELDA-HOEBES.json index fa6a05eda7..2c9be5bfed 100644 --- a/data/person/ID_NL-NH-HAA_198X_NL-ZH-LEI_XXXX_IMELDA-HOEBES.json +++ b/data/person/ID_NL-NH-HAA_198X_NL-ZH-LEI_XXXX_IMELDA-HOEBES.json @@ -146,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/imelda-hoebes_20251214T103731Z.json" ], - "modified_at": "2026-01-09T19:18:15.896476+00:00", + "modified_at": "2026-01-09T19:51:14.989412+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "imelda-hoebes", @@ -169,7 +169,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.896470+00:00", + "inferred_at": "2026-01-09T19:51:14.989398+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HAA_199X_NL-NH-AMS_XXXX_HANS-NUSSELDER.json b/data/person/ID_NL-NH-HAA_199X_NL-NH-AMS_XXXX_HANS-NUSSELDER.json index 030e0cd476..bac79bbd9e 100644 --- a/data/person/ID_NL-NH-HAA_199X_NL-NH-AMS_XXXX_HANS-NUSSELDER.json +++ b/data/person/ID_NL-NH-HAA_199X_NL-NH-AMS_XXXX_HANS-NUSSELDER.json @@ -207,7 +207,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hans-nusselder-296a6a72_20251214T102701Z.json" ], - "modified_at": "2026-01-09T19:18:18.076082+00:00", + "modified_at": "2026-01-09T19:51:28.916358+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hans-nusselder-296a6a72", @@ -236,7 +236,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -285,7 +285,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.076075+00:00", + "inferred_at": "2026-01-09T19:51:28.916353+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HAA_199X_NL-NH-HAA_XXXX_ANNABEL-LUKE.json b/data/person/ID_NL-NH-HAA_199X_NL-NH-HAA_XXXX_ANNABEL-LUKE.json index 5c2d780c5f..40bdca57aa 100644 --- a/data/person/ID_NL-NH-HAA_199X_NL-NH-HAA_XXXX_ANNABEL-LUKE.json +++ b/data/person/ID_NL-NH-HAA_199X_NL-NH-HAA_XXXX_ANNABEL-LUKE.json @@ -200,7 +200,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annabel-luke-6a33b1294_20251214T102716Z.json" ], - "modified_at": "2026-01-09T19:18:16.407223+00:00", + "modified_at": "2026-01-09T19:51:17.446492+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annabel-luke-6a33b1294", @@ -238,7 +238,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -287,7 +287,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.407216+00:00", + "inferred_at": "2026-01-09T19:51:17.446486+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HAA_199X_NL-NH-HAA_XXXX_ROWAN-SOUHUWAT.json b/data/person/ID_NL-NH-HAA_199X_NL-NH-HAA_XXXX_ROWAN-SOUHUWAT.json index a281ac0ea5..979fce83d6 100644 --- a/data/person/ID_NL-NH-HAA_199X_NL-NH-HAA_XXXX_ROWAN-SOUHUWAT.json +++ b/data/person/ID_NL-NH-HAA_199X_NL-NH-HAA_XXXX_ROWAN-SOUHUWAT.json @@ -184,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rowan-souhuwat-848817134_20251214T102735Z.json" ], - "modified_at": "2026-01-09T19:18:13.018242+00:00", + "modified_at": "2026-01-09T19:50:50.592801+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rowan-souhuwat-848817134", @@ -213,7 +213,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.018238+00:00", + "inferred_at": "2026-01-09T19:50:50.592796+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HEI_198X_NL-NH-ALK_XXXX_MARIEKE-KUITWAARD.json b/data/person/ID_NL-NH-HEI_198X_NL-NH-ALK_XXXX_MARIEKE-KUITWAARD.json index a1444376ee..b18778bf2b 100644 --- a/data/person/ID_NL-NH-HEI_198X_NL-NH-ALK_XXXX_MARIEKE-KUITWAARD.json +++ b/data/person/ID_NL-NH-HEI_198X_NL-NH-ALK_XXXX_MARIEKE-KUITWAARD.json @@ -217,7 +217,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marieke-kuitwaard_20251214T112138Z.json" ], - "modified_at": "2026-01-09T19:18:13.117144+00:00", + "modified_at": "2026-01-09T19:51:22.054095+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marieke-kuitwaard", @@ -249,7 +249,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -290,7 +290,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.117138+00:00", + "inferred_at": "2026-01-09T19:51:22.054090+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-ZH-ROT_XXXX_WILLEM-RIJSDIJK.json b/data/person/ID_NL-NH-HIL_195X_NL-ZH-ROT_XXXX_WILLEM-RIJSDIJK.json similarity index 79% rename from data/person/ID_XX-XX-XXX_195X_NL-ZH-ROT_XXXX_WILLEM-RIJSDIJK.json rename to data/person/ID_NL-NH-HIL_195X_NL-ZH-ROT_XXXX_WILLEM-RIJSDIJK.json index 99687d38e3..43c8b77476 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-ZH-ROT_XXXX_WILLEM-RIJSDIJK.json +++ b/data/person/ID_NL-NH-HIL_195X_NL-ZH-ROT_XXXX_WILLEM-RIJSDIJK.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_195X_NL-ZH-ROT_XXXX_WILLEM-RIJSDIJK", + "ppid": "ID_NL-NH-HIL_195X_NL-ZH-ROT_XXXX_WILLEM-RIJSDIJK", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NH-HIL", "first_date": "195X", "last_location": "NL-ZH-ROT", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Willem Rijsdijk", @@ -213,7 +214,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/willemrijsdijk_20251214T112838Z.json" ], - "modified_at": "2026-01-09T19:18:16.494770+00:00", + "modified_at": "2026-01-09T19:51:15.740396+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "willemrijsdijk", @@ -236,6 +237,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_195X_NL-ZH-ROT_XXXX_WILLEM-RIJSDIJK", + "new_ppid": "ID_NL-NH-HIL_195X_NL-ZH-ROT_XXXX_WILLEM-RIJSDIJK", + "changed_at": "2026-01-09T19:51:15.740393+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -250,7 +261,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -299,7 +310,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.469335+00:00", + "inferred_at": "2026-01-09T19:51:15.735366+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Hilversum", + "formatted": "NL-NH-HIL", + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "NCOI Opleidingen", + "date_range": "2005 - 2005", + "degree": "MBO Facilitair Management, Diploma behaald" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "NCOI Opleidingen", + "mapping_result": "Hilversum, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Hilversum, Netherlands", + "result": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL" + }, + "result": "NL-NH-HIL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + }, + "inferred_at": "2026-01-09T19:51:15.740376+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BREGTJE-HAAK.json b/data/person/ID_NL-NH-HIL_197X_NL-NH-AMS_XXXX_BREGTJE-HAAK.json similarity index 75% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BREGTJE-HAAK.json rename to data/person/ID_NL-NH-HIL_197X_NL-NH-AMS_XXXX_BREGTJE-HAAK.json index 8031db00e0..36a30b7a77 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BREGTJE-HAAK.json +++ b/data/person/ID_NL-NH-HIL_197X_NL-NH-AMS_XXXX_BREGTJE-HAAK.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BREGTJE-HAAK", + "ppid": "ID_NL-NH-HIL_197X_NL-NH-AMS_XXXX_BREGTJE-HAAK", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-HIL", + "first_date": "197X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "BREGTJE", "HAAK" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Bregtje van der Haak", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -209,63 +215,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bregtje-van-der-haak-8949076_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:59.405827+00:00", + "modified_at": "2026-01-09T19:51:26.687817+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bregtje-van-der-haak-8949076", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Noord-Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Noord-Holland, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:59.405820+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BREGTJE-HAAK", @@ -275,6 +228,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BREGTJE-HAAK", + "new_ppid": "ID_NL-NH-HIL_197X_NL-NH-AMS_XXXX_BREGTJE-HAAK", + "changed_at": "2026-01-09T19:43:38.389158+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1975 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "VPRO / Independent", + "title": "Documentary Filmmaker", + "date_range": "1998 - 2022" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1998 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1998 - 23 = 1975", + "result": "Estimated birth year: 1975", + "range": "1970-1980 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1970, + 1980 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:26.687814+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_197X_NL-UT-RHE_XXXX_CAROLA-WOUDE.json b/data/person/ID_NL-NH-HIL_197X_NL-UT-RHE_XXXX_CAROLA-WOUDE.json similarity index 87% rename from data/person/ID_XX-XX-XXX_197X_NL-UT-RHE_XXXX_CAROLA-WOUDE.json rename to data/person/ID_NL-NH-HIL_197X_NL-UT-RHE_XXXX_CAROLA-WOUDE.json index bb5554648b..5e97b28802 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-UT-RHE_XXXX_CAROLA-WOUDE.json +++ b/data/person/ID_NL-NH-HIL_197X_NL-UT-RHE_XXXX_CAROLA-WOUDE.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_197X_NL-UT-RHE_XXXX_CAROLA-WOUDE", + "ppid": "ID_NL-NH-HIL_197X_NL-UT-RHE_XXXX_CAROLA-WOUDE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NH-HIL", "first_date": "197X", "last_location": "NL-UT-RHE", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Carola van der Woude", @@ -353,7 +354,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carolavanderwoude_20251214T110549Z.json" ], - "modified_at": "2026-01-09T19:18:11.429612+00:00", + "modified_at": "2026-01-09T19:51:02.484005+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carolavanderwoude", @@ -376,6 +377,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_NL-UT-RHE_XXXX_CAROLA-WOUDE", + "new_ppid": "ID_NL-NH-HIL_197X_NL-UT-RHE_XXXX_CAROLA-WOUDE", + "changed_at": "2026-01-09T19:51:02.484003+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -390,7 +401,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -439,7 +450,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.429476+00:00", + "inferred_at": "2026-01-09T19:51:02.480663+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Hilversum", + "formatted": "NL-NH-HIL", + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "NCOI Opleidingen", + "date_range": "2013 - 2015 • 2 years", + "degree": "HBO Programma Hotel- en Eventmanagement" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "NCOI Opleidingen", + "mapping_result": "Hilversum, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Hilversum, Netherlands", + "result": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL" + }, + "result": "NL-NH-HIL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + }, + "inferred_at": "2026-01-09T19:51:02.483987+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_HENK-GOEMANS.json b/data/person/ID_NL-NH-HIL_197X_NL-ZH-TH_XXXX_HENK-GOEMANS.json similarity index 73% rename from data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_HENK-GOEMANS.json rename to data/person/ID_NL-NH-HIL_197X_NL-ZH-TH_XXXX_HENK-GOEMANS.json index 280f7336ee..6e61b8db67 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_HENK-GOEMANS.json +++ b/data/person/ID_NL-NH-HIL_197X_NL-ZH-TH_XXXX_HENK-GOEMANS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_HENK-GOEMANS", + "ppid": "ID_NL-NH-HIL_197X_NL-ZH-TH_XXXX_HENK-GOEMANS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NH-HIL", "first_date": "197X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Henk Goemans", @@ -165,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henk-goemans-6070352b_20251214T112825Z.json" ], - "modified_at": "2026-01-09T19:18:15.050317+00:00", + "modified_at": "2026-01-09T19:51:18.444752+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henk-goemans-6070352b", @@ -188,6 +189,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_HENK-GOEMANS", + "new_ppid": "ID_NL-NH-HIL_197X_NL-ZH-TH_XXXX_HENK-GOEMANS", + "changed_at": "2026-01-09T19:51:18.444749+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -202,7 +213,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -251,7 +262,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.045593+00:00", + "inferred_at": "2026-01-09T19:51:18.442639+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Hilversum", + "formatted": "NL-NH-HIL", + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "NCOI Opleidingen", + "date_range": "2016 - 2017 • 1 year", + "degree": "Bachelor's degree, Logistics, Materials, and Supply Chain Management, 7" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "NCOI Opleidingen", + "mapping_result": "Hilversum, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Hilversum, Netherlands", + "result": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL" + }, + "result": "NL-NH-HIL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + }, + "inferred_at": "2026-01-09T19:51:18.444739+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HIL_198X_NL-NH-AMS_XXXX_GERALD-WIJNGAART.json b/data/person/ID_NL-NH-HIL_198X_NL-NH-AMS_XXXX_GERALD-WIJNGAART.json index 43a08d05a9..9eba018311 100644 --- a/data/person/ID_NL-NH-HIL_198X_NL-NH-AMS_XXXX_GERALD-WIJNGAART.json +++ b/data/person/ID_NL-NH-HIL_198X_NL-NH-AMS_XXXX_GERALD-WIJNGAART.json @@ -146,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gvanderwijngaart_20251214T111429Z.json" ], - "modified_at": "2026-01-09T19:18:11.885669+00:00", + "modified_at": "2026-01-09T19:50:47.340487+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gvanderwijngaart", @@ -169,7 +169,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.885640+00:00", + "inferred_at": "2026-01-09T19:50:47.340468+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HIL_198X_NL-NH-AMS_XXXX_MARLOES-GRUBEN.json b/data/person/ID_NL-NH-HIL_198X_NL-NH-AMS_XXXX_MARLOES-GRUBEN.json index 60959f8d1c..9f74ee4fdf 100644 --- a/data/person/ID_NL-NH-HIL_198X_NL-NH-AMS_XXXX_MARLOES-GRUBEN.json +++ b/data/person/ID_NL-NH-HIL_198X_NL-NH-AMS_XXXX_MARLOES-GRUBEN.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marloes-gruben_20251214T111840Z.json" ], - "modified_at": "2026-01-09T19:18:16.780332+00:00", + "modified_at": "2026-01-09T19:51:21.951812+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marloes-gruben", @@ -199,7 +199,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -248,7 +248,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.780327+00:00", + "inferred_at": "2026-01-09T19:51:21.951808+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARNOUD-GOOS.json b/data/person/ID_NL-NH-HIL_198X_NL-NH-HIL_XXXX_ARNOUD-GOOS.json similarity index 75% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARNOUD-GOOS.json rename to data/person/ID_NL-NH-HIL_198X_NL-NH-HIL_XXXX_ARNOUD-GOOS.json index f6c6f33ae5..bc2a229e5c 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARNOUD-GOOS.json +++ b/data/person/ID_NL-NH-HIL_198X_NL-NH-HIL_XXXX_ARNOUD-GOOS.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARNOUD-GOOS", + "ppid": "ID_NL-NH-HIL_198X_NL-NH-HIL_XXXX_ARNOUD-GOOS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-HIL", + "first_date": "198X", "last_location": "NL-NH-HIL", "last_date": "XXXX", "name_tokens": [ "ARNOUD", "GOOS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Arnoud Goos", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -189,63 +195,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arnoud-goos-54b11a48_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:55.613027+00:00", + "modified_at": "2026-01-09T19:51:12.018797+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arnoud-goos-54b11a48", - "inferred_current_settlement": { - "value": "Hilversum", - "formatted": "NL-NH-HIL", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "HIL", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Hilversum, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Hilversum, Netherlands", - "result": { - "geonames_id": 2754064, - "geonames_name": "Hilversum", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPL", - "latitude": 52.22333, - "longitude": 5.17639 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-HIL" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2754064, - "geonames_name": "Hilversum", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPL", - "latitude": 52.22333, - "longitude": 5.17639 - }, - "inferred_at": "2026-01-09T17:42:55.613021+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOUD-GOOS", @@ -255,6 +208,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARNOUD-GOOS", + "new_ppid": "ID_NL-NH-HIL_198X_NL-NH-HIL_XXXX_ARNOUD-GOOS", + "changed_at": "2026-01-09T19:43:40.505946+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1989 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Nederlands Instituut voor Beeld en Geluid", + "title": "Project Staff, Images for the Future", + "date_range": "2012 - 2015" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2012 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2012 - 23 = 1989", + "result": "Estimated birth year: 1989", + "range": "1984-1994 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1984, + 1994 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:12.018788+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-HIL_198X_NL-UT-UTR_XXXX_SANJAY-OEMRAW.json b/data/person/ID_NL-NH-HIL_198X_NL-UT-UTR_XXXX_SANJAY-OEMRAW.json index 566619d780..97c4dc133a 100644 --- a/data/person/ID_NL-NH-HIL_198X_NL-UT-UTR_XXXX_SANJAY-OEMRAW.json +++ b/data/person/ID_NL-NH-HIL_198X_NL-UT-UTR_XXXX_SANJAY-OEMRAW.json @@ -172,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sanjayoemraw_20251214T111623Z.json" ], - "modified_at": "2026-01-09T19:18:15.904626+00:00", + "modified_at": "2026-01-09T19:51:15.056644+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sanjayoemraw", @@ -201,7 +201,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -250,7 +250,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.904621+00:00", + "inferred_at": "2026-01-09T19:51:15.056635+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HIL_198X_NL-ZH-SCH_XXXX_LUUK-TOORMAN.json b/data/person/ID_NL-NH-HIL_198X_NL-ZH-SCH_XXXX_LUUK-TOORMAN.json index 26e4c0e8b2..2f6911cf00 100644 --- a/data/person/ID_NL-NH-HIL_198X_NL-ZH-SCH_XXXX_LUUK-TOORMAN.json +++ b/data/person/ID_NL-NH-HIL_198X_NL-ZH-SCH_XXXX_LUUK-TOORMAN.json @@ -94,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/luuk-toorman-3777495a_20251214T102930Z.json" ], - "modified_at": "2026-01-09T19:18:12.292201+00:00", + "modified_at": "2026-01-09T19:50:47.497126+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "luuk-toorman-3777495a", @@ -123,7 +123,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.292189+00:00", + "inferred_at": "2026-01-09T19:50:47.497119+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_LEONIE-RIDDER.json b/data/person/ID_NL-NH-HIL_198X_NL-ZH-TH_XXXX_LEONIE-RIDDER.json similarity index 73% rename from data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_LEONIE-RIDDER.json rename to data/person/ID_NL-NH-HIL_198X_NL-ZH-TH_XXXX_LEONIE-RIDDER.json index 0216932327..2b6d22fa28 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_LEONIE-RIDDER.json +++ b/data/person/ID_NL-NH-HIL_198X_NL-ZH-TH_XXXX_LEONIE-RIDDER.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_LEONIE-RIDDER", + "ppid": "ID_NL-NH-HIL_198X_NL-ZH-TH_XXXX_LEONIE-RIDDER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NH-HIL", "first_date": "198X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "leonie de ridder", @@ -168,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/leonie-de-ridder-75940799_20251214T102753Z.json" ], - "modified_at": "2026-01-09T19:18:13.227995+00:00", + "modified_at": "2026-01-09T19:50:53.672186+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "leonie-de-ridder-75940799", @@ -182,6 +183,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_LEONIE-RIDDER", + "new_ppid": "ID_NL-NH-HIL_198X_NL-ZH-TH_XXXX_LEONIE-RIDDER", + "changed_at": "2026-01-09T19:50:53.672184+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -196,7 +207,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +256,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.223596+00:00", + "inferred_at": "2026-01-09T19:50:53.667986+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Hilversum", + "formatted": "NL-NH-HIL", + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "NCOI Opleidingen", + "date_range": "2020 - 2021 • 1 year", + "degree": "Risk Management" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "NCOI Opleidingen", + "mapping_result": "Hilversum, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Hilversum, Netherlands", + "result": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL" + }, + "result": "NL-NH-HIL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + }, + "inferred_at": "2026-01-09T19:50:53.672168+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARIA-PAPELARD.json b/data/person/ID_NL-NH-HIL_198X_XX-XX-XXX_XXXX_MARIA-PAPELARD.json similarity index 65% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARIA-PAPELARD.json rename to data/person/ID_NL-NH-HIL_198X_XX-XX-XXX_XXXX_MARIA-PAPELARD.json index 91106b64a6..7520c7a6a8 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARIA-PAPELARD.json +++ b/data/person/ID_NL-NH-HIL_198X_XX-XX-XXX_XXXX_MARIA-PAPELARD.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARIA-PAPELARD", + "ppid": "ID_NL-NH-HIL_198X_XX-XX-XXX_XXXX_MARIA-PAPELARD", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NH-HIL", "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Maria Papelard", @@ -106,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maria-papelard-3623a3115_20251214T110659Z.json" ], - "modified_at": "2026-01-09T19:18:15.591493+00:00", + "modified_at": "2026-01-09T19:51:12.649413+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maria-papelard-3623a3115", @@ -119,6 +120,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARIA-PAPELARD", + "new_ppid": "ID_NL-NH-HIL_198X_XX-XX-XXX_XXXX_MARIA-PAPELARD", + "changed_at": "2026-01-09T19:51:12.649405+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -133,7 +144,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +193,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.589504+00:00", + "inferred_at": "2026-01-09T19:51:12.640159+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Hilversum", + "formatted": "NL-NH-HIL", + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "NCOI Opleidingen", + "date_range": "2015 - 2016 • 1 year", + "degree": "Post Bachelor, Arbeids- en organisatiepsychologie" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "NCOI Opleidingen", + "mapping_result": "Hilversum, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Hilversum, Netherlands", + "result": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL" + }, + "result": "NL-NH-HIL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + }, + "inferred_at": "2026-01-09T19:51:12.646714+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NB-BRE_XXXX_SUSAN-SUURLANDCASTELIJNS.json b/data/person/ID_NL-NH-HIL_199X_NL-NB-BRE_XXXX_SUSAN-SUURLANDCASTELIJNS.json similarity index 65% rename from data/person/ID_XX-XX-XXX_199X_NL-NB-BRE_XXXX_SUSAN-SUURLANDCASTELIJNS.json rename to data/person/ID_NL-NH-HIL_199X_NL-NB-BRE_XXXX_SUSAN-SUURLANDCASTELIJNS.json index d2f5077ba3..1a95a39707 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NB-BRE_XXXX_SUSAN-SUURLANDCASTELIJNS.json +++ b/data/person/ID_NL-NH-HIL_199X_NL-NB-BRE_XXXX_SUSAN-SUURLANDCASTELIJNS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-NB-BRE_XXXX_SUSAN-SUURLANDCASTELIJNS", + "ppid": "ID_NL-NH-HIL_199X_NL-NB-BRE_XXXX_SUSAN-SUURLANDCASTELIJNS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NH-HIL", "first_date": "199X", "last_location": "NL-NB-BRE", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Susan Suurland-Castelijns", @@ -99,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/susansuurland_20251214T112207Z.json" ], - "modified_at": "2026-01-09T19:18:13.599634+00:00", + "modified_at": "2026-01-09T19:50:55.135458+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "susansuurland", @@ -113,6 +114,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-NB-BRE_XXXX_SUSAN-SUURLANDCASTELIJNS", + "new_ppid": "ID_NL-NH-HIL_199X_NL-NB-BRE_XXXX_SUSAN-SUURLANDCASTELIJNS", + "changed_at": "2026-01-09T19:50:55.135455+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -121,7 +132,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +173,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.597739+00:00", + "inferred_at": "2026-01-09T19:50:55.129757+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Hilversum", + "formatted": "NL-NH-HIL", + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "NCOI", + "date_range": "2014 - 2016 • 2 years", + "degree": "HBO Sociaal Juridische Dienstverlening" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "NCOI", + "mapping_result": "Hilversum, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Hilversum, Netherlands", + "result": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL" + }, + "result": "NL-NH-HIL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + }, + "inferred_at": "2026-01-09T19:50:55.135437+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ASTRID-SY.json b/data/person/ID_NL-NH-HIL_199X_NL-NH-AMS_XXXX_ASTRID-SY.json similarity index 73% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ASTRID-SY.json rename to data/person/ID_NL-NH-HIL_199X_NL-NH-AMS_XXXX_ASTRID-SY.json index 95a3928afb..24cd289789 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ASTRID-SY.json +++ b/data/person/ID_NL-NH-HIL_199X_NL-NH-AMS_XXXX_ASTRID-SY.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ASTRID-SY", + "ppid": "ID_NL-NH-HIL_199X_NL-NH-AMS_XXXX_ASTRID-SY", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-HIL", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ASTRID", "SY" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Astrid Sy", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -197,63 +203,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/astrid-sy-4411707b_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:06.846696+00:00", + "modified_at": "2026-01-09T19:50:55.391810+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "astrid-sy-4411707b", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:06.846690+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ASTRID-SY", @@ -263,6 +216,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ASTRID-SY", + "new_ppid": "ID_NL-NH-HIL_199X_NL-NH-AMS_XXXX_ASTRID-SY", + "changed_at": "2026-01-09T19:43:39.479060+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1994 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "ROSE stories", + "title": "Writer", + "date_range": "2017" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2017 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2017 - 23 = 1994", + "result": "Estimated birth year: 1994", + "range": "1989-1999 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1989, + 1999 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:55.391802+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARJEN-PAS.json b/data/person/ID_NL-NH-HIL_199X_NL-NH-HIL_XXXX_ARJEN-PAS.json similarity index 62% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARJEN-PAS.json rename to data/person/ID_NL-NH-HIL_199X_NL-NH-HIL_XXXX_ARJEN-PAS.json index 41012a0eb5..d60dbbc205 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARJEN-PAS.json +++ b/data/person/ID_NL-NH-HIL_199X_NL-NH-HIL_XXXX_ARJEN-PAS.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARJEN-PAS", + "ppid": "ID_NL-NH-HIL_199X_NL-NH-HIL_XXXX_ARJEN-PAS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-HIL", + "first_date": "199X", "last_location": "NL-NH-HIL", "last_date": "XXXX", "name_tokens": [ "ARJEN", "PAS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Arjen Pas", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -116,63 +122,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arjenpas_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:54.794678+00:00", + "modified_at": "2026-01-09T19:50:51.053357+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arjenpas", - "inferred_current_settlement": { - "value": "Hilversum", - "formatted": "NL-NH-HIL", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "HIL", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Hilversum, Noord-Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Hilversum, Noord-Holland, Netherlands", - "result": { - "geonames_id": 2754064, - "geonames_name": "Hilversum", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPL", - "latitude": 52.22333, - "longitude": 5.17639 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-HIL" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2754064, - "geonames_name": "Hilversum", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPL", - "latitude": 52.22333, - "longitude": 5.17639 - }, - "inferred_at": "2026-01-09T17:42:54.794673+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARJEN-PAS", @@ -182,6 +135,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARJEN-PAS", + "new_ppid": "ID_NL-NH-HIL_199X_NL-NH-HIL_XXXX_ARJEN-PAS", + "changed_at": "2026-01-09T19:43:38.877537+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1994 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Nederlands Instituut voor Beeld & Geluid", + "title": "Events & Festivals Lead", + "date_range": "2017 - 2024-12" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2017 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2017 - 23 = 1994", + "result": "Estimated birth year: 1994", + "range": "1989-1999 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1989, + 1999 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:51.053347+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-ROT_XXXX_AMY-WELTEN.json b/data/person/ID_NL-NH-HIL_199X_NL-ZH-ROT_XXXX_AMY-WELTEN.json similarity index 70% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-ROT_XXXX_AMY-WELTEN.json rename to data/person/ID_NL-NH-HIL_199X_NL-ZH-ROT_XXXX_AMY-WELTEN.json index 0308731880..7194b28220 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-ROT_XXXX_AMY-WELTEN.json +++ b/data/person/ID_NL-NH-HIL_199X_NL-ZH-ROT_XXXX_AMY-WELTEN.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-ROT_XXXX_AMY-WELTEN", + "ppid": "ID_NL-NH-HIL_199X_NL-ZH-ROT_XXXX_AMY-WELTEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-HIL", + "first_date": "199X", "last_location": "NL-ZH-ROT", "last_date": "XXXX", "name_tokens": [ "AMY", "WELTEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Amy Welten", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -161,63 +167,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amy-welten_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:56.360663+00:00", + "modified_at": "2026-01-09T19:50:58.571925+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "amy-welten", - "inferred_current_settlement": { - "value": "Rotterdam", - "formatted": "NL-ZH-ROT", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "ROT", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Rotterdam, Netherlands (works in Hilversum)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Rotterdam, Netherlands (works in Hilversum)", - "result": { - "geonames_id": 2747891, - "geonames_name": "Rotterdam", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPL", - "latitude": 51.9225, - "longitude": 4.47917 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-ROT" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747891, - "geonames_name": "Rotterdam", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPL", - "latitude": 51.9225, - "longitude": 4.47917 - }, - "inferred_at": "2026-01-09T17:42:56.360656+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMY-WELTEN", @@ -227,6 +180,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-ROT_XXXX_AMY-WELTEN", + "new_ppid": "ID_NL-NH-HIL_199X_NL-ZH-ROT_XXXX_AMY-WELTEN", + "changed_at": "2026-01-09T19:43:40.480359+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1998 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Nederlands Instituut voor Beeld & Geluid", + "title": "Administrative Worker (Metadatabeheer)", + "date_range": "2021 - 2022" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2021 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2021 - 23 = 1998", + "result": "Estimated birth year: 1998", + "range": "1993-2003 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1993, + 2003 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:58.571919+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_ERIK-HAMELINK.json b/data/person/ID_NL-NH-HIL_199X_NL-ZH-TH_XXXX_ERIK-HAMELINK.json similarity index 79% rename from data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_ERIK-HAMELINK.json rename to data/person/ID_NL-NH-HIL_199X_NL-ZH-TH_XXXX_ERIK-HAMELINK.json index 1ad2a9cb98..5c265945b8 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_ERIK-HAMELINK.json +++ b/data/person/ID_NL-NH-HIL_199X_NL-ZH-TH_XXXX_ERIK-HAMELINK.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_ERIK-HAMELINK", + "ppid": "ID_NL-NH-HIL_199X_NL-ZH-TH_XXXX_ERIK-HAMELINK", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NH-HIL", "first_date": "199X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Erik Hamelink", @@ -193,7 +194,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ehamelink_20251214T113422Z.json" ], - "modified_at": "2026-01-09T19:18:16.243884+00:00", + "modified_at": "2026-01-09T19:51:23.198396+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ehamelink", @@ -216,6 +217,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_ERIK-HAMELINK", + "new_ppid": "ID_NL-NH-HIL_199X_NL-ZH-TH_XXXX_ERIK-HAMELINK", + "changed_at": "2026-01-09T19:51:23.198394+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -230,7 +241,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -279,7 +290,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.243778+00:00", + "inferred_at": "2026-01-09T19:51:23.196382+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Hilversum", + "formatted": "NL-NH-HIL", + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "NCOI", + "date_range": "2010 - 2010", + "degree": "Prince2 Foundation, Project Management" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "NCOI", + "mapping_result": "Hilversum, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Hilversum, Netherlands", + "result": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL" + }, + "result": "NL-NH-HIL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + }, + "inferred_at": "2026-01-09T19:51:23.198388+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_SUZETTE-RAADT.json b/data/person/ID_NL-NH-HIL_199X_NL-ZH-TH_XXXX_SUZETTE-RAADT.json similarity index 68% rename from data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_SUZETTE-RAADT.json rename to data/person/ID_NL-NH-HIL_199X_NL-ZH-TH_XXXX_SUZETTE-RAADT.json index f4d65c2eb8..246e9e73ab 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_SUZETTE-RAADT.json +++ b/data/person/ID_NL-NH-HIL_199X_NL-ZH-TH_XXXX_SUZETTE-RAADT.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_SUZETTE-RAADT", + "ppid": "ID_NL-NH-HIL_199X_NL-ZH-TH_XXXX_SUZETTE-RAADT", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NH-HIL", "first_date": "199X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Suzette De Raadt", @@ -116,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/suzettederaadt_20251214T113413Z.json" ], - "modified_at": "2026-01-09T19:18:17.831819+00:00", + "modified_at": "2026-01-09T19:51:19.916750+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "suzettederaadt", @@ -139,6 +140,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_SUZETTE-RAADT", + "new_ppid": "ID_NL-NH-HIL_199X_NL-ZH-TH_XXXX_SUZETTE-RAADT", + "changed_at": "2026-01-09T19:51:19.916747+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -147,7 +158,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +199,77 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.831766+00:00", + "inferred_at": "2026-01-09T19:51:19.887341+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Hilversum", + "formatted": "NL-NH-HIL", + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "NCOI", + "date_range": "2013 - 2013", + "degree": "BISL" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "NCOI", + "mapping_result": "Hilversum, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Hilversum, Netherlands", + "result": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL" + }, + "result": "NL-NH-HIL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + }, + "inferred_at": "2026-01-09T19:51:19.916728+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_FAY-SELTEN.json b/data/person/ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_FAY-SELTEN.json index cdb0c46489..7e1e1b7731 100644 --- a/data/person/ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_FAY-SELTEN.json +++ b/data/person/ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_FAY-SELTEN.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fay-selten-1a1306142_20251214T112850Z.json" ], - "modified_at": "2026-01-09T19:18:13.390915+00:00", + "modified_at": "2026-01-09T19:50:54.010736+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fay-selten-1a1306142", @@ -160,7 +160,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.386937+00:00", + "inferred_at": "2026-01-09T19:50:54.004713+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JAN-FECKEN.json b/data/person/ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_JAN-FECKEN.json similarity index 62% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JAN-FECKEN.json rename to data/person/ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_JAN-FECKEN.json index d983c2a604..df25bd4a35 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JAN-FECKEN.json +++ b/data/person/ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_JAN-FECKEN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JAN-FECKEN", + "ppid": "ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_JAN-FECKEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NH-HIL", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Jan Fecken", @@ -86,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-fecken-b0958928_20251214T110637Z.json" ], - "modified_at": "2026-01-09T19:18:14.606221+00:00", + "modified_at": "2026-01-09T19:51:02.702629+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-fecken-b0958928", @@ -99,6 +100,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JAN-FECKEN", + "new_ppid": "ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_JAN-FECKEN", + "changed_at": "2026-01-09T19:51:02.702626+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -113,7 +124,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +173,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.606188+00:00", + "inferred_at": "2026-01-09T19:51:02.699839+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Hilversum", + "formatted": "NL-NH-HIL", + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "NCOI Opleidingen", + "date_range": "2014 - 2015 • 1 year", + "degree": "MHBO Middle Management" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "NCOI Opleidingen", + "mapping_result": "Hilversum, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Hilversum, Netherlands", + "result": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL" + }, + "result": "NL-NH-HIL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + }, + "inferred_at": "2026-01-09T19:51:02.702618+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SAMIRA-CHMOURK.json b/data/person/ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_SAMIRA-CHMOURK.json similarity index 72% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SAMIRA-CHMOURK.json rename to data/person/ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_SAMIRA-CHMOURK.json index 17132a2802..a418e6957d 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SAMIRA-CHMOURK.json +++ b/data/person/ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_SAMIRA-CHMOURK.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SAMIRA-CHMOURK", + "ppid": "ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_SAMIRA-CHMOURK", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NH-HIL", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Samira Chmourk", @@ -176,7 +177,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/samira-chmourk-67872851_20251214T103135Z.json" ], - "modified_at": "2026-01-09T19:18:17.442967+00:00", + "modified_at": "2026-01-09T19:51:28.101910+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "samira-chmourk-67872851", @@ -189,6 +190,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SAMIRA-CHMOURK", + "new_ppid": "ID_NL-NH-HIL_199X_XX-XX-XXX_XXXX_SAMIRA-CHMOURK", + "changed_at": "2026-01-09T19:51:28.101907+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -203,7 +214,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +263,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.441037+00:00", + "inferred_at": "2026-01-09T19:51:28.098259+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Hilversum", + "formatted": "NL-NH-HIL", + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "NCOI Opleidingen", + "date_range": "2018 - 2019 • 1 year", + "degree": "Master's degree, Professional Master Leiderschap en Beïnvloeding" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "NCOI Opleidingen", + "mapping_result": "Hilversum, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Hilversum, Netherlands", + "result": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "NH", + "settlement_code": "HIL" + }, + "result": "NL-NH-HIL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2754064, + "geonames_name": "Hilversum", + "admin1_code": "07", + "admin1_name": "North Holland", + "feature_code": "PPL", + "latitude": 52.22333, + "longitude": 5.17639 + }, + "inferred_at": "2026-01-09T19:51:28.100132+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HIL_200X_NL-NH-AMS_XXXX_IVANA-SOYER.json b/data/person/ID_NL-NH-HIL_200X_NL-NH-AMS_XXXX_IVANA-SOYER.json index 61e7d8086f..4302988442 100644 --- a/data/person/ID_NL-NH-HIL_200X_NL-NH-AMS_XXXX_IVANA-SOYER.json +++ b/data/person/ID_NL-NH-HIL_200X_NL-NH-AMS_XXXX_IVANA-SOYER.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ivana-soyer-45234117a_20251214T112555Z.json" ], - "modified_at": "2026-01-09T19:18:13.124164+00:00", + "modified_at": "2026-01-09T19:51:18.308188+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ivana-soyer-45234117a", @@ -190,7 +190,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.124159+00:00", + "inferred_at": "2026-01-09T19:51:18.308183+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARNOLD-BLONK.json b/data/person/ID_NL-NH-HIL_200X_NL-NH-HIL_XXXX_ARNOLD-BLONK.json similarity index 61% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARNOLD-BLONK.json rename to data/person/ID_NL-NH-HIL_200X_NL-NH-HIL_XXXX_ARNOLD-BLONK.json index 5712afa095..753d2f7a10 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARNOLD-BLONK.json +++ b/data/person/ID_NL-NH-HIL_200X_NL-NH-HIL_XXXX_ARNOLD-BLONK.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARNOLD-BLONK", + "ppid": "ID_NL-NH-HIL_200X_NL-NH-HIL_XXXX_ARNOLD-BLONK", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-NH-HIL", + "first_date": "200X", "last_location": "NL-NH-HIL", "last_date": "XXXX", "name_tokens": [ "ARNOLD", "BLONK" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Arnold Blonk", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -110,63 +116,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arnoldblonk_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:55.240363+00:00", + "modified_at": "2026-01-09T19:50:53.883830+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arnoldblonk", - "inferred_current_settlement": { - "value": "Hilversum", - "formatted": "NL-NH-HIL", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "HIL", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Hilversum, Noord-Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Hilversum, Noord-Holland, Netherlands", - "result": { - "geonames_id": 2754064, - "geonames_name": "Hilversum", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPL", - "latitude": 52.22333, - "longitude": 5.17639 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-HIL" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2754064, - "geonames_name": "Hilversum", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPL", - "latitude": 52.22333, - "longitude": 5.17639 - }, - "inferred_at": "2026-01-09T17:42:55.240357+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOLD-BLONK", @@ -176,6 +129,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-HIL_XXXX_ARNOLD-BLONK", + "new_ppid": "ID_NL-NH-HIL_200X_NL-NH-HIL_XXXX_ARNOLD-BLONK", + "changed_at": "2026-01-09T19:43:43.104645+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2002 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Nederlands Instituut voor Beeld en Geluid", + "title": "Manager Verantwoorden (Business Control, Project Control, Financiële Administratie, Inkoop & Contractmanagement)", + "date_range": "2025" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2025 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2025 - 23 = 2002", + "result": "Estimated birth year: 2002", + "range": "1997-2007 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1997, + 2007 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:53.883826+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-NH-HOO_197X_NL-ZH-NIE_XXXX_ESTHER-WESTERVELD.json b/data/person/ID_NL-NH-HOO_197X_NL-ZH-NIE_XXXX_ESTHER-WESTERVELD.json index 03ef330f15..02ce649137 100644 --- a/data/person/ID_NL-NH-HOO_197X_NL-ZH-NIE_XXXX_ESTHER-WESTERVELD.json +++ b/data/person/ID_NL-NH-HOO_197X_NL-ZH-NIE_XXXX_ESTHER-WESTERVELD.json @@ -269,7 +269,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/westher_20251214T113342Z.json" ], - "modified_at": "2026-01-09T19:18:13.878074+00:00", + "modified_at": "2026-01-09T19:51:18.294299+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "westher", @@ -301,7 +301,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -342,7 +342,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.878068+00:00", + "inferred_at": "2026-01-09T19:51:18.294294+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-HOO_199X_NL-NH-ZAA_XXXX_ANNEMIEKE-SWAGERMAN.json b/data/person/ID_NL-NH-HOO_199X_NL-NH-ZAA_XXXX_ANNEMIEKE-SWAGERMAN.json index 8301b7d6c8..cc28220ddc 100644 --- a/data/person/ID_NL-NH-HOO_199X_NL-NH-ZAA_XXXX_ANNEMIEKE-SWAGERMAN.json +++ b/data/person/ID_NL-NH-HOO_199X_NL-NH-ZAA_XXXX_ANNEMIEKE-SWAGERMAN.json @@ -241,7 +241,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annemiekeswagerman_20251214T104115Z.json" ], - "modified_at": "2026-01-09T19:18:11.197419+00:00", + "modified_at": "2026-01-09T19:50:55.409673+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annemiekeswagerman", @@ -279,7 +279,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -328,7 +328,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.197409+00:00", + "inferred_at": "2026-01-09T19:50:55.409664+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-LAN_198X_NL-NH-ZAA_XXXX_MERLIJN-QUAKERNAAT.json b/data/person/ID_NL-NH-LAN_198X_NL-NH-ZAA_XXXX_MERLIJN-QUAKERNAAT.json index 54664562e0..1bead94893 100644 --- a/data/person/ID_NL-NH-LAN_198X_NL-NH-ZAA_XXXX_MERLIJN-QUAKERNAAT.json +++ b/data/person/ID_NL-NH-LAN_198X_NL-NH-ZAA_XXXX_MERLIJN-QUAKERNAAT.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merlijn-quakernaat-11069a22a_20251214T110134Z.json" ], - "modified_at": "2026-01-09T19:18:15.408004+00:00", + "modified_at": "2026-01-09T19:51:08.784597+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merlijn-quakernaat-11069a22a", @@ -144,7 +144,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.407998+00:00", + "inferred_at": "2026-01-09T19:51:08.784590+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-LAR_198X_NL-GE-ARN_XXXX_JESSE-VELDMAAT.json b/data/person/ID_NL-NH-LAR_198X_NL-GE-ARN_XXXX_JESSE-VELDMAAT.json index a0c718fc93..956623b380 100644 --- a/data/person/ID_NL-NH-LAR_198X_NL-GE-ARN_XXXX_JESSE-VELDMAAT.json +++ b/data/person/ID_NL-NH-LAR_198X_NL-GE-ARN_XXXX_JESSE-VELDMAAT.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jesse-veldmaat-818a72185_20251214T110533Z.json" ], - "modified_at": "2026-01-09T19:18:13.304096+00:00", + "modified_at": "2026-01-09T19:50:57.421278+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jesse-veldmaat-818a72185", @@ -192,7 +192,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.304090+00:00", + "inferred_at": "2026-01-09T19:50:57.421227+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-MUI_199X_NL-NH-AMS_XXXX_JIMMY-GEERS.json b/data/person/ID_NL-NH-MUI_199X_NL-NH-AMS_XXXX_JIMMY-GEERS.json index 0d3e991ef4..38012cf129 100644 --- a/data/person/ID_NL-NH-MUI_199X_NL-NH-AMS_XXXX_JIMMY-GEERS.json +++ b/data/person/ID_NL-NH-MUI_199X_NL-NH-AMS_XXXX_JIMMY-GEERS.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jimmy-geers-b3787384_20251214T110228Z.json" ], - "modified_at": "2026-01-09T19:18:18.238333+00:00", + "modified_at": "2026-01-09T19:51:29.231426+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jimmy-geers-b3787384", @@ -146,7 +146,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.238324+00:00", + "inferred_at": "2026-01-09T19:51:29.231422+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_ANNALIES-EERDE.json b/data/person/ID_NL-NH-NAD_200X_NL-NH-AMS_XXXX_ANNALIES-EERDE.json similarity index 92% rename from data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_ANNALIES-EERDE.json rename to data/person/ID_NL-NH-NAD_200X_NL-NH-AMS_XXXX_ANNALIES-EERDE.json index d2aa8d2803..4f23e2e94f 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_ANNALIES-EERDE.json +++ b/data/person/ID_NL-NH-NAD_200X_NL-NH-AMS_XXXX_ANNALIES-EERDE.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_ANNALIES-EERDE", + "ppid": "ID_NL-NH-NAD_200X_NL-NH-AMS_XXXX_ANNALIES-EERDE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-NH-NAD", "first_date": "200X", "last_location": "NL-NH-AMS", "last_date": "XXXX", @@ -15,7 +15,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Annalies van Eerde", @@ -161,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annalies-van-eerde-4b747734_20251214T115050Z.json" ], - "modified_at": "2026-01-09T19:18:13.440158+00:00", + "modified_at": "2026-01-09T19:51:07.027816+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annalies-van-eerde-4b747734", @@ -183,6 +184,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_ANNALIES-EERDE", + "new_ppid": "ID_NL-NH-NAD_200X_NL-NH-AMS_XXXX_ANNALIES-EERDE", + "changed_at": "2026-01-09T19:43:38.668808+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -197,7 +208,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +257,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.440136+00:00", + "inferred_at": "2026-01-09T19:51:07.027812+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-PUR_197X_NL-NH-PUR_XXXX_FRANK-STOOTMAN.json b/data/person/ID_NL-NH-PUR_197X_NL-NH-PUR_XXXX_FRANK-STOOTMAN.json index cacfdcd9cd..1b825abf09 100644 --- a/data/person/ID_NL-NH-PUR_197X_NL-NH-PUR_XXXX_FRANK-STOOTMAN.json +++ b/data/person/ID_NL-NH-PUR_197X_NL-NH-PUR_XXXX_FRANK-STOOTMAN.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frank-stootman-7b7a0259_20251214T113212Z.json" ], - "modified_at": "2026-01-09T19:18:15.134475+00:00", + "modified_at": "2026-01-09T19:51:06.738227+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frank-stootman-7b7a0259", @@ -147,7 +147,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.134468+00:00", + "inferred_at": "2026-01-09T19:51:06.738222+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-PUR_199X_NL-NH-AMS_XXXX_EDGAR-HEINEMAN.json b/data/person/ID_NL-NH-PUR_199X_NL-NH-AMS_XXXX_EDGAR-HEINEMAN.json index daa027a1df..ade5b784d1 100644 --- a/data/person/ID_NL-NH-PUR_199X_NL-NH-AMS_XXXX_EDGAR-HEINEMAN.json +++ b/data/person/ID_NL-NH-PUR_199X_NL-NH-AMS_XXXX_EDGAR-HEINEMAN.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/edgar-heineman-86227583_20251214T113214Z.json" ], - "modified_at": "2026-01-09T19:18:15.786373+00:00", + "modified_at": "2026-01-09T19:51:14.435965+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "edgar-heineman-86227583", @@ -118,7 +118,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +159,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.786369+00:00", + "inferred_at": "2026-01-09T19:51:14.435960+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-PUR_199X_NL-NH-AMS_XXXX_MARGREET-LENSTRA.json b/data/person/ID_NL-NH-PUR_199X_NL-NH-AMS_XXXX_MARGREET-LENSTRA.json index ad1c3be19b..200ee4c7e0 100644 --- a/data/person/ID_NL-NH-PUR_199X_NL-NH-AMS_XXXX_MARGREET-LENSTRA.json +++ b/data/person/ID_NL-NH-PUR_199X_NL-NH-AMS_XXXX_MARGREET-LENSTRA.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/margreet-lenstra-506a983a_20251214T113210Z.json" ], - "modified_at": "2026-01-09T19:18:13.561506+00:00", + "modified_at": "2026-01-09T19:50:55.195001+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "margreet-lenstra-506a983a", @@ -139,7 +139,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.561501+00:00", + "inferred_at": "2026-01-09T19:50:55.194992+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-UIT_199X_NL-NH-AMS_XXXX_NATHALIE-ROMPELBERG.json b/data/person/ID_NL-NH-UIT_199X_NL-NH-AMS_XXXX_NATHALIE-ROMPELBERG.json index 11f2e7e0d8..aa967fc7dd 100644 --- a/data/person/ID_NL-NH-UIT_199X_NL-NH-AMS_XXXX_NATHALIE-ROMPELBERG.json +++ b/data/person/ID_NL-NH-UIT_199X_NL-NH-AMS_XXXX_NATHALIE-ROMPELBERG.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nathalie-rompelberg-24945a25_20251214T110045Z.json" ], - "modified_at": "2026-01-09T19:18:16.393744+00:00", + "modified_at": "2026-01-09T19:51:18.447212+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nathalie-rompelberg-24945a25", @@ -127,7 +127,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.393739+00:00", + "inferred_at": "2026-01-09T19:51:18.447206+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-VEL_197X_NL-NH-BEV_XXXX_RENTY-HERDINA.json b/data/person/ID_NL-NH-VEL_197X_NL-NH-BEV_XXXX_RENTY-HERDINA.json index 9aa97359c4..ad5c6b3a65 100644 --- a/data/person/ID_NL-NH-VEL_197X_NL-NH-BEV_XXXX_RENTY-HERDINA.json +++ b/data/person/ID_NL-NH-VEL_197X_NL-NH-BEV_XXXX_RENTY-HERDINA.json @@ -159,7 +159,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/renty-herdina-25b84a17b_20251214T111607Z.json" ], - "modified_at": "2026-01-09T19:18:13.892441+00:00", + "modified_at": "2026-01-09T19:50:56.759826+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "renty-herdina-25b84a17b", @@ -188,7 +188,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -237,7 +237,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.892436+00:00", + "inferred_at": "2026-01-09T19:50:56.759820+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-VOL_199X_NL-NH-VOL_XXXX_CHANNAH-KES.json b/data/person/ID_NL-NH-VOL_199X_NL-NH-VOL_XXXX_CHANNAH-KES.json index 343c76dae4..5a5f87fb2f 100644 --- a/data/person/ID_NL-NH-VOL_199X_NL-NH-VOL_XXXX_CHANNAH-KES.json +++ b/data/person/ID_NL-NH-VOL_199X_NL-NH-VOL_XXXX_CHANNAH-KES.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/channah-kes-690a0217a_20251214T113215Z.json" ], - "modified_at": "2026-01-09T19:18:17.544989+00:00", + "modified_at": "2026-01-09T19:51:28.400249+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "channah-kes-690a0217a", @@ -137,7 +137,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.544984+00:00", + "inferred_at": "2026-01-09T19:51:28.400245+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-WEE_199X_NL-UT-BAA_XXXX_WARSAN-M.json b/data/person/ID_NL-NH-WEE_199X_NL-UT-BAA_XXXX_WARSAN-M.json index da56c83615..64cbb475c7 100644 --- a/data/person/ID_NL-NH-WEE_199X_NL-UT-BAA_XXXX_WARSAN-M.json +++ b/data/person/ID_NL-NH-WEE_199X_NL-UT-BAA_XXXX_WARSAN-M.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/warsan-m-560b59112_20251214T110320Z.json" ], - "modified_at": "2026-01-09T19:18:14.986182+00:00", + "modified_at": "2026-01-09T19:51:06.353855+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "warsan-m-560b59112", @@ -152,7 +152,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.986178+00:00", + "inferred_at": "2026-01-09T19:51:06.353851+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-NH-ZAA_200X_NL-NH-ZAA_XXXX_KENDA-ALFAHEL.json b/data/person/ID_NL-NH-ZAA_200X_NL-NH-ZAA_XXXX_KENDA-ALFAHEL.json index 5168c7badf..8585689d76 100644 --- a/data/person/ID_NL-NH-ZAA_200X_NL-NH-ZAA_XXXX_KENDA-ALFAHEL.json +++ b/data/person/ID_NL-NH-ZAA_200X_NL-NH-ZAA_XXXX_KENDA-ALFAHEL.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kenda-alfahel-7b8258198_20251214T111549Z.json" ], - "modified_at": "2026-01-09T19:18:15.972353+00:00", + "modified_at": "2026-01-09T19:51:15.715846+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kenda-alfahel-7b8258198", @@ -134,7 +134,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.972346+00:00", + "inferred_at": "2026-01-09T19:51:15.715840+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-DEV_196X_NL-GE-WAG_XXXX_STEPHAN-MANTEL.json b/data/person/ID_NL-OV-DEV_196X_NL-GE-WAG_XXXX_STEPHAN-MANTEL.json index 418f41f118..6fe90ea257 100644 --- a/data/person/ID_NL-OV-DEV_196X_NL-GE-WAG_XXXX_STEPHAN-MANTEL.json +++ b/data/person/ID_NL-OV-DEV_196X_NL-GE-WAG_XXXX_STEPHAN-MANTEL.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stephanmantel_20251214T104203Z.json" ], - "modified_at": "2026-01-09T19:18:16.847856+00:00", + "modified_at": "2026-01-09T19:51:22.309460+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stephanmantel", @@ -181,7 +181,7 @@ "primary_rationale": "1963 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1963 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.847851+00:00", + "inferred_at": "2026-01-09T19:51:22.309453+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-DEV_197X_NL-OV-DEV_XXXX_ANTON-AMERSFOORT.json b/data/person/ID_NL-OV-DEV_197X_NL-OV-DEV_XXXX_ANTON-AMERSFOORT.json index cecca76a63..5c9cb42622 100644 --- a/data/person/ID_NL-OV-DEV_197X_NL-OV-DEV_XXXX_ANTON-AMERSFOORT.json +++ b/data/person/ID_NL-OV-DEV_197X_NL-OV-DEV_XXXX_ANTON-AMERSFOORT.json @@ -200,7 +200,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/antonvanamersfoort_20251214T112542Z.json" ], - "modified_at": "2026-01-09T19:18:14.884532+00:00", + "modified_at": "2026-01-09T19:51:05.316019+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "antonvanamersfoort", @@ -229,7 +229,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -278,7 +278,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.884528+00:00", + "inferred_at": "2026-01-09T19:51:05.316008+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-DEV_198X_NL-GE-APE_XXXX_ESTHER-WILDE.json b/data/person/ID_NL-OV-DEV_198X_NL-GE-APE_XXXX_ESTHER-WILDE.json index e91935a758..416972220d 100644 --- a/data/person/ID_NL-OV-DEV_198X_NL-GE-APE_XXXX_ESTHER-WILDE.json +++ b/data/person/ID_NL-OV-DEV_198X_NL-GE-APE_XXXX_ESTHER-WILDE.json @@ -171,7 +171,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/esther-de-wilde-5bb96231_20251214T103408Z.json" ], - "modified_at": "2026-01-09T19:18:14.042914+00:00", + "modified_at": "2026-01-09T19:50:58.554235+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "esther-de-wilde-5bb96231", @@ -200,7 +200,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -249,7 +249,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.042910+00:00", + "inferred_at": "2026-01-09T19:50:58.554225+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-DEV_199X_NL-GE-ZUT_XXXX_ARUN-PALIT.json b/data/person/ID_NL-OV-DEV_199X_NL-GE-ZUT_XXXX_ARUN-PALIT.json index 5b81e04667..0d7f1680e9 100644 --- a/data/person/ID_NL-OV-DEV_199X_NL-GE-ZUT_XXXX_ARUN-PALIT.json +++ b/data/person/ID_NL-OV-DEV_199X_NL-GE-ZUT_XXXX_ARUN-PALIT.json @@ -163,7 +163,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arun-palit-3373bb163_20251214T113051Z.json" ], - "modified_at": "2026-01-09T19:18:15.248968+00:00", + "modified_at": "2026-01-09T19:51:06.728522+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arun-palit-3373bb163", @@ -201,7 +201,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -250,7 +250,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.248962+00:00", + "inferred_at": "2026-01-09T19:51:06.728515+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-DEV_199X_NL-OV-DEV_XXXX_SEFA-ILBEYI.json b/data/person/ID_NL-OV-DEV_199X_NL-OV-DEV_XXXX_SEFA-ILBEYI.json index 490ad13301..fc0c2c0fae 100644 --- a/data/person/ID_NL-OV-DEV_199X_NL-OV-DEV_XXXX_SEFA-ILBEYI.json +++ b/data/person/ID_NL-OV-DEV_199X_NL-OV-DEV_XXXX_SEFA-ILBEYI.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sefa-bora-ilbeyi-8b345a204_20251214T103401Z.json" ], - "modified_at": "2026-01-09T19:18:14.698510+00:00", + "modified_at": "2026-01-09T19:51:03.370940+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sefa-bora-ilbeyi-8b345a204", @@ -146,7 +146,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.698507+00:00", + "inferred_at": "2026-01-09T19:51:03.370936+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_JENNY-HIGGINS.json b/data/person/ID_NL-OV-ENS_194X_AU-05-AP_XXXX_JENNY-HIGGINS.json similarity index 64% rename from data/person/ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_JENNY-HIGGINS.json rename to data/person/ID_NL-OV-ENS_194X_AU-05-AP_XXXX_JENNY-HIGGINS.json index f702c7d69f..a9c06608cb 100644 --- a/data/person/ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_JENNY-HIGGINS.json +++ b/data/person/ID_NL-OV-ENS_194X_AU-05-AP_XXXX_JENNY-HIGGINS.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_JENNY-HIGGINS", + "ppid": "ID_NL-OV-ENS_194X_AU-05-AP_XXXX_JENNY-HIGGINS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "194X", - "last_location": "XX-XX-XXX", + "last_location": "AU-05-AP", "last_date": "XXXX", "name_tokens": [ "JENNY", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "194X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Jenny Higgins", @@ -84,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jenny-higgins-275b8a32_20251214T104001Z.json" ], - "modified_at": "2026-01-09T19:18:13.934468+00:00", + "modified_at": "2026-01-09T19:51:07.040920+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jenny-higgins-275b8a32", @@ -106,6 +108,26 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_JENNY-HIGGINS", + "new_ppid": "ID_NL-OV-ENS_194X_XX-XX-XXX_XXXX_JENNY-HIGGINS", + "changed_at": "2026-01-09T19:46:59.342743+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] + }, + { + "previous_ppid": "ID_NL-OV-ENS_194X_XX-XX-XXX_XXXX_JENNY-HIGGINS", + "new_ppid": "ID_NL-OV-ENS_194X_AU-05-AP_XXXX_JENNY-HIGGINS", + "changed_at": "2026-01-09T19:51:07.040918+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -114,7 +136,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +177,60 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.934426+00:00", + "inferred_at": "2026-01-09T19:51:07.035688+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Australia Plains", + "formatted": "AU-05-AP", + "country_code": "AU", + "region_code": "05", + "settlement_code": "AP", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Australia (AU)", + "result": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-05-AP" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + }, + "inferred_at": "2026-01-09T19:51:07.040912+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_194X_NL-GE-DST_XXXX_JAN-BECKHOVEN.json b/data/person/ID_NL-OV-ENS_194X_NL-GE-DST_XXXX_JAN-BECKHOVEN.json similarity index 74% rename from data/person/ID_XX-XX-XXX_194X_NL-GE-DST_XXXX_JAN-BECKHOVEN.json rename to data/person/ID_NL-OV-ENS_194X_NL-GE-DST_XXXX_JAN-BECKHOVEN.json index b42e7212f3..28d7360aef 100644 --- a/data/person/ID_XX-XX-XXX_194X_NL-GE-DST_XXXX_JAN-BECKHOVEN.json +++ b/data/person/ID_NL-OV-ENS_194X_NL-GE-DST_XXXX_JAN-BECKHOVEN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_194X_NL-GE-DST_XXXX_JAN-BECKHOVEN", + "ppid": "ID_NL-OV-ENS_194X_NL-GE-DST_XXXX_JAN-BECKHOVEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "194X", "last_location": "NL-GE-DST", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "195X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Jan van Beckhoven", @@ -194,7 +195,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-van-beckhoven-82405687_20251214T110602Z.json" ], - "modified_at": "2026-01-09T19:18:13.820352+00:00", + "modified_at": "2026-01-09T19:50:56.627907+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-van-beckhoven-82405687", @@ -208,6 +209,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_194X_NL-GE-DST_XXXX_JAN-BECKHOVEN", + "new_ppid": "ID_NL-OV-ENS_194X_NL-GE-DST_XXXX_JAN-BECKHOVEN", + "changed_at": "2026-01-09T19:50:56.627905+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -216,7 +227,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -257,7 +268,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.820248+00:00", + "inferred_at": "2026-01-09T19:50:56.624182+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Krauthammer", + "date_range": "1996 - 1997 • 1 year", + "degree": "Managementtraining" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Krauthammer", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:50:56.627894+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-NH-DIL_XXXX_EDWIN-HOEK.json b/data/person/ID_NL-OV-ENS_195X_NL-NH-DIL_XXXX_EDWIN-HOEK.json similarity index 72% rename from data/person/ID_XX-XX-XXX_195X_NL-NH-DIL_XXXX_EDWIN-HOEK.json rename to data/person/ID_NL-OV-ENS_195X_NL-NH-DIL_XXXX_EDWIN-HOEK.json index 7fa8c524a0..ec0b5b0cbb 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-NH-DIL_XXXX_EDWIN-HOEK.json +++ b/data/person/ID_NL-OV-ENS_195X_NL-NH-DIL_XXXX_EDWIN-HOEK.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_195X_NL-NH-DIL_XXXX_EDWIN-HOEK", + "ppid": "ID_NL-OV-ENS_195X_NL-NH-DIL_XXXX_EDWIN-HOEK", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "195X", "last_location": "NL-NH-DIL", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Edwin van Hoek", @@ -148,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/edwin-van-hoek-621a06b1_20251214T110227Z.json" ], - "modified_at": "2026-01-09T19:18:15.415402+00:00", + "modified_at": "2026-01-09T19:50:53.856728+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "edwin-van-hoek-621a06b1", @@ -171,6 +172,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_195X_NL-NH-DIL_XXXX_EDWIN-HOEK", + "new_ppid": "ID_NL-OV-ENS_195X_NL-NH-DIL_XXXX_EDWIN-HOEK", + "changed_at": "2026-01-09T19:50:53.856726+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -185,7 +196,7 @@ "primary_rationale": "1957 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +245,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1957 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.411568+00:00", + "inferred_at": "2026-01-09T19:50:53.853133+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "MTS Ir. H. Buterschool, Zaandam", + "date_range": "1984 - 1990 • 6 years", + "degree": "Meet- en Regeltechniek" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "MTS Ir. H. Buterschool, Zaandam", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:50:53.856715+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ENS_195X_NL-OV-ENS_XXXX_VISHWAS-GADGIL.json b/data/person/ID_NL-OV-ENS_195X_NL-OV-ENS_XXXX_VISHWAS-GADGIL.json index 03d1cb27a1..29710e445b 100644 --- a/data/person/ID_NL-OV-ENS_195X_NL-OV-ENS_XXXX_VISHWAS-GADGIL.json +++ b/data/person/ID_NL-OV-ENS_195X_NL-OV-ENS_XXXX_VISHWAS-GADGIL.json @@ -140,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vishwas-gadgil-6906249_20251214T110819Z.json" ], - "modified_at": "2026-01-09T19:18:17.330923+00:00", + "modified_at": "2026-01-09T19:51:18.545825+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vishwas-gadgil-6906249", @@ -178,7 +178,7 @@ "primary_rationale": "1950 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1950 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:17.330916+00:00", + "inferred_at": "2026-01-09T19:51:18.545818+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_HENK-LINDHOUT.json b/data/person/ID_NL-OV-ENS_195X_XX-XX-XXX_XXXX_HENK-LINDHOUT.json similarity index 65% rename from data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_HENK-LINDHOUT.json rename to data/person/ID_NL-OV-ENS_195X_XX-XX-XXX_XXXX_HENK-LINDHOUT.json index cf77f49264..276f4c9091 100644 --- a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_HENK-LINDHOUT.json +++ b/data/person/ID_NL-OV-ENS_195X_XX-XX-XXX_XXXX_HENK-LINDHOUT.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_HENK-LINDHOUT", + "ppid": "ID_NL-OV-ENS_195X_XX-XX-XXX_XXXX_HENK-LINDHOUT", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "195X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Henk Lindhout", @@ -104,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henklindhout1_20251214T113030Z.json" ], - "modified_at": "2026-01-09T19:18:16.146937+00:00", + "modified_at": "2026-01-09T19:50:55.143548+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henklindhout1", @@ -126,6 +127,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_HENK-LINDHOUT", + "new_ppid": "ID_NL-OV-ENS_195X_XX-XX-XXX_XXXX_HENK-LINDHOUT", + "changed_at": "2026-01-09T19:50:55.143543+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -134,7 +145,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +186,77 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.144688+00:00", + "inferred_at": "2026-01-09T19:50:55.138398+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Grafisch Lyceum Utrecht", + "date_range": "1977 - 1980 • 3 years", + "degree": "Diploma, Reproduktiefotograaf A" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Grafisch Lyceum Utrecht", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:50:55.141036+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JANE-HAMILTON.json b/data/person/ID_NL-OV-ENS_196X_GB-EN-LON_XXXX_JANE-HAMILTON.json similarity index 78% rename from data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JANE-HAMILTON.json rename to data/person/ID_NL-OV-ENS_196X_GB-EN-LON_XXXX_JANE-HAMILTON.json index 7879a160d9..58770d54c5 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JANE-HAMILTON.json +++ b/data/person/ID_NL-OV-ENS_196X_GB-EN-LON_XXXX_JANE-HAMILTON.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JANE-HAMILTON", + "ppid": "ID_NL-OV-ENS_196X_GB-EN-LON_XXXX_JANE-HAMILTON", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "196X", - "last_location": "XX-XX-XXX", + "last_location": "GB-EN-LON", "last_date": "XXXX", "name_tokens": [ "JANE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "195X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Jane Hamilton", @@ -241,7 +243,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jane-hamilton-5519498a_20251214T104018Z.json" ], - "modified_at": "2026-01-09T19:18:13.646918+00:00", + "modified_at": "2026-01-09T19:50:55.366481+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jane-hamilton-5519498a", @@ -254,6 +256,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JANE-HAMILTON", + "new_ppid": "ID_NL-OV-ENS_196X_GB-EN-LON_XXXX_JANE-HAMILTON", + "changed_at": "2026-01-09T19:50:55.366478+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -268,7 +281,7 @@ "primary_rationale": "1961 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -317,7 +330,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1961 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.646857+00:00", + "inferred_at": "2026-01-09T19:50:55.353455+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of New South Wales", + "date_range": "1983 - 1990 • 7 years", + "degree": "Bachelor of Commerce (B.Com.), Marketing, Merit" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of New South Wales", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:50:55.358166+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "London", + "formatted": "GB-EN-LON", + "country_code": "GB", + "region_code": "EN", + "settlement_code": "LON", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "London, England, United Kingdom (GB)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "London, England, United Kingdom (GB)", + "result": { + "geonames_id": 2643743, + "geonames_name": "London", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPLC", + "latitude": 51.50853, + "longitude": -0.12574 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "GB-EN-LON" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2643743, + "geonames_name": "London", + "admin1_code": "ENG", + "admin1_name": "England", + "feature_code": "PPLC", + "latitude": 51.50853, + "longitude": -0.12574 + }, + "inferred_at": "2026-01-09T19:50:55.366465+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-GE-WAG_XXXX_ZHANGUO-BAI.json b/data/person/ID_NL-OV-ENS_196X_NL-GE-WAG_XXXX_ZHANGUO-BAI.json similarity index 72% rename from data/person/ID_XX-XX-XXX_196X_NL-GE-WAG_XXXX_ZHANGUO-BAI.json rename to data/person/ID_NL-OV-ENS_196X_NL-GE-WAG_XXXX_ZHANGUO-BAI.json index 585b3a9486..11013126f3 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-GE-WAG_XXXX_ZHANGUO-BAI.json +++ b/data/person/ID_NL-OV-ENS_196X_NL-GE-WAG_XXXX_ZHANGUO-BAI.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_NL-GE-WAG_XXXX_ZHANGUO-BAI", + "ppid": "ID_NL-OV-ENS_196X_NL-GE-WAG_XXXX_ZHANGUO-BAI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "196X", "last_location": "NL-GE-WAG", "last_date": "XXXX", @@ -12,7 +12,8 @@ "BAI" ], "first_date_source": "inferred_birth_decade", - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Zhanguo Bai", @@ -130,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/zhanguo-bai-6159681bb_20251214T104204Z.json" ], - "modified_at": "2026-01-09T19:18:13.716972+00:00", + "modified_at": "2026-01-09T19:50:55.896284+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "zhanguo-bai-6159681bb", @@ -144,6 +145,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_NL-GE-WAG_XXXX_ZHANGUO-BAI", + "new_ppid": "ID_NL-OV-ENS_196X_NL-GE-WAG_XXXX_ZHANGUO-BAI", + "changed_at": "2026-01-09T19:50:55.896282+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -152,7 +163,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +204,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.715074+00:00", + "inferred_at": "2026-01-09T19:50:55.894103+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Institute of Soil & Water Conservation, Chinese Academy of Sciences", + "date_range": "1990 - 1993 • 3 years", + "degree": "Doctor's Degree, Soil Sciences" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Institute of Soil & Water Conservation, Chinese Academy of Sciences", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:50:55.896274+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-OAD_XXXX_ISKANDER-BREEBAART.json b/data/person/ID_NL-OV-ENS_196X_NL-NH-OAD_XXXX_ISKANDER-BREEBAART.json similarity index 61% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-OAD_XXXX_ISKANDER-BREEBAART.json rename to data/person/ID_NL-OV-ENS_196X_NL-NH-OAD_XXXX_ISKANDER-BREEBAART.json index 5a1df6bc36..3e8f104ae8 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-OAD_XXXX_ISKANDER-BREEBAART.json +++ b/data/person/ID_NL-OV-ENS_196X_NL-NH-OAD_XXXX_ISKANDER-BREEBAART.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_NL-NH-OAD_XXXX_ISKANDER-BREEBAART", + "ppid": "ID_NL-OV-ENS_196X_NL-NH-OAD_XXXX_ISKANDER-BREEBAART", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "196X", "last_location": "NL-NH-OAD", "last_date": "XXXX", @@ -12,7 +12,8 @@ "BREEBAART" ], "last_location_source": "inferred_current_settlement", - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Iskander Breebaart", @@ -77,7 +78,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/iskander-breebaart-73b964b4_20251214T111915Z.json" ], - "modified_at": "2026-01-09T19:18:17.795858+00:00", + "modified_at": "2026-01-09T19:51:28.582023+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "iskander-breebaart-73b964b4", @@ -100,6 +101,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_NL-NH-OAD_XXXX_ISKANDER-BREEBAART", + "new_ppid": "ID_NL-OV-ENS_196X_NL-NH-OAD_XXXX_ISKANDER-BREEBAART", + "changed_at": "2026-01-09T19:51:28.582021+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -108,7 +119,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -149,7 +160,77 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.795825+00:00", + "inferred_at": "2026-01-09T19:51:28.579905+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Hout en Meubilerings College Amsterdam", + "date_range": "1985 - 1990 • 5 years", + "degree": "Meubelmaken en meubelrestauratie" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Hout en Meubilerings College Amsterdam", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:28.582014+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_HUIBERT-CRIJNS.json b/data/person/ID_NL-OV-ENS_196X_NL-ZH-TH_XXXX_HUIBERT-CRIJNS.json similarity index 76% rename from data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_HUIBERT-CRIJNS.json rename to data/person/ID_NL-OV-ENS_196X_NL-ZH-TH_XXXX_HUIBERT-CRIJNS.json index 963981c2d9..b42805b219 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_HUIBERT-CRIJNS.json +++ b/data/person/ID_NL-OV-ENS_196X_NL-ZH-TH_XXXX_HUIBERT-CRIJNS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_HUIBERT-CRIJNS", + "ppid": "ID_NL-OV-ENS_196X_NL-ZH-TH_XXXX_HUIBERT-CRIJNS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "196X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Huibert Crijns", @@ -124,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/huibert-crijns-1273519_20251214T113239Z.json" ], - "modified_at": "2026-01-09T19:18:18.938228+00:00", + "modified_at": "2026-01-09T19:51:18.334018+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "huibert-crijns-1273519", @@ -147,6 +148,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_HUIBERT-CRIJNS", + "new_ppid": "ID_NL-OV-ENS_196X_NL-ZH-TH_XXXX_HUIBERT-CRIJNS", + "changed_at": "2026-01-09T19:51:18.334015+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -161,7 +172,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +221,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:18.937979+00:00", + "inferred_at": "2026-01-09T19:51:18.330142+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Utrecht", + "date_range": "1990 - 1996 • 6 years", + "degree": "Master of Arts (drs.), Geschiedenis" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Utrecht", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:18.334001+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_FRANS-BEDEM.json b/data/person/ID_NL-OV-ENS_196X_XX-XX-XXX_XXXX_FRANS-BEDEM.json similarity index 63% rename from data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_FRANS-BEDEM.json rename to data/person/ID_NL-OV-ENS_196X_XX-XX-XXX_XXXX_FRANS-BEDEM.json index 760bdb8943..5053c002d2 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_FRANS-BEDEM.json +++ b/data/person/ID_NL-OV-ENS_196X_XX-XX-XXX_XXXX_FRANS-BEDEM.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_FRANS-BEDEM", + "ppid": "ID_NL-OV-ENS_196X_XX-XX-XXX_XXXX_FRANS-BEDEM", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "196X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Frans Van Den Bedem", @@ -99,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frans-van-den-bedem-a4511312_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:13.687806+00:00", + "modified_at": "2026-01-09T19:51:28.843799+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frans-van-den-bedem-a4511312", @@ -121,6 +122,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_FRANS-BEDEM", + "new_ppid": "ID_NL-OV-ENS_196X_XX-XX-XXX_XXXX_FRANS-BEDEM", + "changed_at": "2026-01-09T19:51:28.843797+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -129,7 +140,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +181,77 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.685560+00:00", + "inferred_at": "2026-01-09T19:51:28.839935+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Utrecht", + "date_range": "1988 - 1992", + "degree": "doctoraal, Geschiedenis" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Utrecht", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:28.841972+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SCOTT-MCKINNON.json b/data/person/ID_NL-OV-ENS_197X_AU-02-PAR_XXXX_SCOTT-MCKINNON.json similarity index 67% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SCOTT-MCKINNON.json rename to data/person/ID_NL-OV-ENS_197X_AU-02-PAR_XXXX_SCOTT-MCKINNON.json index 19948433d7..f42aa70ed9 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SCOTT-MCKINNON.json +++ b/data/person/ID_NL-OV-ENS_197X_AU-02-PAR_XXXX_SCOTT-MCKINNON.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SCOTT-MCKINNON", + "ppid": "ID_NL-OV-ENS_197X_AU-02-PAR_XXXX_SCOTT-MCKINNON", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-02-PAR", "last_date": "XXXX", "name_tokens": [ "SCOTT", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Scott McKinnon", @@ -148,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/scott-mckinnon-1338a383_20251214T103825Z.json" ], - "modified_at": "2026-01-09T19:18:14.868657+00:00", + "modified_at": "2026-01-09T19:51:03.421350+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "scott-mckinnon-1338a383", @@ -170,6 +172,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SCOTT-MCKINNON", + "new_ppid": "ID_NL-OV-ENS_197X_AU-02-PAR_XXXX_SCOTT-MCKINNON", + "changed_at": "2026-01-09T19:51:03.421347+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -184,7 +197,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +246,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.868592+00:00", + "inferred_at": "2026-01-09T19:51:03.410842+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of New South Wales", + "date_range": "1994 - 1994", + "degree": "Graduate Diploma in Information Management" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of New South Wales", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:03.413686+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Parkes", + "formatted": "AU-02-PAR", + "country_code": "AU", + "region_code": "02", + "settlement_code": "PAR", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Parkes, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Parkes, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2153778, + "geonames_name": "Parkes", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPL", + "latitude": -33.1372, + "longitude": 148.1759 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-02-PAR" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2153778, + "geonames_name": "Parkes", + "admin1_code": "02", + "admin1_name": "New South Wales", + "feature_code": "PPL", + "latitude": -33.1372, + "longitude": 148.1759 + }, + "inferred_at": "2026-01-09T19:51:03.421327+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MOCHAMAD-ACHIR.json b/data/person/ID_NL-OV-ENS_197X_ID-04-JAK_XXXX_MOCHAMAD-ACHIR.json similarity index 77% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MOCHAMAD-ACHIR.json rename to data/person/ID_NL-OV-ENS_197X_ID-04-JAK_XXXX_MOCHAMAD-ACHIR.json index b593240314..d86be33e95 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MOCHAMAD-ACHIR.json +++ b/data/person/ID_NL-OV-ENS_197X_ID-04-JAK_XXXX_MOCHAMAD-ACHIR.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MOCHAMAD-ACHIR", + "ppid": "ID_NL-OV-ENS_197X_ID-04-JAK_XXXX_MOCHAMAD-ACHIR", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "MOCHAMAD", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Mochamad Achir", @@ -259,7 +261,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mochamad-achir-76216642_20251214T112008Z.json" ], - "modified_at": "2026-01-09T19:18:13.702047+00:00", + "modified_at": "2026-01-09T19:50:55.773398+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mochamad-achir-76216642", @@ -272,6 +274,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MOCHAMAD-ACHIR", + "new_ppid": "ID_NL-OV-ENS_197X_ID-04-JAK_XXXX_MOCHAMAD-ACHIR", + "changed_at": "2026-01-09T19:50:55.773395+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -286,7 +299,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -335,7 +348,140 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.701952+00:00", + "inferred_at": "2026-01-09T19:50:55.563022+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Institut Teknologi Bandung", + "date_range": "1999 - 2005 • 6 years", + "degree": "Bachelor of Science (B.Sc.), Mathematics" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Institut Teknologi Bandung", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:50:55.575817+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta Metropolitan Area (ID)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "SEA Today", + "title": "Chief Presenter News Manager", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:55.773372+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ENS_197X_NL-DR-BEI_XXXX_JURJEN-ZOMERMAN.json b/data/person/ID_NL-OV-ENS_197X_NL-DR-BEI_XXXX_JURJEN-ZOMERMAN.json index 11e7790a65..15720183d0 100644 --- a/data/person/ID_NL-OV-ENS_197X_NL-DR-BEI_XXXX_JURJEN-ZOMERMAN.json +++ b/data/person/ID_NL-OV-ENS_197X_NL-DR-BEI_XXXX_JURJEN-ZOMERMAN.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/zomerman_20251214T110829Z.json" ], - "modified_at": "2026-01-09T19:18:13.318521+00:00", + "modified_at": "2026-01-09T19:51:18.385386+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "zomerman", @@ -170,7 +170,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.318515+00:00", + "inferred_at": "2026-01-09T19:51:18.385381+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_NICOLETA-NASTASE.json b/data/person/ID_NL-OV-ENS_197X_NL-ZH-TH_XXXX_NICOLETA-NASTASE.json similarity index 77% rename from data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_NICOLETA-NASTASE.json rename to data/person/ID_NL-OV-ENS_197X_NL-ZH-TH_XXXX_NICOLETA-NASTASE.json index 46a51769fc..1a7cd789fb 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_NICOLETA-NASTASE.json +++ b/data/person/ID_NL-OV-ENS_197X_NL-ZH-TH_XXXX_NICOLETA-NASTASE.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_NICOLETA-NASTASE", + "ppid": "ID_NL-OV-ENS_197X_NL-ZH-TH_XXXX_NICOLETA-NASTASE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "197X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Nicoleta Nastase", @@ -147,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicoletanastase_20251214T104110Z.json" ], - "modified_at": "2026-01-09T19:18:18.978893+00:00", + "modified_at": "2026-01-09T19:51:03.560623+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicoletanastase", @@ -170,6 +171,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_NICOLETA-NASTASE", + "new_ppid": "ID_NL-OV-ENS_197X_NL-ZH-TH_XXXX_NICOLETA-NASTASE", + "changed_at": "2026-01-09T19:51:03.560620+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -184,7 +195,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +244,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.978859+00:00", + "inferred_at": "2026-01-09T19:51:03.558433+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Twente", + "date_range": "1999 - 2000 • 1 year", + "degree": "MSc, Applied Physics/Biomedical Techniques" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Twente", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:03.560609+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AURELIE-MARTIN.json b/data/person/ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_AURELIE-MARTIN.json similarity index 74% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AURELIE-MARTIN.json rename to data/person/ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_AURELIE-MARTIN.json index 7fd6f2160d..2b5a2fe5b3 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AURELIE-MARTIN.json +++ b/data/person/ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_AURELIE-MARTIN.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AURELIE-MARTIN", + "ppid": "ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_AURELIE-MARTIN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "AURELIE", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Aurélie Martin", @@ -162,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aureliemartin7_20251214T103958Z.json" ], - "modified_at": "2026-01-09T19:18:11.459960+00:00", + "modified_at": "2026-01-09T19:51:20.502695+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aureliemartin7", @@ -175,6 +177,26 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AURELIE-MARTIN", + "new_ppid": "ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_AURELIE-MARTIN", + "changed_at": "2026-01-09T19:46:59.152881+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] + }, + { + "previous_ppid": "ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_AURELIE-MARTIN", + "new_ppid": "ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_AURELIE-MARTIN", + "changed_at": "2026-01-09T19:51:20.502693+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -189,7 +211,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +260,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.459873+00:00", + "inferred_at": "2026-01-09T19:51:20.436563+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:20.502676+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHRIS-MCPARTLAND.json b/data/person/ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_CHRIS-MCPARTLAND.json similarity index 60% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHRIS-MCPARTLAND.json rename to data/person/ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_CHRIS-MCPARTLAND.json index 54c1417715..6da0bce942 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHRIS-MCPARTLAND.json +++ b/data/person/ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_CHRIS-MCPARTLAND.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHRIS-MCPARTLAND", + "ppid": "ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_CHRIS-MCPARTLAND", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "CHRIS", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Chris McPartland", @@ -132,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chris-mcpartland-7635b4a4_20251214T103927Z.json" ], - "modified_at": "2026-01-09T19:18:15.378695+00:00", + "modified_at": "2026-01-09T19:51:10.843834+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "chris-mcpartland-7635b4a4", @@ -154,6 +156,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHRIS-MCPARTLAND", + "new_ppid": "ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_CHRIS-MCPARTLAND", + "changed_at": "2026-01-09T19:51:10.843832+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -168,7 +181,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +230,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.378653+00:00", + "inferred_at": "2026-01-09T19:51:10.836619+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Canberra Institute of Technology", + "date_range": "2005 - 2007 • 2 years", + "degree": "Software development" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Canberra Institute of Technology", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:10.838958+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:10.843823+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_COLLEEN-AALIA.json b/data/person/ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_COLLEEN-AALIA.json similarity index 77% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_COLLEEN-AALIA.json rename to data/person/ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_COLLEEN-AALIA.json index 043a90097b..46a4572eae 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_COLLEEN-AALIA.json +++ b/data/person/ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_COLLEEN-AALIA.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_COLLEEN-AALIA", + "ppid": "ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_COLLEEN-AALIA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "COLLEEN", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Colleen Hayes AALIA", @@ -203,7 +205,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/colleen-hayes-aalia-cp-82808956_20251214T103821Z.json" ], - "modified_at": "2026-01-09T19:18:15.596194+00:00", + "modified_at": "2026-01-09T19:51:22.950440+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "colleen-hayes-aalia-cp-82808956", @@ -225,6 +227,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_COLLEEN-AALIA", + "new_ppid": "ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_COLLEEN-AALIA", + "changed_at": "2026-01-09T19:51:22.950437+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -239,7 +252,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -288,7 +301,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.596112+00:00", + "inferred_at": "2026-01-09T19:51:22.932262+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Southern Queensland", + "date_range": "2011 - 2014 • 3 years", + "degree": "Bachelor of Business/Bachelor of Arts, Management & Leadership/International Relations" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Southern Queensland", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:22.945362+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:22.950422+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DANIEL-S.json b/data/person/ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_DANIEL-S.json similarity index 53% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DANIEL-S.json rename to data/person/ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_DANIEL-S.json index 46bfeb60ce..41a5a2c6bd 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DANIEL-S.json +++ b/data/person/ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_DANIEL-S.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DANIEL-S", + "ppid": "ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_DANIEL-S", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "DANIEL", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Daniel S.", @@ -101,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daniel-s-21910334_20251214T103813Z.json" ], - "modified_at": "2026-01-09T19:18:13.015894+00:00", + "modified_at": "2026-01-09T19:50:55.377352+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daniel-s-21910334", @@ -123,6 +125,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DANIEL-S", + "new_ppid": "ID_NL-OV-ENS_198X_AU-01-CAN_XXXX_DANIEL-S", + "changed_at": "2026-01-09T19:50:55.377350+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -131,7 +144,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +185,130 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.015866+00:00", + "inferred_at": "2026-01-09T19:50:55.370161+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Canberra Institute of Technology", + "date_range": "2006 - 2008 • 2 years", + "degree": "Advanced Diploma of Design - Digital Media" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Canberra Institute of Technology", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:50:55.372310+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:55.377341+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ENS_198X_NL-GE-ELS_XXXX_PATRICIA-HOYTINKROUBOS.json b/data/person/ID_NL-OV-ENS_198X_NL-GE-ELS_XXXX_PATRICIA-HOYTINKROUBOS.json index 72b03aee06..ca1d56e5d4 100644 --- a/data/person/ID_NL-OV-ENS_198X_NL-GE-ELS_XXXX_PATRICIA-HOYTINKROUBOS.json +++ b/data/person/ID_NL-OV-ENS_198X_NL-GE-ELS_XXXX_PATRICIA-HOYTINKROUBOS.json @@ -196,7 +196,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/patricia-hoytink-roubos-768a766_20251214T110615Z.json" ], - "modified_at": "2026-01-09T19:18:16.858807+00:00", + "modified_at": "2026-01-09T19:51:22.324090+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "patricia-hoytink-roubos-768a766", @@ -225,7 +225,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -274,7 +274,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.858803+00:00", + "inferred_at": "2026-01-09T19:51:22.324085+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ENS_198X_NL-NB-EIN_XXXX_OLGA-TERESHCHENKO.json b/data/person/ID_NL-OV-ENS_198X_NL-NB-EIN_XXXX_OLGA-TERESHCHENKO.json index 648e94589f..a476f6c2eb 100644 --- a/data/person/ID_NL-OV-ENS_198X_NL-NB-EIN_XXXX_OLGA-TERESHCHENKO.json +++ b/data/person/ID_NL-OV-ENS_198X_NL-NB-EIN_XXXX_OLGA-TERESHCHENKO.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/olga-tereshchenko-5a944025_20251214T111007Z.json" ], - "modified_at": "2026-01-09T19:18:15.427439+00:00", + "modified_at": "2026-01-09T19:51:10.854111+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "olga-tereshchenko-5a944025", @@ -178,7 +178,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.427435+00:00", + "inferred_at": "2026-01-09T19:51:10.854102+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_OLA-ALLAH.json b/data/person/ID_NL-OV-ENS_198X_NL-NB-VEL_XXXX_OLA-ALLAH.json similarity index 77% rename from data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_OLA-ALLAH.json rename to data/person/ID_NL-OV-ENS_198X_NL-NB-VEL_XXXX_OLA-ALLAH.json index 75553cb20e..ca6e4cd41e 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_OLA-ALLAH.json +++ b/data/person/ID_NL-OV-ENS_198X_NL-NB-VEL_XXXX_OLA-ALLAH.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_OLA-ALLAH", + "ppid": "ID_NL-OV-ENS_198X_NL-NB-VEL_XXXX_OLA-ALLAH", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "198X", "last_location": "NL-NB-VEL", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Ola Abd Allah", @@ -183,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/olaabdallah_20251214T111229Z.json" ], - "modified_at": "2026-01-09T19:18:16.637796+00:00", + "modified_at": "2026-01-09T19:51:21.110504+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "olaabdallah", @@ -197,6 +198,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_OLA-ALLAH", + "new_ppid": "ID_NL-OV-ENS_198X_NL-NB-VEL_XXXX_OLA-ALLAH", + "changed_at": "2026-01-09T19:51:21.110502+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -211,7 +222,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -260,7 +271,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.634111+00:00", + "inferred_at": "2026-01-09T19:51:21.108594+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "ITI (Information Technology Institute)", + "date_range": "2009 - 2010 • 1 year", + "degree": "Diploma, Embedded Systems" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "ITI (Information Technology Institute)", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:21.110497+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ENS_198X_NL-NB-VEL_XXXX_SAEED-KHAMSEH.json b/data/person/ID_NL-OV-ENS_198X_NL-NB-VEL_XXXX_SAEED-KHAMSEH.json index d4dd664c49..1b2ce6e21b 100644 --- a/data/person/ID_NL-OV-ENS_198X_NL-NB-VEL_XXXX_SAEED-KHAMSEH.json +++ b/data/person/ID_NL-OV-ENS_198X_NL-NB-VEL_XXXX_SAEED-KHAMSEH.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saeed-khamseh-671b7553_20251214T111242Z.json" ], - "modified_at": "2026-01-09T19:18:15.173387+00:00", + "modified_at": "2026-01-09T19:51:06.990924+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saeed-khamseh-671b7553", @@ -172,7 +172,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.173384+00:00", + "inferred_at": "2026-01-09T19:51:06.990918+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ENS_198X_NL-NH-AMS_XXXX_MARISSA-OTTEN.json b/data/person/ID_NL-OV-ENS_198X_NL-NH-AMS_XXXX_MARISSA-OTTEN.json index f721e0c757..1a5c896a2b 100644 --- a/data/person/ID_NL-OV-ENS_198X_NL-NH-AMS_XXXX_MARISSA-OTTEN.json +++ b/data/person/ID_NL-OV-ENS_198X_NL-NH-AMS_XXXX_MARISSA-OTTEN.json @@ -216,7 +216,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marissaotten_20251214T110034Z.json" ], - "modified_at": "2026-01-09T19:18:16.395216+00:00", + "modified_at": "2026-01-09T19:51:06.643431+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marissaotten", @@ -254,7 +254,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -303,7 +303,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.395210+00:00", + "inferred_at": "2026-01-09T19:51:06.643425+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ENS_198X_NL-NH-HIL_XXXX_JOEP-CHRISTENHUSZ.json b/data/person/ID_NL-OV-ENS_198X_NL-NH-HIL_XXXX_JOEP-CHRISTENHUSZ.json index 5b2d1b73d8..683ce6998d 100644 --- a/data/person/ID_NL-OV-ENS_198X_NL-NH-HIL_XXXX_JOEP-CHRISTENHUSZ.json +++ b/data/person/ID_NL-OV-ENS_198X_NL-NH-HIL_XXXX_JOEP-CHRISTENHUSZ.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joep-christenhusz-2999112b5_20251214T110752Z.json" ], - "modified_at": "2026-01-09T19:18:15.152824+00:00", + "modified_at": "2026-01-09T19:51:06.926373+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joep-christenhusz-2999112b5", @@ -171,7 +171,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.152819+00:00", + "inferred_at": "2026-01-09T19:51:06.926364+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-HOO_XXXX_KEVANIA-VRIESMENIG.json b/data/person/ID_NL-OV-ENS_198X_NL-NH-HOO_XXXX_KEVANIA-VRIESMENIG.json similarity index 75% rename from data/person/ID_XX-XX-XXX_198X_NL-NH-HOO_XXXX_KEVANIA-VRIESMENIG.json rename to data/person/ID_NL-OV-ENS_198X_NL-NH-HOO_XXXX_KEVANIA-VRIESMENIG.json index f829919dbf..8b0a4873b5 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-HOO_XXXX_KEVANIA-VRIESMENIG.json +++ b/data/person/ID_NL-OV-ENS_198X_NL-NH-HOO_XXXX_KEVANIA-VRIESMENIG.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-NH-HOO_XXXX_KEVANIA-VRIESMENIG", + "ppid": "ID_NL-OV-ENS_198X_NL-NH-HOO_XXXX_KEVANIA-VRIESMENIG", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "198X", "last_location": "NL-NH-HOO", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Kevania de Vries-Menig", @@ -166,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kevania-menig_20251214T113119Z.json" ], - "modified_at": "2026-01-09T19:18:13.512049+00:00", + "modified_at": "2026-01-09T19:50:53.001215+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kevania-menig", @@ -189,6 +190,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-NH-HOO_XXXX_KEVANIA-VRIESMENIG", + "new_ppid": "ID_NL-OV-ENS_198X_NL-NH-HOO_XXXX_KEVANIA-VRIESMENIG", + "changed_at": "2026-01-09T19:50:53.001213+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -203,7 +214,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +263,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.511983+00:00", + "inferred_at": "2026-01-09T19:50:52.999253+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Utrecht", + "date_range": "2009 - 2010 • 1 year", + "degree": "Master of Arts - MA" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Utrecht", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:50:53.001207+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-OV-BOR_XXXX_NIELS-LEUTEREN.json b/data/person/ID_NL-OV-ENS_198X_NL-OV-BOR_XXXX_NIELS-LEUTEREN.json similarity index 80% rename from data/person/ID_XX-XX-XXX_198X_NL-OV-BOR_XXXX_NIELS-LEUTEREN.json rename to data/person/ID_NL-OV-ENS_198X_NL-OV-BOR_XXXX_NIELS-LEUTEREN.json index 75886eeca7..e82cb662c5 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-OV-BOR_XXXX_NIELS-LEUTEREN.json +++ b/data/person/ID_NL-OV-ENS_198X_NL-OV-BOR_XXXX_NIELS-LEUTEREN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-OV-BOR_XXXX_NIELS-LEUTEREN", + "ppid": "ID_NL-OV-ENS_198X_NL-OV-BOR_XXXX_NIELS-LEUTEREN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "198X", "last_location": "NL-OV-BOR", "last_date": "XXXX", @@ -15,7 +15,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Niels van Leuteren", @@ -235,7 +236,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nielsvanleuteren_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:16.466863+00:00", + "modified_at": "2026-01-09T19:51:18.542132+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nielsvanleuteren", @@ -257,6 +258,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-OV-BOR_XXXX_NIELS-LEUTEREN", + "new_ppid": "ID_NL-OV-ENS_198X_NL-OV-BOR_XXXX_NIELS-LEUTEREN", + "changed_at": "2026-01-09T19:51:18.542130+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -271,7 +282,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -320,7 +331,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.466834+00:00", + "inferred_at": "2026-01-09T19:51:18.539861+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Universiteit Twente", + "date_range": "2012 - 2014 • 2 years", + "degree": "Master of Science (MSc)" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Universiteit Twente", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:18.542122+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GIJS-WILLEMS.json b/data/person/ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_GIJS-WILLEMS.json similarity index 65% rename from data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GIJS-WILLEMS.json rename to data/person/ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_GIJS-WILLEMS.json index 6201e78003..f0bad39c3a 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GIJS-WILLEMS.json +++ b/data/person/ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_GIJS-WILLEMS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GIJS-WILLEMS", + "ppid": "ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_GIJS-WILLEMS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "198X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Gijs Willems", @@ -116,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/willemsgijs_20251214T112619Z.json" ], - "modified_at": "2026-01-09T19:18:16.189916+00:00", + "modified_at": "2026-01-09T19:51:18.278055+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "willemsgijs", @@ -130,6 +131,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GIJS-WILLEMS", + "new_ppid": "ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_GIJS-WILLEMS", + "changed_at": "2026-01-09T19:51:18.278053+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -138,7 +149,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +190,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.188014+00:00", + "inferred_at": "2026-01-09T19:51:18.275938+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Twente", + "date_range": "2002 - 2005 • 3 years", + "degree": "Toegepaste Communicatie Wetenschappen" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Twente", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:18.278046+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GIULIA-VIVO.json b/data/person/ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_GIULIA-VIVO.json similarity index 66% rename from data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GIULIA-VIVO.json rename to data/person/ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_GIULIA-VIVO.json index 731e2d2446..5dca626682 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GIULIA-VIVO.json +++ b/data/person/ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_GIULIA-VIVO.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GIULIA-VIVO", + "ppid": "ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_GIULIA-VIVO", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "198X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Giulia Sara de Vivo", @@ -99,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/giulia-sara-de-vivo-64abb546_20251214T111811Z.json" ], - "modified_at": "2026-01-09T19:18:13.417832+00:00", + "modified_at": "2026-01-09T19:50:54.112291+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "giulia-sara-de-vivo-64abb546", @@ -113,6 +114,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GIULIA-VIVO", + "new_ppid": "ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_GIULIA-VIVO", + "changed_at": "2026-01-09T19:50:54.112289+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -127,7 +138,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +187,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.417804+00:00", + "inferred_at": "2026-01-09T19:50:54.106062+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Istituto Centrale per il Restauro (oggi Istituto Superiore per la Conservazione ed il Restauro)", + "date_range": "2003 - 2007 • 4 years", + "degree": "Master's degree, conservation" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Istituto Centrale per il Restauro (oggi Istituto Superiore per la Conservazione ed il Restauro)", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:50:54.112275+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_THYS-HOEKMAN.json b/data/person/ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_THYS-HOEKMAN.json similarity index 70% rename from data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_THYS-HOEKMAN.json rename to data/person/ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_THYS-HOEKMAN.json index cbc58d4220..f8f4567935 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_THYS-HOEKMAN.json +++ b/data/person/ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_THYS-HOEKMAN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_THYS-HOEKMAN", + "ppid": "ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_THYS-HOEKMAN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "198X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Thys Hoekman", @@ -135,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thyshoekman_20251214T103041Z.json" ], - "modified_at": "2026-01-09T19:18:16.125851+00:00", + "modified_at": "2026-01-09T19:51:17.577198+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thyshoekman", @@ -149,6 +150,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_THYS-HOEKMAN", + "new_ppid": "ID_NL-OV-ENS_198X_NL-ZH-TH_XXXX_THYS-HOEKMAN", + "changed_at": "2026-01-09T19:51:17.577196+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -163,7 +174,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +223,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.125800+00:00", + "inferred_at": "2026-01-09T19:51:17.575156+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University College Utrecht", + "date_range": "2006 - 2009 • 3 years", + "degree": "BA, International Relations & Development Studies" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University College Utrecht", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:17.577189+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_JOOST-BEUKERS.json b/data/person/ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_JOOST-BEUKERS.json index d353d2144e..fc9d1574a4 100644 --- a/data/person/ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_JOOST-BEUKERS.json +++ b/data/person/ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_JOOST-BEUKERS.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joost-beukers-ba842211_20251214T110854Z.json" ], - "modified_at": "2026-01-09T19:18:11.554662+00:00", + "modified_at": "2026-01-09T19:50:47.176685+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joost-beukers-ba842211", @@ -138,7 +138,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.550380+00:00", + "inferred_at": "2026-01-09T19:50:47.170918+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NATHAN-MULDER.json b/data/person/ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_NATHAN-MULDER.json similarity index 80% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NATHAN-MULDER.json rename to data/person/ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_NATHAN-MULDER.json index 00af88263b..8bd2f71568 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NATHAN-MULDER.json +++ b/data/person/ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_NATHAN-MULDER.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NATHAN-MULDER", + "ppid": "ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_NATHAN-MULDER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Nathan Mulder", @@ -285,7 +286,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nathanmulder_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:16.581397+00:00", + "modified_at": "2026-01-09T19:51:19.931549+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nathanmulder", @@ -298,6 +299,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NATHAN-MULDER", + "new_ppid": "ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_NATHAN-MULDER", + "changed_at": "2026-01-09T19:51:19.931510+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -312,7 +323,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -361,7 +372,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.579377+00:00", + "inferred_at": "2026-01-09T19:51:19.920956+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "ROC ICT Academie Utrecht", + "date_range": "2001 - 2005", + "degree": "Niveau 4" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "ROC ICT Academie Utrecht", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:19.926983+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PIETER-WILLEMS.json b/data/person/ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_PIETER-WILLEMS.json similarity index 70% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PIETER-WILLEMS.json rename to data/person/ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_PIETER-WILLEMS.json index e8a2de833c..d42e9e7b3d 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PIETER-WILLEMS.json +++ b/data/person/ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_PIETER-WILLEMS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PIETER-WILLEMS", + "ppid": "ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_PIETER-WILLEMS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Pieter Willems", @@ -119,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pieter-willems-42865216_20251214T110824Z.json" ], - "modified_at": "2026-01-09T19:18:13.184490+00:00", + "modified_at": "2026-01-09T19:51:13.589030+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pieter-willems-42865216", @@ -141,6 +142,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PIETER-WILLEMS", + "new_ppid": "ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_PIETER-WILLEMS", + "changed_at": "2026-01-09T19:51:13.589024+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -155,7 +166,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +215,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.182556+00:00", + "inferred_at": "2026-01-09T19:51:13.583130+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Universiteit Twente", + "date_range": "2011 - 2014 • 3 years", + "degree": "MSc, Thermal Engineering, Cum Laude" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Universiteit Twente", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:13.586802+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROSALIN-KRISTIANTI.json b/data/person/ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_ROSALIN-KRISTIANTI.json similarity index 61% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROSALIN-KRISTIANTI.json rename to data/person/ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_ROSALIN-KRISTIANTI.json index cef5d5cdba..6c805e01f9 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROSALIN-KRISTIANTI.json +++ b/data/person/ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_ROSALIN-KRISTIANTI.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROSALIN-KRISTIANTI", + "ppid": "ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_ROSALIN-KRISTIANTI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Rosalin Kristianti", @@ -92,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rosalin-kristianti-43b00117_20251214T111959Z.json" ], - "modified_at": "2026-01-09T19:18:12.811948+00:00", + "modified_at": "2026-01-09T19:50:49.003780+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rosalin-kristianti-43b00117", @@ -105,6 +106,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROSALIN-KRISTIANTI", + "new_ppid": "ID_NL-OV-ENS_198X_XX-XX-XXX_XXXX_ROSALIN-KRISTIANTI", + "changed_at": "2026-01-09T19:50:49.003758+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -113,7 +124,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -154,7 +165,77 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.811895+00:00", + "inferred_at": "2026-01-09T19:50:48.916302+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Institut Teknologi Bandung (ITB)", + "date_range": "2005 - 2007 • 2 years", + "degree": "Master of Business Administration (M.B.A.), Marketing/Marketing Management, General" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Institut Teknologi Bandung (ITB)", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:50:48.918286+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TOTON-LIANTORO.json b/data/person/ID_NL-OV-ENS_199X_AU-01-CAN_XXXX_TOTON-LIANTORO.json similarity index 64% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TOTON-LIANTORO.json rename to data/person/ID_NL-OV-ENS_199X_AU-01-CAN_XXXX_TOTON-LIANTORO.json index e190b1660e..1476d06b0f 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TOTON-LIANTORO.json +++ b/data/person/ID_NL-OV-ENS_199X_AU-01-CAN_XXXX_TOTON-LIANTORO.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TOTON-LIANTORO", + "ppid": "ID_NL-OV-ENS_199X_AU-01-CAN_XXXX_TOTON-LIANTORO", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "TOTON", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Toton Liantoro", @@ -155,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/toton-liantoro-18b960198_20251214T103934Z.json" ], - "modified_at": "2026-01-09T19:18:16.281644+00:00", + "modified_at": "2026-01-09T19:51:18.374642+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "toton-liantoro-18b960198", @@ -168,6 +170,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TOTON-LIANTORO", + "new_ppid": "ID_NL-OV-ENS_199X_AU-01-CAN_XXXX_TOTON-LIANTORO", + "changed_at": "2026-01-09T19:51:18.374639+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -182,7 +195,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +244,130 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.281575+00:00", + "inferred_at": "2026-01-09T19:51:18.364857+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Canberra Institute of Technology", + "date_range": "2019 - 2020 • 1 year", + "degree": "Certificate IV, Cybersecurity" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Canberra Institute of Technology", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:18.366879+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:18.374626+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MUHAMMAD-NURFALAH.json b/data/person/ID_NL-OV-ENS_199X_ID-04-JAK_XXXX_MUHAMMAD-NURFALAH.json similarity index 57% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MUHAMMAD-NURFALAH.json rename to data/person/ID_NL-OV-ENS_199X_ID-04-JAK_XXXX_MUHAMMAD-NURFALAH.json index f6e0ffea07..b8f39cf2fa 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MUHAMMAD-NURFALAH.json +++ b/data/person/ID_NL-OV-ENS_199X_ID-04-JAK_XXXX_MUHAMMAD-NURFALAH.json @@ -1,17 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MUHAMMAD-NURFALAH", + "ppid": "ID_NL-OV-ENS_199X_ID-04-JAK_XXXX_MUHAMMAD-NURFALAH", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "MUHAMMAD", "NURFALAH" ], - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Muhammad Hanif Nurfalah", @@ -115,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/muhammad-hanif-nurfalah-697b5012b_20251214T111948Z.json" ], - "modified_at": "2026-01-09T19:18:14.842989+00:00", + "modified_at": "2026-01-09T19:50:48.476163+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "muhammad-hanif-nurfalah-697b5012b", @@ -137,6 +139,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MUHAMMAD-NURFALAH", + "new_ppid": "ID_NL-OV-ENS_199X_ID-04-JAK_XXXX_MUHAMMAD-NURFALAH", + "changed_at": "2026-01-09T19:50:48.476160+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -145,7 +158,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +199,130 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.842944+00:00", + "inferred_at": "2026-01-09T19:50:48.418180+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Perbanas Institute", + "date_range": "2023 - 2025 • 2 years", + "degree": "Bachelor's degree, Accounting and Finance" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Perbanas Institute", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:50:48.420390+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:48.476145+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TIARA-SURYA.json b/data/person/ID_NL-OV-ENS_199X_ID-04-JAK_XXXX_TIARA-SURYA.json similarity index 52% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TIARA-SURYA.json rename to data/person/ID_NL-OV-ENS_199X_ID-04-JAK_XXXX_TIARA-SURYA.json index 492a288394..1b78ec9f19 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TIARA-SURYA.json +++ b/data/person/ID_NL-OV-ENS_199X_ID-04-JAK_XXXX_TIARA-SURYA.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TIARA-SURYA", + "ppid": "ID_NL-OV-ENS_199X_ID-04-JAK_XXXX_TIARA-SURYA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "TIARA", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Tiara Firsalina Surya", @@ -104,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tiara-firsalina-surya-2025b537_20251214T111958Z.json" ], - "modified_at": "2026-01-09T19:18:15.461451+00:00", + "modified_at": "2026-01-09T19:51:11.023703+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tiara-firsalina-surya-2025b537", @@ -117,6 +119,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TIARA-SURYA", + "new_ppid": "ID_NL-OV-ENS_199X_ID-04-JAK_XXXX_TIARA-SURYA", + "changed_at": "2026-01-09T19:51:11.023699+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -125,7 +138,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -166,7 +179,140 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.461418+00:00", + "inferred_at": "2026-01-09T19:51:10.884857+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Institut Teknologi Bandung (ITB)", + "date_range": "2016 - 2018 • 2 years", + "degree": "Master’s Degree, Tata Perencanaan Wilayah dan Kota" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Institut Teknologi Bandung (ITB)", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:10.891756+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Indonesia (ID)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Tourism of the Republic of Indonesia", + "title": "Sub Division Head Of MICE Strategy", + "location": "Jakarta, Indonesia" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:11.023644+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ENS_199X_NL-GE-APE_XXXX_MARJOLEIN-SANTING.json b/data/person/ID_NL-OV-ENS_199X_NL-GE-APE_XXXX_MARJOLEIN-SANTING.json index a700d28521..14fcbbe6c4 100644 --- a/data/person/ID_NL-OV-ENS_199X_NL-GE-APE_XXXX_MARJOLEIN-SANTING.json +++ b/data/person/ID_NL-OV-ENS_199X_NL-GE-APE_XXXX_MARJOLEIN-SANTING.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjolein-santing-78497a151_20251214T103415Z.json" ], - "modified_at": "2026-01-09T19:18:17.971658+00:00", + "modified_at": "2026-01-09T19:51:07.011601+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjolein-santing-78497a151", @@ -200,7 +200,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.971649+00:00", + "inferred_at": "2026-01-09T19:51:07.011595+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ENS_199X_NL-NB-EIN_XXXX_LIDA-VRACHATI.json b/data/person/ID_NL-OV-ENS_199X_NL-NB-EIN_XXXX_LIDA-VRACHATI.json index 7a3c8e5506..dae75d11e7 100644 --- a/data/person/ID_NL-OV-ENS_199X_NL-NB-EIN_XXXX_LIDA-VRACHATI.json +++ b/data/person/ID_NL-OV-ENS_199X_NL-NB-EIN_XXXX_LIDA-VRACHATI.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lida-vrachati_20251214T110922Z.json" ], - "modified_at": "2026-01-09T19:18:11.508363+00:00", + "modified_at": "2026-01-09T19:50:47.058010+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lida-vrachati", @@ -193,7 +193,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.508359+00:00", + "inferred_at": "2026-01-09T19:50:47.057998+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ENS_199X_NL-NB-VEL_XXXX_ADELINA-MUCHANGA.json b/data/person/ID_NL-OV-ENS_199X_NL-NB-VEL_XXXX_ADELINA-MUCHANGA.json index d682c1ee40..0511028e0e 100644 --- a/data/person/ID_NL-OV-ENS_199X_NL-NB-VEL_XXXX_ADELINA-MUCHANGA.json +++ b/data/person/ID_NL-OV-ENS_199X_NL-NB-VEL_XXXX_ADELINA-MUCHANGA.json @@ -140,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/adelinamuchanga_20251214T110853Z.json" ], - "modified_at": "2026-01-09T19:18:18.156723+00:00", + "modified_at": "2026-01-09T19:51:29.001016+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "adelinamuchanga", @@ -169,7 +169,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +218,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.156715+00:00", + "inferred_at": "2026-01-09T19:51:29.001012+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NB-VEL_XXXX_JELMER-BOTER.json b/data/person/ID_NL-OV-ENS_199X_NL-NB-VEL_XXXX_JELMER-BOTER.json similarity index 89% rename from data/person/ID_XX-XX-XXX_199X_NL-NB-VEL_XXXX_JELMER-BOTER.json rename to data/person/ID_NL-OV-ENS_199X_NL-NB-VEL_XXXX_JELMER-BOTER.json index f852ab8c34..957dd3c1ec 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NB-VEL_XXXX_JELMER-BOTER.json +++ b/data/person/ID_NL-OV-ENS_199X_NL-NB-VEL_XXXX_JELMER-BOTER.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-NB-VEL_XXXX_JELMER-BOTER", + "ppid": "ID_NL-OV-ENS_199X_NL-NB-VEL_XXXX_JELMER-BOTER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "199X", "last_location": "NL-NB-VEL", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Jelmer Boter", @@ -105,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jelmer-boter-12906179_20251214T110822Z.json" ], - "modified_at": "2026-01-09T19:18:12.214903+00:00", + "modified_at": "2026-01-09T19:51:30.247329+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jelmer-boter-12906179", @@ -119,6 +120,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-NB-VEL_XXXX_JELMER-BOTER", + "new_ppid": "ID_NL-OV-ENS_199X_NL-NB-VEL_XXXX_JELMER-BOTER", + "changed_at": "2026-01-09T19:46:59.307983+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -133,7 +144,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.214780+00:00", + "inferred_at": "2026-01-09T19:51:30.247323+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ENS_199X_NL-NB-VEL_XXXX_VISHAL-R.json b/data/person/ID_NL-OV-ENS_199X_NL-NB-VEL_XXXX_VISHAL-R.json index 8bc64960c6..120bf7d190 100644 --- a/data/person/ID_NL-OV-ENS_199X_NL-NB-VEL_XXXX_VISHAL-R.json +++ b/data/person/ID_NL-OV-ENS_199X_NL-NB-VEL_XXXX_VISHAL-R.json @@ -191,7 +191,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vishal-m-r-4ba55a134_20251214T110841Z.json" ], - "modified_at": "2026-01-09T19:18:14.359773+00:00", + "modified_at": "2026-01-09T19:51:01.592265+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vishal-m-r-4ba55a134", @@ -214,7 +214,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -255,7 +255,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.359770+00:00", + "inferred_at": "2026-01-09T19:51:01.592255+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_DILAY-SARPAY.json b/data/person/ID_NL-OV-ENS_199X_NL-NH-AMS_XXXX_DILAY-SARPAY.json similarity index 72% rename from data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_DILAY-SARPAY.json rename to data/person/ID_NL-OV-ENS_199X_NL-NH-AMS_XXXX_DILAY-SARPAY.json index cd33a791c0..f5b9658459 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_DILAY-SARPAY.json +++ b/data/person/ID_NL-OV-ENS_199X_NL-NH-AMS_XXXX_DILAY-SARPAY.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_DILAY-SARPAY", + "ppid": "ID_NL-OV-ENS_199X_NL-NH-AMS_XXXX_DILAY-SARPAY", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Dilay Sarpay", @@ -136,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dilaysarpay_20251214T104054Z.json" ], - "modified_at": "2026-01-09T19:18:16.675324+00:00", + "modified_at": "2026-01-09T19:51:21.363287+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dilaysarpay", @@ -150,6 +151,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_DILAY-SARPAY", + "new_ppid": "ID_NL-OV-ENS_199X_NL-NH-AMS_XXXX_DILAY-SARPAY", + "changed_at": "2026-01-09T19:51:21.363285+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -164,7 +175,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +224,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.661967+00:00", + "inferred_at": "2026-01-09T19:51:21.361288+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "The Florence Institute of Design International", + "date_range": "2017 - 2017", + "degree": "Graphic Design" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "The Florence Institute of Design International", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:21.363278+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MARTINE-LEMMENS.json b/data/person/ID_NL-OV-ENS_199X_NL-NH-AMS_XXXX_MARTINE-LEMMENS.json similarity index 69% rename from data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MARTINE-LEMMENS.json rename to data/person/ID_NL-OV-ENS_199X_NL-NH-AMS_XXXX_MARTINE-LEMMENS.json index c2036e4454..cf93475c49 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MARTINE-LEMMENS.json +++ b/data/person/ID_NL-OV-ENS_199X_NL-NH-AMS_XXXX_MARTINE-LEMMENS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MARTINE-LEMMENS", + "ppid": "ID_NL-OV-ENS_199X_NL-NH-AMS_XXXX_MARTINE-LEMMENS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Martine Lemmens", @@ -123,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martine63_20251214T111630Z.json" ], - "modified_at": "2026-01-09T19:18:16.602394+00:00", + "modified_at": "2026-01-09T19:51:29.242013+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martine63", @@ -146,6 +147,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MARTINE-LEMMENS", + "new_ppid": "ID_NL-OV-ENS_199X_NL-NH-AMS_XXXX_MARTINE-LEMMENS", + "changed_at": "2026-01-09T19:51:29.242012+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -154,7 +165,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +206,77 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.598645+00:00", + "inferred_at": "2026-01-09T19:51:29.240083+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "at Dutch Felt Academy Master", + "date_range": "2019 - 2020 • 1 year", + "degree": "" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "at Dutch Felt Academy Master", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:29.242006+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_BO-RIJNSOEVER.json b/data/person/ID_NL-OV-ENS_199X_NL-UT-UTR_XXXX_BO-RIJNSOEVER.json similarity index 73% rename from data/person/ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_BO-RIJNSOEVER.json rename to data/person/ID_NL-OV-ENS_199X_NL-UT-UTR_XXXX_BO-RIJNSOEVER.json index 724513767e..fe8ae87f0c 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_BO-RIJNSOEVER.json +++ b/data/person/ID_NL-OV-ENS_199X_NL-UT-UTR_XXXX_BO-RIJNSOEVER.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_BO-RIJNSOEVER", + "ppid": "ID_NL-OV-ENS_199X_NL-UT-UTR_XXXX_BO-RIJNSOEVER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "199X", "last_location": "NL-UT-UTR", "last_date": "XXXX", @@ -12,7 +12,8 @@ "RIJNSOEVER" ], "last_location_source": "inferred_current_settlement", - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Bo van Rijnsoever", @@ -169,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bo-van-rijnsoever-69057380_20251212T230000Z.json" ], - "modified_at": "2026-01-09T19:18:16.555267+00:00", + "modified_at": "2026-01-09T19:51:18.730138+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bo-van-rijnsoever-69057380", @@ -191,6 +192,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_BO-RIJNSOEVER", + "new_ppid": "ID_NL-OV-ENS_199X_NL-UT-UTR_XXXX_BO-RIJNSOEVER", + "changed_at": "2026-01-09T19:51:18.730134+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -199,7 +210,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +251,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.555226+00:00", + "inferred_at": "2026-01-09T19:51:18.727871+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Grafisch Lyceum Utrecht", + "date_range": "2011", + "degree": "Grafisch design" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Grafisch Lyceum Utrecht", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:18.730121+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ENS_199X_NL-ZH-DEL_XXXX_FARDAD-MOUD.json b/data/person/ID_NL-OV-ENS_199X_NL-ZH-DEL_XXXX_FARDAD-MOUD.json index 4f9341f1f0..e5d9855ca6 100644 --- a/data/person/ID_NL-OV-ENS_199X_NL-ZH-DEL_XXXX_FARDAD-MOUD.json +++ b/data/person/ID_NL-OV-ENS_199X_NL-ZH-DEL_XXXX_FARDAD-MOUD.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fardadmaghsoudi_20251214T104047Z.json" ], - "modified_at": "2026-01-09T19:18:18.986269+00:00", + "modified_at": "2026-01-09T19:51:31.814354+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fardadmaghsoudi", @@ -198,7 +198,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +247,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.986262+00:00", + "inferred_at": "2026-01-09T19:51:31.814350+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CHRYSOULA-IOANNIDOU.json b/data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_CHRYSOULA-IOANNIDOU.json similarity index 66% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CHRYSOULA-IOANNIDOU.json rename to data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_CHRYSOULA-IOANNIDOU.json index 125b20f5ed..29d83d2609 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CHRYSOULA-IOANNIDOU.json +++ b/data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_CHRYSOULA-IOANNIDOU.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CHRYSOULA-IOANNIDOU", + "ppid": "ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_CHRYSOULA-IOANNIDOU", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Chrysoula Ioannidou", @@ -103,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chrysoula-ioannidou-40388a98_20251214T111050Z.json" ], - "modified_at": "2026-01-09T19:18:16.293209+00:00", + "modified_at": "2026-01-09T19:51:18.383195+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "chrysoula-ioannidou-40388a98", @@ -116,6 +117,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CHRYSOULA-IOANNIDOU", + "new_ppid": "ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_CHRYSOULA-IOANNIDOU", + "changed_at": "2026-01-09T19:51:18.383191+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -130,7 +141,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +190,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.283432+00:00", + "inferred_at": "2026-01-09T19:51:18.376943+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Aristotle University of Thessaloniki (AUTH)", + "date_range": "2013 - 2015 • 2 years", + "degree": "Master’s Degree, Nanosciences and Nanotechnologies" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Aristotle University of Thessaloniki (AUTH)", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:18.379304+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELISA-MOLEN.json b/data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_ELISA-MOLEN.json similarity index 67% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELISA-MOLEN.json rename to data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_ELISA-MOLEN.json index 943d4cfbb8..f6cc05c7ce 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELISA-MOLEN.json +++ b/data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_ELISA-MOLEN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELISA-MOLEN", + "ppid": "ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_ELISA-MOLEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -11,7 +11,8 @@ "ELISA", "MOLEN" ], - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Elisa van der Molen", @@ -111,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elisa-van-der-molen-7aa09a176_20251214T112158Z.json" ], - "modified_at": "2026-01-09T19:18:13.028797+00:00", + "modified_at": "2026-01-09T19:51:06.707697+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elisa-van-der-molen-7aa09a176", @@ -133,6 +134,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELISA-MOLEN", + "new_ppid": "ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_ELISA-MOLEN", + "changed_at": "2026-01-09T19:51:06.707694+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -141,7 +152,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +193,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.026886+00:00", + "inferred_at": "2026-01-09T19:51:06.703185+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Schouten & Nelissen", + "date_range": "2022 - 2022", + "degree": "Praktische coachingsvaardigheden" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Schouten & Nelissen", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:06.705698+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELSYA-FITRIANA.json b/data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_ELSYA-FITRIANA.json similarity index 66% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELSYA-FITRIANA.json rename to data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_ELSYA-FITRIANA.json index d4e22ff91c..e224300397 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELSYA-FITRIANA.json +++ b/data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_ELSYA-FITRIANA.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELSYA-FITRIANA", + "ppid": "ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_ELSYA-FITRIANA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Elsya Fitriana", @@ -116,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elsya-fitriana-79202994_20251214T111948Z.json" ], - "modified_at": "2026-01-09T19:18:15.388614+00:00", + "modified_at": "2026-01-09T19:51:08.761422+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elsya-fitriana-79202994", @@ -129,6 +130,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELSYA-FITRIANA", + "new_ppid": "ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_ELSYA-FITRIANA", + "changed_at": "2026-01-09T19:51:08.761395+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -137,7 +148,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +189,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.388572+00:00", + "inferred_at": "2026-01-09T19:51:08.651537+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Institut Teknologi Bandung", + "date_range": "2012 - 2016 • 4 years", + "degree": "Arsitektur" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Institut Teknologi Bandung", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:08.654478+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIRYAM-KADDOURI.json b/data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_MIRYAM-KADDOURI.json similarity index 68% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIRYAM-KADDOURI.json rename to data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_MIRYAM-KADDOURI.json index 95faa1cdcc..61c66f7f1c 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIRYAM-KADDOURI.json +++ b/data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_MIRYAM-KADDOURI.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIRYAM-KADDOURI", + "ppid": "ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_MIRYAM-KADDOURI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Miryam Kaddouri", @@ -121,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/miryam-kaddouri_20251214T111202Z.json" ], - "modified_at": "2026-01-09T19:18:13.105730+00:00", + "modified_at": "2026-01-09T19:50:50.821291+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "miryam-kaddouri", @@ -143,6 +144,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIRYAM-KADDOURI", + "new_ppid": "ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_MIRYAM-KADDOURI", + "changed_at": "2026-01-09T19:50:50.821286+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -157,7 +168,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +217,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.097976+00:00", + "inferred_at": "2026-01-09T19:50:50.817199+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Twente", + "date_range": "2022 - 2022", + "degree": "Master's degree, Robotics, Mechatronics and AI" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Twente", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:50:50.819293+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PEDRO-VIDEIRA.json b/data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_PEDRO-VIDEIRA.json similarity index 73% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PEDRO-VIDEIRA.json rename to data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_PEDRO-VIDEIRA.json index 6579b313bc..784547c29a 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PEDRO-VIDEIRA.json +++ b/data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_PEDRO-VIDEIRA.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PEDRO-VIDEIRA", + "ppid": "ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_PEDRO-VIDEIRA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Pedro Videira", @@ -146,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pedro-videira_20251214T111108Z.json" ], - "modified_at": "2026-01-09T19:18:12.694107+00:00", + "modified_at": "2026-01-09T19:50:48.660493+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pedro-videira", @@ -159,6 +160,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PEDRO-VIDEIRA", + "new_ppid": "ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_PEDRO-VIDEIRA", + "changed_at": "2026-01-09T19:50:48.660489+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -173,7 +184,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +233,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.692043+00:00", + "inferred_at": "2026-01-09T19:50:48.656070+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Instituto Superior Técnico", + "date_range": "2012 - 2017 • 5 years", + "degree": "Master's degree, Engineering Physics" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Instituto Superior Técnico", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:50:48.658109+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_YASHAR-GHAREBAGHI.json b/data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_YASHAR-GHAREBAGHI.json similarity index 71% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_YASHAR-GHAREBAGHI.json rename to data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_YASHAR-GHAREBAGHI.json index 913c5183b9..6f084d66ea 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_YASHAR-GHAREBAGHI.json +++ b/data/person/ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_YASHAR-GHAREBAGHI.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_YASHAR-GHAREBAGHI", + "ppid": "ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_YASHAR-GHAREBAGHI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Yashar Gharebaghi", @@ -147,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yashar-gharebaghi-0722388_20251214T103839Z.json" ], - "modified_at": "2026-01-09T19:18:12.797508+00:00", + "modified_at": "2026-01-09T19:51:04.018360+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yashar-gharebaghi-0722388", @@ -169,6 +170,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_YASHAR-GHAREBAGHI", + "new_ppid": "ID_NL-OV-ENS_199X_XX-XX-XXX_XXXX_YASHAR-GHAREBAGHI", + "changed_at": "2026-01-09T19:51:04.018358+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -183,7 +194,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +243,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.797429+00:00", + "inferred_at": "2026-01-09T19:51:04.016174+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Nooretouba Higher Education Institute", + "date_range": "2020 - 2023 • 3 years", + "degree": "Master's degree, Information Technology Engineering E-Commerce Orientation" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Nooretouba Higher Education Institute", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:04.018302+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ENS_200X_NL-OV-ENS_XXXX_RAHWAN-A.json b/data/person/ID_NL-OV-ENS_200X_NL-OV-ENS_XXXX_RAHWAN-A.json index 979c065758..f7732c122a 100644 --- a/data/person/ID_NL-OV-ENS_200X_NL-OV-ENS_XXXX_RAHWAN-A.json +++ b/data/person/ID_NL-OV-ENS_200X_NL-OV-ENS_XXXX_RAHWAN-A.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rahwan-a-413263163_20251214T110945Z.json" ], - "modified_at": "2026-01-09T19:18:11.341207+00:00", + "modified_at": "2026-01-09T19:50:46.724049+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rahwan-a-413263163", @@ -152,7 +152,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.341198+00:00", + "inferred_at": "2026-01-09T19:50:46.724040+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_PHILIP-ASAAM.json b/data/person/ID_NL-OV-ENS_200X_XX-XX-XXX_XXXX_PHILIP-ASAAM.json similarity index 73% rename from data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_PHILIP-ASAAM.json rename to data/person/ID_NL-OV-ENS_200X_XX-XX-XXX_XXXX_PHILIP-ASAAM.json index 193eca17d7..6877f18aa2 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_PHILIP-ASAAM.json +++ b/data/person/ID_NL-OV-ENS_200X_XX-XX-XXX_XXXX_PHILIP-ASAAM.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_PHILIP-ASAAM", + "ppid": "ID_NL-OV-ENS_200X_XX-XX-XXX_XXXX_PHILIP-ASAAM", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ENS", "first_date": "200X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Philip Moszczynski AALIA ASAAM", @@ -139,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/philip-moszczynski-aalia-cp-asaam-936381186_20251214T103938Z.json" ], - "modified_at": "2026-01-09T19:18:16.127736+00:00", + "modified_at": "2026-01-09T19:51:20.511358+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "philip-moszczynski-aalia-cp-asaam-936381186", @@ -161,6 +162,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_PHILIP-ASAAM", + "new_ppid": "ID_NL-OV-ENS_200X_XX-XX-XXX_XXXX_PHILIP-ASAAM", + "changed_at": "2026-01-09T19:51:20.511353+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -175,7 +186,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +235,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.127694+00:00", + "inferred_at": "2026-01-09T19:51:20.504167+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Enschede", + "formatted": "NL-OV-ENS", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of South Australia", + "date_range": "2024 - 2024", + "degree": "Graduate Diploma, Information Management (Archive and Records Management)" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of South Australia", + "mapping_result": "Enschede, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Enschede, Netherlands", + "result": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ENS" + }, + "result": "NL-OV-ENS" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756071, + "geonames_name": "Enschede", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPL", + "latitude": 52.21833, + "longitude": 6.89583 + }, + "inferred_at": "2026-01-09T19:51:20.506688+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-HEN_199X_NL-NB-VEL_XXXX_JOAN-MATHEW.json b/data/person/ID_NL-OV-HEN_199X_NL-NB-VEL_XXXX_JOAN-MATHEW.json index cb12f414df..b89733b7a6 100644 --- a/data/person/ID_NL-OV-HEN_199X_NL-NB-VEL_XXXX_JOAN-MATHEW.json +++ b/data/person/ID_NL-OV-HEN_199X_NL-NB-VEL_XXXX_JOAN-MATHEW.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/j-a-mathew_20251214T110842Z.json" ], - "modified_at": "2026-01-09T19:18:11.456483+00:00", + "modified_at": "2026-01-09T19:51:11.855125+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "j-a-mathew", @@ -219,7 +219,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -268,7 +268,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.456474+00:00", + "inferred_at": "2026-01-09T19:51:11.855092+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-NED_196X_NL-OV-NED_XXXX_MARJET-BEUKEMA.json b/data/person/ID_NL-OV-NED_196X_NL-OV-NED_XXXX_MARJET-BEUKEMA.json index dae7d1fc24..3cf38c0e71 100644 --- a/data/person/ID_NL-OV-NED_196X_NL-OV-NED_XXXX_MARJET-BEUKEMA.json +++ b/data/person/ID_NL-OV-NED_196X_NL-OV-NED_XXXX_MARJET-BEUKEMA.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjet-beukema-45095829_20251214T103350Z.json" ], - "modified_at": "2026-01-09T19:18:12.738080+00:00", + "modified_at": "2026-01-09T19:51:12.122878+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjet-beukema-45095829", @@ -181,7 +181,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.738068+00:00", + "inferred_at": "2026-01-09T19:51:12.122872+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-NED_197X_NL-GR-GRO_XXXX_DESIREE-ROZING.json b/data/person/ID_NL-OV-NED_197X_NL-GR-GRO_XXXX_DESIREE-ROZING.json index 1d394271a5..8d17b9ad7e 100644 --- a/data/person/ID_NL-OV-NED_197X_NL-GR-GRO_XXXX_DESIREE-ROZING.json +++ b/data/person/ID_NL-OV-NED_197X_NL-GR-GRO_XXXX_DESIREE-ROZING.json @@ -198,7 +198,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/desiree-wisse_20251214T112311Z.json" ], - "modified_at": "2026-01-09T19:18:14.858840+00:00", + "modified_at": "2026-01-09T19:51:03.921247+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "desiree-wisse", @@ -236,7 +236,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -285,7 +285,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.858835+00:00", + "inferred_at": "2026-01-09T19:51:03.921238+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-NED_197X_NL-NH-AMS_XXXX_GUNDY-DIJK.json b/data/person/ID_NL-OV-NED_197X_NL-NH-AMS_XXXX_GUNDY-DIJK.json index 37f29fc1c9..57373e698e 100644 --- a/data/person/ID_NL-OV-NED_197X_NL-NH-AMS_XXXX_GUNDY-DIJK.json +++ b/data/person/ID_NL-OV-NED_197X_NL-NH-AMS_XXXX_GUNDY-DIJK.json @@ -179,7 +179,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gundyvandijk_20251214T110007Z.json" ], - "modified_at": "2026-01-09T19:18:14.617268+00:00", + "modified_at": "2026-01-09T19:51:03.021615+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gundyvandijk", @@ -208,7 +208,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -257,7 +257,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.617263+00:00", + "inferred_at": "2026-01-09T19:51:03.021606+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-NED_198X_NL-GE-DUI_XXXX_ELVIN-LATUMAHINA.json b/data/person/ID_NL-OV-NED_198X_NL-GE-DUI_XXXX_ELVIN-LATUMAHINA.json index 38ede3756c..ad2d8f9f89 100644 --- a/data/person/ID_NL-OV-NED_198X_NL-GE-DUI_XXXX_ELVIN-LATUMAHINA.json +++ b/data/person/ID_NL-OV-NED_198X_NL-GE-DUI_XXXX_ELVIN-LATUMAHINA.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elvin-latumahina-0bb939158_20251214T110557Z.json" ], - "modified_at": "2026-01-09T19:18:13.559571+00:00", + "modified_at": "2026-01-09T19:50:55.058363+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elvin-latumahina-0bb939158", @@ -127,7 +127,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.559567+00:00", + "inferred_at": "2026-01-09T19:50:55.058353+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-NED_198X_NL-NH-AMS_XXXX_SHERLIEN-SANCHES.json b/data/person/ID_NL-OV-NED_198X_NL-NH-AMS_XXXX_SHERLIEN-SANCHES.json index 70ea970990..ae335719fa 100644 --- a/data/person/ID_NL-OV-NED_198X_NL-NH-AMS_XXXX_SHERLIEN-SANCHES.json +++ b/data/person/ID_NL-OV-NED_198X_NL-NH-AMS_XXXX_SHERLIEN-SANCHES.json @@ -204,7 +204,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sherlien-sanches-b57832a3_20251214T110755Z.json" ], - "modified_at": "2026-01-09T19:18:14.090296+00:00", + "modified_at": "2026-01-09T19:50:58.596114+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sherlien-sanches-b57832a3", @@ -233,7 +233,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -282,7 +282,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.090277+00:00", + "inferred_at": "2026-01-09T19:50:58.596104+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-NED_199X_NL-FR-LEE_XXXX_ALEXANDER-BURGER.json b/data/person/ID_NL-OV-NED_199X_NL-FR-LEE_XXXX_ALEXANDER-BURGER.json index c137eac3ea..23b4b65f67 100644 --- a/data/person/ID_NL-OV-NED_199X_NL-FR-LEE_XXXX_ALEXANDER-BURGER.json +++ b/data/person/ID_NL-OV-NED_199X_NL-FR-LEE_XXXX_ALEXANDER-BURGER.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/burgeralexander_20251214T113135Z.json" ], - "modified_at": "2026-01-09T19:18:15.769224+00:00", + "modified_at": "2026-01-09T19:51:14.352491+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "burgeralexander", @@ -139,7 +139,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.769220+00:00", + "inferred_at": "2026-01-09T19:51:14.352486+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-NED_199X_NL-NH-AMS_XXXX_REVELINIO-ACHTHOVEN.json b/data/person/ID_NL-OV-NED_199X_NL-NH-AMS_XXXX_REVELINIO-ACHTHOVEN.json index b3e22783bb..542afe6ad0 100644 --- a/data/person/ID_NL-OV-NED_199X_NL-NH-AMS_XXXX_REVELINIO-ACHTHOVEN.json +++ b/data/person/ID_NL-OV-NED_199X_NL-NH-AMS_XXXX_REVELINIO-ACHTHOVEN.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/revelinio-achthoven-72616121b_20251214T112558Z.json" ], - "modified_at": "2026-01-09T19:18:15.866654+00:00", + "modified_at": "2026-01-09T19:51:14.939432+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "revelinio-achthoven-72616121b", @@ -177,7 +177,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.866650+00:00", + "inferred_at": "2026-01-09T19:51:14.939423+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-OV-NED_XXXX_MAAIKE-MSC.json b/data/person/ID_NL-OV-NED_199X_NL-OV-NED_XXXX_MAAIKE-MSC.json similarity index 61% rename from data/person/ID_XX-XX-XXX_XXXX_NL-OV-NED_XXXX_MAAIKE-MSC.json rename to data/person/ID_NL-OV-NED_199X_NL-OV-NED_XXXX_MAAIKE-MSC.json index 29528e1aee..755637a581 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-OV-NED_XXXX_MAAIKE-MSC.json +++ b/data/person/ID_NL-OV-NED_199X_NL-OV-NED_XXXX_MAAIKE-MSC.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-OV-NED_XXXX_MAAIKE-MSC", + "ppid": "ID_NL-OV-NED_199X_NL-OV-NED_XXXX_MAAIKE-MSC", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-OV-NED", + "first_date": "199X", "last_location": "NL-OV-NED", "last_date": "XXXX", "name_tokens": [ "MAAIKE", "MSC" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Maaike Verschuren MSc", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -97,83 +103,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maaikeverschuren1_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:15:39.706750+00:00", + "modified_at": "2026-01-09T19:50:55.099026+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maaikeverschuren1", - "inferred_current_settlement": { - "value": "Nederland", - "formatted": "NL-OV-NED", - "country_code": "NL", - "region_code": "OV", - "settlement_code": "NED", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Arnhem-Nijmegen Region, Netherlands" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "Inspectie van het Onderwijs", - "title": "Senior Inspecteur Primair Onderwijs", - "location": "Arnhem-Nijmegen en omgeving" - } - }, - { - "step": 3, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "Verschuren Onderwijsadvies", - "title": "Procesbegeleider - Projectleider - Onderwijsadviseur", - "location": "Nederland" - } - }, - { - "step": 4, - "geocoding": "GeoNames resolution", - "query": "Nederland", - "result": { - "geonames_id": 2750474, - "geonames_name": "Nederland", - "admin1_code": "15", - "admin1_name": "Overijssel", - "feature_code": "PPL", - "latitude": 52.755, - "longitude": 5.96528 - } - }, - { - "step": 5, - "formatting": "CC-RR-PPP generation", - "result": "NL-OV-NED" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2750474, - "geonames_name": "Nederland", - "admin1_code": "15", - "admin1_name": "Overijssel", - "feature_code": "PPL", - "latitude": 52.755, - "longitude": 5.96528 - }, - "inferred_at": "2026-01-09T19:15:39.706733+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MAAIKE-MSC", @@ -183,6 +116,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-OV-NED_XXXX_MAAIKE-MSC", + "new_ppid": "ID_NL-OV-NED_199X_NL-OV-NED_XXXX_MAAIKE-MSC", + "changed_at": "2026-01-09T19:43:42.854686+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1990 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Verschuren Onderwijsadvies", + "title": "Procesbegeleider - Projectleider - Onderwijsadviseur", + "date_range": "Jan 2013 - Present" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2013 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2013 - 23 = 1990", + "result": "Estimated birth year: 1990", + "range": "1985-1995 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1985, + 1995 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:55.099019+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-OV-NED_199X_NL-ZH-RIJ_XXXX_LIZIENNE-ROMANO.json b/data/person/ID_NL-OV-NED_199X_NL-ZH-RIJ_XXXX_LIZIENNE-ROMANO.json index 63022b7c45..1e39596d9a 100644 --- a/data/person/ID_NL-OV-NED_199X_NL-ZH-RIJ_XXXX_LIZIENNE-ROMANO.json +++ b/data/person/ID_NL-OV-NED_199X_NL-ZH-RIJ_XXXX_LIZIENNE-ROMANO.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lizienne-romano-460816164_20251214T103351Z.json" ], - "modified_at": "2026-01-09T19:18:14.697343+00:00", + "modified_at": "2026-01-09T19:51:03.369821+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lizienne-romano-460816164", @@ -145,7 +145,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.697338+00:00", + "inferred_at": "2026-01-09T19:51:03.369816+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-NED_199X_NL-ZH-TH_XXXX_DAAN-WESTERHEIDE.json b/data/person/ID_NL-OV-NED_199X_NL-ZH-TH_XXXX_DAAN-WESTERHEIDE.json index d7573afc38..1254425f7c 100644 --- a/data/person/ID_NL-OV-NED_199X_NL-ZH-TH_XXXX_DAAN-WESTERHEIDE.json +++ b/data/person/ID_NL-OV-NED_199X_NL-ZH-TH_XXXX_DAAN-WESTERHEIDE.json @@ -284,7 +284,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daanwesterheide_20251214T113332Z.json" ], - "modified_at": "2026-01-09T19:18:16.028811+00:00", + "modified_at": "2026-01-09T19:51:08.564303+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daanwesterheide", @@ -316,7 +316,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -357,7 +357,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.028805+00:00", + "inferred_at": "2026-01-09T19:51:08.564295+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-NED_200X_NL-NH-AMS_XXXX_BRIAN-KERSBERGEN.json b/data/person/ID_NL-OV-NED_200X_NL-NH-AMS_XXXX_BRIAN-KERSBERGEN.json index d696feefa0..3bfdb8247d 100644 --- a/data/person/ID_NL-OV-NED_200X_NL-NH-AMS_XXXX_BRIAN-KERSBERGEN.json +++ b/data/person/ID_NL-OV-NED_200X_NL-NH-AMS_XXXX_BRIAN-KERSBERGEN.json @@ -230,7 +230,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/brian-kersbergen-46b69bb8_20251214T111847Z.json" ], - "modified_at": "2026-01-09T19:18:13.322519+00:00", + "modified_at": "2026-01-09T19:51:22.270833+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "brian-kersbergen-46b69bb8", @@ -262,7 +262,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -303,7 +303,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.322513+00:00", + "inferred_at": "2026-01-09T19:51:22.270829+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-NED_200X_NL-OV-NED_XXXX_RGRACIELA-MORA.json b/data/person/ID_NL-OV-NED_200X_NL-OV-NED_XXXX_RGRACIELA-MORA.json index adc187e72f..324606034a 100644 --- a/data/person/ID_NL-OV-NED_200X_NL-OV-NED_XXXX_RGRACIELA-MORA.json +++ b/data/person/ID_NL-OV-NED_200X_NL-OV-NED_XXXX_RGRACIELA-MORA.json @@ -241,7 +241,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/r-graciela-collazo-mora-b600a763_20251214T110245Z.json" ], - "modified_at": "2026-01-09T19:18:13.880757+00:00", + "modified_at": "2026-01-09T19:50:53.893007+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "r-graciela-collazo-mora-b600a763", @@ -279,7 +279,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -328,7 +328,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.880748+00:00", + "inferred_at": "2026-01-09T19:50:53.893002+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ZWO_196X_XX-XX-XXX_XXXX_CORINE-MAIJER.json b/data/person/ID_NL-OV-ZWO_196X_XX-XX-XXX_XXXX_CORINE-MAIJER.json index 9fcb650aa8..84d587128f 100644 --- a/data/person/ID_NL-OV-ZWO_196X_XX-XX-XXX_XXXX_CORINE-MAIJER.json +++ b/data/person/ID_NL-OV-ZWO_196X_XX-XX-XXX_XXXX_CORINE-MAIJER.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/corine-de-maijer_20251214T113150Z.json" ], - "modified_at": "2026-01-09T19:18:13.870403+00:00", + "modified_at": "2026-01-09T19:50:56.727447+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "corine-de-maijer", @@ -126,7 +126,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.868177+00:00", + "inferred_at": "2026-01-09T19:50:56.724882+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ZWO_197X_NL-NH-HAA_XXXX_RIAN-GERRITSEN.json b/data/person/ID_NL-OV-ZWO_197X_NL-NH-HAA_XXXX_RIAN-GERRITSEN.json index 1e5d068be9..2e02f5add9 100644 --- a/data/person/ID_NL-OV-ZWO_197X_NL-NH-HAA_XXXX_RIAN-GERRITSEN.json +++ b/data/person/ID_NL-OV-ZWO_197X_NL-NH-HAA_XXXX_RIAN-GERRITSEN.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rian-gerritsen-99359919_20251214T111838Z.json" ], - "modified_at": "2026-01-09T19:18:15.170120+00:00", + "modified_at": "2026-01-09T19:51:12.101393+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rian-gerritsen-99359919", @@ -208,7 +208,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -257,7 +257,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.170114+00:00", + "inferred_at": "2026-01-09T19:51:12.101386+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-OV-DAL_XXXX_CINDY-POT.json b/data/person/ID_NL-OV-ZWO_197X_NL-OV-DAL_XXXX_CINDY-POT.json similarity index 69% rename from data/person/ID_XX-XX-XXX_197X_NL-OV-DAL_XXXX_CINDY-POT.json rename to data/person/ID_NL-OV-ZWO_197X_NL-OV-DAL_XXXX_CINDY-POT.json index 6a5c292d73..027e3ddf9d 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-OV-DAL_XXXX_CINDY-POT.json +++ b/data/person/ID_NL-OV-ZWO_197X_NL-OV-DAL_XXXX_CINDY-POT.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_197X_NL-OV-DAL_XXXX_CINDY-POT", + "ppid": "ID_NL-OV-ZWO_197X_NL-OV-DAL_XXXX_CINDY-POT", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ZWO", "first_date": "197X", "last_location": "NL-OV-DAL", "last_date": "XXXX", @@ -15,7 +15,8 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Cindy Pot", @@ -124,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cindy-pot-042467151_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:14.120246+00:00", + "modified_at": "2026-01-09T19:51:12.690613+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cindy-pot-042467151", @@ -156,6 +157,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_NL-OV-DAL_XXXX_CINDY-POT", + "new_ppid": "ID_NL-OV-ZWO_197X_NL-OV-DAL_XXXX_CINDY-POT", + "changed_at": "2026-01-09T19:51:12.690611+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -164,7 +175,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +216,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.120200+00:00", + "inferred_at": "2026-01-09T19:51:12.688364+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Zwolle", + "formatted": "NL-OV-ZWO", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ZWO", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Deltion College", + "date_range": "1997 - 2000", + "degree": "M.E.A.O." + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Deltion College", + "mapping_result": "Zwolle, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Zwolle, Netherlands", + "result": { + "geonames_id": 2743477, + "geonames_name": "Zwolle", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPLA", + "latitude": 52.5125, + "longitude": 6.09444 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ZWO" + }, + "result": "NL-OV-ZWO" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2743477, + "geonames_name": "Zwolle", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPLA", + "latitude": 52.5125, + "longitude": 6.09444 + }, + "inferred_at": "2026-01-09T19:51:12.690601+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ZWO_198X_NL-OV-DAL_XXXX_ELWIN-KLAPPE.json b/data/person/ID_NL-OV-ZWO_198X_NL-OV-DAL_XXXX_ELWIN-KLAPPE.json index e7aa05a665..0622566f97 100644 --- a/data/person/ID_NL-OV-ZWO_198X_NL-OV-DAL_XXXX_ELWIN-KLAPPE.json +++ b/data/person/ID_NL-OV-ZWO_198X_NL-OV-DAL_XXXX_ELWIN-KLAPPE.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elwin-klappe-5557a424_20251214T110418Z.json" ], - "modified_at": "2026-01-09T19:18:14.207104+00:00", + "modified_at": "2026-01-09T19:50:58.899452+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elwin-klappe-5557a424", @@ -157,7 +157,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.207098+00:00", + "inferred_at": "2026-01-09T19:50:58.899442+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ZWO_198X_NL-OV-ZWO_XXXX_JAN-BEENS.json b/data/person/ID_NL-OV-ZWO_198X_NL-OV-ZWO_XXXX_JAN-BEENS.json index ec75eccdb6..3fa1cd0e5a 100644 --- a/data/person/ID_NL-OV-ZWO_198X_NL-OV-ZWO_XXXX_JAN-BEENS.json +++ b/data/person/ID_NL-OV-ZWO_198X_NL-OV-ZWO_XXXX_JAN-BEENS.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-beens-86b42013_20251214T110415Z.json" ], - "modified_at": "2026-01-09T19:18:16.794192+00:00", + "modified_at": "2026-01-09T19:51:22.037029+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-beens-86b42013", @@ -134,7 +134,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.794188+00:00", + "inferred_at": "2026-01-09T19:51:22.037023+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-UT-EEM_XXXX_THEO-V.json b/data/person/ID_NL-OV-ZWO_198X_NL-UT-EEM_XXXX_THEO-V.json similarity index 77% rename from data/person/ID_XX-XX-XXX_198X_NL-UT-EEM_XXXX_THEO-V.json rename to data/person/ID_NL-OV-ZWO_198X_NL-UT-EEM_XXXX_THEO-V.json index ed3162e67c..95faf68faf 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-UT-EEM_XXXX_THEO-V.json +++ b/data/person/ID_NL-OV-ZWO_198X_NL-UT-EEM_XXXX_THEO-V.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-UT-EEM_XXXX_THEO-V", + "ppid": "ID_NL-OV-ZWO_198X_NL-UT-EEM_XXXX_THEO-V", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-OV-ZWO", "first_date": "198X", "last_location": "NL-UT-EEM", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Theo V.", @@ -150,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/theo-v-247a6a31_20251214T111628Z.json" ], - "modified_at": "2026-01-09T19:18:16.436491+00:00", + "modified_at": "2026-01-09T19:51:18.489337+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "theo-v-247a6a31", @@ -164,6 +165,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-UT-EEM_XXXX_THEO-V", + "new_ppid": "ID_NL-OV-ZWO_198X_NL-UT-EEM_XXXX_THEO-V", + "changed_at": "2026-01-09T19:51:18.489335+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -178,7 +189,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +238,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.436420+00:00", + "inferred_at": "2026-01-09T19:51:18.487164+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Zwolle", + "formatted": "NL-OV-ZWO", + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ZWO", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Deltion College", + "date_range": "2000 - 2002 • 2 years", + "degree": "MBO, Beveiliging" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Deltion College", + "mapping_result": "Zwolle, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Zwolle, Netherlands", + "result": { + "geonames_id": 2743477, + "geonames_name": "Zwolle", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPLA", + "latitude": 52.5125, + "longitude": 6.09444 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "OV", + "settlement_code": "ZWO" + }, + "result": "NL-OV-ZWO" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2743477, + "geonames_name": "Zwolle", + "admin1_code": "15", + "admin1_name": "Overijssel", + "feature_code": "PPLA", + "latitude": 52.5125, + "longitude": 6.09444 + }, + "inferred_at": "2026-01-09T19:51:18.489328+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ZWO_199X_NL-OV-ZWO_XXXX_JURGEN-POPS.json b/data/person/ID_NL-OV-ZWO_199X_NL-OV-ZWO_XXXX_JURGEN-POPS.json index 621be13ec7..473ede2832 100644 --- a/data/person/ID_NL-OV-ZWO_199X_NL-OV-ZWO_XXXX_JURGEN-POPS.json +++ b/data/person/ID_NL-OV-ZWO_199X_NL-OV-ZWO_XXXX_JURGEN-POPS.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jurgen-pops-64465361_20251214T110418Z.json" ], - "modified_at": "2026-01-09T19:18:13.830838+00:00", + "modified_at": "2026-01-09T19:50:56.658289+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jurgen-pops-64465361", @@ -183,7 +183,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.830835+00:00", + "inferred_at": "2026-01-09T19:50:56.658282+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-OV-ZWO_200X_NL-OV-OLS_XXXX_EMIEL-STOPLER.json b/data/person/ID_NL-OV-ZWO_200X_NL-OV-OLS_XXXX_EMIEL-STOPLER.json index 6a359db416..77e661bf07 100644 --- a/data/person/ID_NL-OV-ZWO_200X_NL-OV-OLS_XXXX_EMIEL-STOPLER.json +++ b/data/person/ID_NL-OV-ZWO_200X_NL-OV-OLS_XXXX_EMIEL-STOPLER.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emielstopler_20251214T110419Z.json" ], - "modified_at": "2026-01-09T19:18:13.989055+00:00", + "modified_at": "2026-01-09T19:50:57.745127+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emielstopler", @@ -127,7 +127,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.989049+00:00", + "inferred_at": "2026-01-09T19:50:57.745117+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-AME_196X_NL-ZH-LEI_XXXX_MARTIJN-MANDERS.json b/data/person/ID_NL-UT-AME_196X_NL-ZH-LEI_XXXX_MARTIJN-MANDERS.json index 8ae6d2fe04..6afa2720af 100644 --- a/data/person/ID_NL-UT-AME_196X_NL-ZH-LEI_XXXX_MARTIJN-MANDERS.json +++ b/data/person/ID_NL-UT-AME_196X_NL-ZH-LEI_XXXX_MARTIJN-MANDERS.json @@ -232,7 +232,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martijn-manders-a917237_20251214T112119Z.json" ], - "modified_at": "2026-01-09T19:18:15.257808+00:00", + "modified_at": "2026-01-09T19:51:07.588466+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martijn-manders-a917237", @@ -261,7 +261,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -310,7 +310,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.257804+00:00", + "inferred_at": "2026-01-09T19:51:07.588461+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-AME_197X_NL-UT-AME_XXXX_DANNY-FUTTERER.json b/data/person/ID_NL-UT-AME_197X_NL-UT-AME_XXXX_DANNY-FUTTERER.json index d7ece87600..c1d415496b 100644 --- a/data/person/ID_NL-UT-AME_197X_NL-UT-AME_XXXX_DANNY-FUTTERER.json +++ b/data/person/ID_NL-UT-AME_197X_NL-UT-AME_XXXX_DANNY-FUTTERER.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/danny-futterer-18620312a_20251214T111546Z.json" ], - "modified_at": "2026-01-09T19:18:13.229481+00:00", + "modified_at": "2026-01-09T19:50:54.030050+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "danny-futterer-18620312a", @@ -161,7 +161,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.229473+00:00", + "inferred_at": "2026-01-09T19:50:54.030043+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-AME_198X_XX-XX-XXX_XXXX_PAUL-BOON.json b/data/person/ID_NL-UT-AME_198X_XX-XX-XXX_XXXX_PAUL-BOON.json index 6cd206e54b..2e1b52de3c 100644 --- a/data/person/ID_NL-UT-AME_198X_XX-XX-XXX_XXXX_PAUL-BOON.json +++ b/data/person/ID_NL-UT-AME_198X_XX-XX-XXX_XXXX_PAUL-BOON.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paul-boon-8a692210_20251214T110513Z.json" ], - "modified_at": "2026-01-09T19:18:15.212814+00:00", + "modified_at": "2026-01-09T19:51:07.016373+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paul-boon-8a692210", @@ -128,7 +128,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.210885+00:00", + "inferred_at": "2026-01-09T19:51:07.014332+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_CATO-STROECKEN.json b/data/person/ID_NL-UT-AME_199X_NL-UT-UTR_XXXX_CATO-STROECKEN.json similarity index 67% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_CATO-STROECKEN.json rename to data/person/ID_NL-UT-AME_199X_NL-UT-UTR_XXXX_CATO-STROECKEN.json index 669b120911..0191476bee 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_CATO-STROECKEN.json +++ b/data/person/ID_NL-UT-AME_199X_NL-UT-UTR_XXXX_CATO-STROECKEN.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_CATO-STROECKEN", + "ppid": "ID_NL-UT-AME_199X_NL-UT-UTR_XXXX_CATO-STROECKEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-UT-AME", + "first_date": "199X", "last_location": "NL-UT-UTR", "last_date": "XXXX", "name_tokens": [ "CATO", "STROECKEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Cato Stroecken", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -154,63 +160,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cato-stroecken-90b0861aa_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:43:06.537461+00:00", + "modified_at": "2026-01-09T19:51:11.848276+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cato-stroecken-90b0861aa", - "inferred_current_settlement": { - "value": "Utrecht", - "formatted": "NL-UT-UTR", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "UTR", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Utrecht, Utrecht, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Utrecht, Utrecht, Netherlands", - "result": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-UTR" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - }, - "inferred_at": "2026-01-09T17:43:06.537455+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CATO-STROECKEN", @@ -220,6 +173,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_CATO-STROECKEN", + "new_ppid": "ID_NL-UT-AME_199X_NL-UT-UTR_XXXX_CATO-STROECKEN", + "changed_at": "2026-01-09T19:43:41.592184+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1997 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Stichting Petje af", + "title": "Medewerker Onderzoek En Ontwikkeling", + "date_range": "Aug 2020 - Jun 2021" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2020 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2020 - 23 = 1997", + "result": "Estimated birth year: 1997", + "range": "1992-2002 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1992, + 2002 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:11.848266+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-UT-AME_199X_XX-XX-XXX_XXXX_LUNA-KASTEREN.json b/data/person/ID_NL-UT-AME_199X_XX-XX-XXX_XXXX_LUNA-KASTEREN.json index 86b08dc554..29c54ed681 100644 --- a/data/person/ID_NL-UT-AME_199X_XX-XX-XXX_XXXX_LUNA-KASTEREN.json +++ b/data/person/ID_NL-UT-AME_199X_XX-XX-XXX_XXXX_LUNA-KASTEREN.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/luna-van-kasteren-405972183_20251214T110713Z.json" ], - "modified_at": "2026-01-09T19:18:17.777088+00:00", + "modified_at": "2026-01-09T19:51:28.570908+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "luna-van-kasteren-405972183", @@ -134,7 +134,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.775002+00:00", + "inferred_at": "2026-01-09T19:51:28.568908+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-AME_200X_NL-UT-AME_XXXX_ERWIN-KRIGER.json b/data/person/ID_NL-UT-AME_200X_NL-UT-AME_XXXX_ERWIN-KRIGER.json index 3b832b4590..a124ec61f3 100644 --- a/data/person/ID_NL-UT-AME_200X_NL-UT-AME_XXXX_ERWIN-KRIGER.json +++ b/data/person/ID_NL-UT-AME_200X_NL-UT-AME_XXXX_ERWIN-KRIGER.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erwin-kriger-58bb8b258_20251214T111842Z.json" ], - "modified_at": "2026-01-09T19:18:13.788076+00:00", + "modified_at": "2026-01-09T19:50:56.571279+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erwin-kriger-58bb8b258", @@ -124,7 +124,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.788072+00:00", + "inferred_at": "2026-01-09T19:50:56.571274+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_INGER-SANDERS.json b/data/person/ID_NL-UT-BRE_197X_XX-XX-XXX_XXXX_INGER-SANDERS.json similarity index 73% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_INGER-SANDERS.json rename to data/person/ID_NL-UT-BRE_197X_XX-XX-XXX_XXXX_INGER-SANDERS.json index 282cd9f7d2..3fb5b34dbf 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_INGER-SANDERS.json +++ b/data/person/ID_NL-UT-BRE_197X_XX-XX-XXX_XXXX_INGER-SANDERS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_INGER-SANDERS", + "ppid": "ID_NL-UT-BRE_197X_XX-XX-XXX_XXXX_INGER-SANDERS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-UT-BRE", "first_date": "197X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Inger Sanders", @@ -165,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/inger-sanders-4198b49_20251214T112641Z.json" ], - "modified_at": "2026-01-09T19:18:13.200469+00:00", + "modified_at": "2026-01-09T19:50:53.280655+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "inger-sanders-4198b49", @@ -178,6 +179,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_INGER-SANDERS", + "new_ppid": "ID_NL-UT-BRE_197X_XX-XX-XXX_XXXX_INGER-SANDERS", + "changed_at": "2026-01-09T19:50:53.280651+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -192,7 +203,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +252,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.198517+00:00", + "inferred_at": "2026-01-09T19:50:53.276464+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Breukelen", + "formatted": "NL-UT-BRE", + "country_code": "NL", + "region_code": "UT", + "settlement_code": "BRE", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Nyenrode Business Universiteit", + "date_range": "2021 - 2021", + "degree": "Blended class Strategische communicatie" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Nyenrode Business Universiteit", + "mapping_result": "Breukelen, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Breukelen, Netherlands", + "result": { + "geonames_id": 2758333, + "geonames_name": "Breukelen", + "admin1_code": "09", + "admin1_name": "Utrecht", + "feature_code": "PPL", + "latitude": 52.17417, + "longitude": 5.00139 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "UT", + "settlement_code": "BRE" + }, + "result": "NL-UT-BRE" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2758333, + "geonames_name": "Breukelen", + "admin1_code": "09", + "admin1_name": "Utrecht", + "feature_code": "PPL", + "latitude": 52.17417, + "longitude": 5.00139 + }, + "inferred_at": "2026-01-09T19:50:53.278610+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JEROEN-MEIJER.json b/data/person/ID_NL-UT-BRE_198X_XX-XX-XXX_XXXX_JEROEN-MEIJER.json similarity index 70% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JEROEN-MEIJER.json rename to data/person/ID_NL-UT-BRE_198X_XX-XX-XXX_XXXX_JEROEN-MEIJER.json index 715587e8f4..0eb674689a 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JEROEN-MEIJER.json +++ b/data/person/ID_NL-UT-BRE_198X_XX-XX-XXX_XXXX_JEROEN-MEIJER.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JEROEN-MEIJER", + "ppid": "ID_NL-UT-BRE_198X_XX-XX-XXX_XXXX_JEROEN-MEIJER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-UT-BRE", "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Jeroen Meijer", @@ -156,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeroen-meijer-24731a15_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:15.240275+00:00", + "modified_at": "2026-01-09T19:51:07.278148+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeroen-meijer-24731a15", @@ -169,6 +170,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JEROEN-MEIJER", + "new_ppid": "ID_NL-UT-BRE_198X_XX-XX-XXX_XXXX_JEROEN-MEIJER", + "changed_at": "2026-01-09T19:51:07.278145+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -177,7 +188,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +229,77 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.238217+00:00", + "inferred_at": "2026-01-09T19:51:07.274221+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Breukelen", + "formatted": "NL-UT-BRE", + "country_code": "NL", + "region_code": "UT", + "settlement_code": "BRE", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Nyenrode Business University", + "date_range": "2007 - 2016", + "degree": "Master of Science (MSc)" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Nyenrode Business University", + "mapping_result": "Breukelen, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Breukelen, Netherlands", + "result": { + "geonames_id": 2758333, + "geonames_name": "Breukelen", + "admin1_code": "09", + "admin1_name": "Utrecht", + "feature_code": "PPL", + "latitude": 52.17417, + "longitude": 5.00139 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "UT", + "settlement_code": "BRE" + }, + "result": "NL-UT-BRE" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2758333, + "geonames_name": "Breukelen", + "admin1_code": "09", + "admin1_name": "Utrecht", + "feature_code": "PPL", + "latitude": 52.17417, + "longitude": 5.00139 + }, + "inferred_at": "2026-01-09T19:51:07.276290+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-BUN_199X_NL-ZH-TH_XXXX_RAYMOND-APPELDOORN.json b/data/person/ID_NL-UT-BUN_199X_NL-ZH-TH_XXXX_RAYMOND-APPELDOORN.json index c3dc6b34d0..58ad14e54a 100644 --- a/data/person/ID_NL-UT-BUN_199X_NL-ZH-TH_XXXX_RAYMOND-APPELDOORN.json +++ b/data/person/ID_NL-UT-BUN_199X_NL-ZH-TH_XXXX_RAYMOND-APPELDOORN.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/raymond-appeldoorn-57427965_20251214T103200Z.json" ], - "modified_at": "2026-01-09T19:18:13.262716+00:00", + "modified_at": "2026-01-09T19:50:53.717844+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "raymond-appeldoorn-57427965", @@ -150,7 +150,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.262712+00:00", + "inferred_at": "2026-01-09T19:50:53.717838+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JACQUELIENE-HEER.json b/data/person/ID_NL-UT-DME_196X_NL-NH-AMS_XXXX_JACQUELIENE-HEER.json similarity index 63% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JACQUELIENE-HEER.json rename to data/person/ID_NL-UT-DME_196X_NL-NH-AMS_XXXX_JACQUELIENE-HEER.json index 5a49ffeba1..f96c28b7ee 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JACQUELIENE-HEER.json +++ b/data/person/ID_NL-UT-DME_196X_NL-NH-AMS_XXXX_JACQUELIENE-HEER.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JACQUELIENE-HEER", + "ppid": "ID_NL-UT-DME_196X_NL-NH-AMS_XXXX_JACQUELIENE-HEER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-UT-DME", + "first_date": "196X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "JACQUELIENE", "HEER" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Jacqueliene de Heer", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -127,63 +133,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jacqueliene-de-heer-0a00033b_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:15:34.419388+00:00", + "modified_at": "2026-01-09T19:50:50.214969+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jacqueliene-de-heer-0a00033b", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T19:15:34.419382+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JACQUELIENE-HEER", @@ -193,6 +146,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JACQUELIENE-HEER", + "new_ppid": "ID_NL-UT-DME_196X_NL-NH-AMS_XXXX_JACQUELIENE-HEER", + "changed_at": "2026-01-09T19:43:39.411774+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "196X", + "primary_rationale": "1965 is in 196X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministerie van Onderwijs, Cultuur en Wetenschap", + "title": "Administratief Medewerker", + "date_range": "Oct 1988 - Jul 1990" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1988 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1988 - 23 = 1965", + "result": "Estimated birth year: 1965", + "range": "1960-1970 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1960, + 1970 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1965 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:50:50.214961+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-UT-HOU_195X_NL-UT-HOU_XXXX_JOHN-KEMENADE.json b/data/person/ID_NL-UT-HOU_195X_NL-UT-HOU_XXXX_JOHN-KEMENADE.json index 25bf61ee20..487773c5ee 100644 --- a/data/person/ID_NL-UT-HOU_195X_NL-UT-HOU_XXXX_JOHN-KEMENADE.json +++ b/data/person/ID_NL-UT-HOU_195X_NL-UT-HOU_XXXX_JOHN-KEMENADE.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/john-van-kemenade-a3804716_20251214T110647Z.json" ], - "modified_at": "2026-01-09T19:18:15.221789+00:00", + "modified_at": "2026-01-09T19:51:07.033164+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "john-van-kemenade-a3804716", @@ -159,7 +159,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.221785+00:00", + "inferred_at": "2026-01-09T19:51:07.033159+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-LEU_198X_NL-NH-AMS_XXXX_NOORTJE-BREIJDER.json b/data/person/ID_NL-UT-LEU_198X_NL-NH-AMS_XXXX_NOORTJE-BREIJDER.json index 1a685d0a19..bf2a51d97d 100644 --- a/data/person/ID_NL-UT-LEU_198X_NL-NH-AMS_XXXX_NOORTJE-BREIJDER.json +++ b/data/person/ID_NL-UT-LEU_198X_NL-NH-AMS_XXXX_NOORTJE-BREIJDER.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/noortjebreijder_20251214T110248Z.json" ], - "modified_at": "2026-01-09T19:18:13.076247+00:00", + "modified_at": "2026-01-09T19:50:51.044201+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "noortjebreijder", @@ -187,7 +187,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.076242+00:00", + "inferred_at": "2026-01-09T19:50:51.044189+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-MAA_199X_NL-GE-GRO_XXXX_ELISE-STEMERDINK.json b/data/person/ID_NL-UT-MAA_199X_NL-GE-GRO_XXXX_ELISE-STEMERDINK.json index 7a27fb3c82..96b60a64d9 100644 --- a/data/person/ID_NL-UT-MAA_199X_NL-GE-GRO_XXXX_ELISE-STEMERDINK.json +++ b/data/person/ID_NL-UT-MAA_199X_NL-GE-GRO_XXXX_ELISE-STEMERDINK.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elise-stemerdink-0b5a9721a_20251214T110644Z.json" ], - "modified_at": "2026-01-09T19:18:15.631772+00:00", + "modified_at": "2026-01-09T19:50:59.787909+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elise-stemerdink-0b5a9721a", @@ -170,7 +170,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.631766+00:00", + "inferred_at": "2026-01-09T19:50:59.787765+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-MAA_199X_NL-NH-ZAA_XXXX_LOES-M.json b/data/person/ID_NL-UT-MAA_199X_NL-NH-ZAA_XXXX_LOES-M.json index 318769bbf9..a613af60d3 100644 --- a/data/person/ID_NL-UT-MAA_199X_NL-NH-ZAA_XXXX_LOES-M.json +++ b/data/person/ID_NL-UT-MAA_199X_NL-NH-ZAA_XXXX_LOES-M.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/loes-m-81b490128_20251214T110212Z.json" ], - "modified_at": "2026-01-09T19:18:12.414221+00:00", + "modified_at": "2026-01-09T19:51:14.424434+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "loes-m-81b490128", @@ -187,7 +187,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.414210+00:00", + "inferred_at": "2026-01-09T19:51:14.424426+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-MON_196X_NL-UT-AME_XXXX_CARLA-SANDBRINK.json b/data/person/ID_NL-UT-MON_196X_NL-UT-AME_XXXX_CARLA-SANDBRINK.json index e0a473134a..cac3c2f335 100644 --- a/data/person/ID_NL-UT-MON_196X_NL-UT-AME_XXXX_CARLA-SANDBRINK.json +++ b/data/person/ID_NL-UT-MON_196X_NL-UT-AME_XXXX_CARLA-SANDBRINK.json @@ -150,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carla-sandbrink-94299224_20251214T103358Z.json" ], - "modified_at": "2026-01-09T19:18:15.305457+00:00", + "modified_at": "2026-01-09T19:50:51.070100+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carla-sandbrink-94299224", @@ -188,7 +188,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -237,7 +237,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.305451+00:00", + "inferred_at": "2026-01-09T19:50:51.070093+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-NIE_197X_XX-XX-XXX_XXXX_RODERICK-DERKS.json b/data/person/ID_NL-UT-NIE_197X_XX-XX-XXX_XXXX_RODERICK-DERKS.json index 8da41fa12a..2c697e622c 100644 --- a/data/person/ID_NL-UT-NIE_197X_XX-XX-XXX_XXXX_RODERICK-DERKS.json +++ b/data/person/ID_NL-UT-NIE_197X_XX-XX-XXX_XXXX_RODERICK-DERKS.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roderickderks_20251214T111215Z.json" ], - "modified_at": "2026-01-09T19:18:13.591157+00:00", + "modified_at": "2026-01-09T19:50:55.118960+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "roderickderks", @@ -182,7 +182,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +231,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.589152+00:00", + "inferred_at": "2026-01-09T19:50:55.115409+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-RHE_197X_NL-UT-RHE_XXXX_SANDRA-BOERS.json b/data/person/ID_NL-UT-RHE_197X_NL-UT-RHE_XXXX_SANDRA-BOERS.json index 55784f00dd..566c946380 100644 --- a/data/person/ID_NL-UT-RHE_197X_NL-UT-RHE_XXXX_SANDRA-BOERS.json +++ b/data/person/ID_NL-UT-RHE_197X_NL-UT-RHE_XXXX_SANDRA-BOERS.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sandra-boers-5820317b_20251214T110514Z.json" ], - "modified_at": "2026-01-09T19:18:13.015267+00:00", + "modified_at": "2026-01-09T19:50:50.587948+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sandra-boers-5820317b", @@ -139,7 +139,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.015263+00:00", + "inferred_at": "2026-01-09T19:50:50.587943+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-SOE_XXXX_DIRK-STAAT.json b/data/person/ID_NL-UT-SOE_199X_NL-UT-SOE_XXXX_DIRK-STAAT.json similarity index 61% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-SOE_XXXX_DIRK-STAAT.json rename to data/person/ID_NL-UT-SOE_199X_NL-UT-SOE_XXXX_DIRK-STAAT.json index 3469f4705d..ae3be1c40a 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-SOE_XXXX_DIRK-STAAT.json +++ b/data/person/ID_NL-UT-SOE_199X_NL-UT-SOE_XXXX_DIRK-STAAT.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-SOE_XXXX_DIRK-STAAT", + "ppid": "ID_NL-UT-SOE_199X_NL-UT-SOE_XXXX_DIRK-STAAT", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-UT-SOE", + "first_date": "199X", "last_location": "NL-UT-SOE", "last_date": "XXXX", "name_tokens": [ "DIRK", "STAAT" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Dirk Staat", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -100,63 +106,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dirk-staat-012881125_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:56.028253+00:00", + "modified_at": "2026-01-09T19:51:34.111632+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dirk-staat-012881125", - "inferred_current_settlement": { - "value": "Soesterberg", - "formatted": "NL-UT-SOE", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "SOE", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Soesterberg, Utrecht, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Soesterberg, Utrecht, Netherlands", - "result": { - "geonames_id": 2747030, - "geonames_name": "Soesterberg", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPL", - "latitude": 52.11833, - "longitude": 5.28611 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-SOE" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747030, - "geonames_name": "Soesterberg", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPL", - "latitude": 52.11833, - "longitude": 5.28611 - }, - "inferred_at": "2026-01-09T17:42:56.028247+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DIRK-STAAT", @@ -166,6 +119,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-SOE_XXXX_DIRK-STAAT", + "new_ppid": "ID_NL-UT-SOE_199X_NL-UT-SOE_XXXX_DIRK-STAAT", + "changed_at": "2026-01-09T19:43:42.437086+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1991 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Nationaal Militair Museum", + "title": "Conservator Public History", + "date_range": "2014" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2014 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2014 - 23 = 1991", + "result": "Estimated birth year: 1991", + "range": "1986-1996 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1986, + 1996 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:34.111617+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARJAN-UITHOL.json b/data/person/ID_NL-UT-SOE_200X_NL-NH-AMS_XXXX_ARJAN-UITHOL.json similarity index 64% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARJAN-UITHOL.json rename to data/person/ID_NL-UT-SOE_200X_NL-NH-AMS_XXXX_ARJAN-UITHOL.json index 4e8e75b124..0e9608ea4a 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARJAN-UITHOL.json +++ b/data/person/ID_NL-UT-SOE_200X_NL-NH-AMS_XXXX_ARJAN-UITHOL.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARJAN-UITHOL", + "ppid": "ID_NL-UT-SOE_200X_NL-NH-AMS_XXXX_ARJAN-UITHOL", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-UT-SOE", + "first_date": "200X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ARJAN", "UITHOL" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Arjan Uithol", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -134,63 +140,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arjan-uithol-4474671b_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:01.233427+00:00", + "modified_at": "2026-01-09T19:51:25.487915+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arjan-uithol-4474671b", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:01.233417+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARJAN-UITHOL", @@ -200,6 +153,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ARJAN-UITHOL", + "new_ppid": "ID_NL-UT-SOE_200X_NL-NH-AMS_XXXX_ARJAN-UITHOL", + "changed_at": "2026-01-09T19:43:37.755351+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2000 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Nationaal Militair Museum", + "title": "Hoofd Publiek (Head of Public Engagement)", + "date_range": "2023" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2023 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2023 - 23 = 2000", + "result": "Estimated birth year: 2000", + "range": "1995-2005 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1995, + 2005 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:25.487912+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-UT-UTR_195X_NL-GR-GRO_XXXX_JAN-SAMSOM.json b/data/person/ID_NL-UT-UTR_195X_NL-GR-GRO_XXXX_JAN-SAMSOM.json index b74bc9f97b..219fc559c1 100644 --- a/data/person/ID_NL-UT-UTR_195X_NL-GR-GRO_XXXX_JAN-SAMSOM.json +++ b/data/person/ID_NL-UT-UTR_195X_NL-GR-GRO_XXXX_JAN-SAMSOM.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-samsom-a3a199a_20251214T113205Z.json" ], - "modified_at": "2026-01-09T19:18:14.581495+00:00", + "modified_at": "2026-01-09T19:50:47.038402+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-samsom-a3a199a", @@ -219,7 +219,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -268,7 +268,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:14.581486+00:00", + "inferred_at": "2026-01-09T19:50:47.038392+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-NB-HAL_XXXX_MARY-HOOIJDONK.json b/data/person/ID_NL-UT-UTR_195X_NL-NB-HAL_XXXX_MARY-HOOIJDONK.json similarity index 74% rename from data/person/ID_XX-XX-XXX_195X_NL-NB-HAL_XXXX_MARY-HOOIJDONK.json rename to data/person/ID_NL-UT-UTR_195X_NL-NB-HAL_XXXX_MARY-HOOIJDONK.json index 7bc5c58050..e27bf9cc58 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-NB-HAL_XXXX_MARY-HOOIJDONK.json +++ b/data/person/ID_NL-UT-UTR_195X_NL-NB-HAL_XXXX_MARY-HOOIJDONK.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_195X_NL-NB-HAL_XXXX_MARY-HOOIJDONK", + "ppid": "ID_NL-UT-UTR_195X_NL-NB-HAL_XXXX_MARY-HOOIJDONK", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-UT-UTR", "first_date": "195X", "last_location": "NL-NB-HAL", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Mary van Hooijdonk", @@ -125,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mary-van-hooijdonk-96342978_20251214T104029Z.json" ], - "modified_at": "2026-01-09T19:18:15.059091+00:00", + "modified_at": "2026-01-09T19:50:54.444507+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mary-van-hooijdonk-96342978", @@ -148,6 +149,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_195X_NL-NB-HAL_XXXX_MARY-HOOIJDONK", + "new_ppid": "ID_NL-UT-UTR_195X_NL-NB-HAL_XXXX_MARY-HOOIJDONK", + "changed_at": "2026-01-09T19:50:54.444505+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -162,7 +173,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +222,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.057182+00:00", + "inferred_at": "2026-01-09T19:50:54.442175+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Utrecht", + "formatted": "NL-UT-UTR", + "country_code": "NL", + "region_code": "UT", + "settlement_code": "UTR", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "GO opleidingen", + "date_range": "2016 - 2018 • 2 years", + "degree": "Archiefbeheer en Recordsmanagement, 8" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "GO opleidingen", + "mapping_result": "Utrecht, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Utrecht, Netherlands", + "result": { + "geonames_id": 2745912, + "geonames_name": "Utrecht", + "admin1_code": "09", + "admin1_name": "Utrecht", + "feature_code": "PPLA", + "latitude": 52.09083, + "longitude": 5.12222 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "UT", + "settlement_code": "UTR" + }, + "result": "NL-UT-UTR" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2745912, + "geonames_name": "Utrecht", + "admin1_code": "09", + "admin1_name": "Utrecht", + "feature_code": "PPLA", + "latitude": 52.09083, + "longitude": 5.12222 + }, + "inferred_at": "2026-01-09T19:50:54.444496+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_195X_NL-NH-AMS_XXXX_ANNEMIES-BROEKGAARDEN.json b/data/person/ID_NL-UT-UTR_195X_NL-NH-AMS_XXXX_ANNEMIES-BROEKGAARDEN.json index 62753c3b4c..1db4a5a957 100644 --- a/data/person/ID_NL-UT-UTR_195X_NL-NH-AMS_XXXX_ANNEMIES-BROEKGAARDEN.json +++ b/data/person/ID_NL-UT-UTR_195X_NL-NH-AMS_XXXX_ANNEMIES-BROEKGAARDEN.json @@ -188,7 +188,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annemies-broekgaarden_20251214T111356Z.json" ], - "modified_at": "2026-01-09T19:18:15.116015+00:00", + "modified_at": "2026-01-09T19:51:28.833994+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annemies-broekgaarden", @@ -220,7 +220,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -261,7 +261,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.116007+00:00", + "inferred_at": "2026-01-09T19:51:28.833990+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_195X_NL-NH-AMS_XXXX_CARMEN-CAIRO.json b/data/person/ID_NL-UT-UTR_195X_NL-NH-AMS_XXXX_CARMEN-CAIRO.json index 3d50f1fc35..26d08fa5a6 100644 --- a/data/person/ID_NL-UT-UTR_195X_NL-NH-AMS_XXXX_CARMEN-CAIRO.json +++ b/data/person/ID_NL-UT-UTR_195X_NL-NH-AMS_XXXX_CARMEN-CAIRO.json @@ -194,7 +194,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carmen-cairo-112a6864_20251214T111726Z.json" ], - "modified_at": "2026-01-09T19:18:15.064813+00:00", + "modified_at": "2026-01-09T19:51:06.667611+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carmen-cairo-112a6864", @@ -223,7 +223,7 @@ "primary_rationale": "1957 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -272,7 +272,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1957 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.064807+00:00", + "inferred_at": "2026-01-09T19:51:06.667607+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_195X_NL-NH-AMS_XXXX_DU-MORTIER.json b/data/person/ID_NL-UT-UTR_195X_NL-NH-AMS_XXXX_DU-MORTIER.json index 7cda98cb5e..2a0f65de8b 100644 --- a/data/person/ID_NL-UT-UTR_195X_NL-NH-AMS_XXXX_DU-MORTIER.json +++ b/data/person/ID_NL-UT-UTR_195X_NL-NH-AMS_XXXX_DU-MORTIER.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bianca-m-mortier-du-75a7a0a_20251214T111539Z.json" ], - "modified_at": "2026-01-09T19:18:15.103159+00:00", + "modified_at": "2026-01-09T19:51:06.731425+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bianca-m-mortier-du-75a7a0a", @@ -154,7 +154,7 @@ "primary_rationale": "1952 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1952 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:15.103151+00:00", + "inferred_at": "2026-01-09T19:51:06.731419+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_195X_NL-NH-ZAA_XXXX_CHRIS-KOPPEN.json b/data/person/ID_NL-UT-UTR_195X_NL-NH-ZAA_XXXX_CHRIS-KOPPEN.json index 10a4690866..d1f0c8889b 100644 --- a/data/person/ID_NL-UT-UTR_195X_NL-NH-ZAA_XXXX_CHRIS-KOPPEN.json +++ b/data/person/ID_NL-UT-UTR_195X_NL-NH-ZAA_XXXX_CHRIS-KOPPEN.json @@ -208,7 +208,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chrisvankoppen_20251214T112350Z.json" ], - "modified_at": "2026-01-09T19:18:17.048378+00:00", + "modified_at": "2026-01-09T19:51:23.192441+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "chrisvankoppen", @@ -231,7 +231,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -272,7 +272,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.048357+00:00", + "inferred_at": "2026-01-09T19:51:23.192434+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_195X_NL-OV-BLO_XXXX_JOS-MOOIJWEER.json b/data/person/ID_NL-UT-UTR_195X_NL-OV-BLO_XXXX_JOS-MOOIJWEER.json index ddcd1fc628..5b4ab24ea0 100644 --- a/data/person/ID_NL-UT-UTR_195X_NL-OV-BLO_XXXX_JOS-MOOIJWEER.json +++ b/data/person/ID_NL-UT-UTR_195X_NL-OV-BLO_XXXX_JOS-MOOIJWEER.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jos-mooijweer-583a24aa_20251214T110413Z.json" ], - "modified_at": "2026-01-09T19:18:13.571079+00:00", + "modified_at": "2026-01-09T19:51:17.583039+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jos-mooijweer-583a24aa", @@ -172,7 +172,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.571072+00:00", + "inferred_at": "2026-01-09T19:51:17.583029+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_195X_NL-UT-UTR_XXXX_ANJA-SMIT.json b/data/person/ID_NL-UT-UTR_195X_NL-UT-UTR_XXXX_ANJA-SMIT.json deleted file mode 100644 index 18e9e9c5ab..0000000000 --- a/data/person/ID_NL-UT-UTR_195X_NL-UT-UTR_XXXX_ANJA-SMIT.json +++ /dev/null @@ -1,270 +0,0 @@ -{ - "ppid": "ID_NL-UT-UTR_195X_NL-UT-UTR_XXXX_ANJA-SMIT", - "ppid_type": "ID", - "ppid_components": { - "type": "ID", - "first_location": "NL-UT-UTR", - "first_date": "195X", - "last_location": "NL-UT-UTR", - "last_date": "XXXX", - "name_tokens": [ - "ANJA", - "SMIT" - ], - "first_date_source": "inferred_birth_decade.primary_value", - "first_location_source": "inferred_birth_settlement", - "last_location_source": "inferred_current_settlement", - "first_date_alternatives": [ - "196X" - ] - }, - "name": { - "full_name": "Anja Smit", - "display_name": "Anja Smit", - "name_romanized": null, - "name_tokens": [ - "ANJA", - "SMIT" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown", - "note": "See inferred_birth_decade for heuristic estimate" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "R" - ], - "rationale": "Identified as heritage staff at DANS" - }, - "affiliations": [], - "profile_data": { - "name": "Anja Smit", - "linkedin_url": "https://www.linkedin.com/in/anjasmit", - "headline": "Directeur DANS, Instituut van KNAW / NWO", - "location": "Utrecht Area (NL)", - "connections": "500 connections • 1,232 followers", - "about": "Total Experience: 43 years and 1 month", - "experience": [ - { - "title": "Directeur", - "company": "Data Archiving and Networked Services (DANS)", - "date_range": "Jul 2022 - Present • 3 years and 4 months", - "location": "Den Haag, Zuid-Holland, Nederland" - }, - { - "title": "Secretary General", - "company": "LIBER Europe", - "date_range": "Jul 2021 - Present • 4 years and 4 months", - "location": "Nederland" - }, - { - "title": "Member Board Of Trustees", - "company": "OCLC", - "date_range": "Nov 2020 - Present • 5 years", - "location": "Verenigde Staten" - }, - { - "title": "Expert Advisor Finance To The Executive Board Of LIBER", - "company": "LIBER Europe", - "date_range": "Jul 2020 - Jun 2021 • 11 months", - "location": "European Association of Research Libraries" - }, - { - "title": "Member Of The Executive Board And Treasurer Of LIBER", - "company": "LIBER Europe", - "date_range": "Jul 2015 - Jun 2020 • 4 years and 11 months" - }, - { - "title": "University Librarian", - "company": "Universiteit Utrecht", - "date_range": "Mar 2010 - Jul 2022 • 12 years and 4 months" - }, - { - "title": "Open Science Programmamanager", - "company": "Universiteit Utrecht", - "date_range": "Feb 2019 - Aug 2020 • 1 year and 6 months", - "location": "Nederland" - }, - { - "title": "Member INFO OPEN ACCESS GROUP", - "company": "League of European Research Universities (LERU)", - "date_range": "Mar 2010 - Apr 2022 • 12 years and 1 month" - }, - { - "title": "Member Of The Board", - "company": "Sparc Europe", - "date_range": "Jun 2015 - Dec 2017 • 2 years and 6 months" - }, - { - "title": "President Global Council", - "company": "OCLC", - "date_range": "Jul 2015 - Jul 2016 • 1 year" - }, - { - "title": "Chair", - "company": "UKB Consortium", - "date_range": "Sep 2011 - Sep 2014 • 3 years" - }, - { - "title": "University Librarian", - "company": "Maastricht University", - "date_range": "Jan 2008 - Mar 2010 • 2 years and 2 months" - }, - { - "title": "Interim Manager", - "company": "Universiteit Utrecht", - "date_range": "Sep 2007 - Dec 2007 • 3 months" - }, - { - "title": "Executive Consultant", - "company": "NELINET", - "date_range": "Oct 2004 - Aug 2007 • 2 years and 10 months" - }, - { - "title": "University Librarian", - "company": "Nijmegen University", - "date_range": "Oct 2002 - Sep 2004 • 1 year and 11 months" - }, - { - "title": "Associate University Librarian", - "company": "Nijmegen University", - "date_range": "Feb 1996 - Sep 2002 • 6 years and 7 months" - }, - { - "title": "Consultant", - "company": "Atex Publishing", - "date_range": "Jul 1994 - Feb 1996 • 1 year and 7 months", - "location": "Gouda" - } - ], - "education": [ - { - "degree": "MA", - "institution": "Universiteit Utrecht", - "date_range": "1979 - 1987 • 8 years" - } - ], - "skills": [ - "finance", - "science" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/anjasmit_20251214T110458Z.json", - "observed_on": "2025-12-14T11:04:58.653064+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.696637+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/anjasmit_20251214T110458Z.json" - ], - "modified_at": "2026-01-09T19:18:17.543837+00:00", - "modified_by": "enrich_ppids.py" - }, - "linkedin_slug": "anjasmit", - "ppid_history": [ - { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANJA-SMIT", - "new_ppid": "ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_ANJA-SMIT", - "changed_at": "2026-01-09T17:43:03.131537+00:00", - "reason": "observation_based_inference", - "inferred_fields": [ - "inferred_birth_decade", - "inferred_birth_settlement", - "inferred_current_settlement" - ] - }, - { - "previous_ppid": "ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_ANJA-SMIT", - "new_ppid": "ID_NL-UT-UTR_195X_NL-UT-UTR_XXXX_ANJA-SMIT", - "changed_at": "2026-01-09T19:18:17.543836+00:00", - "reason": "observation_based_inference", - "inferred_fields": [ - "inferred_birth_decade" - ] - } - ], - "inferred_birth_decade": { - "values": [ - "195X", - "196X" - ], - "edtf": "[195X,196X]", - "edtf_meaning": "one of: 1950s or 1960s", - "precision": "decade_set", - "primary_value": "195X", - "primary_rationale": "1957 is in 195X, but range extends into 196X", - "confidence": "very_low", - "inference_provenance": { - "method": "earliest_observation_heuristic", - "inference_chain": [ - { - "step": 1, - "observation": "Education record found", - "source_field": "profile_data.education", - "source_value": { - "institution": "Universiteit Utrecht", - "degree": "MA", - "date_range": "1979 - 1987 • 8 years" - } - }, - { - "step": 2, - "extraction": "Start year extracted from date_range", - "extracted_value": 1979 - }, - { - "step": 3, - "assumption": "Education entry age is approximately 22 (±3 years)", - "rationale": "Standard entry age for this education level in Netherlands/Europe", - "confidence_impact": "Assumption introduces uncertainty; actual age may vary ±3 years" - }, - { - "step": 4, - "calculation": "1979 - 22 = 1957", - "result": "Estimated birth year: 1957", - "range": "1954-1960 (accounting for ±3 year variance)" - }, - { - "step": 5, - "generalization": "Birth year range spans decade boundary", - "input_range": [ - 1954, - 1960 - ], - "output": [ - "195X", - "196X" - ], - "edtf": "[195X,196X]", - "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" - } - ], - "assumptions": [ - "Entry age for education/first job: 22 years (±3)", - "Career records are complete in LinkedIn profile" - ], - "boundary_note": "Birth year estimate 1957 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:17.543831+00:00", - "inferred_by": "enrich_ppids.py" - } - } -} \ No newline at end of file diff --git a/data/person/ID_NL-UT-UTR_195X_NL-UT-UTR_XXXX_MICHIEL-GOOSEN.json b/data/person/ID_NL-UT-UTR_195X_NL-UT-UTR_XXXX_MICHIEL-GOOSEN.json index 6bdc9c5a23..dde320fa7d 100644 --- a/data/person/ID_NL-UT-UTR_195X_NL-UT-UTR_XXXX_MICHIEL-GOOSEN.json +++ b/data/person/ID_NL-UT-UTR_195X_NL-UT-UTR_XXXX_MICHIEL-GOOSEN.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michielgoosen_20251214T110003Z.json" ], - "modified_at": "2026-01-09T19:18:14.280437+00:00", + "modified_at": "2026-01-09T19:51:28.836548+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michielgoosen", @@ -189,7 +189,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:14.280430+00:00", + "inferred_at": "2026-01-09T19:51:28.836541+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_195X_NL-ZH-ROT_XXXX_ELINE-GERATS.json b/data/person/ID_NL-UT-UTR_195X_NL-ZH-ROT_XXXX_ELINE-GERATS.json index 2df4ce13b3..2cb80d2ec8 100644 --- a/data/person/ID_NL-UT-UTR_195X_NL-ZH-ROT_XXXX_ELINE-GERATS.json +++ b/data/person/ID_NL-UT-UTR_195X_NL-ZH-ROT_XXXX_ELINE-GERATS.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eline-gerats-41a44029_20251212T230200Z.json" ], - "modified_at": "2026-01-09T19:18:15.598991+00:00", + "modified_at": "2026-01-09T19:51:13.439667+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eline-gerats-41a44029", @@ -180,7 +180,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.598985+00:00", + "inferred_at": "2026-01-09T19:51:13.439660+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_195X_NL-ZH-ROT_XXXX_MARG-BURGH.json b/data/person/ID_NL-UT-UTR_195X_NL-ZH-ROT_XXXX_MARG-BURGH.json index 582602283c..c30b8733b4 100644 --- a/data/person/ID_NL-UT-UTR_195X_NL-ZH-ROT_XXXX_MARG-BURGH.json +++ b/data/person/ID_NL-UT-UTR_195X_NL-ZH-ROT_XXXX_MARG-BURGH.json @@ -185,7 +185,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marg-van-der-burgh-42539014_20251214T113235Z.json" ], - "modified_at": "2026-01-09T19:18:17.066718+00:00", + "modified_at": "2026-01-09T19:51:18.290155+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marg-van-der-burgh-42539014", @@ -217,7 +217,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.066710+00:00", + "inferred_at": "2026-01-09T19:51:18.290149+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_ARJEN-KOK.json b/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_ARJEN-KOK.json index 18af656619..064b3ee572 100644 --- a/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_ARJEN-KOK.json +++ b/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_ARJEN-KOK.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arjen-kok-a9034811_20251214T110748Z.json" ], - "modified_at": "2026-01-09T19:18:16.598109+00:00", + "modified_at": "2026-01-09T19:50:54.653450+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arjen-kok-a9034811", @@ -132,7 +132,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.598103+00:00", + "inferred_at": "2026-01-09T19:50:54.653445+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_EMILIET-ALBERS.json b/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_EMILIET-ALBERS.json index fc2f836923..04ea30ba1e 100644 --- a/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_EMILIET-ALBERS.json +++ b/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_EMILIET-ALBERS.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emiliet-albers-8578a1b_20251214T112949Z.json" ], - "modified_at": "2026-01-09T19:18:16.111105+00:00", + "modified_at": "2026-01-09T19:51:04.049570+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emiliet-albers-8578a1b", @@ -153,7 +153,7 @@ "primary_rationale": "1957 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1957 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.111098+00:00", + "inferred_at": "2026-01-09T19:51:04.049564+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_MARCUS-LEEUW.json b/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_MARCUS-LEEUW.json index 361cf59dab..449e186617 100644 --- a/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_MARCUS-LEEUW.json +++ b/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_MARCUS-LEEUW.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marcus-de-leeuw-43965562_20251214T102943Z.json" ], - "modified_at": "2026-01-09T19:18:13.571931+00:00", + "modified_at": "2026-01-09T19:50:58.902348+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marcus-de-leeuw-43965562", @@ -165,7 +165,7 @@ "primary_rationale": "1957 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1957 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.571925+00:00", + "inferred_at": "2026-01-09T19:50:58.902340+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_PETER-DOORN.json b/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_PETER-DOORN.json index 3d24382ffe..3739138f0d 100644 --- a/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_PETER-DOORN.json +++ b/data/person/ID_NL-UT-UTR_195X_NL-ZH-TH_XXXX_PETER-DOORN.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/peterdoorn_20251214T110450Z.json" ], - "modified_at": "2026-01-09T19:18:12.770588+00:00", + "modified_at": "2026-01-09T19:50:48.877929+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "peterdoorn", @@ -131,7 +131,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.770580+00:00", + "inferred_at": "2026-01-09T19:50:48.877920+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_195X_XX-XX-XXX_XXXX_LAMBERT-AKSE.json b/data/person/ID_NL-UT-UTR_195X_XX-XX-XXX_XXXX_LAMBERT-AKSE.json index 41f17d4737..c572890012 100644 --- a/data/person/ID_NL-UT-UTR_195X_XX-XX-XXX_XXXX_LAMBERT-AKSE.json +++ b/data/person/ID_NL-UT-UTR_195X_XX-XX-XXX_XXXX_LAMBERT-AKSE.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lambert-akse-74ba92b_20251214T110347Z.json" ], - "modified_at": "2026-01-09T19:18:14.834092+00:00", + "modified_at": "2026-01-09T19:51:04.777995+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lambert-akse-74ba92b", @@ -135,7 +135,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.834082+00:00", + "inferred_at": "2026-01-09T19:51:04.573554+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_195X_XX-XX-XXX_XXXX_MARTINE-POL.json b/data/person/ID_NL-UT-UTR_195X_XX-XX-XXX_XXXX_MARTINE-POL.json index 7d682eacf5..1ff4de71f8 100644 --- a/data/person/ID_NL-UT-UTR_195X_XX-XX-XXX_XXXX_MARTINE-POL.json +++ b/data/person/ID_NL-UT-UTR_195X_XX-XX-XXX_XXXX_MARTINE-POL.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martine-pol-8a632622_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:14.185687+00:00", + "modified_at": "2026-01-09T19:51:22.036511+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martine-pol-8a632622", @@ -217,7 +217,7 @@ "primary_rationale": "1957 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -266,7 +266,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1957 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:14.183659+00:00", + "inferred_at": "2026-01-09T19:51:22.034006+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-FL-AS_XXXX_MONICA-DAMEN.json b/data/person/ID_NL-UT-UTR_196X_NL-FL-AS_XXXX_MONICA-DAMEN.json index f242fcca66..c2a447eacf 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-FL-AS_XXXX_MONICA-DAMEN.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-FL-AS_XXXX_MONICA-DAMEN.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/monica-damen-85a0878_20251214T112541Z.json" ], - "modified_at": "2026-01-09T19:18:14.911517+00:00", + "modified_at": "2026-01-09T19:51:05.496156+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "monica-damen-85a0878", @@ -172,7 +172,7 @@ "primary_rationale": "1963 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1963 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:14.911510+00:00", + "inferred_at": "2026-01-09T19:51:05.496140+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-APE_XXXX_ANDRIEKE-OLLEFERS.json b/data/person/ID_NL-UT-UTR_196X_NL-GE-APE_XXXX_ANDRIEKE-OLLEFERS.json similarity index 74% rename from data/person/ID_XX-XX-XXX_XXXX_NL-GE-APE_XXXX_ANDRIEKE-OLLEFERS.json rename to data/person/ID_NL-UT-UTR_196X_NL-GE-APE_XXXX_ANDRIEKE-OLLEFERS.json index 1c6d2d5802..233abb1222 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-APE_XXXX_ANDRIEKE-OLLEFERS.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-GE-APE_XXXX_ANDRIEKE-OLLEFERS.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-GE-APE_XXXX_ANDRIEKE-OLLEFERS", + "ppid": "ID_NL-UT-UTR_196X_NL-GE-APE_XXXX_ANDRIEKE-OLLEFERS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-UT-UTR", + "first_date": "196X", "last_location": "NL-GE-APE", "last_date": "XXXX", "name_tokens": [ "ANDRIEKE", "OLLEFERS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Andrieke Ollefers", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -207,63 +213,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/andriekeollefers_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:07.168832+00:00", + "modified_at": "2026-01-09T19:51:03.397028+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "andriekeollefers", - "inferred_current_settlement": { - "value": "Apeldoorn", - "formatted": "NL-GE-APE", - "country_code": "NL", - "region_code": "GE", - "settlement_code": "APE", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Apeldoorn, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Apeldoorn, Netherlands", - "result": { - "geonames_id": 2759706, - "geonames_name": "Apeldoorn", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPL", - "latitude": 52.21, - "longitude": 5.96944 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-GE-APE" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759706, - "geonames_name": "Apeldoorn", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPL", - "latitude": 52.21, - "longitude": 5.96944 - }, - "inferred_at": "2026-01-09T17:43:07.168825+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANDRIEKE-OLLEFERS", @@ -273,6 +226,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-APE_XXXX_ANDRIEKE-OLLEFERS", + "new_ppid": "ID_NL-UT-UTR_196X_NL-GE-APE_XXXX_ANDRIEKE-OLLEFERS", + "changed_at": "2026-01-09T19:43:38.288986+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "196X", + "primary_rationale": "1967 is in 196X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Rijksarchiefdienst", + "title": "Diverse automatiseringsfuncties", + "date_range": "1990 - 2001" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1990 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1990 - 23 = 1967", + "result": "Estimated birth year: 1967", + "range": "1962-1972 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1962, + 1972 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:51:03.397023+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-UT-UTR_196X_NL-GE-APE_XXXX_SASKIA-SPOELSTRA.json b/data/person/ID_NL-UT-UTR_196X_NL-GE-APE_XXXX_SASKIA-SPOELSTRA.json index ab5e2a7335..9075a32947 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-GE-APE_XXXX_SASKIA-SPOELSTRA.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-GE-APE_XXXX_SASKIA-SPOELSTRA.json @@ -190,7 +190,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saskia-spoelstra-530b5b182_20251214T103403Z.json" ], - "modified_at": "2026-01-09T19:18:14.925977+00:00", + "modified_at": "2026-01-09T19:51:05.534175+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saskia-spoelstra-530b5b182", @@ -219,7 +219,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -268,7 +268,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.925973+00:00", + "inferred_at": "2026-01-09T19:51:05.534164+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-GE-TIE_XXXX_TANJA-KUSTERS.json b/data/person/ID_NL-UT-UTR_196X_NL-GE-TIE_XXXX_TANJA-KUSTERS.json index 4bfa7001c0..b254c1593e 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-GE-TIE_XXXX_TANJA-KUSTERS.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-GE-TIE_XXXX_TANJA-KUSTERS.json @@ -200,7 +200,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kusterscommunicatie_20251214T110341Z.json" ], - "modified_at": "2026-01-09T19:18:16.659833+00:00", + "modified_at": "2026-01-09T19:51:21.359312+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kusterscommunicatie", @@ -224,7 +224,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -265,7 +265,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.659829+00:00", + "inferred_at": "2026-01-09T19:51:21.359308+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-GR-GRO_XXXX_HENDRIK-DEIMAN.json b/data/person/ID_NL-UT-UTR_196X_NL-GR-GRO_XXXX_HENDRIK-DEIMAN.json index 5d0006b1b0..2e1a7cf593 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-GR-GRO_XXXX_HENDRIK-DEIMAN.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-GR-GRO_XXXX_HENDRIK-DEIMAN.json @@ -173,7 +173,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hendrik-deiman-9689259_20251214T112142Z.json" ], - "modified_at": "2026-01-09T19:18:12.588493+00:00", + "modified_at": "2026-01-09T19:50:48.515897+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hendrik-deiman-9689259", @@ -202,7 +202,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -251,7 +251,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.588483+00:00", + "inferred_at": "2026-01-09T19:50:48.515889+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-LI-BAN_XXXX_HANS-HALL.json b/data/person/ID_NL-UT-UTR_196X_NL-LI-BAN_XXXX_HANS-HALL.json index d56e81c5fe..493a358306 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-LI-BAN_XXXX_HANS-HALL.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-LI-BAN_XXXX_HANS-HALL.json @@ -81,7 +81,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hans-van-hall-924278163_20251214T110448Z.json" ], - "modified_at": "2026-01-09T19:18:13.385570+00:00", + "modified_at": "2026-01-09T19:50:54.004122+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hans-van-hall-924278163", @@ -110,7 +110,7 @@ "primary_rationale": "1960 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +159,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1960 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.385563+00:00", + "inferred_at": "2026-01-09T19:50:54.004116+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_AUKJE-VERGEEST.json b/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_AUKJE-VERGEEST.json index d60dc5326c..8c1bb01e35 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_AUKJE-VERGEEST.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_AUKJE-VERGEEST.json @@ -219,7 +219,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aukje-vergeest-56b2907_20251214T111856Z.json" ], - "modified_at": "2026-01-09T19:18:17.245442+00:00", + "modified_at": "2026-01-09T19:51:03.398631+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aukje-vergeest-56b2907", @@ -251,7 +251,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -292,7 +292,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.245436+00:00", + "inferred_at": "2026-01-09T19:51:03.398628+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_ESTHER-BRINKMAN.json b/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_ESTHER-BRINKMAN.json index ffbc824bdc..dc59914b7a 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_ESTHER-BRINKMAN.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_ESTHER-BRINKMAN.json @@ -336,7 +336,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/esther-brinkman-4961871a_20251214T110314Z.json" ], - "modified_at": "2026-01-09T19:18:15.251876+00:00", + "modified_at": "2026-01-09T19:51:07.300066+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "esther-brinkman-4961871a", @@ -359,7 +359,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -400,7 +400,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.251872+00:00", + "inferred_at": "2026-01-09T19:51:07.300055+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_JANTIEN-WURTH.json b/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_JANTIEN-WURTH.json index 799dfdd7c4..8c55cc3bf3 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_JANTIEN-WURTH.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_JANTIEN-WURTH.json @@ -265,7 +265,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jantienbrillenburgwurth_20251214T103100Z.json" ], - "modified_at": "2026-01-09T19:18:14.776274+00:00", + "modified_at": "2026-01-09T19:51:04.063183+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jantienbrillenburgwurth", @@ -294,7 +294,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -343,7 +343,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:14.776270+00:00", + "inferred_at": "2026-01-09T19:51:04.063178+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_LEENDERT-BOOYENS.json b/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_LEENDERT-BOOYENS.json index 01d3d2812d..c9ba59604b 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_LEENDERT-BOOYENS.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_LEENDERT-BOOYENS.json @@ -228,7 +228,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/leendert-booyens-5b948615_20251214T111733Z.json" ], - "modified_at": "2026-01-09T19:18:12.756385+00:00", + "modified_at": "2026-01-09T19:50:48.805678+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "leendert-booyens-5b948615", @@ -251,7 +251,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -292,7 +292,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.756379+00:00", + "inferred_at": "2026-01-09T19:50:48.805575+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_RENEE-STEENBERGEN.json b/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_RENEE-STEENBERGEN.json index c04ae67024..250d1949fb 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_RENEE-STEENBERGEN.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-NH-AMS_XXXX_RENEE-STEENBERGEN.json @@ -285,7 +285,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/reneesteenbergen_20251214T111413Z.json" ], - "modified_at": "2026-01-09T19:18:14.709023+00:00", + "modified_at": "2026-01-09T19:51:03.400663+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "reneesteenbergen", @@ -314,7 +314,7 @@ "primary_rationale": "1966 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -363,7 +363,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1966 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.709019+00:00", + "inferred_at": "2026-01-09T19:51:03.400658+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-OV-NED_XXXX_NANCY-JOUWE.json b/data/person/ID_NL-UT-UTR_196X_NL-OV-NED_XXXX_NANCY-JOUWE.json index 34bb5db937..8511b2bb67 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-OV-NED_XXXX_NANCY-JOUWE.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-OV-NED_XXXX_NANCY-JOUWE.json @@ -349,7 +349,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nancy-jouwe-6329935_20251214T112436Z.json" ], - "modified_at": "2026-01-09T19:18:17.483814+00:00", + "modified_at": "2026-01-09T19:50:58.963234+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nancy-jouwe-6329935", @@ -381,7 +381,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -422,7 +422,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.483806+00:00", + "inferred_at": "2026-01-09T19:50:58.963229+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-OV-ZWO_XXXX_JOKELYNE-GERRITSEN.json b/data/person/ID_NL-UT-UTR_196X_NL-OV-ZWO_XXXX_JOKELYNE-GERRITSEN.json index aa2e4a2f10..e1f883b3dd 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-OV-ZWO_XXXX_JOKELYNE-GERRITSEN.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-OV-ZWO_XXXX_JOKELYNE-GERRITSEN.json @@ -213,7 +213,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jokelyne-gerritsen-62317785_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:17.813236+00:00", + "modified_at": "2026-01-09T19:51:28.846518+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jokelyne-gerritsen-62317785", @@ -259,7 +259,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -308,7 +308,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.813225+00:00", + "inferred_at": "2026-01-09T19:51:28.846512+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_AART-HARTEN.json b/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_AART-HARTEN.json index 41977b901b..1bd78dd602 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_AART-HARTEN.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_AART-HARTEN.json @@ -268,7 +268,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aartvanharten_20251214T112041Z.json" ], - "modified_at": "2026-01-09T19:18:18.147965+00:00", + "modified_at": "2026-01-09T19:51:28.930932+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aartvanharten", @@ -297,7 +297,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -346,7 +346,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:18.147956+00:00", + "inferred_at": "2026-01-09T19:51:28.930927+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_ANJA-SMIT.json b/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_ANJA-SMIT.json new file mode 100644 index 0000000000..2142b57aea --- /dev/null +++ b/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_ANJA-SMIT.json @@ -0,0 +1,393 @@ +{ + "ppid": "ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_ANJA-SMIT", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "NL-UT-UTR", + "first_date": "196X", + "first_date_source": "web_claim_birth_year", + "last_location": "NL-UT-UTR", + "last_date": "XXXX", + "name_tokens": [ + "ANJA", + "SMIT" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Anja Smit", + "display_name": "Anja Smit", + "name_romanized": null, + "name_tokens": [ + "ANJA", + "SMIT" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "1960", + "precision": "year", + "note": "Derived from '(61)' in March 2022 DANS announcement" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "R" + ], + "rationale": "Director of DANS (Data Archiving and Networked Services), national centre of expertise and repository for research data. Former University Librarian at Utrecht, Maastricht and Radboud universities." + }, + "affiliations": [ + { + "custodian_name": "DANS (Data Archiving and Networked Services)", + "custodian_slug": null, + "role_title": "Director", + "heritage_relevant": true, + "heritage_type": "R", + "current": true, + "start_date": "2022-07-11", + "observed_on": "2025-01-10T03:30:00Z", + "source": "web_claim" + }, + { + "custodian_name": "LIBER Europe", + "custodian_slug": null, + "role_title": "Secretary General", + "heritage_relevant": true, + "heritage_type": "R", + "current": true, + "start_date": "2021-07", + "observed_on": "2025-01-10T03:30:00Z", + "source": "web_claim" + }, + { + "custodian_name": "OCLC", + "custodian_slug": null, + "role_title": "Member Board of Trustees", + "heritage_relevant": true, + "heritage_type": "R", + "current": true, + "start_date": "2020-11", + "observed_on": "2025-01-10T03:30:00Z", + "source": "web_claim" + }, + { + "custodian_name": "Utrecht University Library", + "custodian_slug": null, + "role_title": "University Librarian", + "heritage_relevant": true, + "heritage_type": "L", + "current": false, + "start_date": "2010-03", + "end_date": "2022-07", + "observed_on": "2025-01-10T03:30:00Z", + "source": "web_claim" + }, + { + "custodian_name": "Maastricht University Library", + "custodian_slug": null, + "role_title": "University Librarian", + "heritage_relevant": true, + "heritage_type": "L", + "current": false, + "start_date": "2008-01", + "end_date": "2010-03", + "observed_on": "2025-01-10T03:30:00Z", + "source": "web_claim" + }, + { + "custodian_name": "Radboud University Library (Nijmegen)", + "custodian_slug": null, + "role_title": "University Librarian", + "heritage_relevant": true, + "heritage_type": "L", + "current": false, + "start_date": "2002-10", + "end_date": "2004-09", + "observed_on": "2025-01-10T03:30:00Z", + "source": "web_claim" + }, + { + "custodian_name": "Het Utrechts Archief", + "custodian_slug": null, + "role_title": "Board Member (on behalf of National Government)", + "heritage_relevant": true, + "heritage_type": "A", + "current": true, + "observed_on": "2025-01-10T03:30:00Z", + "source": "web_claim" + }, + { + "custodian_name": "Bibliotheekservice Passend Lezen", + "custodian_slug": null, + "role_title": "Board Member", + "heritage_relevant": true, + "heritage_type": "L", + "current": true, + "observed_on": "2025-01-10T03:30:00Z", + "source": "web_claim" + } + ], + "profile_data": { + "name": "Anja Smit", + "linkedin_url": "https://www.linkedin.com/in/anjasmit", + "headline": "Directeur DANS, Instituut van KNAW / NWO", + "location": "Utrecht Area (NL)", + "connections": "500 connections • 1,232 followers", + "about": "Total Experience: 43 years and 1 month", + "experience": [ + { + "title": "Directeur", + "company": "Data Archiving and Networked Services (DANS)", + "date_range": "Jul 2022 - Present • 3 years and 4 months", + "location": "Den Haag, Zuid-Holland, Nederland" + }, + { + "title": "Secretary General", + "company": "LIBER Europe", + "date_range": "Jul 2021 - Present • 4 years and 4 months", + "location": "Nederland" + }, + { + "title": "Member Board Of Trustees", + "company": "OCLC", + "date_range": "Nov 2020 - Present • 5 years", + "location": "Verenigde Staten" + }, + { + "title": "University Librarian", + "company": "Universiteit Utrecht", + "date_range": "Mar 2010 - Jul 2022 • 12 years and 4 months" + }, + { + "title": "University Librarian", + "company": "Maastricht University", + "date_range": "Jan 2008 - Mar 2010 • 2 years and 2 months" + }, + { + "title": "University Librarian", + "company": "Nijmegen University", + "date_range": "Oct 2002 - Sep 2004 • 1 year and 11 months" + } + ], + "education": [ + { + "degree": "MA", + "institution": "Universiteit Utrecht", + "date_range": "1979 - 1987 • 8 years", + "field": "Dutch Literature" + } + ], + "skills": [ + "finance", + "science" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [ + { + "claim_type": "birth_year", + "claim_value": "1960", + "source_url": "https://dans.knaw.nl/en/news/anja-smit-new-director-dans/", + "retrieved_on": "2025-01-10T03:30:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Anja Smit (61) has been Librarian of Utrecht University and Director of the University Library since 2010.", + "derivation_note": "Age 61 stated in March 2022 article implies birth year 1960 or early 1961. Most likely 1960.", + "verification": { + "status": "verified", + "last_verified": "2025-01-10T03:30:00Z" + } + }, + { + "claim_type": "education", + "claim_value": "MA in Dutch Literature from Utrecht University", + "source_url": "https://dans.knaw.nl/en/news/anja-smit-new-director-dans/", + "retrieved_on": "2025-01-10T03:30:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Smit received her MA in Dutch Literature from Utrecht University.", + "verification": { + "status": "verified", + "last_verified": "2025-01-10T03:30:00Z" + } + }, + { + "claim_type": "career_experience", + "claim_value": "Over 30 years national and international experience in sustainable access to scientific information", + "source_url": "https://dans.knaw.nl/en/news/anja-smit-new-director-dans/", + "retrieved_on": "2025-01-10T03:30:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "She brings more than 30 years of national and international experience in the field of sustainable access to scientific information.", + "verification": { + "status": "verified", + "last_verified": "2025-01-10T03:30:00Z" + } + }, + { + "claim_type": "position", + "claim_value": "Director of DANS succeeding Henk Wals", + "source_url": "https://dans.knaw.nl/en/news/anja-smit-on-board-at-dans/", + "retrieved_on": "2025-01-10T03:30:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Anja Smit has been the director of DANS since Monday, July 11. She succeeds Henk Wals, who has taken a well-deserved retirement.", + "verification": { + "status": "verified", + "last_verified": "2025-01-10T03:30:00Z" + } + }, + { + "claim_type": "position", + "claim_value": "Secretary General of LIBER (European Association of Research Libraries)", + "source_url": "https://libereurope.eu/member/ms-anja-smit/", + "retrieved_on": "2025-01-10T03:30:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "LIBER Secretary-General, Director at DANS", + "verification": { + "status": "verified", + "last_verified": "2025-01-10T03:30:00Z" + } + }, + { + "claim_type": "board_membership", + "claim_value": "Board member of Het Utrechts Archief on behalf of National Government", + "source_url": "https://libereurope.eu/member/ms-anja-smit/", + "retrieved_on": "2025-01-10T03:30:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Board member of the Utrecht Archive on behalf of the National Government", + "verification": { + "status": "verified", + "last_verified": "2025-01-10T03:30:00Z" + } + }, + { + "claim_type": "board_membership", + "claim_value": "Board member of Bibliotheekservice Passend Lezen (Dutch Library for the Blind)", + "source_url": "https://libereurope.eu/member/ms-anja-smit/", + "retrieved_on": "2025-01-10T03:30:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "member of the Board of Bibliotheekservice Passend Lezen (the Dutch Library for the Blind)", + "verification": { + "status": "verified", + "last_verified": "2025-01-10T03:30:00Z" + } + }, + { + "claim_type": "network_participation", + "claim_value": "Active in ODISSEI, CLARIAH and CESSDA research data infrastructures", + "source_url": "https://libereurope.eu/member/ms-anja-smit/", + "retrieved_on": "2025-01-10T03:30:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Anja represents DANS in the National Open Science Network, CoARA and in several (inter)national research data infrastructures, such as ODISSEI, CLARIAH and CESSDA.", + "verification": { + "status": "verified", + "last_verified": "2025-01-10T03:30:00Z" + } + }, + { + "claim_type": "oclc_service", + "claim_value": "OCLC Global Council President 2015-2016", + "source_url": "https://www.oclc.org/en/about/leadership/profiles/smit-anja.html", + "retrieved_on": "2025-01-10T03:30:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Anja served on OCLC Global Council beginning in 2010, was elected Vice-President/President Elect of Global Council in 2014, and served as President in 2015-2016.", + "verification": { + "status": "verified", + "last_verified": "2025-01-10T03:30:00Z" + } + }, + { + "claim_type": "work_history", + "claim_value": "Executive Consultant at NELINET (now Lyrasis) for academic libraries in New England, USA", + "source_url": "https://www.oclc.org/en/about/leadership/profiles/smit-anja.html", + "retrieved_on": "2025-01-10T03:30:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Anja also worked with Academic Libraries in New England, in the United States, as an Executive Consultant at NELINET (now Lyrasis).", + "verification": { + "status": "verified", + "last_verified": "2025-01-10T03:30:00Z" + } + }, + { + "claim_type": "open_science_leadership", + "claim_value": "Led Open Science programme at Utrecht University with Frank Miedema (2018-2019)", + "source_url": "https://dans.knaw.nl/en/news/anja-smit-new-director-dans/", + "retrieved_on": "2025-01-10T03:30:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Together with Frank Miedema, she also led the Open Science programme at Utrecht University between 2018 and 2019.", + "verification": { + "status": "verified", + "last_verified": "2025-01-10T03:30:00Z" + } + } + ], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/anjasmit_20251214T110458Z.json", + "observed_on": "2025-12-14T11:04:58.653064+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": true, + "searched_on": "2025-01-10T03:30:00Z", + "search_queries": [ + "\"Anja Smit\" DANS directeur born birthday biography \"1955\" OR \"1956\" OR \"1957\" OR \"1958\" OR \"1959\"" + ], + "result": "found", + "notes": "Birth year 1960 derived from age (61) stated in March 2022 DANS appointment announcement. Multiple web sources provide extensive career and affiliation data." + }, + "web_enrichment": { + "attempted": true, + "searched_on": "2025-01-10T03:30:00Z", + "sources_found": 5, + "sources": [ + "https://www.oclc.org/en/about/leadership/profiles/smit-anja.html", + "https://dans.knaw.nl/en/news/anja-smit-on-board-at-dans/", + "https://libereurope.eu/member/ms-anja-smit/", + "https://www.cessda.eu/News/CESSDA-Newsitem-nid3903", + "https://dans.knaw.nl/en/news/anja-smit-new-director-dans/" + ], + "notes": "Comprehensive profile data found across OCLC, DANS, LIBER, and CESSDA websites." + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.696637+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/anjasmit_20251214T110458Z.json" + ], + "modified_at": "2025-01-10T03:30:00Z", + "modified_by": "opencode-claude-sonnet-4" + }, + "linkedin_slug": "anjasmit", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANJA-SMIT", + "new_ppid": "ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_ANJA-SMIT", + "changed_at": "2026-01-09T17:43:03.131537+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] + }, + { + "previous_ppid": "ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_ANJA-SMIT", + "new_ppid": "ID_NL-UT-UTR_195X_NL-UT-UTR_XXXX_ANJA-SMIT", + "changed_at": "2026-01-09T19:18:17.543836+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_NL-UT-UTR_195X_NL-UT-UTR_XXXX_ANJA-SMIT", + "new_ppid": "ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_ANJA-SMIT", + "changed_at": "2025-01-10T03:30:00Z", + "reason": "web_claim_birth_year_verified", + "notes": "Birth year 1960 confirmed from DANS announcement stating age 61 in March 2022" + } + ] +} diff --git a/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_EVERT-REGTERSCHOT.json b/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_EVERT-REGTERSCHOT.json index 7a70747c57..8313c84144 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_EVERT-REGTERSCHOT.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_EVERT-REGTERSCHOT.json @@ -176,8 +176,14 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T01:30:00Z", + "search_queries": [ + "\"Evert Jan Regterschot\" Het Utrechts Archief born birthday biography", + "\"Evert Jan Regterschot\" geboren e-conservator hoofd ICT" + ], + "result": "not_found", + "notes": "Web search conducted via Exa; found staff page at Het Utrechts Archief mentioning role as e-conservator/hoofd ICT with 35 years experience since 1990, but no birth date information available." } }, "provenance": { @@ -186,7 +192,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/evert-jan-regterschot-a58882237_20251214T104124Z.json" ], - "modified_at": "2026-01-09T19:18:11.346656+00:00", + "modified_at": "2026-01-09T19:50:46.725956+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "evert-jan-regterschot-a58882237", @@ -215,7 +221,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -264,7 +270,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.346649+00:00", + "inferred_at": "2026-01-09T19:50:46.725952+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_FEDOR-ROSSEM.json b/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_FEDOR-ROSSEM.json index e5e46af3e2..d730b5c4ed 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_FEDOR-ROSSEM.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_FEDOR-ROSSEM.json @@ -293,7 +293,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fedor-van-rossem-a1b53712_20251214T111919Z.json" ], - "modified_at": "2026-01-09T19:18:13.068750+00:00", + "modified_at": "2026-01-09T19:50:50.617517+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fedor-van-rossem-a1b53712", @@ -325,7 +325,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -366,7 +366,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.068744+00:00", + "inferred_at": "2026-01-09T19:50:50.617510+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_LUUK-BOESSENKOOL.json b/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_LUUK-BOESSENKOOL.json index 5913e65ebe..5c2dea68f9 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_LUUK-BOESSENKOOL.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_LUUK-BOESSENKOOL.json @@ -269,7 +269,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/luukboessenkool_20251214T104133Z.json" ], - "modified_at": "2026-01-09T19:18:17.659632+00:00", + "modified_at": "2026-01-09T19:51:28.385556+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "luukboessenkool", @@ -301,7 +301,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -342,7 +342,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.659625+00:00", + "inferred_at": "2026-01-09T19:51:28.385548+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_PAUL-DUIN.json b/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_PAUL-DUIN.json index cff23f39ef..0e0f850787 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_PAUL-DUIN.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-UT-UTR_XXXX_PAUL-DUIN.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paul-van-duin-476bb417_20251214T111432Z.json" ], - "modified_at": "2026-01-09T19:18:14.351374+00:00", + "modified_at": "2026-01-09T19:51:00.917253+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paul-van-duin-476bb417", @@ -132,7 +132,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:14.351368+00:00", + "inferred_at": "2026-01-09T19:51:00.917248+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-ZH-DEL_XXXX_EVELIEN-MASSELINK.json b/data/person/ID_NL-UT-UTR_196X_NL-ZH-DEL_XXXX_EVELIEN-MASSELINK.json index 2d9cebf977..a35b8d4914 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-ZH-DEL_XXXX_EVELIEN-MASSELINK.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-ZH-DEL_XXXX_EVELIEN-MASSELINK.json @@ -205,7 +205,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/evelienmasselink_20251214T112352Z.json" ], - "modified_at": "2026-01-09T19:18:16.522060+00:00", + "modified_at": "2026-01-09T19:51:18.561997+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "evelienmasselink", @@ -228,7 +228,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -269,7 +269,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.522053+00:00", + "inferred_at": "2026-01-09T19:51:18.561991+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-ZH-DOR_XXXX_HELEEN-HEIJTVELDT.json b/data/person/ID_NL-UT-UTR_196X_NL-ZH-DOR_XXXX_HELEEN-HEIJTVELDT.json index 3dbeccc59e..bdccf4be45 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-ZH-DOR_XXXX_HELEEN-HEIJTVELDT.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-ZH-DOR_XXXX_HELEEN-HEIJTVELDT.json @@ -314,7 +314,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/heleen-van-t-hoff-heijtveldt-75838528_20251214T112110Z.json" ], - "modified_at": "2026-01-09T19:18:16.130695+00:00", + "modified_at": "2026-01-09T19:51:20.842652+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "heleen-van-t-hoff-heijtveldt-75838528", @@ -352,7 +352,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -401,7 +401,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.130687+00:00", + "inferred_at": "2026-01-09T19:51:20.842647+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-ZH-LEI_XXXX_ESTHER-CAPTAIN.json b/data/person/ID_NL-UT-UTR_196X_NL-ZH-LEI_XXXX_ESTHER-CAPTAIN.json index 01d5275746..c8fa98903e 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-ZH-LEI_XXXX_ESTHER-CAPTAIN.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-ZH-LEI_XXXX_ESTHER-CAPTAIN.json @@ -185,7 +185,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/esther-captain-14969017_20251214T103723Z.json" ], - "modified_at": "2026-01-09T19:18:15.533428+00:00", + "modified_at": "2026-01-09T19:50:49.063488+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "esther-captain-14969017", @@ -217,7 +217,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.533420+00:00", + "inferred_at": "2026-01-09T19:50:49.063478+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_ANKE-FREESE.json b/data/person/ID_NL-UT-UTR_196X_NL-ZH-TH_XXXX_ANKE-FREESE.json similarity index 61% rename from data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_ANKE-FREESE.json rename to data/person/ID_NL-UT-UTR_196X_NL-ZH-TH_XXXX_ANKE-FREESE.json index be07f33398..dff08bc529 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_ANKE-FREESE.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-ZH-TH_XXXX_ANKE-FREESE.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_ANKE-FREESE", + "ppid": "ID_NL-UT-UTR_196X_NL-ZH-TH_XXXX_ANKE-FREESE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-UT-UTR", "first_date": "196X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -12,7 +12,8 @@ "FREESE" ], "last_location_source": "inferred_current_settlement", - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Anke Freese", @@ -76,7 +77,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anke-freese-78769210_20251214T103147Z.json" ], - "modified_at": "2026-01-09T19:18:13.830114+00:00", + "modified_at": "2026-01-09T19:50:53.891395+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anke-freese-78769210", @@ -98,6 +99,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_ANKE-FREESE", + "new_ppid": "ID_NL-UT-UTR_196X_NL-ZH-TH_XXXX_ANKE-FREESE", + "changed_at": "2026-01-09T19:50:53.891392+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -106,7 +117,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -147,7 +158,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.830094+00:00", + "inferred_at": "2026-01-09T19:50:53.888770+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Utrecht", + "formatted": "NL-UT-UTR", + "country_code": "NL", + "region_code": "UT", + "settlement_code": "UTR", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "at Schoevers, Tilburg", + "date_range": "1984 - 1985 • 1 year", + "degree": "" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "at Schoevers, Tilburg", + "mapping_result": "Utrecht, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Utrecht, Netherlands", + "result": { + "geonames_id": 2745912, + "geonames_name": "Utrecht", + "admin1_code": "09", + "admin1_name": "Utrecht", + "feature_code": "PPLA", + "latitude": 52.09083, + "longitude": 5.12222 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "UT", + "settlement_code": "UTR" + }, + "result": "NL-UT-UTR" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2745912, + "geonames_name": "Utrecht", + "admin1_code": "09", + "admin1_name": "Utrecht", + "feature_code": "PPLA", + "latitude": 52.09083, + "longitude": 5.12222 + }, + "inferred_at": "2026-01-09T19:50:53.891385+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-ZH-TH_XXXX_SITA-BHAGWANDIN.json b/data/person/ID_NL-UT-UTR_196X_NL-ZH-TH_XXXX_SITA-BHAGWANDIN.json index d3ed802fc3..6af3642831 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-ZH-TH_XXXX_SITA-BHAGWANDIN.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-ZH-TH_XXXX_SITA-BHAGWANDIN.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sita-bhagwandin-5b5399a2_20251214T113352Z.json" ], - "modified_at": "2026-01-09T19:18:15.912352+00:00", + "modified_at": "2026-01-09T19:51:15.119913+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sita-bhagwandin-5b5399a2", @@ -154,7 +154,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.912346+00:00", + "inferred_at": "2026-01-09T19:51:15.119908+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_NL-ZH-TH_XXXX_YVETTE-EECHOUD.json b/data/person/ID_NL-UT-UTR_196X_NL-ZH-TH_XXXX_YVETTE-EECHOUD.json index c9204c55a2..bfb12052e9 100644 --- a/data/person/ID_NL-UT-UTR_196X_NL-ZH-TH_XXXX_YVETTE-EECHOUD.json +++ b/data/person/ID_NL-UT-UTR_196X_NL-ZH-TH_XXXX_YVETTE-EECHOUD.json @@ -160,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yvette-van-eechoud-57a5746_20251214T102853Z.json" ], - "modified_at": "2026-01-09T19:18:14.668893+00:00", + "modified_at": "2026-01-09T19:50:53.700386+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yvette-van-eechoud-57a5746", @@ -192,7 +192,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.668888+00:00", + "inferred_at": "2026-01-09T19:50:53.700381+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_CARLA-TAKHOOGENDIJK.json b/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_CARLA-TAKHOOGENDIJK.json index 1c41fbd3b5..724a8cfe77 100644 --- a/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_CARLA-TAKHOOGENDIJK.json +++ b/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_CARLA-TAKHOOGENDIJK.json @@ -180,7 +180,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carla-tak-hoogendijk-4623b1a6_20251214T111731Z.json" ], - "modified_at": "2026-01-09T19:18:13.530761+00:00", + "modified_at": "2026-01-09T19:50:54.576983+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carla-tak-hoogendijk-4623b1a6", @@ -202,7 +202,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.528877+00:00", + "inferred_at": "2026-01-09T19:50:54.574932+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER.json b/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER.json similarity index 69% rename from data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER.json rename to data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER.json index 23729bd9e7..c88cd9b3cd 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER.json +++ b/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER", + "ppid": "ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-UT-UTR", "first_date": "196X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "195X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Gonneke Dekker", @@ -111,10 +112,31 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gonneke-dekker-7b96bb124_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:15.984650+00:00", + "modified_at": "2026-01-09T19:50:51.765110+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gonneke-dekker-7b96bb124", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GONNEKE-DEKKER", + "new_ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER", + "changed_at": "2026-01-09T19:18:15.984647+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER", + "new_ppid": "ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER", + "changed_at": "2026-01-09T19:50:51.765103+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] + } + ], "inferred_birth_decade": { "values": [ "195X", @@ -127,7 +149,7 @@ "primary_rationale": "1960 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -176,19 +198,78 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1960 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.982439+00:00", + "inferred_at": "2026-01-09T19:50:51.758411+00:00", "inferred_by": "enrich_ppids.py" } }, - "ppid_history": [ - { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GONNEKE-DEKKER", - "new_ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GONNEKE-DEKKER", - "changed_at": "2026-01-09T19:18:15.984647+00:00", - "reason": "observation_based_inference", - "inferred_fields": [ - "inferred_birth_decade" - ] + "inferred_birth_settlement": { + "value": "Utrecht", + "formatted": "NL-UT-UTR", + "country_code": "NL", + "region_code": "UT", + "settlement_code": "UTR", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Schoevers", + "date_range": "1982 - 1983", + "degree": "directiesecretaresse" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Schoevers", + "mapping_result": "Utrecht, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Utrecht, Netherlands", + "result": { + "geonames_id": 2745912, + "geonames_name": "Utrecht", + "admin1_code": "09", + "admin1_name": "Utrecht", + "feature_code": "PPLA", + "latitude": 52.09083, + "longitude": 5.12222 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "UT", + "settlement_code": "UTR" + }, + "result": "NL-UT-UTR" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2745912, + "geonames_name": "Utrecht", + "admin1_code": "09", + "admin1_name": "Utrecht", + "feature_code": "PPLA", + "latitude": 52.09083, + "longitude": 5.12222 + }, + "inferred_at": "2026-01-09T19:50:51.761475+00:00", + "inferred_by": "enrich_ppids.py" } - ] + } } \ No newline at end of file diff --git a/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_JOYCE-PENNINGS.json b/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_JOYCE-PENNINGS.json index 8ef76fd7fc..d0fc1f0c3b 100644 --- a/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_JOYCE-PENNINGS.json +++ b/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_JOYCE-PENNINGS.json @@ -198,7 +198,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joyce-pennings-9b837417_20251214T104121Z.json" ], - "modified_at": "2026-01-09T19:18:14.838407+00:00", + "modified_at": "2026-01-09T19:51:29.491145+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joyce-pennings-9b837417", @@ -235,7 +235,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -284,7 +284,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.836481+00:00", + "inferred_at": "2026-01-09T19:51:29.489247+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_KARIN-MONNINK.json b/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_KARIN-MONNINK.json index 9c84281c88..6b14924b15 100644 --- a/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_KARIN-MONNINK.json +++ b/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_KARIN-MONNINK.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karin-monnink-2113b36_20251212T180000Z.json" ], - "modified_at": "2026-01-09T19:18:18.348364+00:00", + "modified_at": "2026-01-09T19:51:18.189697+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karin-monnink-2113b36", @@ -180,7 +180,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:18.345755+00:00", + "inferred_at": "2026-01-09T19:51:18.187536+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_MARIANNE-BRUINS.json b/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_MARIANNE-BRUINS.json index 30f48c796e..bfceb04068 100644 --- a/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_MARIANNE-BRUINS.json +++ b/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_MARIANNE-BRUINS.json @@ -207,7 +207,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mariannebruins_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:13.760755+00:00", + "modified_at": "2026-01-09T19:51:06.507565+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mariannebruins", @@ -243,7 +243,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -292,7 +292,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.758648+00:00", + "inferred_at": "2026-01-09T19:51:06.505377+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_MARJOLEIN-WASSENAAR.json b/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_MARJOLEIN-WASSENAAR.json index caa3b0a35f..606faf89ad 100644 --- a/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_MARJOLEIN-WASSENAAR.json +++ b/data/person/ID_NL-UT-UTR_196X_XX-XX-XXX_XXXX_MARJOLEIN-WASSENAAR.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjolein-wassenaar-23943813_20251214T103355Z.json" ], - "modified_at": "2026-01-09T19:18:15.540363+00:00", + "modified_at": "2026-01-09T19:50:53.240927+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjolein-wassenaar-23943813", @@ -151,7 +151,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.538251+00:00", + "inferred_at": "2026-01-09T19:50:53.236245+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-GE-REN_XXXX_VICTOR-LANSINK.json b/data/person/ID_NL-UT-UTR_197X_NL-GE-REN_XXXX_VICTOR-LANSINK.json index ba330264db..8042c307d8 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-GE-REN_XXXX_VICTOR-LANSINK.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-GE-REN_XXXX_VICTOR-LANSINK.json @@ -186,7 +186,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/victor-m-lansink-8b690790_20251214T104122Z.json" ], - "modified_at": "2026-01-09T19:18:13.189300+00:00", + "modified_at": "2026-01-09T19:50:53.228153+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "victor-m-lansink-8b690790", @@ -215,7 +215,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -264,7 +264,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.189295+00:00", + "inferred_at": "2026-01-09T19:50:53.228145+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-GE-WAG_XXXX_FREYA-SENF.json b/data/person/ID_NL-UT-UTR_197X_NL-GE-WAG_XXXX_FREYA-SENF.json index d6ad45cec4..7affda87c1 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-GE-WAG_XXXX_FREYA-SENF.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-GE-WAG_XXXX_FREYA-SENF.json @@ -232,7 +232,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/freyasenf_20251214T104210Z.json" ], - "modified_at": "2026-01-09T19:18:15.917125+00:00", + "modified_at": "2026-01-09T19:50:51.071945+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "freyasenf", @@ -264,7 +264,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -305,7 +305,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.917119+00:00", + "inferred_at": "2026-01-09T19:50:51.071941+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_FRANK-BERGSMA.json b/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_FRANK-BERGSMA.json index 655fcd21a7..7bb2e17456 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_FRANK-BERGSMA.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_FRANK-BERGSMA.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frank-bergsma-5b336528_20251214T113240Z.json" ], - "modified_at": "2026-01-09T19:18:16.716889+00:00", + "modified_at": "2026-01-09T19:50:53.915113+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frank-bergsma-5b336528", @@ -191,7 +191,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.716882+00:00", + "inferred_at": "2026-01-09T19:50:53.915106+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_MAAIKE-WOLTERBEEK.json b/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_MAAIKE-WOLTERBEEK.json index 286b17ed7c..1b82d73486 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_MAAIKE-WOLTERBEEK.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_MAAIKE-WOLTERBEEK.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maaike-wolterbeek-b7a4a0103_20251214T111858Z.json" ], - "modified_at": "2026-01-09T19:18:13.756551+00:00", + "modified_at": "2026-01-09T19:50:56.091660+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maaike-wolterbeek-b7a4a0103", @@ -164,7 +164,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.756547+00:00", + "inferred_at": "2026-01-09T19:50:56.091652+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_MARTHA-JELSMA.json b/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_MARTHA-JELSMA.json index 30c314e1d0..bf06bc0089 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_MARTHA-JELSMA.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_MARTHA-JELSMA.json @@ -97,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martha-jelsma-04457b17_20251214T110323Z.json" ], - "modified_at": "2026-01-09T19:18:13.270983+00:00", + "modified_at": "2026-01-09T19:50:53.725986+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martha-jelsma-04457b17", @@ -129,7 +129,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.270979+00:00", + "inferred_at": "2026-01-09T19:50:53.725982+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_MICHELLE-WIJS.json b/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_MICHELLE-WIJS.json index 47de60dc7c..5a38881028 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_MICHELLE-WIJS.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-NH-AMS_XXXX_MICHELLE-WIJS.json @@ -194,7 +194,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michellevandewijs_20251214T111801Z.json" ], - "modified_at": "2026-01-09T19:18:13.556833+00:00", + "modified_at": "2026-01-09T19:50:54.655271+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michellevandewijs", @@ -217,7 +217,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.556829+00:00", + "inferred_at": "2026-01-09T19:50:54.655264+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-NH-HAA_XXXX_MARC-BEYER.json b/data/person/ID_NL-UT-UTR_197X_NL-NH-HAA_XXXX_MARC-BEYER.json index 3c82822b65..34bae08c69 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-NH-HAA_XXXX_MARC-BEYER.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-NH-HAA_XXXX_MARC-BEYER.json @@ -204,7 +204,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marc-de-beyer-3b703914_20251214T112447Z.json" ], - "modified_at": "2026-01-09T19:18:17.922784+00:00", + "modified_at": "2026-01-09T19:51:28.848067+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marc-de-beyer-3b703914", @@ -227,7 +227,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -268,7 +268,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.922771+00:00", + "inferred_at": "2026-01-09T19:51:28.848060+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-NH-HIL_XXXX_JURGEN-MOERS.json b/data/person/ID_NL-UT-UTR_197X_NL-NH-HIL_XXXX_JURGEN-MOERS.json index 988d2bab98..0e2b38ca11 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-NH-HIL_XXXX_JURGEN-MOERS.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-NH-HIL_XXXX_JURGEN-MOERS.json @@ -313,7 +313,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jurgenmoers_20251214T102707Z.json" ], - "modified_at": "2026-01-09T19:18:12.477735+00:00", + "modified_at": "2026-01-09T19:50:48.486138+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jurgenmoers", @@ -342,7 +342,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -391,7 +391,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.477724+00:00", + "inferred_at": "2026-01-09T19:50:48.486134+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-UT-RHE_XXXX_JESSY-DOORN.json b/data/person/ID_NL-UT-UTR_197X_NL-UT-RHE_XXXX_JESSY-DOORN.json index 980a67e936..30b7e1bb1d 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-UT-RHE_XXXX_JESSY-DOORN.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-UT-RHE_XXXX_JESSY-DOORN.json @@ -216,7 +216,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jessy-van-doorn-79a117186_20251214T110608Z.json" ], - "modified_at": "2026-01-09T19:18:15.556633+00:00", + "modified_at": "2026-01-09T19:51:12.102535+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jessy-van-doorn-79a117186", @@ -245,7 +245,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -294,7 +294,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.556628+00:00", + "inferred_at": "2026-01-09T19:51:12.102509+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_ASTRID-HERTOG.json b/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_ASTRID-HERTOG.json index 0f7ab4c297..fa9b238034 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_ASTRID-HERTOG.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_ASTRID-HERTOG.json @@ -272,7 +272,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/astrid-hertog-41a28810_20251214T110009Z.json" ], - "modified_at": "2026-01-09T19:18:16.192582+00:00", + "modified_at": "2026-01-09T19:50:58.573095+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "astrid-hertog-41a28810", @@ -304,7 +304,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -345,7 +345,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.192576+00:00", + "inferred_at": "2026-01-09T19:50:58.573089+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_FLOOR-WAGEMAKERS.json b/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_FLOOR-WAGEMAKERS.json index d62487a69d..52c9b2b7cb 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_FLOOR-WAGEMAKERS.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_FLOOR-WAGEMAKERS.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/floor-wagemakers-56bb0414_20251214T104137Z.json" ], - "modified_at": "2026-01-09T19:18:13.622349+00:00", + "modified_at": "2026-01-09T19:50:55.219826+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "floor-wagemakers-56bb0414", @@ -184,7 +184,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.622344+00:00", + "inferred_at": "2026-01-09T19:50:55.219816+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_JANJAAP-LUIJT.json b/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_JANJAAP-LUIJT.json index 34d79c38ac..b577db7cbd 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_JANJAAP-LUIJT.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_JANJAAP-LUIJT.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janjaap-luijt-88998723_20251214T104157Z.json" ], - "modified_at": "2026-01-09T19:18:12.971463+00:00", + "modified_at": "2026-01-09T19:50:49.615165+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janjaap-luijt-88998723", @@ -150,7 +150,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.971458+00:00", + "inferred_at": "2026-01-09T19:50:49.615160+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MARIEKE-LOGCHEM.json b/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_MARIEKE-LOGCHEM.json similarity index 87% rename from data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MARIEKE-LOGCHEM.json rename to data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_MARIEKE-LOGCHEM.json index 791a90ec1a..0ade27efd0 100644 --- a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MARIEKE-LOGCHEM.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_MARIEKE-LOGCHEM.json @@ -1,18 +1,19 @@ { - "ppid": "ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MARIEKE-LOGCHEM", + "ppid": "ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_MARIEKE-LOGCHEM", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "NL-UT-UTR", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "NL-UT-UTR", "last_date": "XXXX", "name_tokens": [ "MARIEKE", "LOGCHEM" ], "first_location_source": "inferred_birth_settlement", - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Marieke van Logchem", @@ -102,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marieke-van-logchem-a97914a7_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:14.084731+00:00", + "modified_at": "2026-01-09T19:51:07.867298+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marieke-van-logchem-a97914a7", @@ -124,6 +125,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MARIEKE-LOGCHEM", + "new_ppid": "ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_MARIEKE-LOGCHEM", + "changed_at": "2026-01-09T19:43:38.938895+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -132,7 +143,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +184,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.082295+00:00", + "inferred_at": "2026-01-09T19:51:07.867289+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARIEKE-MEER.json b/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_MARIEKE-MEER.json similarity index 71% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARIEKE-MEER.json rename to data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_MARIEKE-MEER.json index 267d2a5d96..e5adc70e22 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARIEKE-MEER.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_MARIEKE-MEER.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARIEKE-MEER", + "ppid": "ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_MARIEKE-MEER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-UT-UTR", + "first_date": "197X", "last_location": "NL-UT-UTR", "last_date": "XXXX", "name_tokens": [ "MARIEKE", "MEER" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Marieke van der Meer", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -185,73 +191,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mariekevandermeer_20251213T020000Z.json" ], - "modified_at": "2026-01-09T18:58:10.316199+00:00", + "modified_at": "2026-01-09T19:51:28.571668+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mariekevandermeer", - "inferred_current_settlement": { - "value": "Utrecht", - "formatted": "NL-UT-UTR", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "UTR", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Netherlands" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "Inspectie van het Onderwijs", - "title": "Strategisch Adviseur Stakeholderengagement, Issuemanagement En Communicatie", - "location": "Utrecht, Nederland" - } - }, - { - "step": 3, - "geocoding": "GeoNames resolution", - "query": "Utrecht, Nederland", - "result": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - } - }, - { - "step": 4, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-UTR" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - }, - "inferred_at": "2026-01-09T18:58:10.316182+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARIEKE-MEER", @@ -261,6 +204,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARIEKE-MEER", + "new_ppid": "ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_MARIEKE-MEER", + "changed_at": "2026-01-09T19:43:41.433538+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1976 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Carat media-adviesbureau", + "title": "Junior Consultant", + "date_range": "Jan 1999 - Dec 1999" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1999 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1999 - 23 = 1976", + "result": "Estimated birth year: 1976", + "range": "1971-1981 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1971, + 1981 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:28.571656+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_WILLEM-BROUWER.json b/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_WILLEM-BROUWER.json index d7c5545862..98f64d82a6 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_WILLEM-BROUWER.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-UT-UTR_XXXX_WILLEM-BROUWER.json @@ -240,7 +240,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/willem-brouwer-9673942b_20251214T104150Z.json" ], - "modified_at": "2026-01-09T19:18:14.748807+00:00", + "modified_at": "2026-01-09T19:51:04.024590+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "willem-brouwer-9673942b", @@ -269,7 +269,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -318,7 +318,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.748803+00:00", + "inferred_at": "2026-01-09T19:51:04.024583+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-ZH-ALB_XXXX_ARJAN-KAPTEIJN.json b/data/person/ID_NL-UT-UTR_197X_NL-ZH-ALB_XXXX_ARJAN-KAPTEIJN.json index dea27759b0..5458ce18e8 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-ZH-ALB_XXXX_ARJAN-KAPTEIJN.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-ZH-ALB_XXXX_ARJAN-KAPTEIJN.json @@ -235,7 +235,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/najra_20251214T112755Z.json" ], - "modified_at": "2026-01-09T19:18:17.286975+00:00", + "modified_at": "2026-01-09T19:51:05.261583+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "najra", @@ -273,7 +273,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -322,7 +322,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.286967+00:00", + "inferred_at": "2026-01-09T19:51:05.261561+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_ANNET-VEEN.json b/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_ANNET-VEEN.json index 016d173a2b..22498b45e1 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_ANNET-VEEN.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_ANNET-VEEN.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annetvanveen_20251214T102929Z.json" ], - "modified_at": "2026-01-09T19:18:17.840527+00:00", + "modified_at": "2026-01-09T19:50:55.065390+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annetvanveen", @@ -185,7 +185,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.840520+00:00", + "inferred_at": "2026-01-09T19:50:55.065386+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_BASTIAAN-ENGELHARD.json b/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_BASTIAAN-ENGELHARD.json index fd5026b6fa..25fe906186 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_BASTIAAN-ENGELHARD.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_BASTIAAN-ENGELHARD.json @@ -189,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bastiaanengelhard_20251214T103038Z.json" ], - "modified_at": "2026-01-09T19:18:18.960471+00:00", + "modified_at": "2026-01-09T19:51:31.806115+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bastiaanengelhard", @@ -212,7 +212,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -253,7 +253,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.960464+00:00", + "inferred_at": "2026-01-09T19:51:31.806105+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_MADELEINE-BERG.json b/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_MADELEINE-BERG.json index 94025343c5..3fd1d23e4c 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_MADELEINE-BERG.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_MADELEINE-BERG.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/madeleine-van-den-berg-502a6310_20251214T113321Z.json" ], - "modified_at": "2026-01-09T19:18:13.683201+00:00", + "modified_at": "2026-01-09T19:50:55.429508+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "madeleine-van-den-berg-502a6310", @@ -126,7 +126,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.683198+00:00", + "inferred_at": "2026-01-09T19:50:55.429502+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_MECHTELD-GRAVENDEEL.json b/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_MECHTELD-GRAVENDEEL.json index 401b77027c..2f668628a5 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_MECHTELD-GRAVENDEEL.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_MECHTELD-GRAVENDEEL.json @@ -189,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mechteld-gravendeel-81032613_20251214T102711Z.json" ], - "modified_at": "2026-01-09T19:18:14.682185+00:00", + "modified_at": "2026-01-09T19:51:03.356630+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mechteld-gravendeel-81032613", @@ -218,7 +218,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -267,7 +267,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.682181+00:00", + "inferred_at": "2026-01-09T19:51:03.356623+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_NIEK-SCHROTEN.json b/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_NIEK-SCHROTEN.json index 428ef0f84c..70381ac27c 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_NIEK-SCHROTEN.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_NIEK-SCHROTEN.json @@ -232,7 +232,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nieks_20251214T113354Z.json" ], - "modified_at": "2026-01-09T19:18:17.271441+00:00", + "modified_at": "2026-01-09T19:51:25.485557+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nieks", @@ -261,7 +261,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -310,7 +310,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.271430+00:00", + "inferred_at": "2026-01-09T19:51:25.485551+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_TASSILO-LUTTERVELT.json b/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_TASSILO-LUTTERVELT.json index db1815d816..570f449534 100644 --- a/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_TASSILO-LUTTERVELT.json +++ b/data/person/ID_NL-UT-UTR_197X_NL-ZH-TH_XXXX_TASSILO-LUTTERVELT.json @@ -179,7 +179,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tassilo-van-luttervelt-4159bb115_20251214T112957Z.json" ], - "modified_at": "2026-01-09T19:18:17.793998+00:00", + "modified_at": "2026-01-09T19:51:28.577969+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tassilo-van-luttervelt-4159bb115", @@ -208,7 +208,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -257,7 +257,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.793989+00:00", + "inferred_at": "2026-01-09T19:51:28.577966+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_BART-COOIJMANS.json b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_BART-COOIJMANS.json index 7360bc1f56..56e001086e 100644 --- a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_BART-COOIJMANS.json +++ b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_BART-COOIJMANS.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bart-cooijmans-079423207_20251214T112626Z.json" ], - "modified_at": "2026-01-09T19:18:14.326727+00:00", + "modified_at": "2026-01-09T19:51:05.636581+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bart-cooijmans-079423207", @@ -176,7 +176,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.322985+00:00", + "inferred_at": "2026-01-09T19:51:05.624537+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_BRAM-WITS.json b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_BRAM-WITS.json index 31dc9e591e..77e6c30fba 100644 --- a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_BRAM-WITS.json +++ b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_BRAM-WITS.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bram-wits-32b214b_20251214T103204Z.json" ], - "modified_at": "2026-01-09T19:18:14.317906+00:00", + "modified_at": "2026-01-09T19:51:14.429424+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bram-wits-32b214b", @@ -184,7 +184,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.315942+00:00", + "inferred_at": "2026-01-09T19:51:14.427411+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_FRITS-BRENK.json b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_FRITS-BRENK.json index 44401476c9..655e0644c5 100644 --- a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_FRITS-BRENK.json +++ b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_FRITS-BRENK.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fritsvanbrenk_20251212T233000Z.json" ], - "modified_at": "2026-01-09T19:18:16.713652+00:00", + "modified_at": "2026-01-09T19:51:21.539964+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fritsvanbrenk", @@ -180,7 +180,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.711723+00:00", + "inferred_at": "2026-01-09T19:51:21.538102+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MAARTENJAN-MEIJ.json b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MAARTENJAN-MEIJ.json index a84b64991d..c83baad226 100644 --- a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MAARTENJAN-MEIJ.json +++ b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MAARTENJAN-MEIJ.json @@ -209,7 +209,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maarten-jan-van-der-meij-3065556_20251214T112930Z.json" ], - "modified_at": "2026-01-09T19:18:15.317150+00:00", + "modified_at": "2026-01-09T19:51:08.532872+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maarten-jan-van-der-meij-3065556", @@ -237,7 +237,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -286,7 +286,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.315266+00:00", + "inferred_at": "2026-01-09T19:51:08.528357+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MARJOLEIN-DEKKER.json b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MARJOLEIN-DEKKER.json index e910079f84..9650227b75 100644 --- a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MARJOLEIN-DEKKER.json +++ b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MARJOLEIN-DEKKER.json @@ -133,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjoleinfikken_20251214T111758Z.json" ], - "modified_at": "2026-01-09T19:18:11.249427+00:00", + "modified_at": "2026-01-09T19:50:46.697868+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjoleinfikken", @@ -161,7 +161,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.239522+00:00", + "inferred_at": "2026-01-09T19:50:46.695912+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MARK-WALLET.json b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MARK-WALLET.json index 8f657977b5..207fdd5cfc 100644 --- a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MARK-WALLET.json +++ b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MARK-WALLET.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mark-wallet-88985a75_20251214T102911Z.json" ], - "modified_at": "2026-01-09T19:18:11.453700+00:00", + "modified_at": "2026-01-09T19:50:56.569395+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mark-wallet-88985a75", @@ -127,7 +127,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.451712+00:00", + "inferred_at": "2026-01-09T19:50:56.567389+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MONIQUE-BEERS.json b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MONIQUE-BEERS.json index bb19bf33b9..f2588383d8 100644 --- a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MONIQUE-BEERS.json +++ b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_MONIQUE-BEERS.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/monique-van-beers-a395205_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:13.401438+00:00", + "modified_at": "2026-01-09T19:51:08.517224+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "monique-van-beers-a395205", @@ -146,7 +146,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.399479+00:00", + "inferred_at": "2026-01-09T19:51:08.513705+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_RUTH-ZORGE.json b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_RUTH-ZORGE.json index 498258a53a..c3513b6bf2 100644 --- a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_RUTH-ZORGE.json +++ b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_RUTH-ZORGE.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ruth-van-zorge-6a633aa_20251214T103115Z.json" ], - "modified_at": "2026-01-09T19:18:14.048226+00:00", + "modified_at": "2026-01-09T19:50:58.560222+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ruth-van-zorge-6a633aa", @@ -209,7 +209,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.046338+00:00", + "inferred_at": "2026-01-09T19:50:58.557621+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_SAFIERA-FUNNA.json b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_SAFIERA-FUNNA.json index 95e28442e7..6c588095f7 100644 --- a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_SAFIERA-FUNNA.json +++ b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_SAFIERA-FUNNA.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/safiera-funna-811b4035_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:15.021086+00:00", + "modified_at": "2026-01-09T19:51:06.599439+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "safiera-funna-811b4035", @@ -192,7 +192,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.019198+00:00", + "inferred_at": "2026-01-09T19:51:06.597450+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_SASKIA-DURVILLE.json b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_SASKIA-DURVILLE.json index 4142065388..a58c58aa41 100644 --- a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_SASKIA-DURVILLE.json +++ b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_SASKIA-DURVILLE.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saskia-durville-3377b822a_20251212T230200Z.json" ], - "modified_at": "2026-01-09T19:18:12.450625+00:00", + "modified_at": "2026-01-09T19:51:06.647272+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saskia-durville-3377b822a", @@ -206,7 +206,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -255,7 +255,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.446836+00:00", + "inferred_at": "2026-01-09T19:51:06.645153+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_SIMONE-KORTEKAAS.json b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_SIMONE-KORTEKAAS.json index aa43cd06ac..e0c28140d2 100644 --- a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_SIMONE-KORTEKAAS.json +++ b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_SIMONE-KORTEKAAS.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/simone-kortekaas-317ab94_20251214T113250Z.json" ], - "modified_at": "2026-01-09T19:18:15.277583+00:00", + "modified_at": "2026-01-09T19:51:07.891568+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "simone-kortekaas-317ab94", @@ -175,7 +175,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.273813+00:00", + "inferred_at": "2026-01-09T19:51:07.881646+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_VINCENT-MONTANUS.json b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_VINCENT-MONTANUS.json index 06e7a7f34b..2473762019 100644 --- a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_VINCENT-MONTANUS.json +++ b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_VINCENT-MONTANUS.json @@ -197,7 +197,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vincent-montanus-10947711_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:16.530447+00:00", + "modified_at": "2026-01-09T19:51:18.568006+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vincent-montanus-10947711", @@ -225,7 +225,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -274,7 +274,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.525815+00:00", + "inferred_at": "2026-01-09T19:51:18.562786+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_WENDY-KONINGEN.json b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_WENDY-KONINGEN.json index ba90026824..e0e87872fe 100644 --- a/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_WENDY-KONINGEN.json +++ b/data/person/ID_NL-UT-UTR_197X_XX-XX-XXX_XXXX_WENDY-KONINGEN.json @@ -150,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wendy-koningen-0b453510_20251212T221800Z.json" ], - "modified_at": "2026-01-09T19:18:16.135461+00:00", + "modified_at": "2026-01-09T19:51:17.593810+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wendy-koningen-0b453510", @@ -172,7 +172,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.133503+00:00", + "inferred_at": "2026-01-09T19:51:17.590885+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-FL-AS_XXXX_SILVIA-NOBIS.json b/data/person/ID_NL-UT-UTR_198X_NL-FL-AS_XXXX_SILVIA-NOBIS.json index fffb7c0952..b3cabfb0c5 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-FL-AS_XXXX_SILVIA-NOBIS.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-FL-AS_XXXX_SILVIA-NOBIS.json @@ -215,7 +215,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/silvianobis_20251214T111846Z.json" ], - "modified_at": "2026-01-09T19:18:13.508820+00:00", + "modified_at": "2026-01-09T19:51:18.625842+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "silvianobis", @@ -247,7 +247,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -288,7 +288,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.508815+00:00", + "inferred_at": "2026-01-09T19:51:18.625834+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-GE-ARN_XXXX_LEONIEKE-TERLOUW.json b/data/person/ID_NL-UT-UTR_198X_NL-GE-ARN_XXXX_LEONIEKE-TERLOUW.json index a8fcfe7c68..8ad0067961 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-GE-ARN_XXXX_LEONIEKE-TERLOUW.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-GE-ARN_XXXX_LEONIEKE-TERLOUW.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/leonieketerlouw_20251214T110622Z.json" ], - "modified_at": "2026-01-09T19:18:15.775281+00:00", + "modified_at": "2026-01-09T19:51:14.418945+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "leonieketerlouw", @@ -141,7 +141,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.775278+00:00", + "inferred_at": "2026-01-09T19:51:14.418936+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-GE-CUL_XXXX_JANNEKE-HETEREN.json b/data/person/ID_NL-UT-UTR_198X_NL-GE-CUL_XXXX_JANNEKE-HETEREN.json index ee4be87c85..3c4a63f667 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-GE-CUL_XXXX_JANNEKE-HETEREN.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-GE-CUL_XXXX_JANNEKE-HETEREN.json @@ -160,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janneke-van-heteren-681bb6107_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:17.894798+00:00", + "modified_at": "2026-01-09T19:51:28.837486+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janneke-van-heteren-681bb6107", @@ -189,7 +189,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.894792+00:00", + "inferred_at": "2026-01-09T19:51:28.837481+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-GE-EDE_XXXX_ALETTE-MEIJEREN.json b/data/person/ID_NL-UT-UTR_198X_NL-GE-EDE_XXXX_ALETTE-MEIJEREN.json index 8b75ccc29c..7c27824559 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-GE-EDE_XXXX_ALETTE-MEIJEREN.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-GE-EDE_XXXX_ALETTE-MEIJEREN.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alette-van-meijeren-779a17140_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:15.472968+00:00", + "modified_at": "2026-01-09T19:50:49.086289+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alette-van-meijeren-779a17140", @@ -179,7 +179,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.472962+00:00", + "inferred_at": "2026-01-09T19:50:49.086283+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-GE-HAR_XXXX_TAMAR-BOS.json b/data/person/ID_NL-UT-UTR_198X_NL-GE-HAR_XXXX_TAMAR-BOS.json index 50534d22b5..f446889e8e 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-GE-HAR_XXXX_TAMAR-BOS.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-GE-HAR_XXXX_TAMAR-BOS.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tamar-bos-a61a8b33_20251214T111255Z.json" ], - "modified_at": "2026-01-09T19:18:16.683974+00:00", + "modified_at": "2026-01-09T19:51:21.510494+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tamar-bos-a61a8b33", @@ -134,7 +134,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.683970+00:00", + "inferred_at": "2026-01-09T19:51:21.510487+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-GE-TIE_XXXX_WARDA-AZTOUTI.json b/data/person/ID_NL-UT-UTR_198X_NL-GE-TIE_XXXX_WARDA-AZTOUTI.json index 38dc3dc145..68a58c3235 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-GE-TIE_XXXX_WARDA-AZTOUTI.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-GE-TIE_XXXX_WARDA-AZTOUTI.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/warda-aztouti-42a9b8294_20251214T111454Z.json" ], - "modified_at": "2026-01-09T19:18:15.560953+00:00", + "modified_at": "2026-01-09T19:51:23.195562+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "warda-aztouti-42a9b8294", @@ -161,7 +161,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.560945+00:00", + "inferred_at": "2026-01-09T19:51:23.195558+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-GE-WAG_XXXX_JILLES-MATEN.json b/data/person/ID_NL-UT-UTR_198X_NL-GE-WAG_XXXX_JILLES-MATEN.json index a31d789ea0..9f533399bc 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-GE-WAG_XXXX_JILLES-MATEN.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-GE-WAG_XXXX_JILLES-MATEN.json @@ -133,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jilles-van-der-maten-992b14280_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:17.455316+00:00", + "modified_at": "2026-01-09T19:51:28.155661+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jilles-van-der-maten-992b14280", @@ -171,7 +171,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.455310+00:00", + "inferred_at": "2026-01-09T19:51:28.155656+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NB-ALM_XXXX_MIRJAM-BAKX.json b/data/person/ID_NL-UT-UTR_198X_NL-NB-ALM_XXXX_MIRJAM-BAKX.json index 6ff4dc6b3b..f84adb314b 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NB-ALM_XXXX_MIRJAM-BAKX.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NB-ALM_XXXX_MIRJAM-BAKX.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mirjam-bakx-5099691b_20251214T112926Z.json" ], - "modified_at": "2026-01-09T19:18:14.763844+00:00", + "modified_at": "2026-01-09T19:51:04.047947+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mirjam-bakx-5099691b", @@ -167,7 +167,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.763840+00:00", + "inferred_at": "2026-01-09T19:51:04.047941+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NB-TIL_XXXX_FEMKE-NUNNIKHOVENBERTENS.json b/data/person/ID_NL-UT-UTR_198X_NL-NB-TIL_XXXX_FEMKE-NUNNIKHOVENBERTENS.json index 752a8e1554..b2dc79f93a 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NB-TIL_XXXX_FEMKE-NUNNIKHOVENBERTENS.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NB-TIL_XXXX_FEMKE-NUNNIKHOVENBERTENS.json @@ -172,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/femke-nunnikhoven-bertens-476ab941_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:14.751314+00:00", + "modified_at": "2026-01-09T19:51:04.031084+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "femke-nunnikhoven-bertens-476ab941", @@ -210,7 +210,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.751310+00:00", + "inferred_at": "2026-01-09T19:51:04.031078+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NB-TIL_XXXX_RIANNE-EXALTO.json b/data/person/ID_NL-UT-UTR_198X_NL-NB-TIL_XXXX_RIANNE-EXALTO.json index 99d12be451..030f7ef199 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NB-TIL_XXXX_RIANNE-EXALTO.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NB-TIL_XXXX_RIANNE-EXALTO.json @@ -199,7 +199,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rianneexalto_20251212T221000Z.json" ], - "modified_at": "2026-01-09T19:18:18.389672+00:00", + "modified_at": "2026-01-09T19:51:29.314905+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rianneexalto", @@ -236,7 +236,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -285,7 +285,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.389657+00:00", + "inferred_at": "2026-01-09T19:51:29.314900+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-ALK_XXXX_JESSE-DIJL.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-ALK_XXXX_JESSE-DIJL.json index 467f76cc28..2362cd19ce 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-ALK_XXXX_JESSE-DIJL.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-ALK_XXXX_JESSE-DIJL.json @@ -178,8 +178,14 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T01:30:00Z", + "search_queries": [ + "\"Jesse van Dijl\" Regionaal Archief Alkmaar born birthday biography", + "\"Jesse van Dijl\" geboren conservator beeldcollecties" + ], + "result": "not_found", + "notes": "Web search conducted via Exa; found annual reports mentioning Regionaal Archief Alkmaar activities but no personal birth date information for Jesse van Dijl. LinkedIn profile shows 35+ years total experience starting 1988." } }, "provenance": { @@ -188,7 +194,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jesse-van-dijl-1a3095112_20251214T113144Z.json" ], - "modified_at": "2026-01-09T19:18:16.816388+00:00", + "modified_at": "2026-01-09T19:50:46.709916+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jesse-van-dijl-1a3095112", @@ -226,7 +232,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -275,7 +281,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.816381+00:00", + "inferred_at": "2026-01-09T19:50:46.709910+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_ANNE-SCHUIT.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_ANNE-SCHUIT.json index caedf27182..43bce47487 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_ANNE-SCHUIT.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_ANNE-SCHUIT.json @@ -246,7 +246,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-schuit-6a70a725_20251214T102932Z.json" ], - "modified_at": "2026-01-09T19:18:16.392929+00:00", + "modified_at": "2026-01-09T19:51:04.051410+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-schuit-6a70a725", @@ -284,7 +284,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -333,7 +333,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.392922+00:00", + "inferred_at": "2026-01-09T19:51:04.051405+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_BODILL-LAMAIN.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_BODILL-LAMAIN.json index 03c44fad66..aec866be49 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_BODILL-LAMAIN.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_BODILL-LAMAIN.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bodill-lamain-1204684_20251214T111433Z.json" ], - "modified_at": "2026-01-09T19:18:14.117194+00:00", + "modified_at": "2026-01-09T19:51:28.198376+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bodill-lamain-1204684", @@ -153,7 +153,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.117186+00:00", + "inferred_at": "2026-01-09T19:51:28.198372+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_CERIANNE-GEER.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_CERIANNE-GEER.json index 98b5b6a893..1682de94a9 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_CERIANNE-GEER.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_CERIANNE-GEER.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cerianne_20251214T111448Z.json" ], - "modified_at": "2026-01-09T19:18:12.945515+00:00", + "modified_at": "2026-01-09T19:50:49.147191+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cerianne", @@ -195,7 +195,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -244,7 +244,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.945509+00:00", + "inferred_at": "2026-01-09T19:50:49.147186+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_ESTHER-KOETSE.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_ESTHER-KOETSE.json index 31c023fc32..bbe47adcac 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_ESTHER-KOETSE.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_ESTHER-KOETSE.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/esther-koetse-22151933_20251214T111707Z.json" ], - "modified_at": "2026-01-09T19:18:13.577434+00:00", + "modified_at": "2026-01-09T19:50:55.105368+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "esther-koetse-22151933", @@ -160,7 +160,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.577428+00:00", + "inferred_at": "2026-01-09T19:50:55.105361+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_FREDERIKE-LEFFELAAR.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_FREDERIKE-LEFFELAAR.json index 39753df901..593e98202b 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_FREDERIKE-LEFFELAAR.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_FREDERIKE-LEFFELAAR.json @@ -209,7 +209,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frederike-leffelaar-334b8b16_20251214T102718Z.json" ], - "modified_at": "2026-01-09T19:18:17.051260+00:00", + "modified_at": "2026-01-09T19:51:23.195078+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frederike-leffelaar-334b8b16", @@ -238,7 +238,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -287,7 +287,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.051251+00:00", + "inferred_at": "2026-01-09T19:51:23.195072+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_HANNEKE-DIJK.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_HANNEKE-DIJK.json index 3cad46c538..a7c8f066d8 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_HANNEKE-DIJK.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_HANNEKE-DIJK.json @@ -150,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hanneke-van-dijk-6460773b_20251214T111357Z.json" ], - "modified_at": "2026-01-09T19:18:13.459503+00:00", + "modified_at": "2026-01-09T19:50:54.445510+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hanneke-van-dijk-6460773b", @@ -173,7 +173,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.459499+00:00", + "inferred_at": "2026-01-09T19:50:54.445504+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_HINDE-HAEST.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_HINDE-HAEST.json index 16cbc0d2a9..e25f64e20e 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_HINDE-HAEST.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_HINDE-HAEST.json @@ -203,7 +203,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hinde-haest-a13a1162_20251214T111523Z.json" ], - "modified_at": "2026-01-09T19:18:14.249615+00:00", + "modified_at": "2026-01-09T19:50:58.962372+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hinde-haest-a13a1162", @@ -226,7 +226,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -267,7 +267,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.249611+00:00", + "inferred_at": "2026-01-09T19:50:58.962366+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_JOEN-HERMANS.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_JOEN-HERMANS.json index 09cd2bf727..39ade19b09 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_JOEN-HERMANS.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_JOEN-HERMANS.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joenhermans_20251214T111524Z.json" ], - "modified_at": "2026-01-09T19:18:16.507591+00:00", + "modified_at": "2026-01-09T19:51:06.637203+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joenhermans", @@ -156,7 +156,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.507563+00:00", + "inferred_at": "2026-01-09T19:51:06.637196+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_KAMEL-ESSABANE.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_KAMEL-ESSABANE.json index ea06541238..53fd6432fd 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_KAMEL-ESSABANE.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_KAMEL-ESSABANE.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kamel-essabane-86949121_20251214T113129Z.json" ], - "modified_at": "2026-01-09T19:18:11.369717+00:00", + "modified_at": "2026-01-09T19:50:46.734723+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kamel-essabane-86949121", @@ -170,7 +170,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.369712+00:00", + "inferred_at": "2026-01-09T19:50:46.734718+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_LAURENS-DITTMER.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_LAURENS-DITTMER.json index 17786a3ebb..0752da198c 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_LAURENS-DITTMER.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_LAURENS-DITTMER.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laurens-dittmer-618212175_20251214T111841Z.json" ], - "modified_at": "2026-01-09T19:18:12.861166+00:00", + "modified_at": "2026-01-09T19:50:49.080636+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laurens-dittmer-618212175", @@ -146,7 +146,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.861161+00:00", + "inferred_at": "2026-01-09T19:50:49.080630+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_LENA-KARVOVSKAYA.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_LENA-KARVOVSKAYA.json index 959b9a4884..aac1cdfdcd 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_LENA-KARVOVSKAYA.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_LENA-KARVOVSKAYA.json @@ -159,7 +159,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lena-karvovskaya_20251214T104042Z.json" ], - "modified_at": "2026-01-09T19:18:14.631710+00:00", + "modified_at": "2026-01-09T19:51:01.658873+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lena-karvovskaya", @@ -197,7 +197,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +246,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.631704+00:00", + "inferred_at": "2026-01-09T19:51:01.658865+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_MADO-AKKERSDIJK.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_MADO-AKKERSDIJK.json index 8c39110f46..8ae400faac 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_MADO-AKKERSDIJK.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_MADO-AKKERSDIJK.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/madoakkersdijk_20251214T111633Z.json" ], - "modified_at": "2026-01-09T19:18:15.372496+00:00", + "modified_at": "2026-01-09T19:51:18.246656+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "madoakkersdijk", @@ -168,7 +168,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.372489+00:00", + "inferred_at": "2026-01-09T19:51:18.246647+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_MARIA-HOLTROP.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_MARIA-HOLTROP.json index 2816ed173a..2200248cff 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_MARIA-HOLTROP.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_MARIA-HOLTROP.json @@ -140,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maria-holtrop-39097913_20251214T111318Z.json" ], - "modified_at": "2026-01-09T19:18:19.010673+00:00", + "modified_at": "2026-01-09T19:51:34.139758+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maria-holtrop-39097913", @@ -169,7 +169,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +218,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:19.010666+00:00", + "inferred_at": "2026-01-09T19:51:34.139754+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_MEREL-ETTEN.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_MEREL-ETTEN.json index 129290ca22..403664ef8e 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_MEREL-ETTEN.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_MEREL-ETTEN.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merel-vergeer-van-etten-a3157515_20251214T111457Z.json" ], - "modified_at": "2026-01-09T19:18:16.212689+00:00", + "modified_at": "2026-01-09T19:51:18.307390+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merel-vergeer-van-etten-a3157515", @@ -185,7 +185,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.212685+00:00", + "inferred_at": "2026-01-09T19:51:18.307382+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_ROBIN-KUHLEMEIER.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_ROBIN-KUHLEMEIER.json index d1ad9e1e23..360aa45e0b 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_ROBIN-KUHLEMEIER.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_ROBIN-KUHLEMEIER.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robin-alice-kuhlemeier-33007032_20251214T110210Z.json" ], - "modified_at": "2026-01-09T19:18:18.279998+00:00", + "modified_at": "2026-01-09T19:51:29.255736+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robin-alice-kuhlemeier-33007032", @@ -167,7 +167,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.279985+00:00", + "inferred_at": "2026-01-09T19:51:29.255730+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_TESSA-KOLKERT.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_TESSA-KOLKERT.json index 79eda80d61..86f916d162 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_TESSA-KOLKERT.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_TESSA-KOLKERT.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tessakolkertkrijn_20251214T110026Z.json" ], - "modified_at": "2026-01-09T19:18:16.756377+00:00", + "modified_at": "2026-01-09T19:51:21.815535+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tessakolkertkrijn", @@ -197,7 +197,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +246,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.756371+00:00", + "inferred_at": "2026-01-09T19:51:21.815526+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_WILLEKE-SLIM.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_WILLEKE-SLIM.json index 5119e290fe..f1a6a3ab6c 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_WILLEKE-SLIM.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-AMS_XXXX_WILLEKE-SLIM.json @@ -197,7 +197,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/willeke-slim-b8527329_20251214T113215Z.json" ], - "modified_at": "2026-01-09T19:18:14.717871+00:00", + "modified_at": "2026-01-09T19:51:03.423438+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "willeke-slim-b8527329", @@ -220,7 +220,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -261,7 +261,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.717867+00:00", + "inferred_at": "2026-01-09T19:51:03.423430+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-BLA_XXXX_MARK-SPONSELEE.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-BLA_XXXX_MARK-SPONSELEE.json index f832da361a..2baf7f2880 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-BLA_XXXX_MARK-SPONSELEE.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-BLA_XXXX_MARK-SPONSELEE.json @@ -184,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marksponselee_20251214T103209Z.json" ], - "modified_at": "2026-01-09T19:18:17.628880+00:00", + "modified_at": "2026-01-09T19:51:01.655327+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marksponselee", @@ -222,7 +222,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -271,7 +271,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.628871+00:00", + "inferred_at": "2026-01-09T19:51:01.655313+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-HAA_XXXX_ANNA-ALLIS.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-HAA_XXXX_ANNA-ALLIS.json index 2fbb995ca9..ec9de92e89 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-HAA_XXXX_ANNA-ALLIS.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-HAA_XXXX_ANNA-ALLIS.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-allis-b2148b84_20251214T110046Z.json" ], - "modified_at": "2026-01-09T19:18:15.141072+00:00", + "modified_at": "2026-01-09T19:51:06.741084+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anna-allis-b2148b84", @@ -191,7 +191,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.141066+00:00", + "inferred_at": "2026-01-09T19:51:06.741078+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-NH-HAA_XXXX_LAURIEN-BERKVENS.json b/data/person/ID_NL-UT-UTR_198X_NL-NH-HAA_XXXX_LAURIEN-BERKVENS.json index 2469d8dc06..e7990b3f9b 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-NH-HAA_XXXX_LAURIEN-BERKVENS.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-NH-HAA_XXXX_LAURIEN-BERKVENS.json @@ -197,7 +197,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laurien-berkvens-a6540918_20251214T103126Z.json" ], - "modified_at": "2026-01-09T19:18:17.834642+00:00", + "modified_at": "2026-01-09T19:51:28.784399+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laurien-berkvens-a6540918", @@ -226,7 +226,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -275,7 +275,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.834637+00:00", + "inferred_at": "2026-01-09T19:51:28.784394+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-OV-HEN_XXXX_VERA-WANDERS.json b/data/person/ID_NL-UT-UTR_198X_NL-OV-HEN_XXXX_VERA-WANDERS.json index 7e4e040447..3e134e0d06 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-OV-HEN_XXXX_VERA-WANDERS.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-OV-HEN_XXXX_VERA-WANDERS.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vera-wanders-2a4b622b_20251214T110408Z.json" ], - "modified_at": "2026-01-09T19:18:13.560613+00:00", + "modified_at": "2026-01-09T19:51:06.502805+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vera-wanders-2a4b622b", @@ -175,7 +175,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.560608+00:00", + "inferred_at": "2026-01-09T19:51:06.502797+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-OV-NED_XXXX_LAURENS-SCHOUTEN.json b/data/person/ID_NL-UT-UTR_198X_NL-OV-NED_XXXX_LAURENS-SCHOUTEN.json index d702aeec13..193b9bf6af 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-OV-NED_XXXX_LAURENS-SCHOUTEN.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-OV-NED_XXXX_LAURENS-SCHOUTEN.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laurens-schouten-268a0320_20251214T112430Z.json" ], - "modified_at": "2026-01-09T19:18:18.886138+00:00", + "modified_at": "2026-01-09T19:51:29.492532+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laurens-schouten-268a0320", @@ -167,7 +167,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.886131+00:00", + "inferred_at": "2026-01-09T19:51:29.492527+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-OV-ZWO_XXXX_KAYLEIGH-WEERDT.json b/data/person/ID_NL-UT-UTR_198X_NL-OV-ZWO_XXXX_KAYLEIGH-WEERDT.json index cbff6b7de4..a9ddc903cc 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-OV-ZWO_XXXX_KAYLEIGH-WEERDT.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-OV-ZWO_XXXX_KAYLEIGH-WEERDT.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kay-leigh-de-weerdt-41416924_20251214T110411Z.json" ], - "modified_at": "2026-01-09T19:18:14.251852+00:00", + "modified_at": "2026-01-09T19:50:59.299312+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kay-leigh-de-weerdt-41416924", @@ -174,7 +174,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.251847+00:00", + "inferred_at": "2026-01-09T19:50:59.299254+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-OV-ZWO_XXXX_MARJO-VENTEBOS.json b/data/person/ID_NL-UT-UTR_198X_NL-OV-ZWO_XXXX_MARJO-VENTEBOS.json similarity index 70% rename from data/person/ID_XX-XX-XXX_198X_NL-OV-ZWO_XXXX_MARJO-VENTEBOS.json rename to data/person/ID_NL-UT-UTR_198X_NL-OV-ZWO_XXXX_MARJO-VENTEBOS.json index cc55c552c8..7dbb78e315 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-OV-ZWO_XXXX_MARJO-VENTEBOS.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-OV-ZWO_XXXX_MARJO-VENTEBOS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-OV-ZWO_XXXX_MARJO-VENTEBOS", + "ppid": "ID_NL-UT-UTR_198X_NL-OV-ZWO_XXXX_MARJO-VENTEBOS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-UT-UTR", "first_date": "198X", "last_location": "NL-OV-ZWO", "last_date": "XXXX", @@ -15,7 +15,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Marjo de Vente-Bos", @@ -119,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjo-de-vente-bos-6884193b_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:13.770874+00:00", + "modified_at": "2026-01-09T19:50:55.389091+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjo-de-vente-bos-6884193b", @@ -141,6 +142,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-OV-ZWO_XXXX_MARJO-VENTEBOS", + "new_ppid": "ID_NL-UT-UTR_198X_NL-OV-ZWO_XXXX_MARJO-VENTEBOS", + "changed_at": "2026-01-09T19:50:55.389089+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -155,7 +166,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +215,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.770820+00:00", + "inferred_at": "2026-01-09T19:50:55.383574+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Utrecht", + "formatted": "NL-UT-UTR", + "country_code": "NL", + "region_code": "UT", + "settlement_code": "UTR", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "GO opleidingen", + "date_range": "2021", + "degree": "Nieuwe Archiefwet 2021, Wet Open Overheid, AVG" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "GO opleidingen", + "mapping_result": "Utrecht, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Utrecht, Netherlands", + "result": { + "geonames_id": 2745912, + "geonames_name": "Utrecht", + "admin1_code": "09", + "admin1_name": "Utrecht", + "feature_code": "PPLA", + "latitude": 52.09083, + "longitude": 5.12222 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "UT", + "settlement_code": "UTR" + }, + "result": "NL-UT-UTR" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2745912, + "geonames_name": "Utrecht", + "admin1_code": "09", + "admin1_name": "Utrecht", + "feature_code": "PPLA", + "latitude": 52.09083, + "longitude": 5.12222 + }, + "inferred_at": "2026-01-09T19:50:55.389075+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-UT-AME_XXXX_MEREL-BEEK.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-AME_XXXX_MEREL-BEEK.json index a1acf1c28e..c4b5e29e24 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-UT-AME_XXXX_MEREL-BEEK.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-AME_XXXX_MEREL-BEEK.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merel-de-bruin-van-de-beek-6a4849101_20251214T110405Z.json" ], - "modified_at": "2026-01-09T19:18:15.505065+00:00", + "modified_at": "2026-01-09T19:51:11.263563+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merel-de-bruin-van-de-beek-6a4849101", @@ -176,7 +176,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.505062+00:00", + "inferred_at": "2026-01-09T19:51:11.263556+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-UT-LEU_XXXX_ASTER-DIJKGRAAF.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-LEU_XXXX_ASTER-DIJKGRAAF.json index 3d1bd129d7..e0c1205868 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-UT-LEU_XXXX_ASTER-DIJKGRAAF.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-LEU_XXXX_ASTER-DIJKGRAAF.json @@ -179,7 +179,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aster-dijkgraaf_20251212T233000Z.json" ], - "modified_at": "2026-01-09T19:18:14.988583+00:00", + "modified_at": "2026-01-09T19:51:06.359681+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aster-dijkgraaf", @@ -210,7 +210,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -251,7 +251,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.988579+00:00", + "inferred_at": "2026-01-09T19:51:06.359674+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-UT-NIE_XXXX_TOM-REITSMA.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-NIE_XXXX_TOM-REITSMA.json index f792d7219e..6ddedf8683 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-UT-NIE_XXXX_TOM-REITSMA.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-NIE_XXXX_TOM-REITSMA.json @@ -186,7 +186,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tomreitsma_20251214T110948Z.json" ], - "modified_at": "2026-01-09T19:18:13.416260+00:00", + "modified_at": "2026-01-09T19:50:54.104401+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tomreitsma", @@ -215,7 +215,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -264,7 +264,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.416256+00:00", + "inferred_at": "2026-01-09T19:50:54.104396+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_AAT-HOUT.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_AAT-HOUT.json similarity index 84% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_AAT-HOUT.json rename to data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_AAT-HOUT.json index 764051d82e..810e8894f0 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_AAT-HOUT.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_AAT-HOUT.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_AAT-HOUT", + "ppid": "ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_AAT-HOUT", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-UT-UTR", + "first_date": "198X", "last_location": "NL-UT-UTR", "last_date": "XXXX", "name_tokens": [ "AAT", "HOUT" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Aat in 't Hout", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -347,74 +353,11 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aat-in-t-hout-2a164a22_20251214T104130Z.json" ], - "modified_at": "2026-01-09T18:58:13.014202+00:00", + "modified_at": "2026-01-09T19:51:06.623760+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aat-in-t-hout-2a164a22", "ppid_collision_suffix": "aat_in_t_hout_2a164a22", - "inferred_current_settlement": { - "value": "Utrecht", - "formatted": "NL-UT-UTR", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "UTR", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Randstad, Netherlands (NL)" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "Het Utrechts Archief", - "title": "Archiefinspecteur / Inspector record management", - "location": "Utrecht, Netherlands" - } - }, - { - "step": 3, - "geocoding": "GeoNames resolution", - "query": "Utrecht, Netherlands", - "result": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - } - }, - { - "step": 4, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-UTR" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - }, - "inferred_at": "2026-01-09T18:58:13.014187+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AAT-HOUT-aat_in_t_hout_2a164a22", @@ -424,6 +367,91 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_AAT-HOUT", + "new_ppid": "ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_AAT-HOUT", + "changed_at": "2026-01-09T19:41:08.975342+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_AAT-HOUT", + "new_ppid": "ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_AAT-HOUT", + "changed_at": "2026-01-09T19:43:40.634670+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1982 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Het Utrechts Archief", + "title": "Archiefinspecteur / Inspector record management", + "date_range": "by 2005" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2005 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2005 - 23 = 1982", + "result": "Estimated birth year: 1982", + "range": "1977-1987 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1977, + 1987 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:06.623755+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FLOOR-ELSENBURG.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_FLOOR-ELSENBURG.json similarity index 72% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FLOOR-ELSENBURG.json rename to data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_FLOOR-ELSENBURG.json index 5040e0def2..e1454ead38 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FLOOR-ELSENBURG.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_FLOOR-ELSENBURG.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FLOOR-ELSENBURG", + "ppid": "ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_FLOOR-ELSENBURG", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-UT-UTR", + "first_date": "198X", "last_location": "NL-UT-UTR", "last_date": "XXXX", "name_tokens": [ "FLOOR", "ELSENBURG" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Floor Elsenburg", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -168,73 +174,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/floor-elsenburg-54636312_20251213T020000Z.json" ], - "modified_at": "2026-01-09T18:58:10.415705+00:00", + "modified_at": "2026-01-09T19:50:50.586207+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "floor-elsenburg-54636312", - "inferred_current_settlement": { - "value": "Utrecht", - "formatted": "NL-UT-UTR", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "UTR", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Netherlands" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "The Dutch Inspectorate of Education", - "title": "Programmamanager Versterking Toezicht", - "location": "Utrecht, Netherlands" - } - }, - { - "step": 3, - "geocoding": "GeoNames resolution", - "query": "Utrecht, Netherlands", - "result": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - } - }, - { - "step": 4, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-UTR" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - }, - "inferred_at": "2026-01-09T18:58:10.415688+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FLOOR-ELSENBURG", @@ -244,6 +187,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FLOOR-ELSENBURG", + "new_ppid": "ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_FLOOR-ELSENBURG", + "changed_at": "2026-01-09T19:43:42.573381+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1985 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Universiteit van Amsterdam", + "title": "Coördinator Practicumgroepen Psychologie", + "date_range": "Jan 2008 - Jan 2011" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2008 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2008 - 23 = 1985", + "result": "Estimated birth year: 1985", + "range": "1980-1990 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1980, + 1990 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:50.586199+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_JILDOU-BAARSMA.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_JILDOU-BAARSMA.json similarity index 76% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_JILDOU-BAARSMA.json rename to data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_JILDOU-BAARSMA.json index 29ff8cdf81..43346385fc 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_JILDOU-BAARSMA.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_JILDOU-BAARSMA.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_JILDOU-BAARSMA", + "ppid": "ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_JILDOU-BAARSMA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-UT-UTR", + "first_date": "198X", "last_location": "NL-UT-UTR", "last_date": "XXXX", "name_tokens": [ "JILDOU", "BAARSMA" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Jildou Baarsma", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -230,63 +236,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jildoubaarsma_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:42:59.640336+00:00", + "modified_at": "2026-01-09T19:51:29.238572+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jildoubaarsma", - "inferred_current_settlement": { - "value": "Utrecht", - "formatted": "NL-UT-UTR", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "UTR", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Utrecht, Utrecht, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Utrecht, Utrecht, Netherlands", - "result": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-UTR" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - }, - "inferred_at": "2026-01-09T17:42:59.640328+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JILDOU-BAARSMA", @@ -296,6 +249,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_JILDOU-BAARSMA", + "new_ppid": "ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_JILDOU-BAARSMA", + "changed_at": "2026-01-09T19:43:38.031230+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1983 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Stichting Studiebegeleiding Leiden", + "title": "Bijlesdocent", + "date_range": "Apr 2006 - Jul 2008" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2006 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2006 - 23 = 1983", + "result": "Estimated birth year: 1983", + "range": "1978-1988 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1978, + 1988 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:29.238567+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_JOOST-KOUTRIK.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_JOOST-KOUTRIK.json index 85455dd052..5ec164bd71 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_JOOST-KOUTRIK.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_JOOST-KOUTRIK.json @@ -271,7 +271,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joostvankoutrik_20251214T104115Z.json" ], - "modified_at": "2026-01-09T19:18:13.144655+00:00", + "modified_at": "2026-01-09T19:50:52.795053+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joostvankoutrik", @@ -294,7 +294,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -335,7 +335,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.144651+00:00", + "inferred_at": "2026-01-09T19:50:52.795043+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_JOS-LIM.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_JOS-LIM.json index 33becf8d1e..baa4352c39 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_JOS-LIM.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_JOS-LIM.json @@ -167,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joslim_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:13.053223+00:00", + "modified_at": "2026-01-09T19:50:50.903684+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joslim", @@ -204,7 +204,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -253,7 +253,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.053219+00:00", + "inferred_at": "2026-01-09T19:50:50.903673+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_LIENEKE-KRIJTHEWESTERINK.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_LIENEKE-KRIJTHEWESTERINK.json index b402a44246..3af13126b3 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_LIENEKE-KRIJTHEWESTERINK.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_LIENEKE-KRIJTHEWESTERINK.json @@ -363,7 +363,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lienekewesterink_20251214T104124Z.json" ], - "modified_at": "2026-01-09T19:18:12.354309+00:00", + "modified_at": "2026-01-09T19:50:48.258355+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lienekewesterink", @@ -392,7 +392,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -441,7 +441,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.354296+00:00", + "inferred_at": "2026-01-09T19:50:48.258332+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_MARK-SCHEP.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_MARK-SCHEP.json index 5b314524f5..0268bf33ca 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_MARK-SCHEP.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_MARK-SCHEP.json @@ -171,7 +171,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mark-schep-87703b3a_20251214T110749Z.json" ], - "modified_at": "2026-01-09T19:18:13.861856+00:00", + "modified_at": "2026-01-09T19:50:56.718413+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mark-schep-87703b3a", @@ -194,7 +194,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -235,7 +235,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.861851+00:00", + "inferred_at": "2026-01-09T19:50:56.718406+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_MATTHIAS-REKERS.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_MATTHIAS-REKERS.json index 917d03945e..d170c0e03f 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_MATTHIAS-REKERS.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_MATTHIAS-REKERS.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/matthiasrekers_20251214T110416Z.json" ], - "modified_at": "2026-01-09T19:18:14.148895+00:00", + "modified_at": "2026-01-09T19:51:06.351608+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "matthiasrekers", @@ -168,7 +168,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.148889+00:00", + "inferred_at": "2026-01-09T19:51:06.351604+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_NADINE-JONG.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_NADINE-JONG.json index 03e382f055..6c6cfafa69 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_NADINE-JONG.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_NADINE-JONG.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nadinedejong1_20251214T104147Z.json" ], - "modified_at": "2026-01-09T19:18:15.468135+00:00", + "modified_at": "2026-01-09T19:51:11.036438+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nadinedejong1", @@ -197,7 +197,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +246,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.468131+00:00", + "inferred_at": "2026-01-09T19:51:11.036431+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_TIM-FELIKS.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_TIM-FELIKS.json index 12cf6bba92..2d5a799e8b 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_TIM-FELIKS.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_TIM-FELIKS.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tim-feliks-0a336861_20251214T112841Z.json" ], - "modified_at": "2026-01-09T19:18:15.493577+00:00", + "modified_at": "2026-01-09T19:51:11.083269+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tim-feliks-0a336861", @@ -115,7 +115,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.493552+00:00", + "inferred_at": "2026-01-09T19:51:11.083264+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_TOM-WETERING.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_TOM-WETERING.json index e703602ae4..737d5e0e81 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_TOM-WETERING.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_TOM-WETERING.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/twetering_20251214T112449Z.json" ], - "modified_at": "2026-01-09T19:18:15.293614+00:00", + "modified_at": "2026-01-09T19:51:08.366186+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "twetering", @@ -190,7 +190,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.293611+00:00", + "inferred_at": "2026-01-09T19:51:08.366180+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_TRISTAN-AKKERMAN.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_TRISTAN-AKKERMAN.json index 3277d1ce0f..357f43d15f 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_TRISTAN-AKKERMAN.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-UTR_XXXX_TRISTAN-AKKERMAN.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tristan-akkerman-793512205_20251214T110400Z.json" ], - "modified_at": "2026-01-09T19:18:13.082703+00:00", + "modified_at": "2026-01-09T19:50:51.057079+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tristan-akkerman-793512205", @@ -122,7 +122,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -171,7 +171,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.082699+00:00", + "inferred_at": "2026-01-09T19:50:51.057071+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-UT-ZEI_XXXX_ELLEN-BLOM.json b/data/person/ID_NL-UT-UTR_198X_NL-UT-ZEI_XXXX_ELLEN-BLOM.json index e90073d209..7826db836e 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-UT-ZEI_XXXX_ELLEN-BLOM.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-UT-ZEI_XXXX_ELLEN-BLOM.json @@ -265,7 +265,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ellen-blom-024b6811_20251214T104134Z.json" ], - "modified_at": "2026-01-09T19:18:16.907224+00:00", + "modified_at": "2026-01-09T19:51:22.501863+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ellen-blom-024b6811", @@ -288,7 +288,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -329,7 +329,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.907221+00:00", + "inferred_at": "2026-01-09T19:51:22.501856+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-ZH-DEL_XXXX_NINA-BRANDS.json b/data/person/ID_NL-UT-UTR_198X_NL-ZH-DEL_XXXX_NINA-BRANDS.json index a4fff7d92f..9172f35bab 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-ZH-DEL_XXXX_NINA-BRANDS.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-ZH-DEL_XXXX_NINA-BRANDS.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ninabrands_20251214T112915Z.json" ], - "modified_at": "2026-01-09T19:18:18.289365+00:00", + "modified_at": "2026-01-09T19:51:29.259682+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ninabrands", @@ -178,7 +178,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.289356+00:00", + "inferred_at": "2026-01-09T19:51:29.259677+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-ZH-ROT_XXXX_IVANA-CEROVECKI.json b/data/person/ID_NL-UT-UTR_198X_NL-ZH-ROT_XXXX_IVANA-CEROVECKI.json index 1f0e14c6e6..82d2f4b39c 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-ZH-ROT_XXXX_IVANA-CEROVECKI.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-ZH-ROT_XXXX_IVANA-CEROVECKI.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ivana-cerovecki-4a391183_20251214T112500Z.json" ], - "modified_at": "2026-01-09T19:18:13.938014+00:00", + "modified_at": "2026-01-09T19:50:56.861330+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ivana-cerovecki-4a391183", @@ -175,7 +175,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.938010+00:00", + "inferred_at": "2026-01-09T19:50:56.861225+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-ZH-ROT_XXXX_LINDA-WOLF.json b/data/person/ID_NL-UT-UTR_198X_NL-ZH-ROT_XXXX_LINDA-WOLF.json index a4f7c0d9fd..918946cfb6 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-ZH-ROT_XXXX_LINDA-WOLF.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-ZH-ROT_XXXX_LINDA-WOLF.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/linda-de-wolf-834a1aa6_20251214T103316Z.json" ], - "modified_at": "2026-01-09T19:18:15.778517+00:00", + "modified_at": "2026-01-09T19:51:14.422334+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "linda-de-wolf-834a1aa6", @@ -171,7 +171,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.778513+00:00", + "inferred_at": "2026-01-09T19:51:14.422326+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-ZH-SAS_XXXX_VERONIQUE-VOS.json b/data/person/ID_NL-UT-UTR_198X_NL-ZH-SAS_XXXX_VERONIQUE-VOS.json index dfd2aebe3b..a6eb8ec5ae 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-ZH-SAS_XXXX_VERONIQUE-VOS.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-ZH-SAS_XXXX_VERONIQUE-VOS.json @@ -172,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/veroniquevos_20251214T112918Z.json" ], - "modified_at": "2026-01-09T19:18:13.079087+00:00", + "modified_at": "2026-01-09T19:50:51.052434+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "veroniquevos", @@ -201,7 +201,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -250,7 +250,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.079083+00:00", + "inferred_at": "2026-01-09T19:50:51.052425+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_EMMA-SMIT.json b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_EMMA-SMIT.json index b1d963b634..3ca849cb0d 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_EMMA-SMIT.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_EMMA-SMIT.json @@ -159,7 +159,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emma-smit-51775146_20251214T103129Z.json" ], - "modified_at": "2026-01-09T19:18:17.940898+00:00", + "modified_at": "2026-01-09T19:51:15.055764+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emma-smit-51775146", @@ -197,7 +197,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +246,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.940885+00:00", + "inferred_at": "2026-01-09T19:51:15.055755+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_EVA-LACHNIT.json b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_EVA-LACHNIT.json index 329c18d93c..bdda2ce8de 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_EVA-LACHNIT.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_EVA-LACHNIT.json @@ -182,7 +182,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eva-lachnit-74182428_20251214T112721Z.json" ], - "modified_at": "2026-01-09T19:18:15.913275+00:00", + "modified_at": "2026-01-09T19:51:04.052044+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eva-lachnit-74182428", @@ -220,7 +220,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -269,7 +269,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.913268+00:00", + "inferred_at": "2026-01-09T19:51:04.052038+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_FRERIK-KAMPMAN.json b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_FRERIK-KAMPMAN.json index 3c569593ac..36a981353c 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_FRERIK-KAMPMAN.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_FRERIK-KAMPMAN.json @@ -209,7 +209,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frerik-kampman-91925514_20251214T102858Z.json" ], - "modified_at": "2026-01-09T19:18:13.160826+00:00", + "modified_at": "2026-01-09T19:51:01.936356+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frerik-kampman-91925514", @@ -247,7 +247,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -296,7 +296,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.160820+00:00", + "inferred_at": "2026-01-09T19:51:01.936346+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_JAIKE-BAKKER.json b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_JAIKE-BAKKER.json index 28226c53e0..2dad10b8f6 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_JAIKE-BAKKER.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_JAIKE-BAKKER.json @@ -157,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jaikebakker_20251214T112544Z.json" ], - "modified_at": "2026-01-09T19:18:13.273456+00:00", + "modified_at": "2026-01-09T19:51:12.716234+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jaikebakker", @@ -195,7 +195,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -244,7 +244,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.273449+00:00", + "inferred_at": "2026-01-09T19:51:12.716228+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_JUDITH-SCHOLS.json b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_JUDITH-SCHOLS.json index a29717adfe..f9a99b7da4 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_JUDITH-SCHOLS.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_JUDITH-SCHOLS.json @@ -140,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/judith-schols-0941589_20251214T103305Z.json" ], - "modified_at": "2026-01-09T19:18:17.532184+00:00", + "modified_at": "2026-01-09T19:51:28.395198+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "judith-schols-0941589", @@ -169,7 +169,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +218,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.532176+00:00", + "inferred_at": "2026-01-09T19:51:28.395192+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_LAURA-COELLO.json b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_LAURA-COELLO.json index 59bcc989cf..00cf9fc60d 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_LAURA-COELLO.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_LAURA-COELLO.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laura-coello-aa01a26_20251214T102844Z.json" ], - "modified_at": "2026-01-09T19:18:18.963866+00:00", + "modified_at": "2026-01-09T19:51:31.809390+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laura-coello-aa01a26", @@ -204,7 +204,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +245,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.963859+00:00", + "inferred_at": "2026-01-09T19:51:31.809385+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_MARIJN-SPETH.json b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_MARIJN-SPETH.json index 1f2a9b2b0a..ce7b372a94 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_MARIJN-SPETH.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_MARIJN-SPETH.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marijnspeth_20251214T103012Z.json" ], - "modified_at": "2026-01-09T19:18:16.589046+00:00", + "modified_at": "2026-01-09T19:51:05.537903+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marijnspeth", @@ -176,7 +176,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.589040+00:00", + "inferred_at": "2026-01-09T19:51:05.537896+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_SANNE-MAAREL.json b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_SANNE-MAAREL.json index a44feb081b..1a5fde6437 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_SANNE-MAAREL.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_SANNE-MAAREL.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sannevandermaarel_20251214T111407Z.json" ], - "modified_at": "2026-01-09T19:18:16.447220+00:00", + "modified_at": "2026-01-09T19:51:18.509172+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sannevandermaarel", @@ -187,7 +187,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.447213+00:00", + "inferred_at": "2026-01-09T19:51:18.509148+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_TAKE-PADDING.json b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_TAKE-PADDING.json index 9be2c6154d..403c934bc0 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_TAKE-PADDING.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-ZH-TH_XXXX_TAKE-PADDING.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/takepadding_20251214T103102Z.json" ], - "modified_at": "2026-01-09T19:18:16.778558+00:00", + "modified_at": "2026-01-09T19:51:21.950040+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "takepadding", @@ -139,7 +139,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.778553+00:00", + "inferred_at": "2026-01-09T19:51:21.950033+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_NL-ZH-ZOE_XXXX_MIRELLA-RUITER.json b/data/person/ID_NL-UT-UTR_198X_NL-ZH-ZOE_XXXX_MIRELLA-RUITER.json index 3dfb9b2d1f..342baefe44 100644 --- a/data/person/ID_NL-UT-UTR_198X_NL-ZH-ZOE_XXXX_MIRELLA-RUITER.json +++ b/data/person/ID_NL-UT-UTR_198X_NL-ZH-ZOE_XXXX_MIRELLA-RUITER.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mirella-de-ruiter-6056b214a_20251214T112722Z.json" ], - "modified_at": "2026-01-09T19:18:14.617967+00:00", + "modified_at": "2026-01-09T19:51:06.358578+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mirella-de-ruiter-6056b214a", @@ -162,7 +162,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.617961+00:00", + "inferred_at": "2026-01-09T19:51:06.358574+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_COLETA-LIESHOUTWILLEMEN.json b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_COLETA-LIESHOUTWILLEMEN.json index f9f827653f..bd27859e5e 100644 --- a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_COLETA-LIESHOUTWILLEMEN.json +++ b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_COLETA-LIESHOUTWILLEMEN.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/coleta-lieshout-willemen-808a9296_20251214T104135Z.json" ], - "modified_at": "2026-01-09T19:18:18.069386+00:00", + "modified_at": "2026-01-09T19:51:28.906207+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "coleta-lieshout-willemen-808a9296", @@ -203,7 +203,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.066438+00:00", + "inferred_at": "2026-01-09T19:51:28.904279+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_GERDIENTJE-SCHOUTEN.json b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_GERDIENTJE-SCHOUTEN.json index e6fdb95316..989e808f41 100644 --- a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_GERDIENTJE-SCHOUTEN.json +++ b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_GERDIENTJE-SCHOUTEN.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerdientjeschouten_20251214T112241Z.json" ], - "modified_at": "2026-01-09T19:18:14.334624+00:00", + "modified_at": "2026-01-09T19:51:21.959425+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerdientjeschouten", @@ -124,7 +124,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.330998+00:00", + "inferred_at": "2026-01-09T19:51:21.957299+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_HELEEN-NIEUWPOORT.json b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_HELEEN-NIEUWPOORT.json index 5d67af193c..ef46a05802 100644 --- a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_HELEEN-NIEUWPOORT.json +++ b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_HELEEN-NIEUWPOORT.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/heleen-nieuwpoort-951783bb_20251214T112820Z.json" ], - "modified_at": "2026-01-09T19:18:12.239033+00:00", + "modified_at": "2026-01-09T19:50:47.476997+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "heleen-nieuwpoort-951783bb", @@ -133,7 +133,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.234999+00:00", + "inferred_at": "2026-01-09T19:50:47.472827+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_JOLIEN-KEULEN.json b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_JOLIEN-KEULEN.json index b665d2f1bf..b22b396309 100644 --- a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_JOLIEN-KEULEN.json +++ b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_JOLIEN-KEULEN.json @@ -178,7 +178,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jolien-van-keulen-34647028_20251212T181500Z.json" ], - "modified_at": "2026-01-09T19:18:16.617632+00:00", + "modified_at": "2026-01-09T19:51:20.922690+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jolien-van-keulen-34647028", @@ -206,7 +206,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -255,7 +255,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.615662+00:00", + "inferred_at": "2026-01-09T19:51:20.920628+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MAAIKE-RIETRAE.json b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MAAIKE-RIETRAE.json index bb8f137aab..3c9ca1dac3 100644 --- a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MAAIKE-RIETRAE.json +++ b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MAAIKE-RIETRAE.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maaike-napolitano-rietrae-4806163_20251214T113322Z.json" ], - "modified_at": "2026-01-09T19:18:15.981314+00:00", + "modified_at": "2026-01-09T19:51:15.722504+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maaike-napolitano-rietrae-4806163", @@ -177,7 +177,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.979289+00:00", + "inferred_at": "2026-01-09T19:51:15.720299+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MIES-VOLLENHOVEN.json b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MIES-VOLLENHOVEN.json index e51afbf59a..f1d0b7705c 100644 --- a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MIES-VOLLENHOVEN.json +++ b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MIES-VOLLENHOVEN.json @@ -185,7 +185,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mies-beljaars-snellen-van-vollenhoven-a2b0748_20251214T112617Z.json" ], - "modified_at": "2026-01-09T19:18:14.273112+00:00", + "modified_at": "2026-01-09T19:50:59.794114+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mies-beljaars-snellen-van-vollenhoven-a2b0748", @@ -213,7 +213,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.271280+00:00", + "inferred_at": "2026-01-09T19:50:59.791981+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MIRJAM-CUPER.json b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MIRJAM-CUPER.json index 23de6fbef7..cea37cdeae 100644 --- a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MIRJAM-CUPER.json +++ b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MIRJAM-CUPER.json @@ -167,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mirjam-cuper-92402070_20251214T113225Z.json" ], - "modified_at": "2026-01-09T19:18:14.663033+00:00", + "modified_at": "2026-01-09T19:50:53.848699+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mirjam-cuper-92402070", @@ -198,7 +198,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.659308+00:00", + "inferred_at": "2026-01-09T19:50:53.842695+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MUSTAFA-KAYA.json b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MUSTAFA-KAYA.json index 26ce3789ff..63cb23378a 100644 --- a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MUSTAFA-KAYA.json +++ b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_MUSTAFA-KAYA.json @@ -269,7 +269,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mustafa-kaya-468b8165_20251214T112122Z.json" ], - "modified_at": "2026-01-09T19:18:14.696426+00:00", + "modified_at": "2026-01-09T19:51:03.368342+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mustafa-kaya-468b8165", @@ -291,7 +291,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -332,7 +332,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.694508+00:00", + "inferred_at": "2026-01-09T19:51:03.366320+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_NICOLE-MULDER.json b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_NICOLE-MULDER.json index e80cad1d5e..12980311fc 100644 --- a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_NICOLE-MULDER.json +++ b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_NICOLE-MULDER.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicole-mulder-41750010_20251214T113402Z.json" ], - "modified_at": "2026-01-09T19:18:17.557514+00:00", + "modified_at": "2026-01-09T19:51:28.404065+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicole-mulder-41750010", @@ -148,7 +148,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.555274+00:00", + "inferred_at": "2026-01-09T19:51:28.402237+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_PATRICIA-LEEUWIS.json b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_PATRICIA-LEEUWIS.json index c9ae875996..66e0e16fde 100644 --- a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_PATRICIA-LEEUWIS.json +++ b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_PATRICIA-LEEUWIS.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/patricia-leeuwis-65785213_20251214T110340Z.json" ], - "modified_at": "2026-01-09T19:18:15.962250+00:00", + "modified_at": "2026-01-09T19:51:15.713708+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "patricia-leeuwis-65785213", @@ -152,7 +152,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.960291+00:00", + "inferred_at": "2026-01-09T19:51:15.711461+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_SASKIA-MEILAND.json b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_SASKIA-MEILAND.json index 3d47f7d0de..a7a9a84be0 100644 --- a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_SASKIA-MEILAND.json +++ b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_SASKIA-MEILAND.json @@ -88,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saskia-meiland-89374b67_20251214T113042Z.json" ], - "modified_at": "2026-01-09T19:18:18.922660+00:00", + "modified_at": "2026-01-09T19:51:29.500633+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saskia-meiland-89374b67", @@ -110,7 +110,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -151,7 +151,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.922637+00:00", + "inferred_at": "2026-01-09T19:51:29.500607+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_SHAILESHKOEMAR-BISESSAR.json b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_SHAILESHKOEMAR-BISESSAR.json index 51e032be68..b27826894f 100644 --- a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_SHAILESHKOEMAR-BISESSAR.json +++ b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_SHAILESHKOEMAR-BISESSAR.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/shaileshkoemar-bisessar-46816782_20251214T113016Z.json" ], - "modified_at": "2026-01-09T19:18:13.316672+00:00", + "modified_at": "2026-01-09T19:51:18.486140+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "shaileshkoemar-bisessar-46816782", @@ -138,7 +138,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.316659+00:00", + "inferred_at": "2026-01-09T19:51:18.486106+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_SIMONE-SOUER.json b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_SIMONE-SOUER.json index 82001459f0..97db716bae 100644 --- a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_SIMONE-SOUER.json +++ b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_SIMONE-SOUER.json @@ -179,7 +179,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/simone-souer-781bb126_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:17.144542+00:00", + "modified_at": "2026-01-09T19:51:23.923360+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "simone-souer-781bb126", @@ -202,7 +202,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.142269+00:00", + "inferred_at": "2026-01-09T19:51:23.921467+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_THOMAS-HABETS.json b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_THOMAS-HABETS.json index bd6277ba2c..eb4f075922 100644 --- a/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_THOMAS-HABETS.json +++ b/data/person/ID_NL-UT-UTR_198X_XX-XX-XXX_XXXX_THOMAS-HABETS.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thomas-habets-53913b50_20251214T110829Z.json" ], - "modified_at": "2026-01-09T19:18:13.528470+00:00", + "modified_at": "2026-01-09T19:50:54.573989+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thomas-habets-53913b50", @@ -123,7 +123,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.528460+00:00", + "inferred_at": "2026-01-09T19:50:54.573965+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-GE-AAL_XXXX_RACHEL-WESTERVELDLENSINK.json b/data/person/ID_NL-UT-UTR_199X_NL-GE-AAL_XXXX_RACHEL-WESTERVELDLENSINK.json index ff156e832e..2d6a1ac656 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-GE-AAL_XXXX_RACHEL-WESTERVELDLENSINK.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-GE-AAL_XXXX_RACHEL-WESTERVELDLENSINK.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rachelwesterveld_20251214T113050Z.json" ], - "modified_at": "2026-01-09T19:18:15.516508+00:00", + "modified_at": "2026-01-09T19:51:11.280174+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rachelwesterveld", @@ -145,7 +145,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.516504+00:00", + "inferred_at": "2026-01-09T19:51:11.280166+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-GE-APE_XXXX_PIETER-SIWABESSY.json b/data/person/ID_NL-UT-UTR_199X_NL-GE-APE_XXXX_PIETER-SIWABESSY.json index cd013285fb..af0876f865 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-GE-APE_XXXX_PIETER-SIWABESSY.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-GE-APE_XXXX_PIETER-SIWABESSY.json @@ -192,7 +192,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pieter-siwabessij-7755b335_20251214T111408Z.json" ], - "modified_at": "2026-01-09T19:18:13.175137+00:00", + "modified_at": "2026-01-09T19:50:53.216134+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pieter-siwabessij-7755b335", @@ -221,7 +221,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -270,7 +270,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.175132+00:00", + "inferred_at": "2026-01-09T19:50:53.216126+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-GE-APE_XXXX_THOMAS-BRAAS.json b/data/person/ID_NL-UT-UTR_199X_NL-GE-APE_XXXX_THOMAS-BRAAS.json index a28626898f..d0c3fa7897 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-GE-APE_XXXX_THOMAS-BRAAS.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-GE-APE_XXXX_THOMAS-BRAAS.json @@ -189,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thomas-braas-57650a147_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:14.644283+00:00", + "modified_at": "2026-01-09T19:51:03.216397+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thomas-braas-57650a147", @@ -220,7 +220,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -261,7 +261,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.644279+00:00", + "inferred_at": "2026-01-09T19:51:03.216392+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-GE-ARN_XXXX_MARGOT-LEERINK.json b/data/person/ID_NL-UT-UTR_199X_NL-GE-ARN_XXXX_MARGOT-LEERINK.json index 8bae4a1785..cd5a5cbe6d 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-GE-ARN_XXXX_MARGOT-LEERINK.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-GE-ARN_XXXX_MARGOT-LEERINK.json @@ -182,7 +182,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/margotleerink_20251214T111506Z.json" ], - "modified_at": "2026-01-09T19:18:15.711554+00:00", + "modified_at": "2026-01-09T19:51:13.529072+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "margotleerink", @@ -205,7 +205,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +246,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.711551+00:00", + "inferred_at": "2026-01-09T19:51:13.529063+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-GE-NIJ_XXXX_LEX-HOF.json b/data/person/ID_NL-UT-UTR_199X_NL-GE-NIJ_XXXX_LEX-HOF.json index b8124356fe..82ab7fe0b3 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-GE-NIJ_XXXX_LEX-HOF.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-GE-NIJ_XXXX_LEX-HOF.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lex-van-t-hof-182a5bb2_20251212T181500Z.json" ], - "modified_at": "2026-01-09T19:18:11.650019+00:00", + "modified_at": "2026-01-09T19:50:47.253677+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lex-van-t-hof-182a5bb2", @@ -189,7 +189,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.650012+00:00", + "inferred_at": "2026-01-09T19:50:47.253669+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GE-REN_XXXX_SANDER-LANGBROEK.json b/data/person/ID_NL-UT-UTR_199X_NL-GE-REN_XXXX_SANDER-LANGBROEK.json similarity index 89% rename from data/person/ID_XX-XX-XXX_199X_NL-GE-REN_XXXX_SANDER-LANGBROEK.json rename to data/person/ID_NL-UT-UTR_199X_NL-GE-REN_XXXX_SANDER-LANGBROEK.json index ebca974d50..5d097efd8b 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-GE-REN_XXXX_SANDER-LANGBROEK.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-GE-REN_XXXX_SANDER-LANGBROEK.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-GE-REN_XXXX_SANDER-LANGBROEK", + "ppid": "ID_NL-UT-UTR_199X_NL-GE-REN_XXXX_SANDER-LANGBROEK", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-UT-UTR", "first_date": "199X", "last_location": "NL-GE-REN", "last_date": "XXXX", @@ -15,7 +15,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Sander Langbroek", @@ -107,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sander-langbroek-b93a12128_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:15.598497+00:00", + "modified_at": "2026-01-09T19:51:17.608204+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sander-langbroek-b93a12128", @@ -129,6 +130,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-GE-REN_XXXX_SANDER-LANGBROEK", + "new_ppid": "ID_NL-UT-UTR_199X_NL-GE-REN_XXXX_SANDER-LANGBROEK", + "changed_at": "2026-01-09T19:43:41.058477+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -143,7 +154,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.598480+00:00", + "inferred_at": "2026-01-09T19:51:17.608198+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-GE-TIE_XXXX_KEVIN-TUIL.json b/data/person/ID_NL-UT-UTR_199X_NL-GE-TIE_XXXX_KEVIN-TUIL.json index ac929c77c4..1d9472bf34 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-GE-TIE_XXXX_KEVIN-TUIL.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-GE-TIE_XXXX_KEVIN-TUIL.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kevinvantuil_20251214T110332Z.json" ], - "modified_at": "2026-01-09T19:18:16.310416+00:00", + "modified_at": "2026-01-09T19:51:18.387182+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kevinvantuil", @@ -137,7 +137,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.310407+00:00", + "inferred_at": "2026-01-09T19:51:18.387176+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NB-BES_XXXX_SANGEETIKA-RUCHI.json b/data/person/ID_NL-UT-UTR_199X_NL-NB-BES_XXXX_SANGEETIKA-RUCHI.json index e4ac4794d8..cd8ff7ca36 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NB-BES_XXXX_SANGEETIKA-RUCHI.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NB-BES_XXXX_SANGEETIKA-RUCHI.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sangeetika-ruchi-phd-95649116_20251214T111052Z.json" ], - "modified_at": "2026-01-09T19:18:13.012449+00:00", + "modified_at": "2026-01-09T19:50:50.584933+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sangeetika-ruchi-phd-95649116", @@ -185,7 +185,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.012443+00:00", + "inferred_at": "2026-01-09T19:50:50.584928+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NB-EIN_XXXX_MARKELLA-KOSTOPOULOU.json b/data/person/ID_NL-UT-UTR_199X_NL-NB-EIN_XXXX_MARKELLA-KOSTOPOULOU.json index 0a7d8fb64d..f674738d02 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NB-EIN_XXXX_MARKELLA-KOSTOPOULOU.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NB-EIN_XXXX_MARKELLA-KOSTOPOULOU.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/markellakostopoulou_20251214T111244Z.json" ], - "modified_at": "2026-01-09T19:18:13.259235+00:00", + "modified_at": "2026-01-09T19:50:53.712563+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "markellakostopoulou", @@ -188,7 +188,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.259231+00:00", + "inferred_at": "2026-01-09T19:50:53.712558+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NB-EIN_XXXX_MAURICE-CROMBEECKE.json b/data/person/ID_NL-UT-UTR_199X_NL-NB-EIN_XXXX_MAURICE-CROMBEECKE.json index e1ca60a0bd..5a7e121774 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NB-EIN_XXXX_MAURICE-CROMBEECKE.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NB-EIN_XXXX_MAURICE-CROMBEECKE.json @@ -97,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maurice-crombeecke-62571721b_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:14.321959+00:00", + "modified_at": "2026-01-09T19:51:00.367486+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maurice-crombeecke-62571721b", @@ -134,7 +134,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.321955+00:00", + "inferred_at": "2026-01-09T19:51:00.367479+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NB-GEE_XXXX_MAAIKE-SNOEK.json b/data/person/ID_NL-UT-UTR_199X_NL-NB-GEE_XXXX_MAAIKE-SNOEK.json index 6577029ea4..64cf7907d3 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NB-GEE_XXXX_MAAIKE-SNOEK.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NB-GEE_XXXX_MAAIKE-SNOEK.json @@ -212,7 +212,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maaikesnoek_20251214T110522Z.json" ], - "modified_at": "2026-01-09T19:18:17.002820+00:00", + "modified_at": "2026-01-09T19:51:22.956602+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maaikesnoek", @@ -241,7 +241,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -290,7 +290,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.002812+00:00", + "inferred_at": "2026-01-09T19:51:22.956597+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NB-VEL_XXXX_JEROEN-MEER.json b/data/person/ID_NL-UT-UTR_199X_NL-NB-VEL_XXXX_JEROEN-MEER.json index d06bbc3eea..4b80a75f45 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NB-VEL_XXXX_JEROEN-MEER.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NB-VEL_XXXX_JEROEN-MEER.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jmeer_20251214T111104Z.json" ], - "modified_at": "2026-01-09T19:18:13.415289+00:00", + "modified_at": "2026-01-09T19:50:54.102756+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jmeer", @@ -140,7 +140,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.415286+00:00", + "inferred_at": "2026-01-09T19:50:54.102750+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-ALK_XXXX_BARRY-OOSTERBAAN.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-ALK_XXXX_BARRY-OOSTERBAAN.json index b3b1ddc4ae..34edd3d193 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-ALK_XXXX_BARRY-OOSTERBAAN.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-ALK_XXXX_BARRY-OOSTERBAAN.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/barry-oosterbaan_20251214T110249Z.json" ], - "modified_at": "2026-01-09T19:18:15.272470+00:00", + "modified_at": "2026-01-09T19:51:07.879791+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "barry-oosterbaan", @@ -148,7 +148,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.272465+00:00", + "inferred_at": "2026-01-09T19:51:07.879787+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_CHARLOTTE-ENGELS.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_CHARLOTTE-ENGELS.json index 1eba522d21..771ca3378e 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_CHARLOTTE-ENGELS.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_CHARLOTTE-ENGELS.json @@ -179,7 +179,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/charlotte-engels-10525a198_20251214T110013Z.json" ], - "modified_at": "2026-01-09T19:18:15.541709+00:00", + "modified_at": "2026-01-09T19:51:11.856902+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "charlotte-engels-10525a198", @@ -202,7 +202,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.541704+00:00", + "inferred_at": "2026-01-09T19:51:11.856893+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_DENNIS-HOLTEN.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_DENNIS-HOLTEN.json index 506f028bcc..c421109837 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_DENNIS-HOLTEN.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_DENNIS-HOLTEN.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dennis-van-holten-680a91223_20251214T104213Z.json" ], - "modified_at": "2026-01-09T19:18:14.584040+00:00", + "modified_at": "2026-01-09T19:51:05.114688+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dennis-van-holten-680a91223", @@ -150,7 +150,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.584030+00:00", + "inferred_at": "2026-01-09T19:51:05.114679+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_DIEDERIK-BERGHUIJS.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_DIEDERIK-BERGHUIJS.json index 1ca77c46dd..233f089429 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_DIEDERIK-BERGHUIJS.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_DIEDERIK-BERGHUIJS.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/diederik-berghuijs-2220ab124_20251214T102912Z.json" ], - "modified_at": "2026-01-09T19:18:11.576436+00:00", + "modified_at": "2026-01-09T19:50:47.198169+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "diederik-berghuijs-2220ab124", @@ -170,7 +170,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.576431+00:00", + "inferred_at": "2026-01-09T19:50:47.198146+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_FRAUKE-VANDOREN.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_FRAUKE-VANDOREN.json index 6766a657ff..4d9a0a95f3 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_FRAUKE-VANDOREN.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_FRAUKE-VANDOREN.json @@ -185,7 +185,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frauke-vandoren-377b9a203_20251214T110225Z.json" ], - "modified_at": "2026-01-09T19:18:11.112058+00:00", + "modified_at": "2026-01-09T19:50:46.680058+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frauke-vandoren-377b9a203", @@ -208,7 +208,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -249,7 +249,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.112051+00:00", + "inferred_at": "2026-01-09T19:50:46.680050+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_JANNEKE-HEMMEN.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_JANNEKE-HEMMEN.json index 744d8dca4b..86187b91f8 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_JANNEKE-HEMMEN.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_JANNEKE-HEMMEN.json @@ -203,7 +203,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janneke-van-hemmen-05088b3a_20251214T103225Z.json" ], - "modified_at": "2026-01-09T19:18:15.503715+00:00", + "modified_at": "2026-01-09T19:51:11.252683+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janneke-van-hemmen-05088b3a", @@ -232,7 +232,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -281,7 +281,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.503711+00:00", + "inferred_at": "2026-01-09T19:51:11.252675+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_JUDITH-KOSTER.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_JUDITH-KOSTER.json index fa57533f16..e8fde35ce9 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_JUDITH-KOSTER.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_JUDITH-KOSTER.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jekoster_20251214T110247Z.json" ], - "modified_at": "2026-01-09T19:18:17.832411+00:00", + "modified_at": "2026-01-09T19:51:28.782329+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jekoster", @@ -170,7 +170,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.832406+00:00", + "inferred_at": "2026-01-09T19:51:28.782325+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_LARISSA-VERSLOOT.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_LARISSA-VERSLOOT.json index f3e03b808f..16dd966a7a 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_LARISSA-VERSLOOT.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_LARISSA-VERSLOOT.json @@ -184,7 +184,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/larissa-versloot_20251214T103113Z.json" ], - "modified_at": "2026-01-09T19:18:14.914185+00:00", + "modified_at": "2026-01-09T19:51:05.502506+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "larissa-versloot", @@ -213,7 +213,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.914180+00:00", + "inferred_at": "2026-01-09T19:51:05.502478+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_LIEKE-BROEKMAN.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_LIEKE-BROEKMAN.json index f6e2798c13..0fcae5a7ab 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_LIEKE-BROEKMAN.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_LIEKE-BROEKMAN.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lieke-broekman-b9040aa5_20251214T112943Z.json" ], - "modified_at": "2026-01-09T19:18:15.928844+00:00", + "modified_at": "2026-01-09T19:51:15.183078+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lieke-broekman-b9040aa5", @@ -198,7 +198,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.928841+00:00", + "inferred_at": "2026-01-09T19:51:15.183075+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_MANUELA-BOSCH.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_MANUELA-BOSCH.json index 5a788d7fc6..e8f3441986 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_MANUELA-BOSCH.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_MANUELA-BOSCH.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/manuela-bosch-3ab4b9162_20251214T111424Z.json" ], - "modified_at": "2026-01-09T19:18:13.097538+00:00", + "modified_at": "2026-01-09T19:50:51.602719+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "manuela-bosch-3ab4b9162", @@ -152,7 +152,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.097534+00:00", + "inferred_at": "2026-01-09T19:50:51.602711+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_NINA-REID.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_NINA-REID.json index 3c7563e122..667d05b09a 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_NINA-REID.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_NINA-REID.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nina-reid-55068b178_20251214T110020Z.json" ], - "modified_at": "2026-01-09T19:18:13.386066+00:00", + "modified_at": "2026-01-09T19:51:03.563376+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nina-reid-55068b178", @@ -213,7 +213,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.386058+00:00", + "inferred_at": "2026-01-09T19:51:03.563369+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_PASCAL-LUIT.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_PASCAL-LUIT.json index 34e659104f..28ed3ff190 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_PASCAL-LUIT.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_PASCAL-LUIT.json @@ -187,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pascalvanluit_20251214T103318Z.json" ], - "modified_at": "2026-01-09T19:18:15.436887+00:00", + "modified_at": "2026-01-09T19:51:10.857726+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pascalvanluit", @@ -216,7 +216,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -265,7 +265,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.436830+00:00", + "inferred_at": "2026-01-09T19:51:10.857723+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_PAUL-DALSEN.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_PAUL-DALSEN.json index 59b3399df4..b0efa3740b 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_PAUL-DALSEN.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_PAUL-DALSEN.json @@ -192,7 +192,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paul-van-dalsen-a7367274_20251214T110024Z.json" ], - "modified_at": "2026-01-09T19:18:15.957847+00:00", + "modified_at": "2026-01-09T19:51:15.708905+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paul-van-dalsen-a7367274", @@ -221,7 +221,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -270,7 +270,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.957842+00:00", + "inferred_at": "2026-01-09T19:51:15.708897+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_THOMAS-ABMA.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_THOMAS-ABMA.json index fd831ae212..3fb0172c13 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_THOMAS-ABMA.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_THOMAS-ABMA.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thomas-abma-057b061a6_20251214T102913Z.json" ], - "modified_at": "2026-01-09T19:18:13.035651+00:00", + "modified_at": "2026-01-09T19:51:06.621910+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thomas-abma-057b061a6", @@ -173,7 +173,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.035645+00:00", + "inferred_at": "2026-01-09T19:51:06.621904+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_TIM-HARTOG.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_TIM-HARTOG.json index b5e84e8622..63dfaee44b 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_TIM-HARTOG.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_TIM-HARTOG.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tdenhartog_20251214T110323Z.json" ], - "modified_at": "2026-01-09T19:18:12.671553+00:00", + "modified_at": "2026-01-09T19:50:48.650644+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tdenhartog", @@ -152,7 +152,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.671531+00:00", + "inferred_at": "2026-01-09T19:50:48.650637+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-NH-HOO_XXXX_SALINA-NEEFJES.json b/data/person/ID_NL-UT-UTR_199X_NL-NH-HOO_XXXX_SALINA-NEEFJES.json index 843dba18e1..11bcdda9b9 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-NH-HOO_XXXX_SALINA-NEEFJES.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-NH-HOO_XXXX_SALINA-NEEFJES.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/salina-neefjes_20251214T110359Z.json" ], - "modified_at": "2026-01-09T19:18:11.646178+00:00", + "modified_at": "2026-01-09T19:51:26.677266+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "salina-neefjes", @@ -153,7 +153,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.646166+00:00", + "inferred_at": "2026-01-09T19:51:26.677259+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-OV-DEV_XXXX_MANDY-SMIT.json b/data/person/ID_NL-UT-UTR_199X_NL-OV-DEV_XXXX_MANDY-SMIT.json index 5eaa9d626f..29a98dc187 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-OV-DEV_XXXX_MANDY-SMIT.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-OV-DEV_XXXX_MANDY-SMIT.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mandyvester_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:15.998779+00:00", + "modified_at": "2026-01-09T19:51:15.726110+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mandyvester", @@ -150,7 +150,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.998775+00:00", + "inferred_at": "2026-01-09T19:51:15.726105+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-AME_XXXX_ESTHER-VREEKEN.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-AME_XXXX_ESTHER-VREEKEN.json index 7b0cab594e..01058cd216 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-AME_XXXX_ESTHER-VREEKEN.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-AME_XXXX_ESTHER-VREEKEN.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/esther-vreeken-161694167_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:16.640199+00:00", + "modified_at": "2026-01-09T19:51:21.294546+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "esther-vreeken-161694167", @@ -172,7 +172,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.640195+00:00", + "inferred_at": "2026-01-09T19:51:21.294537+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_CHARLOTTE-SCHUITEMAKER.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_CHARLOTTE-SCHUITEMAKER.json index 91dd1fed62..1ba942d0e2 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_CHARLOTTE-SCHUITEMAKER.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_CHARLOTTE-SCHUITEMAKER.json @@ -243,7 +243,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/charlotteschuitemaker_20251214T104128Z.json" ], - "modified_at": "2026-01-09T19:18:15.408875+00:00", + "modified_at": "2026-01-09T19:51:08.785717+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "charlotteschuitemaker", @@ -272,7 +272,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -321,7 +321,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.408869+00:00", + "inferred_at": "2026-01-09T19:51:08.785690+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_EMMA-DOLMANS.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_EMMA-DOLMANS.json index 3077638681..a48a00f320 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_EMMA-DOLMANS.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_EMMA-DOLMANS.json @@ -150,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emma-dolmans-618265193_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:15.141820+00:00", + "modified_at": "2026-01-09T19:51:06.742062+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emma-dolmans-618265193", @@ -187,7 +187,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.141814+00:00", + "inferred_at": "2026-01-09T19:51:06.742056+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_ESTHER-KLINKENBERG.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_ESTHER-KLINKENBERG.json index 7088b43e05..bf35d90d1b 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_ESTHER-KLINKENBERG.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_ESTHER-KLINKENBERG.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/esther-klinkenberg-2b0641b0_20251212T221000Z.json" ], - "modified_at": "2026-01-09T19:18:14.223623+00:00", + "modified_at": "2026-01-09T19:50:58.926834+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "esther-klinkenberg-2b0641b0", @@ -187,7 +187,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.223619+00:00", + "inferred_at": "2026-01-09T19:50:58.926824+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_JOHANN-VILLIERS.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_JOHANN-VILLIERS.json index 2e1baeaa90..a8bd894fe0 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_JOHANN-VILLIERS.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_JOHANN-VILLIERS.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/johanndevilliers_20251214T103252Z.json" ], - "modified_at": "2026-01-09T19:18:13.920823+00:00", + "modified_at": "2026-01-09T19:50:56.844724+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "johanndevilliers", @@ -159,7 +159,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.920818+00:00", + "inferred_at": "2026-01-09T19:50:56.844717+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_KEVIN-JANSEN.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_KEVIN-JANSEN.json index 501bb0b918..c8bb184163 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_KEVIN-JANSEN.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_KEVIN-JANSEN.json @@ -150,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kevin-jansen-3374b6212_20251214T110833Z.json" ], - "modified_at": "2026-01-09T19:18:15.506040+00:00", + "modified_at": "2026-01-09T19:51:11.265562+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kevin-jansen-3374b6212", @@ -179,7 +179,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.506037+00:00", + "inferred_at": "2026-01-09T19:51:11.265556+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_LISA-HUIJSMAN.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_LISA-HUIJSMAN.json index 03b76cee9d..7c5514507b 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_LISA-HUIJSMAN.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_LISA-HUIJSMAN.json @@ -180,7 +180,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lisa-huijsman-95401011a_20251214T112747Z.json" ], - "modified_at": "2026-01-09T19:18:14.629043+00:00", + "modified_at": "2026-01-09T19:51:03.097953+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lisa-huijsman-95401011a", @@ -209,7 +209,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.629039+00:00", + "inferred_at": "2026-01-09T19:51:03.097947+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_LIZANNE-ZWETH.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_LIZANNE-ZWETH.json index b4bedf8aac..2dc902f0e6 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_LIZANNE-ZWETH.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_LIZANNE-ZWETH.json @@ -264,7 +264,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lizannegille_20251214T102716Z.json" ], - "modified_at": "2026-01-09T19:18:13.265831+00:00", + "modified_at": "2026-01-09T19:50:53.723392+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lizannegille", @@ -293,7 +293,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -342,7 +342,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.265827+00:00", + "inferred_at": "2026-01-09T19:50:53.723386+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARRIT-BORGHT.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_MARRIT-BORGHT.json similarity index 69% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARRIT-BORGHT.json rename to data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_MARRIT-BORGHT.json index b6a5a7d30d..03351ca0d7 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARRIT-BORGHT.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_MARRIT-BORGHT.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARRIT-BORGHT", + "ppid": "ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_MARRIT-BORGHT", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-UT-UTR", + "first_date": "199X", "last_location": "NL-UT-UTR", "last_date": "XXXX", "name_tokens": [ "MARRIT", "BORGHT" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Marrit Van Der Borght", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -173,63 +179,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marrit-van-der-borght-709623132_20251213T020000Z.json" ], - "modified_at": "2026-01-09T18:58:10.526400+00:00", + "modified_at": "2026-01-09T19:51:10.881472+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marrit-van-der-borght-709623132", - "inferred_current_settlement": { - "value": "Utrecht", - "formatted": "NL-UT-UTR", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "UTR", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Utrecht, Utrecht, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Utrecht, Utrecht, Netherlands", - "result": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-UTR" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - }, - "inferred_at": "2026-01-09T18:58:10.526385+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARRIT-BORGHT", @@ -239,6 +192,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARRIT-BORGHT", + "new_ppid": "ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_MARRIT-BORGHT", + "changed_at": "2026-01-09T19:43:40.596491+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1993 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Stage Entertainment", + "title": "Gastvrouw", + "date_range": "Nov 2016 - May 2018" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2016 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2016 - 23 = 1993", + "result": "Estimated birth year: 1993", + "range": "1988-1998 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1988, + 1998 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:10.881466+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_MATHIJS-HES.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_MATHIJS-HES.json index 1f5936fcdf..4796ed42ab 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_MATHIJS-HES.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_MATHIJS-HES.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mathijs-hes-48a085131_20251214T103142Z.json" ], - "modified_at": "2026-01-09T19:18:15.958430+00:00", + "modified_at": "2026-01-09T19:51:15.710352+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mathijs-hes-48a085131", @@ -167,7 +167,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.958426+00:00", + "inferred_at": "2026-01-09T19:51:15.710346+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_MATHILDA-WANROOIJ.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_MATHILDA-WANROOIJ.json index b685a504bb..1129e6a873 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_MATHILDA-WANROOIJ.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_MATHILDA-WANROOIJ.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mathilda-wanrooij-749916117_20251214T112152Z.json" ], - "modified_at": "2026-01-09T19:18:13.684721+00:00", + "modified_at": "2026-01-09T19:50:55.431022+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mathilda-wanrooij-749916117", @@ -155,7 +155,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.684717+00:00", + "inferred_at": "2026-01-09T19:50:55.431017+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_ROBRECHT-HAEX.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_ROBRECHT-HAEX.json index c3c092d893..63030becdd 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_ROBRECHT-HAEX.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_ROBRECHT-HAEX.json @@ -160,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robrechthaex_20251214T112410Z.json" ], - "modified_at": "2026-01-09T19:18:15.470962+00:00", + "modified_at": "2026-01-09T19:51:11.041378+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robrechthaex", @@ -189,7 +189,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.470957+00:00", + "inferred_at": "2026-01-09T19:51:11.041373+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_SANNE-RINGERS.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_SANNE-RINGERS.json index 81981f0df1..56469a46f4 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_SANNE-RINGERS.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_SANNE-RINGERS.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sanne-ringers-088372225_20251214T111656Z.json" ], - "modified_at": "2026-01-09T19:18:12.824074+00:00", + "modified_at": "2026-01-09T19:50:49.071497+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sanne-ringers-088372225", @@ -128,7 +128,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.824062+00:00", + "inferred_at": "2026-01-09T19:50:49.071490+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_THOMAS-DIEVELAAR.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_THOMAS-DIEVELAAR.json index fb0cb5bc62..9d3714bda1 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_THOMAS-DIEVELAAR.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_THOMAS-DIEVELAAR.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thomasdievelaar_20251214T110101Z.json" ], - "modified_at": "2026-01-09T19:18:15.294089+00:00", + "modified_at": "2026-01-09T19:51:08.366622+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thomasdievelaar", @@ -164,7 +164,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.294086+00:00", + "inferred_at": "2026-01-09T19:51:08.366618+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_THOMAS-MEBRAHTU.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_THOMAS-MEBRAHTU.json index dc0d04173f..3627cb51ea 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_THOMAS-MEBRAHTU.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_THOMAS-MEBRAHTU.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thomas-mebrahtu-305754238_20251214T103001Z.json" ], - "modified_at": "2026-01-09T19:18:14.359265+00:00", + "modified_at": "2026-01-09T19:50:59.860194+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thomas-mebrahtu-305754238", @@ -151,7 +151,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.359259+00:00", + "inferred_at": "2026-01-09T19:50:59.860183+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_VERA-WESTRA.json b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_VERA-WESTRA.json index 48d3713a04..d98ee11cee 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_VERA-WESTRA.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-UT-UTR_XXXX_VERA-WESTRA.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vera-westra-0683a882_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:17.747688+00:00", + "modified_at": "2026-01-09T19:51:28.557410+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vera-westra-0683a882", @@ -146,7 +146,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.747678+00:00", + "inferred_at": "2026-01-09T19:51:28.557406+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-ZH-DEL_XXXX_MICHEL-KLAPHEK.json b/data/person/ID_NL-UT-UTR_199X_NL-ZH-DEL_XXXX_MICHEL-KLAPHEK.json index 12b2f0e1b3..dd51616dab 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-ZH-DEL_XXXX_MICHEL-KLAPHEK.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-ZH-DEL_XXXX_MICHEL-KLAPHEK.json @@ -189,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michel-van-t-klaphek-1ba9b272_20251214T112836Z.json" ], - "modified_at": "2026-01-09T19:18:12.950778+00:00", + "modified_at": "2026-01-09T19:50:49.593227+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michel-van-t-klaphek-1ba9b272", @@ -218,7 +218,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -267,7 +267,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.950770+00:00", + "inferred_at": "2026-01-09T19:50:49.593213+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-ZH-KAZ_XXXX_MARILIJN-SCHAAP.json b/data/person/ID_NL-UT-UTR_199X_NL-ZH-KAZ_XXXX_MARILIJN-SCHAAP.json index e1330c6961..e8d86436f9 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-ZH-KAZ_XXXX_MARILIJN-SCHAAP.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-ZH-KAZ_XXXX_MARILIJN-SCHAAP.json @@ -159,7 +159,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marilijnschaap_20251214T113338Z.json" ], - "modified_at": "2026-01-09T19:18:16.461634+00:00", + "modified_at": "2026-01-09T19:51:18.537398+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marilijnschaap", @@ -188,7 +188,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -237,7 +237,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.461630+00:00", + "inferred_at": "2026-01-09T19:51:18.537390+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-ZH-NAD_XXXX_MARK-BARTO.json b/data/person/ID_NL-UT-UTR_199X_NL-ZH-NAD_XXXX_MARK-BARTO.json index 66b82714a0..0c02d59e20 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-ZH-NAD_XXXX_MARK-BARTO.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-ZH-NAD_XXXX_MARK-BARTO.json @@ -183,7 +183,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mabarto_20251214T113359Z.json" ], - "modified_at": "2026-01-09T19:18:15.419512+00:00", + "modified_at": "2026-01-09T19:51:10.609959+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mabarto", @@ -212,7 +212,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -261,7 +261,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.419507+00:00", + "inferred_at": "2026-01-09T19:51:10.609954+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-ZH-RIJ_XXXX_WILLEM-DRIEBERGEN.json b/data/person/ID_NL-UT-UTR_199X_NL-ZH-RIJ_XXXX_WILLEM-DRIEBERGEN.json index 16215d2562..ac7bc3c252 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-ZH-RIJ_XXXX_WILLEM-DRIEBERGEN.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-ZH-RIJ_XXXX_WILLEM-DRIEBERGEN.json @@ -150,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/3bergen_20251212T200000Z.json" ], - "modified_at": "2026-01-09T19:18:17.844181+00:00", + "modified_at": "2026-01-09T19:51:28.822503+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "3bergen", @@ -179,7 +179,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.844176+00:00", + "inferred_at": "2026-01-09T19:51:28.822497+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-ZH-ROT_XXXX_BRAM-DONDERS.json b/data/person/ID_NL-UT-UTR_199X_NL-ZH-ROT_XXXX_BRAM-DONDERS.json index 17f2a3b320..13a2a38f1e 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-ZH-ROT_XXXX_BRAM-DONDERS.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-ZH-ROT_XXXX_BRAM-DONDERS.json @@ -203,7 +203,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bram-donders-25626485_20251214T110018Z.json" ], - "modified_at": "2026-01-09T19:18:12.102940+00:00", + "modified_at": "2026-01-09T19:50:47.444228+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bram-donders-25626485", @@ -226,7 +226,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -267,7 +267,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.102933+00:00", + "inferred_at": "2026-01-09T19:50:47.444221+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-ZH-ROT_XXXX_JORENA-ROZIJN.json b/data/person/ID_NL-UT-UTR_199X_NL-ZH-ROT_XXXX_JORENA-ROZIJN.json index d91c176750..4be9c2b6b3 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-ZH-ROT_XXXX_JORENA-ROZIJN.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-ZH-ROT_XXXX_JORENA-ROZIJN.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jorena-rozijn-a87ab2213_20251214T103247Z.json" ], - "modified_at": "2026-01-09T19:18:14.987052+00:00", + "modified_at": "2026-01-09T19:51:06.358007+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jorena-rozijn-a87ab2213", @@ -133,7 +133,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.987049+00:00", + "inferred_at": "2026-01-09T19:51:06.358000+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_AIRIEN-MOENNOE.json b/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_AIRIEN-MOENNOE.json similarity index 74% rename from data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_AIRIEN-MOENNOE.json rename to data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_AIRIEN-MOENNOE.json index ab49b49650..4618e77986 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_AIRIEN-MOENNOE.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_AIRIEN-MOENNOE.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_AIRIEN-MOENNOE", + "ppid": "ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_AIRIEN-MOENNOE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-UT-UTR", "first_date": "199X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Airien Bechan - Moennoe", @@ -166,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/airien-bechan-moennoe-9a8577b4_20251214T103302Z.json" ], - "modified_at": "2026-01-09T19:18:18.212189+00:00", + "modified_at": "2026-01-09T19:51:29.222143+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "airien-bechan-moennoe-9a8577b4", @@ -180,6 +181,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_AIRIEN-MOENNOE", + "new_ppid": "ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_AIRIEN-MOENNOE", + "changed_at": "2026-01-09T19:51:29.222136+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -194,7 +205,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +254,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.209954+00:00", + "inferred_at": "2026-01-09T19:51:29.213183+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Utrecht", + "formatted": "NL-UT-UTR", + "country_code": "NL", + "region_code": "UT", + "settlement_code": "UTR", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Schoevers", + "date_range": "2016 - 2018 • 2 years", + "degree": "Directiesecretaresse (behaald)" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Schoevers", + "mapping_result": "Utrecht, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Utrecht, Netherlands", + "result": { + "geonames_id": 2745912, + "geonames_name": "Utrecht", + "admin1_code": "09", + "admin1_name": "Utrecht", + "feature_code": "PPLA", + "latitude": 52.09083, + "longitude": 5.12222 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "UT", + "settlement_code": "UTR" + }, + "result": "NL-UT-UTR" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2745912, + "geonames_name": "Utrecht", + "admin1_code": "09", + "admin1_name": "Utrecht", + "feature_code": "PPLA", + "latitude": 52.09083, + "longitude": 5.12222 + }, + "inferred_at": "2026-01-09T19:51:29.222126+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_DAPHNIE-PLOEGSTRA.json b/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_DAPHNIE-PLOEGSTRA.json index 928bcbf42c..d076f5c21e 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_DAPHNIE-PLOEGSTRA.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_DAPHNIE-PLOEGSTRA.json @@ -216,7 +216,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daphnie-ploegstra-a7841162_20251214T102951Z.json" ], - "modified_at": "2026-01-09T19:18:14.811998+00:00", + "modified_at": "2026-01-09T19:51:04.563107+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daphnie-ploegstra-a7841162", @@ -239,7 +239,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -280,7 +280,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.811992+00:00", + "inferred_at": "2026-01-09T19:51:04.563099+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_JELLEJOCHEM-SCHELLEN.json b/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_JELLEJOCHEM-SCHELLEN.json index d840a035c0..d1c047e9f3 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_JELLEJOCHEM-SCHELLEN.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_JELLEJOCHEM-SCHELLEN.json @@ -174,7 +174,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jelle-jochem-duits-schellen-5a5b982b_20251214T103029Z.json" ], - "modified_at": "2026-01-09T19:18:15.042746+00:00", + "modified_at": "2026-01-09T19:51:06.644558+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jelle-jochem-duits-schellen-5a5b982b", @@ -203,7 +203,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.042741+00:00", + "inferred_at": "2026-01-09T19:51:06.644554+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_MARISKA-WAKKEE.json b/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_MARISKA-WAKKEE.json index 2e7cc8747a..a6c6ca9c33 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_MARISKA-WAKKEE.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_MARISKA-WAKKEE.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mariskawakkee_20251214T112323Z.json" ], - "modified_at": "2026-01-09T19:18:18.236847+00:00", + "modified_at": "2026-01-09T19:51:29.231082+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mariskawakkee", @@ -125,7 +125,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.236835+00:00", + "inferred_at": "2026-01-09T19:51:29.231077+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_METKA-HAGEN.json b/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_METKA-HAGEN.json index 02c7fed5d2..045be8644c 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_METKA-HAGEN.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-ZH-TH_XXXX_METKA-HAGEN.json @@ -187,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/metkahagen_20251214T103121Z.json" ], - "modified_at": "2026-01-09T19:18:15.898353+00:00", + "modified_at": "2026-01-09T19:51:15.053878+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "metkahagen", @@ -216,7 +216,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -265,7 +265,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.898348+00:00", + "inferred_at": "2026-01-09T19:51:15.053866+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_NL-ZH-WAD_XXXX_SARMAD-ALMASOUDI.json b/data/person/ID_NL-UT-UTR_199X_NL-ZH-WAD_XXXX_SARMAD-ALMASOUDI.json index cdfdba81e0..4fb0152215 100644 --- a/data/person/ID_NL-UT-UTR_199X_NL-ZH-WAD_XXXX_SARMAD-ALMASOUDI.json +++ b/data/person/ID_NL-UT-UTR_199X_NL-ZH-WAD_XXXX_SARMAD-ALMASOUDI.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sarmad-almasoudi-a6342862_20251214T112746Z.json" ], - "modified_at": "2026-01-09T19:18:14.175154+00:00", + "modified_at": "2026-01-09T19:50:58.795571+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sarmad-almasoudi-a6342862", @@ -167,7 +167,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.175150+00:00", + "inferred_at": "2026-01-09T19:50:58.795546+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_AMANDA-LOBO.json b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_AMANDA-LOBO.json index cf17c2fbb5..ae2ebd4070 100644 --- a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_AMANDA-LOBO.json +++ b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_AMANDA-LOBO.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amandagomeslobo_20251214T103340Z.json" ], - "modified_at": "2026-01-09T19:18:13.280079+00:00", + "modified_at": "2026-01-09T19:50:53.734875+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "amandagomeslobo", @@ -180,7 +180,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.278124+00:00", + "inferred_at": "2026-01-09T19:50:53.732428+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_CHARLOTTE-BEEK.json b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_CHARLOTTE-BEEK.json index 3b34bd3bec..e73745390f 100644 --- a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_CHARLOTTE-BEEK.json +++ b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_CHARLOTTE-BEEK.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/charlotte-van-beek-55370314_20251214T110347Z.json" ], - "modified_at": "2026-01-09T19:18:12.699058+00:00", + "modified_at": "2026-01-09T19:50:48.664475+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "charlotte-van-beek-55370314", @@ -170,7 +170,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.695950+00:00", + "inferred_at": "2026-01-09T19:50:48.662374+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_DIEWERTJE-WAPSTRA.json b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_DIEWERTJE-WAPSTRA.json index 1296c3dea3..8bcea3c98f 100644 --- a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_DIEWERTJE-WAPSTRA.json +++ b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_DIEWERTJE-WAPSTRA.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/diewertje-wapstra-b023089a_20251214T103027Z.json" ], - "modified_at": "2026-01-09T19:18:16.551166+00:00", + "modified_at": "2026-01-09T19:51:18.618010+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "diewertje-wapstra-b023089a", @@ -133,7 +133,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.549191+00:00", + "inferred_at": "2026-01-09T19:51:18.611652+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_EVA-BOER.json b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_EVA-BOER.json index 512e9f4ac2..a87bd3f996 100644 --- a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_EVA-BOER.json +++ b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_EVA-BOER.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/evalottedeboer_20251214T103018Z.json" ], - "modified_at": "2026-01-09T19:18:17.212591+00:00", + "modified_at": "2026-01-09T19:51:25.390610+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "evalottedeboer", @@ -194,7 +194,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.212576+00:00", + "inferred_at": "2026-01-09T19:51:25.390576+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_IAN-VERKAIK.json b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_IAN-VERKAIK.json index ef668c4716..26bc669319 100644 --- a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_IAN-VERKAIK.json +++ b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_IAN-VERKAIK.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ianverkaik_20251214T112759Z.json" ], - "modified_at": "2026-01-09T19:18:16.226723+00:00", + "modified_at": "2026-01-09T19:50:50.963863+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ianverkaik", @@ -185,7 +185,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.224864+00:00", + "inferred_at": "2026-01-09T19:50:50.961340+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_IBTISSAM-OUAALI.json b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_IBTISSAM-OUAALI.json index 59735f969d..01c312c8d9 100644 --- a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_IBTISSAM-OUAALI.json +++ b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_IBTISSAM-OUAALI.json @@ -249,7 +249,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ibtissamouaali_20251214T102933Z.json" ], - "modified_at": "2026-01-09T19:18:11.207858+00:00", + "modified_at": "2026-01-09T19:50:46.687968+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ibtissamouaali", @@ -271,7 +271,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -312,7 +312,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.199309+00:00", + "inferred_at": "2026-01-09T19:50:46.684024+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_JETTE-BROEKE.json b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_JETTE-BROEKE.json index 8ced51ca10..3cbd047d1c 100644 --- a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_JETTE-BROEKE.json +++ b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_JETTE-BROEKE.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jette-van-den-broeke-223a57a9_20251214T111056Z.json" ], - "modified_at": "2026-01-09T19:18:16.122687+00:00", + "modified_at": "2026-01-09T19:51:17.572135+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jette-van-den-broeke-223a57a9", @@ -156,7 +156,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.120796+00:00", + "inferred_at": "2026-01-09T19:51:17.569406+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_LAILA-BOUALLOUCH.json b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_LAILA-BOUALLOUCH.json index 0b7b28f799..2f5e73d4cc 100644 --- a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_LAILA-BOUALLOUCH.json +++ b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_LAILA-BOUALLOUCH.json @@ -246,7 +246,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laila-bouallouch-89112b2a_20251214T102908Z.json" ], - "modified_at": "2026-01-09T19:18:14.096510+00:00", + "modified_at": "2026-01-09T19:50:58.602037+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laila-bouallouch-89112b2a", @@ -274,7 +274,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -323,7 +323,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.091242+00:00", + "inferred_at": "2026-01-09T19:50:58.597312+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_MARLY-SCHELTINGA.json b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_MARLY-SCHELTINGA.json index 280cb904ef..d29b81a46c 100644 --- a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_MARLY-SCHELTINGA.json +++ b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_MARLY-SCHELTINGA.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marly-terwisscha-van-scheltinga-376b6614a_20251214T104146Z.json" ], - "modified_at": "2026-01-09T19:18:14.276190+00:00", + "modified_at": "2026-01-09T19:50:59.807546+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marly-terwisscha-van-scheltinga-376b6614a", @@ -203,7 +203,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -244,7 +244,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.273554+00:00", + "inferred_at": "2026-01-09T19:50:59.794768+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_MEREL-BLOM.json b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_MEREL-BLOM.json index d056f9548c..bfff9d2376 100644 --- a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_MEREL-BLOM.json +++ b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_MEREL-BLOM.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merel-blom-094992110_20251214T113402Z.json" ], - "modified_at": "2026-01-09T19:18:13.596426+00:00", + "modified_at": "2026-01-09T19:50:55.127677+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merel-blom-094992110", @@ -148,7 +148,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.592503+00:00", + "inferred_at": "2026-01-09T19:50:55.121836+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_NINA-BOS.json b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_NINA-BOS.json index 53460206df..3cf8812517 100644 --- a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_NINA-BOS.json +++ b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_NINA-BOS.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nina-bos-2681a3161_20251214T110221Z.json" ], - "modified_at": "2026-01-09T19:18:14.643706+00:00", + "modified_at": "2026-01-09T19:51:03.215969+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nina-bos-2681a3161", @@ -108,7 +108,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -149,7 +149,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.641812+00:00", + "inferred_at": "2026-01-09T19:51:03.214025+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_PHILIPPINE-JENSTER.json b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_PHILIPPINE-JENSTER.json index aaba4b5831..08dfb2fd5e 100644 --- a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_PHILIPPINE-JENSTER.json +++ b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_PHILIPPINE-JENSTER.json @@ -188,7 +188,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/philippine-jenster-15567156_20251214T112445Z.json" ], - "modified_at": "2026-01-09T19:18:18.064188+00:00", + "modified_at": "2026-01-09T19:51:28.902964+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "philippine-jenster-15567156", @@ -216,7 +216,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -265,7 +265,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.062051+00:00", + "inferred_at": "2026-01-09T19:51:28.900992+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_SIMONE-HUTING.json b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_SIMONE-HUTING.json index ce2c8b929a..6316aea00f 100644 --- a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_SIMONE-HUTING.json +++ b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_SIMONE-HUTING.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/simone-huting-7b87124b_20251214T112623Z.json" ], - "modified_at": "2026-01-09T19:18:16.414906+00:00", + "modified_at": "2026-01-09T19:51:18.469748+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "simone-huting-7b87124b", @@ -183,7 +183,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.409917+00:00", + "inferred_at": "2026-01-09T19:51:18.465736+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_SUSANNE-BERGWERFFVERBURG.json b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_SUSANNE-BERGWERFFVERBURG.json index 64cc7f9c38..c45e34a124 100644 --- a/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_SUSANNE-BERGWERFFVERBURG.json +++ b/data/person/ID_NL-UT-UTR_199X_XX-XX-XXX_XXXX_SUSANNE-BERGWERFFVERBURG.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/susanne-bergwerff-verburg-151379b3_20251214T110524Z.json" ], - "modified_at": "2026-01-09T19:18:15.075177+00:00", + "modified_at": "2026-01-09T19:51:06.682454+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "susanne-bergwerff-verburg-151379b3", @@ -173,7 +173,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.073258+00:00", + "inferred_at": "2026-01-09T19:51:06.679771+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-GE-ARN_XXXX_MEGAN-EMPEL.json b/data/person/ID_NL-UT-UTR_200X_NL-GE-ARN_XXXX_MEGAN-EMPEL.json index 22a9ea8af9..24208f7ee6 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-GE-ARN_XXXX_MEGAN-EMPEL.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-GE-ARN_XXXX_MEGAN-EMPEL.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/megan-van-empel-0a8715177_20251214T110014Z.json" ], - "modified_at": "2026-01-09T19:18:14.949986+00:00", + "modified_at": "2026-01-09T19:51:05.596829+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "megan-van-empel-0a8715177", @@ -140,7 +140,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.949983+00:00", + "inferred_at": "2026-01-09T19:51:05.596821+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-GE-TIE_XXXX_NATALLIA-HENNEMAN.json b/data/person/ID_NL-UT-UTR_200X_NL-GE-TIE_XXXX_NATALLIA-HENNEMAN.json index 5bd053eba9..16c9b615de 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-GE-TIE_XXXX_NATALLIA-HENNEMAN.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-GE-TIE_XXXX_NATALLIA-HENNEMAN.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/natallia-henneman-606a471b2_20251214T110345Z.json" ], - "modified_at": "2026-01-09T19:18:11.458537+00:00", + "modified_at": "2026-01-09T19:51:07.581317+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "natallia-henneman-606a471b2", @@ -146,7 +146,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.458529+00:00", + "inferred_at": "2026-01-09T19:51:07.581310+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_ANNE-VOORWINDEN.json b/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_ANNE-VOORWINDEN.json index 94d4d6ecba..894267b7ba 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_ANNE-VOORWINDEN.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_ANNE-VOORWINDEN.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-voorwinden-77a4541bb_20251214T111453Z.json" ], - "modified_at": "2026-01-09T19:18:16.223751+00:00", + "modified_at": "2026-01-09T19:51:18.319639+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-voorwinden-77a4541bb", @@ -152,7 +152,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.223747+00:00", + "inferred_at": "2026-01-09T19:51:18.319633+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_KARIJN-B.json b/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_KARIJN-B.json index f361796358..7c5bb8936a 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_KARIJN-B.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_KARIJN-B.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karijn-b-a05888136_20251214T111557Z.json" ], - "modified_at": "2026-01-09T19:18:13.597023+00:00", + "modified_at": "2026-01-09T19:50:55.128545+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karijn-b-a05888136", @@ -182,7 +182,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +231,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.597017+00:00", + "inferred_at": "2026-01-09T19:50:55.128537+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_PETAR-VERZAAL.json b/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_PETAR-VERZAAL.json index da68244bca..c0069b050c 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_PETAR-VERZAAL.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_PETAR-VERZAAL.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/petar-verzaal-1005901b9_20251214T112740Z.json" ], - "modified_at": "2026-01-09T19:18:13.285662+00:00", + "modified_at": "2026-01-09T19:50:53.743436+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "petar-verzaal-1005901b9", @@ -143,7 +143,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.285658+00:00", + "inferred_at": "2026-01-09T19:50:53.743431+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_RUTH-RUSKAMP.json b/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_RUTH-RUSKAMP.json index 895ff7544c..65ae17a138 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_RUTH-RUSKAMP.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-NH-AMS_XXXX_RUTH-RUSKAMP.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ruth-ruskamp-b177b51a1_20251214T112812Z.json" ], - "modified_at": "2026-01-09T19:18:17.117640+00:00", + "modified_at": "2026-01-09T19:51:23.919026+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ruth-ruskamp-b177b51a1", @@ -139,7 +139,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.117634+00:00", + "inferred_at": "2026-01-09T19:51:23.919022+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-NH-WEE_XXXX_CHRISTIAN-PFEIFFER.json b/data/person/ID_NL-UT-UTR_200X_NL-NH-WEE_XXXX_CHRISTIAN-PFEIFFER.json index 7bd879dfd7..f78c884849 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-NH-WEE_XXXX_CHRISTIAN-PFEIFFER.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-NH-WEE_XXXX_CHRISTIAN-PFEIFFER.json @@ -179,7 +179,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cfapfeiffer_20251214T110750Z.json" ], - "modified_at": "2026-01-09T19:18:13.999376+00:00", + "modified_at": "2026-01-09T19:50:57.996830+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cfapfeiffer", @@ -202,7 +202,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.999371+00:00", + "inferred_at": "2026-01-09T19:50:57.996822+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-UT-AME_XXXX_OLIVIA-MUS.json b/data/person/ID_NL-UT-UTR_200X_NL-UT-AME_XXXX_OLIVIA-MUS.json index 02c44f1b9e..9857217db4 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-UT-AME_XXXX_OLIVIA-MUS.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-UT-AME_XXXX_OLIVIA-MUS.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/olivia-mus-38440515b_20251214T112838Z.json" ], - "modified_at": "2026-01-09T19:18:15.051121+00:00", + "modified_at": "2026-01-09T19:51:06.650071+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "olivia-mus-38440515b", @@ -145,7 +145,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.051116+00:00", + "inferred_at": "2026-01-09T19:51:06.650066+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-UT-BAA_XXXX_MIRJAM-LENTZ.json b/data/person/ID_NL-UT-UTR_200X_NL-UT-BAA_XXXX_MIRJAM-LENTZ.json index 061a6eda9c..ec7b79ac88 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-UT-BAA_XXXX_MIRJAM-LENTZ.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-UT-BAA_XXXX_MIRJAM-LENTZ.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mirjam-lentz-1abb23223_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:15.930224+00:00", + "modified_at": "2026-01-09T19:51:15.184596+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mirjam-lentz-1abb23223", @@ -199,7 +199,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -248,7 +248,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.930221+00:00", + "inferred_at": "2026-01-09T19:51:15.184593+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_CASPER-TOPS.json b/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_CASPER-TOPS.json index 2a753788f9..a0d4170cd7 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_CASPER-TOPS.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_CASPER-TOPS.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/casper-tops-31b3a4225_20251214T110929Z.json" ], - "modified_at": "2026-01-09T19:18:14.972311+00:00", + "modified_at": "2026-01-09T19:51:06.338681+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "casper-tops-31b3a4225", @@ -151,7 +151,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.972307+00:00", + "inferred_at": "2026-01-09T19:51:06.338675+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_GIJS-EWIJK.json b/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_GIJS-EWIJK.json index de746dd2cd..9189af8b63 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_GIJS-EWIJK.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_GIJS-EWIJK.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gijs-van-ewijk_20251214T103217Z.json" ], - "modified_at": "2026-01-09T19:18:11.573796+00:00", + "modified_at": "2026-01-09T19:50:46.700136+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gijs-van-ewijk", @@ -174,7 +174,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.573786+00:00", + "inferred_at": "2026-01-09T19:50:46.700129+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_MATTHIAS-SJERPS.json b/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_MATTHIAS-SJERPS.json index 142475465a..fe073ec26f 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_MATTHIAS-SJERPS.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_MATTHIAS-SJERPS.json @@ -89,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/matthiassjerps_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:16.860451+00:00", + "modified_at": "2026-01-09T19:51:22.325821+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "matthiassjerps", @@ -127,7 +127,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.860447+00:00", + "inferred_at": "2026-01-09T19:51:22.325817+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_TIM-KOORNSTRA.json b/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_TIM-KOORNSTRA.json index e139fd0de9..20d2bf2f92 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_TIM-KOORNSTRA.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-UT-UTR_XXXX_TIM-KOORNSTRA.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/timkoornstra_20251214T112934Z.json" ], - "modified_at": "2026-01-09T19:18:17.593330+00:00", + "modified_at": "2026-01-09T19:51:28.443055+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "timkoornstra", @@ -178,7 +178,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.593324+00:00", + "inferred_at": "2026-01-09T19:51:28.443052+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-UT-ZEI_XXXX_FRANK-MASCINI.json b/data/person/ID_NL-UT-UTR_200X_NL-UT-ZEI_XXXX_FRANK-MASCINI.json index 1b83417065..c22aef0196 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-UT-ZEI_XXXX_FRANK-MASCINI.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-UT-ZEI_XXXX_FRANK-MASCINI.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frank-mascini_20251214T112741Z.json" ], - "modified_at": "2026-01-09T19:18:16.340590+00:00", + "modified_at": "2026-01-09T19:51:18.399789+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frank-mascini", @@ -143,7 +143,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.340579+00:00", + "inferred_at": "2026-01-09T19:51:18.399783+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-ZH-DEL_XXXX_MARJOLEIN-K.json b/data/person/ID_NL-UT-UTR_200X_NL-ZH-DEL_XXXX_MARJOLEIN-K.json index 50726828c4..58e82ecd39 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-ZH-DEL_XXXX_MARJOLEIN-K.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-ZH-DEL_XXXX_MARJOLEIN-K.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjolein-k-b5b815208_20251214T112345Z.json" ], - "modified_at": "2026-01-09T19:18:15.480922+00:00", + "modified_at": "2026-01-09T19:51:11.060435+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjolein-k-b5b815208", @@ -183,7 +183,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.480919+00:00", + "inferred_at": "2026-01-09T19:51:11.060430+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-ZH-ROT_XXXX_KRIS-KORVING.json b/data/person/ID_NL-UT-UTR_200X_NL-ZH-ROT_XXXX_KRIS-KORVING.json index ff84ad8764..4bb9bfa029 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-ZH-ROT_XXXX_KRIS-KORVING.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-ZH-ROT_XXXX_KRIS-KORVING.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kris-korving-1365a8212_20251214T112744Z.json" ], - "modified_at": "2026-01-09T19:18:15.876103+00:00", + "modified_at": "2026-01-09T19:51:14.959139+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kris-korving-1365a8212", @@ -141,7 +141,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.876098+00:00", + "inferred_at": "2026-01-09T19:51:14.959130+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_NL-ZH-TH_XXXX_ABDULLAH-SMSMIEH.json b/data/person/ID_NL-UT-UTR_200X_NL-ZH-TH_XXXX_ABDULLAH-SMSMIEH.json index 431b05e577..8e5ae17dbe 100644 --- a/data/person/ID_NL-UT-UTR_200X_NL-ZH-TH_XXXX_ABDULLAH-SMSMIEH.json +++ b/data/person/ID_NL-UT-UTR_200X_NL-ZH-TH_XXXX_ABDULLAH-SMSMIEH.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/abdullah-smsmieh-7b0918140_20251214T112749Z.json" ], - "modified_at": "2026-01-09T19:18:15.475637+00:00", + "modified_at": "2026-01-09T19:51:11.047222+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "abdullah-smsmieh-7b0918140", @@ -182,7 +182,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +231,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.475632+00:00", + "inferred_at": "2026-01-09T19:51:11.047216+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_XX-XX-XXX_XXXX_MARTINE-BARNHARD.json b/data/person/ID_NL-UT-UTR_200X_XX-XX-XXX_XXXX_MARTINE-BARNHARD.json index 4e83173110..d5af0db924 100644 --- a/data/person/ID_NL-UT-UTR_200X_XX-XX-XXX_XXXX_MARTINE-BARNHARD.json +++ b/data/person/ID_NL-UT-UTR_200X_XX-XX-XXX_XXXX_MARTINE-BARNHARD.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martine-barnhard-8881b127_20251214T110539Z.json" ], - "modified_at": "2026-01-09T19:18:15.273088+00:00", + "modified_at": "2026-01-09T19:51:04.809775+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martine-barnhard-8881b127", @@ -133,7 +133,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.273075+00:00", + "inferred_at": "2026-01-09T19:51:04.809741+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-UTR_200X_XX-XX-XXX_XXXX_MEREL-ROTMAN.json b/data/person/ID_NL-UT-UTR_200X_XX-XX-XXX_XXXX_MEREL-ROTMAN.json index 5e5695d63c..5167bcb4f1 100644 --- a/data/person/ID_NL-UT-UTR_200X_XX-XX-XXX_XXXX_MEREL-ROTMAN.json +++ b/data/person/ID_NL-UT-UTR_200X_XX-XX-XXX_XXXX_MEREL-ROTMAN.json @@ -133,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merel-rotman_20251214T110117Z.json" ], - "modified_at": "2026-01-09T19:18:16.185448+00:00", + "modified_at": "2026-01-09T19:51:18.253396+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merel-rotman", @@ -161,7 +161,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.182844+00:00", + "inferred_at": "2026-01-09T19:51:18.251445+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-VEE_197X_NL-GE-WIJ_XXXX_CORINA-LINDEN.json b/data/person/ID_NL-UT-VEE_197X_NL-GE-WIJ_XXXX_CORINA-LINDEN.json index 52d6eb514c..c2e81648a5 100644 --- a/data/person/ID_NL-UT-VEE_197X_NL-GE-WIJ_XXXX_CORINA-LINDEN.json +++ b/data/person/ID_NL-UT-VEE_197X_NL-GE-WIJ_XXXX_CORINA-LINDEN.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/corina-van-der-linden-41295a31_20251214T110637Z.json" ], - "modified_at": "2026-01-09T19:18:14.966558+00:00", + "modified_at": "2026-01-09T19:51:06.326778+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "corina-van-der-linden-41295a31", @@ -182,7 +182,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +231,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.966553+00:00", + "inferred_at": "2026-01-09T19:51:06.326767+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-VIA_198X_NL-NB-EIN_XXXX_ANANDO-PAUL.json b/data/person/ID_NL-UT-VIA_198X_NL-NB-EIN_XXXX_ANANDO-PAUL.json index 2d472d33aa..9a26cd629d 100644 --- a/data/person/ID_NL-UT-VIA_198X_NL-NB-EIN_XXXX_ANANDO-PAUL.json +++ b/data/person/ID_NL-UT-VIA_198X_NL-NB-EIN_XXXX_ANANDO-PAUL.json @@ -185,7 +185,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anandopaul_20251214T110938Z.json" ], - "modified_at": "2026-01-09T19:18:15.570036+00:00", + "modified_at": "2026-01-09T19:51:12.118179+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anandopaul", @@ -214,7 +214,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -263,7 +263,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.570032+00:00", + "inferred_at": "2026-01-09T19:51:12.118174+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-VIA_199X_NL-UT-UTR_XXXX_NIELS-WORRELL.json b/data/person/ID_NL-UT-VIA_199X_NL-UT-UTR_XXXX_NIELS-WORRELL.json index 35f528d72f..9b3c495ec7 100644 --- a/data/person/ID_NL-UT-VIA_199X_NL-UT-UTR_XXXX_NIELS-WORRELL.json +++ b/data/person/ID_NL-UT-VIA_199X_NL-UT-UTR_XXXX_NIELS-WORRELL.json @@ -234,7 +234,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nielsworrell_20251214T112209Z.json" ], - "modified_at": "2026-01-09T19:18:15.092666+00:00", + "modified_at": "2026-01-09T19:51:06.729011+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nielsworrell", @@ -263,7 +263,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -312,7 +312,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.092642+00:00", + "inferred_at": "2026-01-09T19:51:06.729005+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-WBD_195X_NL-UT-WBD_XXXX_WINFRIED-LEEMAN.json b/data/person/ID_NL-UT-WBD_195X_NL-UT-WBD_XXXX_WINFRIED-LEEMAN.json index cd1b008176..133817969b 100644 --- a/data/person/ID_NL-UT-WBD_195X_NL-UT-WBD_XXXX_WINFRIED-LEEMAN.json +++ b/data/person/ID_NL-UT-WBD_195X_NL-UT-WBD_XXXX_WINFRIED-LEEMAN.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/winfried-leeman-a8a44b101_20251214T110429Z.json" ], - "modified_at": "2026-01-09T19:18:12.752845+00:00", + "modified_at": "2026-01-09T19:51:22.553335+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "winfried-leeman-a8a44b101", @@ -177,7 +177,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:12.752834+00:00", + "inferred_at": "2026-01-09T19:51:22.553329+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-WBD_199X_NL-GE-ARN_XXXX_BRAM-KLAPWIJK.json b/data/person/ID_NL-UT-WBD_199X_NL-GE-ARN_XXXX_BRAM-KLAPWIJK.json index 256b8c4e29..7cd2fedca8 100644 --- a/data/person/ID_NL-UT-WBD_199X_NL-GE-ARN_XXXX_BRAM-KLAPWIJK.json +++ b/data/person/ID_NL-UT-WBD_199X_NL-GE-ARN_XXXX_BRAM-KLAPWIJK.json @@ -194,7 +194,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bram-klapwijk_20251214T110432Z.json" ], - "modified_at": "2026-01-09T19:18:11.861607+00:00", + "modified_at": "2026-01-09T19:50:47.333136+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bram-klapwijk", @@ -217,7 +217,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.861590+00:00", + "inferred_at": "2026-01-09T19:50:47.333120+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-WBD_199X_NL-NB-TIL_XXXX_LARS-THIJSSEN.json b/data/person/ID_NL-UT-WBD_199X_NL-NB-TIL_XXXX_LARS-THIJSSEN.json index 1939b01e92..c9b855d151 100644 --- a/data/person/ID_NL-UT-WBD_199X_NL-NB-TIL_XXXX_LARS-THIJSSEN.json +++ b/data/person/ID_NL-UT-WBD_199X_NL-NB-TIL_XXXX_LARS-THIJSSEN.json @@ -171,7 +171,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lars-thijssen-8090b2b0_20251214T110431Z.json" ], - "modified_at": "2026-01-09T19:18:15.458797+00:00", + "modified_at": "2026-01-09T19:51:10.883075+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lars-thijssen-8090b2b0", @@ -194,7 +194,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -235,7 +235,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.458794+00:00", + "inferred_at": "2026-01-09T19:51:10.883072+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-WOE_197X_NL-ZH-TH_XXXX_MARCEL-BERG.json b/data/person/ID_NL-UT-WOE_197X_NL-ZH-TH_XXXX_MARCEL-BERG.json index 3bef520b7b..2b8020586d 100644 --- a/data/person/ID_NL-UT-WOE_197X_NL-ZH-TH_XXXX_MARCEL-BERG.json +++ b/data/person/ID_NL-UT-WOE_197X_NL-ZH-TH_XXXX_MARCEL-BERG.json @@ -179,7 +179,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marcelberg_20251214T112915Z.json" ], - "modified_at": "2026-01-09T19:18:17.030582+00:00", + "modified_at": "2026-01-09T19:51:23.166122+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marcelberg", @@ -208,7 +208,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -257,7 +257,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.030575+00:00", + "inferred_at": "2026-01-09T19:51:23.166116+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-UT-WOE_198X_NL-ZH-VLA_XXXX_THEO-HODES.json b/data/person/ID_NL-UT-WOE_198X_NL-ZH-VLA_XXXX_THEO-HODES.json index 6fbb6634f7..9644672643 100644 --- a/data/person/ID_NL-UT-WOE_198X_NL-ZH-VLA_XXXX_THEO-HODES.json +++ b/data/person/ID_NL-UT-WOE_198X_NL-ZH-VLA_XXXX_THEO-HODES.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/theohodes_20251214T113251Z.json" ], - "modified_at": "2026-01-09T19:18:15.731967+00:00", + "modified_at": "2026-01-09T19:51:13.582295+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "theohodes", @@ -152,7 +152,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.731963+00:00", + "inferred_at": "2026-01-09T19:51:13.582282+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FATIHA-FAJR.json b/data/person/ID_NL-UT-ZEI_197X_NL-UT-UTR_XXXX_FATIHA-FAJR.json similarity index 65% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FATIHA-FAJR.json rename to data/person/ID_NL-UT-ZEI_197X_NL-UT-UTR_XXXX_FATIHA-FAJR.json index 3ca7de6f01..f565c3e53e 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FATIHA-FAJR.json +++ b/data/person/ID_NL-UT-ZEI_197X_NL-UT-UTR_XXXX_FATIHA-FAJR.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FATIHA-FAJR", + "ppid": "ID_NL-UT-ZEI_197X_NL-UT-UTR_XXXX_FATIHA-FAJR", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-UT-ZEI", + "first_date": "197X", "last_location": "NL-UT-UTR", "last_date": "XXXX", "name_tokens": [ "FATIHA", "FAJR" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Fatiha Fajr", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -150,63 +156,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fatiha-fajr-799b34141_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:15:33.866250+00:00", + "modified_at": "2026-01-09T19:50:56.780945+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fatiha-fajr-799b34141", - "inferred_current_settlement": { - "value": "Utrecht", - "formatted": "NL-UT-UTR", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "UTR", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Utrecht, Utrecht, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Utrecht, Utrecht, Netherlands", - "result": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-UTR" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - }, - "inferred_at": "2026-01-09T19:15:33.866242+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FATIHA-FAJR", @@ -216,6 +169,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FATIHA-FAJR", + "new_ppid": "ID_NL-UT-ZEI_197X_NL-UT-UTR_XXXX_FATIHA-FAJR", + "changed_at": "2026-01-09T19:43:40.804892+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1976 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Nederlandse Pakket Dienst", + "title": "Klantenservicemedewerker", + "date_range": "Oct 1999 - Jan 2001" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1999 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1999 - 23 = 1976", + "result": "Estimated birth year: 1976", + "range": "1971-1981 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1971, + 1981 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:50:56.780938+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-UT-ZEI_199X_NL-UT-ZEI_XXXX_BERT-OORSCHOT.json b/data/person/ID_NL-UT-ZEI_199X_NL-UT-ZEI_XXXX_BERT-OORSCHOT.json index 3389c18dda..fcb86b9790 100644 --- a/data/person/ID_NL-UT-ZEI_199X_NL-UT-ZEI_XXXX_BERT-OORSCHOT.json +++ b/data/person/ID_NL-UT-ZEI_199X_NL-UT-ZEI_XXXX_BERT-OORSCHOT.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bert-van-oorschot-359484117_20251214T110651Z.json" ], - "modified_at": "2026-01-09T19:18:15.263162+00:00", + "modified_at": "2026-01-09T19:51:12.015546+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bert-van-oorschot-359484117", @@ -174,7 +174,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.263155+00:00", + "inferred_at": "2026-01-09T19:51:12.015529+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZE-HUL_198X_NL-ZE-MID_XXXX_ROBIN-MOL.json b/data/person/ID_NL-ZE-HUL_198X_NL-ZE-MID_XXXX_ROBIN-MOL.json index ddd9277292..3d378e4cf9 100644 --- a/data/person/ID_NL-ZE-HUL_198X_NL-ZE-MID_XXXX_ROBIN-MOL.json +++ b/data/person/ID_NL-ZE-HUL_198X_NL-ZE-MID_XXXX_ROBIN-MOL.json @@ -233,7 +233,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rbnmol_20251214T112300Z.json" ], - "modified_at": "2026-01-09T19:18:16.173948+00:00", + "modified_at": "2026-01-09T19:51:28.848540+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rbnmol", @@ -271,7 +271,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -320,7 +320,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.173941+00:00", + "inferred_at": "2026-01-09T19:51:28.848536+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZE-MID_197X_NL-NB-BOZ_XXXX_JULIETTE-ROMIJN.json b/data/person/ID_NL-ZE-MID_197X_NL-NB-BOZ_XXXX_JULIETTE-ROMIJN.json index 48b9f3ddbc..0210e35a01 100644 --- a/data/person/ID_NL-ZE-MID_197X_NL-NB-BOZ_XXXX_JULIETTE-ROMIJN.json +++ b/data/person/ID_NL-ZE-MID_197X_NL-NB-BOZ_XXXX_JULIETTE-ROMIJN.json @@ -187,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/julietteromijn_20251214T104036Z.json" ], - "modified_at": "2026-01-09T19:18:14.841003+00:00", + "modified_at": "2026-01-09T19:51:04.982851+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "julietteromijn", @@ -217,7 +217,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -266,7 +266,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.840999+00:00", + "inferred_at": "2026-01-09T19:51:04.982843+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZE-MID_198X_NL-ZH-TH_XXXX_CEES-HEERE.json b/data/person/ID_NL-ZE-MID_198X_NL-ZH-TH_XXXX_CEES-HEERE.json index 47ad51d31d..e014c82477 100644 --- a/data/person/ID_NL-ZE-MID_198X_NL-ZH-TH_XXXX_CEES-HEERE.json +++ b/data/person/ID_NL-ZE-MID_198X_NL-ZH-TH_XXXX_CEES-HEERE.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cees-heere_20251214T102738Z.json" ], - "modified_at": "2026-01-09T19:18:14.368181+00:00", + "modified_at": "2026-01-09T19:50:53.226003+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cees-heere", @@ -196,7 +196,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +245,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.368175+00:00", + "inferred_at": "2026-01-09T19:50:53.225998+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZE-MID_199X_NL-GE-ARN_XXXX_ELINE-S.json b/data/person/ID_NL-ZE-MID_199X_NL-GE-ARN_XXXX_ELINE-S.json index cf87657115..a56ac62edc 100644 --- a/data/person/ID_NL-ZE-MID_199X_NL-GE-ARN_XXXX_ELINE-S.json +++ b/data/person/ID_NL-ZE-MID_199X_NL-GE-ARN_XXXX_ELINE-S.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eline-s-754680220_20251214T113052Z.json" ], - "modified_at": "2026-01-09T19:18:15.494976+00:00", + "modified_at": "2026-01-09T19:51:11.089520+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eline-s-754680220", @@ -170,7 +170,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.494972+00:00", + "inferred_at": "2026-01-09T19:51:11.089493+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-AAD_198X_XX-XX-XXX_XXXX_MYRNA-VOSSEN.json b/data/person/ID_NL-ZH-AAD_198X_XX-XX-XXX_XXXX_MYRNA-VOSSEN.json index 77b594d284..2483132648 100644 --- a/data/person/ID_NL-ZH-AAD_198X_XX-XX-XXX_XXXX_MYRNA-VOSSEN.json +++ b/data/person/ID_NL-ZH-AAD_198X_XX-XX-XXX_XXXX_MYRNA-VOSSEN.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/myrnavossen_20251214T113233Z.json" ], - "modified_at": "2026-01-09T19:18:15.006119+00:00", + "modified_at": "2026-01-09T19:51:06.583933+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "myrnavossen", @@ -153,7 +153,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.002444+00:00", + "inferred_at": "2026-01-09T19:51:06.580204+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-BER_199X_XX-XX-XXX_XXXX_REMCO-PRUIJSERS.json b/data/person/ID_NL-ZH-BER_199X_XX-XX-XXX_XXXX_REMCO-PRUIJSERS.json index caf5634891..c7eebe934c 100644 --- a/data/person/ID_NL-ZH-BER_199X_XX-XX-XXX_XXXX_REMCO-PRUIJSERS.json +++ b/data/person/ID_NL-ZH-BER_199X_XX-XX-XXX_XXXX_REMCO-PRUIJSERS.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/remco-pruijsers-78302517_20251214T112932Z.json" ], - "modified_at": "2026-01-09T19:18:16.682421+00:00", + "modified_at": "2026-01-09T19:51:21.506679+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "remco-pruijsers-78302517", @@ -138,7 +138,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.678689+00:00", + "inferred_at": "2026-01-09T19:51:21.502590+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-CAD_199X_NL-ZH-SCH_XXXX_JULIAN-VREUGDENHIL.json b/data/person/ID_NL-ZH-CAD_199X_NL-ZH-SCH_XXXX_JULIAN-VREUGDENHIL.json index 36e5e2cb26..d754824184 100644 --- a/data/person/ID_NL-ZH-CAD_199X_NL-ZH-SCH_XXXX_JULIAN-VREUGDENHIL.json +++ b/data/person/ID_NL-ZH-CAD_199X_NL-ZH-SCH_XXXX_JULIAN-VREUGDENHIL.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/julian-vreugdenhil-71097_20251214T103205Z.json" ], - "modified_at": "2026-01-09T19:18:12.226321+00:00", + "modified_at": "2026-01-09T19:50:47.471181+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "julian-vreugdenhil-71097", @@ -149,7 +149,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.226314+00:00", + "inferred_at": "2026-01-09T19:50:47.471170+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-CAD_200X_XX-XX-XXX_XXXX_SUZANNE-HEIDE.json b/data/person/ID_NL-ZH-CAD_200X_XX-XX-XXX_XXXX_SUZANNE-HEIDE.json index 0a6edccacc..124a450f7d 100644 --- a/data/person/ID_NL-ZH-CAD_200X_XX-XX-XXX_XXXX_SUZANNE-HEIDE.json +++ b/data/person/ID_NL-ZH-CAD_200X_XX-XX-XXX_XXXX_SUZANNE-HEIDE.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/suzanne-van-der-heide-81255a17a_20251214T112704Z.json" ], - "modified_at": "2026-01-09T19:18:13.948341+00:00", + "modified_at": "2026-01-09T19:50:56.875040+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "suzanne-van-der-heide-81255a17a", @@ -141,7 +141,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.944258+00:00", + "inferred_at": "2026-01-09T19:50:56.869403+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_193X_XX-XX-XXX_XXXX_HENK-HAAS.json b/data/person/ID_NL-ZH-DEL_193X_XX-XX-XXX_XXXX_HENK-HAAS.json similarity index 70% rename from data/person/ID_XX-XX-XXX_193X_XX-XX-XXX_XXXX_HENK-HAAS.json rename to data/person/ID_NL-ZH-DEL_193X_XX-XX-XXX_XXXX_HENK-HAAS.json index 0331fac369..ec4cdb4824 100644 --- a/data/person/ID_XX-XX-XXX_193X_XX-XX-XXX_XXXX_HENK-HAAS.json +++ b/data/person/ID_NL-ZH-DEL_193X_XX-XX-XXX_XXXX_HENK-HAAS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_193X_XX-XX-XXX_XXXX_HENK-HAAS", + "ppid": "ID_NL-ZH-DEL_193X_XX-XX-XXX_XXXX_HENK-HAAS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-ZH-DEL", "first_date": "193X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "194X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Henk Haas", @@ -113,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henk-haas-163a8524_20251214T110729Z.json" ], - "modified_at": "2026-01-09T19:18:14.364169+00:00", + "modified_at": "2026-01-09T19:50:51.084416+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henk-haas-163a8524", @@ -135,6 +136,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_193X_XX-XX-XXX_XXXX_HENK-HAAS", + "new_ppid": "ID_NL-ZH-DEL_193X_XX-XX-XXX_XXXX_HENK-HAAS", + "changed_at": "2026-01-09T19:50:51.084414+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -149,7 +160,7 @@ "primary_rationale": "1937 is in 193X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +209,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1937 spans decades 193X/194X", - "inferred_at": "2026-01-09T19:18:14.364135+00:00", + "inferred_at": "2026-01-09T19:50:51.081877+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Delft", + "formatted": "NL-ZH-DEL", + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "DEL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Delft University of Technology", + "date_range": "1959 - 1969 • 10 years", + "degree": "Msc, Civil Engineering" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Delft University of Technology", + "mapping_result": "Delft, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Delft, Netherlands", + "result": { + "geonames_id": 2757345, + "geonames_name": "Delft", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.00667, + "longitude": 4.35556 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "DEL" + }, + "result": "NL-ZH-DEL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2757345, + "geonames_name": "Delft", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.00667, + "longitude": 4.35556 + }, + "inferred_at": "2026-01-09T19:50:51.084404+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_195X_NL-FR-LEE_XXXX_STEF-AVEZAAT.json b/data/person/ID_NL-ZH-DEL_195X_NL-FR-LEE_XXXX_STEF-AVEZAAT.json index f7aaba5e03..5ae8d00124 100644 --- a/data/person/ID_NL-ZH-DEL_195X_NL-FR-LEE_XXXX_STEF-AVEZAAT.json +++ b/data/person/ID_NL-ZH-DEL_195X_NL-FR-LEE_XXXX_STEF-AVEZAAT.json @@ -266,7 +266,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stef-avezaat-330237a_20251214T112535Z.json" ], - "modified_at": "2026-01-09T19:18:13.624634+00:00", + "modified_at": "2026-01-09T19:50:56.455868+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stef-avezaat-330237a", @@ -304,7 +304,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -353,7 +353,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.624627+00:00", + "inferred_at": "2026-01-09T19:50:56.455858+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_195X_NL-ZH-PIJ_XXXX_ERIK-VOS.json b/data/person/ID_NL-ZH-DEL_195X_NL-ZH-PIJ_XXXX_ERIK-VOS.json index d94cd5227d..1df689f219 100644 --- a/data/person/ID_NL-ZH-DEL_195X_NL-ZH-PIJ_XXXX_ERIK-VOS.json +++ b/data/person/ID_NL-ZH-DEL_195X_NL-ZH-PIJ_XXXX_ERIK-VOS.json @@ -192,7 +192,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erikjavos_20251214T113258Z.json" ], - "modified_at": "2026-01-09T19:18:15.027604+00:00", + "modified_at": "2026-01-09T19:51:11.858026+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erikjavos", @@ -230,7 +230,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -279,7 +279,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.027597+00:00", + "inferred_at": "2026-01-09T19:51:11.858019+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_195X_NL-ZH-TH_XXXX_ERIK-BOEKESTEIJN.json b/data/person/ID_NL-ZH-DEL_195X_NL-ZH-TH_XXXX_ERIK-BOEKESTEIJN.json index bb9f30d482..5a7a42bf4f 100644 --- a/data/person/ID_NL-ZH-DEL_195X_NL-ZH-TH_XXXX_ERIK-BOEKESTEIJN.json +++ b/data/person/ID_NL-ZH-DEL_195X_NL-ZH-TH_XXXX_ERIK-BOEKESTEIJN.json @@ -174,7 +174,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erikboekesteijn_20251214T113415Z.json" ], - "modified_at": "2026-01-09T19:18:14.876053+00:00", + "modified_at": "2026-01-09T19:51:05.286001+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erikboekesteijn", @@ -203,7 +203,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:14.876013+00:00", + "inferred_at": "2026-01-09T19:51:05.285989+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_196X_NL-OV-DEV_XXXX_JORDEN-ESSER.json b/data/person/ID_NL-ZH-DEL_196X_NL-OV-DEV_XXXX_JORDEN-ESSER.json index 60a9c05daa..68933a09d4 100644 --- a/data/person/ID_NL-ZH-DEL_196X_NL-OV-DEV_XXXX_JORDEN-ESSER.json +++ b/data/person/ID_NL-ZH-DEL_196X_NL-OV-DEV_XXXX_JORDEN-ESSER.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jorden-esser-0a276a21_20251214T104051Z.json" ], - "modified_at": "2026-01-09T19:18:17.905193+00:00", + "modified_at": "2026-01-09T19:51:28.845807+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jorden-esser-0a276a21", @@ -119,7 +119,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.905189+00:00", + "inferred_at": "2026-01-09T19:51:28.845803+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_196X_NL-ZH-DEL_XXXX_MISCHA-SOMERS.json b/data/person/ID_NL-ZH-DEL_196X_NL-ZH-DEL_XXXX_MISCHA-SOMERS.json index bc69ea3ef8..67265b3051 100644 --- a/data/person/ID_NL-ZH-DEL_196X_NL-ZH-DEL_XXXX_MISCHA-SOMERS.json +++ b/data/person/ID_NL-ZH-DEL_196X_NL-ZH-DEL_XXXX_MISCHA-SOMERS.json @@ -140,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mischa-somers-705b76153_20251214T104058Z.json" ], - "modified_at": "2026-01-09T19:18:14.255601+00:00", + "modified_at": "2026-01-09T19:50:59.315329+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mischa-somers-705b76153", @@ -163,7 +163,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.255596+00:00", + "inferred_at": "2026-01-09T19:50:59.315323+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-DOR_XXXX_ERIK-BERGH.json b/data/person/ID_NL-ZH-DEL_196X_NL-ZH-DOR_XXXX_ERIK-BERGH.json similarity index 72% rename from data/person/ID_XX-XX-XXX_196X_NL-ZH-DOR_XXXX_ERIK-BERGH.json rename to data/person/ID_NL-ZH-DEL_196X_NL-ZH-DOR_XXXX_ERIK-BERGH.json index 57772a2340..6a1f0669b2 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-DOR_XXXX_ERIK-BERGH.json +++ b/data/person/ID_NL-ZH-DEL_196X_NL-ZH-DOR_XXXX_ERIK-BERGH.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_NL-ZH-DOR_XXXX_ERIK-BERGH", + "ppid": "ID_NL-ZH-DEL_196X_NL-ZH-DOR_XXXX_ERIK-BERGH", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-ZH-DEL", "first_date": "196X", "last_location": "NL-ZH-DOR", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "195X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Erik van den Bergh", @@ -159,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/efvdbergh_20251214T113400Z.json" ], - "modified_at": "2026-01-09T19:18:18.414309+00:00", + "modified_at": "2026-01-09T19:50:53.022304+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "efvdbergh", @@ -182,6 +183,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_NL-ZH-DOR_XXXX_ERIK-BERGH", + "new_ppid": "ID_NL-ZH-DEL_196X_NL-ZH-DOR_XXXX_ERIK-BERGH", + "changed_at": "2026-01-09T19:50:53.022302+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -196,7 +207,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +256,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:18.414217+00:00", + "inferred_at": "2026-01-09T19:50:53.020139+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Delft", + "formatted": "NL-ZH-DEL", + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "DEL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Delft University of Technology", + "date_range": "1978 - 1980 • 2 years", + "degree": "propadeuse" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Delft University of Technology", + "mapping_result": "Delft, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Delft, Netherlands", + "result": { + "geonames_id": 2757345, + "geonames_name": "Delft", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.00667, + "longitude": 4.35556 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "DEL" + }, + "result": "NL-ZH-DEL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2757345, + "geonames_name": "Delft", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.00667, + "longitude": 4.35556 + }, + "inferred_at": "2026-01-09T19:50:53.022291+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_196X_NL-ZH-ROT_XXXX_KRISTEL-BAELE.json b/data/person/ID_NL-ZH-DEL_196X_NL-ZH-ROT_XXXX_KRISTEL-BAELE.json index 65b1c1f4c3..b154787d68 100644 --- a/data/person/ID_NL-ZH-DEL_196X_NL-ZH-ROT_XXXX_KRISTEL-BAELE.json +++ b/data/person/ID_NL-ZH-DEL_196X_NL-ZH-ROT_XXXX_KRISTEL-BAELE.json @@ -253,7 +253,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kristel-baele-54b3b3_20251214T112452Z.json" ], - "modified_at": "2026-01-09T19:18:15.043413+00:00", + "modified_at": "2026-01-09T19:51:06.647973+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kristel-baele-54b3b3", @@ -282,7 +282,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -331,7 +331,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.043409+00:00", + "inferred_at": "2026-01-09T19:51:06.647968+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_196X_NL-ZH-TH_XXXX_JAN-HEUL.json b/data/person/ID_NL-ZH-DEL_196X_NL-ZH-TH_XXXX_JAN-HEUL.json index 4c7bb7a85c..4d7fe6f397 100644 --- a/data/person/ID_NL-ZH-DEL_196X_NL-ZH-TH_XXXX_JAN-HEUL.json +++ b/data/person/ID_NL-ZH-DEL_196X_NL-ZH-TH_XXXX_JAN-HEUL.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-van-der-heul-b2a7359_20251214T104039Z.json" ], - "modified_at": "2026-01-09T19:18:16.604360+00:00", + "modified_at": "2026-01-09T19:51:20.520556+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-van-der-heul-b2a7359", @@ -121,7 +121,7 @@ "primary_rationale": "1963 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1963 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.604355+00:00", + "inferred_at": "2026-01-09T19:51:20.520552+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_196X_NL-ZH-TH_XXXX_RONALD-TOUSSAINT.json b/data/person/ID_NL-ZH-DEL_196X_NL-ZH-TH_XXXX_RONALD-TOUSSAINT.json index 1d432f0162..dde49d1059 100644 --- a/data/person/ID_NL-ZH-DEL_196X_NL-ZH-TH_XXXX_RONALD-TOUSSAINT.json +++ b/data/person/ID_NL-ZH-DEL_196X_NL-ZH-TH_XXXX_RONALD-TOUSSAINT.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rotous_20251214T113424Z.json" ], - "modified_at": "2026-01-09T19:18:17.306339+00:00", + "modified_at": "2026-01-09T19:50:58.896330+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rotous", @@ -160,7 +160,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.306289+00:00", + "inferred_at": "2026-01-09T19:50:58.896315+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_197X_NL-ZH-DEL_XXXX_MARIELLE-HENDRIKS.json b/data/person/ID_NL-ZH-DEL_197X_NL-ZH-DEL_XXXX_MARIELLE-HENDRIKS.json index 2bd12e1498..2e2a5ca888 100644 --- a/data/person/ID_NL-ZH-DEL_197X_NL-ZH-DEL_XXXX_MARIELLE-HENDRIKS.json +++ b/data/person/ID_NL-ZH-DEL_197X_NL-ZH-DEL_XXXX_MARIELLE-HENDRIKS.json @@ -180,7 +180,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marielle-hendriks-3572015_20251214T112347Z.json" ], - "modified_at": "2026-01-09T19:18:14.625643+00:00", + "modified_at": "2026-01-09T19:51:03.094166+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marielle-hendriks-3572015", @@ -209,7 +209,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.625638+00:00", + "inferred_at": "2026-01-09T19:51:03.094142+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_197X_NL-ZH-NAD_XXXX_HAN-WEBER.json b/data/person/ID_NL-ZH-DEL_197X_NL-ZH-NAD_XXXX_HAN-WEBER.json index a0003b1d3d..89c51d7289 100644 --- a/data/person/ID_NL-ZH-DEL_197X_NL-ZH-NAD_XXXX_HAN-WEBER.json +++ b/data/person/ID_NL-ZH-DEL_197X_NL-ZH-NAD_XXXX_HAN-WEBER.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/han-weber-7070847_20251214T110350Z.json" ], - "modified_at": "2026-01-09T19:18:15.706017+00:00", + "modified_at": "2026-01-09T19:51:13.478955+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "han-weber-7070847", @@ -187,7 +187,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.706013+00:00", + "inferred_at": "2026-01-09T19:51:13.478949+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_HAN-HEIJMANS.json b/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_HAN-HEIJMANS.json index 50500fc320..eaa9a4ff7b 100644 --- a/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_HAN-HEIJMANS.json +++ b/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_HAN-HEIJMANS.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/han-heijmans-5ab66012_20251214T104108Z.json" ], - "modified_at": "2026-01-09T19:18:16.210228+00:00", + "modified_at": "2026-01-09T19:51:18.305862+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "han-heijmans-5ab66012", @@ -130,7 +130,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.210225+00:00", + "inferred_at": "2026-01-09T19:51:18.305855+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_INGE-GEUZEBROEK.json b/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_INGE-GEUZEBROEK.json index 492d9540e4..453405a079 100644 --- a/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_INGE-GEUZEBROEK.json +++ b/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_INGE-GEUZEBROEK.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/inge-geuzebroek-a78a3063_20251214T104106Z.json" ], - "modified_at": "2026-01-09T19:18:15.479239+00:00", + "modified_at": "2026-01-09T19:51:11.058477+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "inge-geuzebroek-a78a3063", @@ -159,7 +159,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.479236+00:00", + "inferred_at": "2026-01-09T19:51:11.058471+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_MARTIJN-POEL.json b/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_MARTIJN-POEL.json index f657f38e8d..1fcc67b8df 100644 --- a/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_MARTIJN-POEL.json +++ b/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_MARTIJN-POEL.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martijn-poel-0b16a9108_20251214T103034Z.json" ], - "modified_at": "2026-01-09T19:18:16.627839+00:00", + "modified_at": "2026-01-09T19:51:21.106589+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martijn-poel-0b16a9108", @@ -161,7 +161,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.627834+00:00", + "inferred_at": "2026-01-09T19:51:21.106584+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_WILLEMIJN-TIL.json b/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_WILLEMIJN-TIL.json similarity index 68% rename from data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_WILLEMIJN-TIL.json rename to data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_WILLEMIJN-TIL.json index 7962e291d3..836d0445f9 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_WILLEMIJN-TIL.json +++ b/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_WILLEMIJN-TIL.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_WILLEMIJN-TIL", + "ppid": "ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_WILLEMIJN-TIL", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-ZH-DEL", "first_date": "197X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Willemijn van Til", @@ -116,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/willemijn-van-til-82038611_20251214T112149Z.json" ], - "modified_at": "2026-01-09T19:18:12.867537+00:00", + "modified_at": "2026-01-09T19:50:49.085397+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "willemijn-van-til-82038611", @@ -130,6 +131,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_WILLEMIJN-TIL", + "new_ppid": "ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_WILLEMIJN-TIL", + "changed_at": "2026-01-09T19:50:49.085395+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -144,7 +155,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +204,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.867496+00:00", + "inferred_at": "2026-01-09T19:50:49.083099+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Delft", + "formatted": "NL-ZH-DEL", + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "DEL", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Delft University of Technology", + "date_range": "1993 - 1999 • 6 years", + "degree": "MSc, Apllied Mathematics" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Delft University of Technology", + "mapping_result": "Delft, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Delft, Netherlands", + "result": { + "geonames_id": 2757345, + "geonames_name": "Delft", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.00667, + "longitude": 4.35556 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "DEL" + }, + "result": "NL-ZH-DEL" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2757345, + "geonames_name": "Delft", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.00667, + "longitude": 4.35556 + }, + "inferred_at": "2026-01-09T19:50:49.085387+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_WILMA-WEZENBEEK.json b/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_WILMA-WEZENBEEK.json index fba13ffeb5..bdd19a242d 100644 --- a/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_WILMA-WEZENBEEK.json +++ b/data/person/ID_NL-ZH-DEL_197X_NL-ZH-TH_XXXX_WILMA-WEZENBEEK.json @@ -208,7 +208,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wezenbeek_20251214T113404Z.json" ], - "modified_at": "2026-01-09T19:18:17.008968+00:00", + "modified_at": "2026-01-09T19:51:22.960429+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wezenbeek", @@ -237,7 +237,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -286,7 +286,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.008961+00:00", + "inferred_at": "2026-01-09T19:51:22.960425+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_197X_XX-XX-XXX_XXXX_EDWIN-KOLSTER.json b/data/person/ID_NL-ZH-DEL_197X_XX-XX-XXX_XXXX_EDWIN-KOLSTER.json index 0197e002d7..9f820f1661 100644 --- a/data/person/ID_NL-ZH-DEL_197X_XX-XX-XXX_XXXX_EDWIN-KOLSTER.json +++ b/data/person/ID_NL-ZH-DEL_197X_XX-XX-XXX_XXXX_EDWIN-KOLSTER.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/edwin-kolster-58535b94_20251214T110231Z.json" ], - "modified_at": "2026-01-09T19:18:15.016365+00:00", + "modified_at": "2026-01-09T19:51:06.595182+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "edwin-kolster-58535b94", @@ -133,7 +133,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.014411+00:00", + "inferred_at": "2026-01-09T19:51:06.592808+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_197X_XX-XX-XXX_XXXX_JEFFREY-HOEVEN.json b/data/person/ID_NL-ZH-DEL_197X_XX-XX-XXX_XXXX_JEFFREY-HOEVEN.json index 4f76c3477b..0eb26d6041 100644 --- a/data/person/ID_NL-ZH-DEL_197X_XX-XX-XXX_XXXX_JEFFREY-HOEVEN.json +++ b/data/person/ID_NL-ZH-DEL_197X_XX-XX-XXX_XXXX_JEFFREY-HOEVEN.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jrvanderhoeven_20251214T113242Z.json" ], - "modified_at": "2026-01-09T19:18:12.831665+00:00", + "modified_at": "2026-01-09T19:50:47.500800+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jrvanderhoeven", @@ -131,7 +131,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.827091+00:00", + "inferred_at": "2026-01-09T19:50:47.498736+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_BAS-GOORDEN.json b/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_BAS-GOORDEN.json index 890e40c1fe..b3274905d2 100644 --- a/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_BAS-GOORDEN.json +++ b/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_BAS-GOORDEN.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bas-goorden-26488420_20251214T110826Z.json" ], - "modified_at": "2026-01-09T19:18:14.729926+00:00", + "modified_at": "2026-01-09T19:51:03.741933+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bas-goorden-26488420", @@ -135,7 +135,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.729922+00:00", + "inferred_at": "2026-01-09T19:51:03.741925+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_GOPIKA-RAMANANDAN.json b/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_GOPIKA-RAMANANDAN.json index 5903363402..b99740799b 100644 --- a/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_GOPIKA-RAMANANDAN.json +++ b/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_GOPIKA-RAMANANDAN.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gopika-ramanandan-aab53648_20251214T110914Z.json" ], - "modified_at": "2026-01-09T19:18:16.842609+00:00", + "modified_at": "2026-01-09T19:50:51.022366+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gopika-ramanandan-aab53648", @@ -167,7 +167,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.842604+00:00", + "inferred_at": "2026-01-09T19:50:51.022355+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_JILA-RAFIGHDOOST.json b/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_JILA-RAFIGHDOOST.json index 9a1b52026d..76567bd96e 100644 --- a/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_JILA-RAFIGHDOOST.json +++ b/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_JILA-RAFIGHDOOST.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jila-rafighdoost-8b0437a1_20251214T111048Z.json" ], - "modified_at": "2026-01-09T19:18:17.038044+00:00", + "modified_at": "2026-01-09T19:51:22.330880+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jila-rafighdoost-8b0437a1", @@ -155,7 +155,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.038036+00:00", + "inferred_at": "2026-01-09T19:51:22.330876+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_PRASANNA-RAGHAVENDRARAO.json b/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_PRASANNA-RAGHAVENDRARAO.json index 0c7b6975d0..febff48fe1 100644 --- a/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_PRASANNA-RAGHAVENDRARAO.json +++ b/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_PRASANNA-RAGHAVENDRARAO.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/prasanna-gururaj-raghavendrarao-0b7a5935_20251214T110815Z.json" ], - "modified_at": "2026-01-09T19:18:12.230100+00:00", + "modified_at": "2026-01-09T19:51:26.687229+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "prasanna-gururaj-raghavendrarao-0b7a5935", @@ -149,7 +149,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.230091+00:00", + "inferred_at": "2026-01-09T19:51:26.687226+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_ROBINSON-THOMAS.json b/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_ROBINSON-THOMAS.json index 5463efc577..d0725c89b0 100644 --- a/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_ROBINSON-THOMAS.json +++ b/data/person/ID_NL-ZH-DEL_198X_NL-NB-EIN_XXXX_ROBINSON-THOMAS.json @@ -163,7 +163,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robinson-thomas-23646623_20251214T111012Z.json" ], - "modified_at": "2026-01-09T19:18:13.407238+00:00", + "modified_at": "2026-01-09T19:50:54.093458+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robinson-thomas-23646623", @@ -192,7 +192,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.407234+00:00", + "inferred_at": "2026-01-09T19:50:54.093452+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_198X_NL-NB-VEL_XXXX_PIETER-BUCK.json b/data/person/ID_NL-ZH-DEL_198X_NL-NB-VEL_XXXX_PIETER-BUCK.json index 9a4964fc8f..cb05e8b760 100644 --- a/data/person/ID_NL-ZH-DEL_198X_NL-NB-VEL_XXXX_PIETER-BUCK.json +++ b/data/person/ID_NL-ZH-DEL_198X_NL-NB-VEL_XXXX_PIETER-BUCK.json @@ -97,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pieter-de-buck-418a7556_20251214T111013Z.json" ], - "modified_at": "2026-01-09T19:18:13.545225+00:00", + "modified_at": "2026-01-09T19:50:54.599578+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pieter-de-buck-418a7556", @@ -120,7 +120,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -161,7 +161,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.545221+00:00", + "inferred_at": "2026-01-09T19:50:54.599572+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_JONAS-PIJNENBURG.json b/data/person/ID_NL-ZH-DEL_198X_NL-NH-AMS_XXXX_JONAS-PIJNENBURG.json similarity index 91% rename from data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_JONAS-PIJNENBURG.json rename to data/person/ID_NL-ZH-DEL_198X_NL-NH-AMS_XXXX_JONAS-PIJNENBURG.json index 3aa59b79db..dec949e242 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_JONAS-PIJNENBURG.json +++ b/data/person/ID_NL-ZH-DEL_198X_NL-NH-AMS_XXXX_JONAS-PIJNENBURG.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_JONAS-PIJNENBURG", + "ppid": "ID_NL-ZH-DEL_198X_NL-NH-AMS_XXXX_JONAS-PIJNENBURG", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-ZH-DEL", "first_date": "198X", "last_location": "NL-NH-AMS", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Jonas Pijnenburg", @@ -143,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jonas-pijnenburg-8069403b_20251214T111336Z.json" ], - "modified_at": "2026-01-09T19:18:11.110708+00:00", + "modified_at": "2026-01-09T19:51:21.952802+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jonas-pijnenburg-8069403b", @@ -166,6 +167,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_JONAS-PIJNENBURG", + "new_ppid": "ID_NL-ZH-DEL_198X_NL-NH-AMS_XXXX_JONAS-PIJNENBURG", + "changed_at": "2026-01-09T19:46:59.147052+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -180,7 +191,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.110618+00:00", + "inferred_at": "2026-01-09T19:51:21.952795+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_198X_NL-ZH-DEL_XXXX_EMILIE-LOPES.json b/data/person/ID_NL-ZH-DEL_198X_NL-ZH-DEL_XXXX_EMILIE-LOPES.json index 38672686bf..edbd0c451a 100644 --- a/data/person/ID_NL-ZH-DEL_198X_NL-ZH-DEL_XXXX_EMILIE-LOPES.json +++ b/data/person/ID_NL-ZH-DEL_198X_NL-ZH-DEL_XXXX_EMILIE-LOPES.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emilie-yane-lopes-9769b923a_20251214T104059Z.json" ], - "modified_at": "2026-01-09T19:18:12.184848+00:00", + "modified_at": "2026-01-09T19:50:47.457449+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emilie-yane-lopes-9769b923a", @@ -130,7 +130,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.184835+00:00", + "inferred_at": "2026-01-09T19:50:47.457442+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_198X_NL-ZH-DEL_XXXX_MADELEINE-SMAELE.json b/data/person/ID_NL-ZH-DEL_198X_NL-ZH-DEL_XXXX_MADELEINE-SMAELE.json index 43440c116f..58fcae8f36 100644 --- a/data/person/ID_NL-ZH-DEL_198X_NL-ZH-DEL_XXXX_MADELEINE-SMAELE.json +++ b/data/person/ID_NL-ZH-DEL_198X_NL-ZH-DEL_XXXX_MADELEINE-SMAELE.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/madeleine-de-smaele-a252187_20251214T104040Z.json" ], - "modified_at": "2026-01-09T19:18:15.686008+00:00", + "modified_at": "2026-01-09T19:51:13.440198+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "madeleine-de-smaele-a252187", @@ -144,7 +144,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.686005+00:00", + "inferred_at": "2026-01-09T19:51:13.440193+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_198X_NL-ZH-ROT_XXXX_CHARLOTTE-WIJK.json b/data/person/ID_NL-ZH-DEL_198X_NL-ZH-ROT_XXXX_CHARLOTTE-WIJK.json index a833c89c52..8e8baf8f75 100644 --- a/data/person/ID_NL-ZH-DEL_198X_NL-ZH-ROT_XXXX_CHARLOTTE-WIJK.json +++ b/data/person/ID_NL-ZH-DEL_198X_NL-ZH-ROT_XXXX_CHARLOTTE-WIJK.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/charlotte-van-wijk-4110b460_20251214T104052Z.json" ], - "modified_at": "2026-01-09T19:18:16.714713+00:00", + "modified_at": "2026-01-09T19:51:21.540861+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "charlotte-van-wijk-4110b460", @@ -153,7 +153,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.714708+00:00", + "inferred_at": "2026-01-09T19:51:21.540856+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_198X_NL-ZH-TH_XXXX_IRMA-WOONING.json b/data/person/ID_NL-ZH-DEL_198X_NL-ZH-TH_XXXX_IRMA-WOONING.json index 37504e12ad..1db2e79a83 100644 --- a/data/person/ID_NL-ZH-DEL_198X_NL-ZH-TH_XXXX_IRMA-WOONING.json +++ b/data/person/ID_NL-ZH-DEL_198X_NL-ZH-TH_XXXX_IRMA-WOONING.json @@ -180,7 +180,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/irma-wooning-25665410_20251214T112358Z.json" ], - "modified_at": "2026-01-09T19:18:13.815166+00:00", + "modified_at": "2026-01-09T19:51:02.677380+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "irma-wooning-25665410", @@ -212,7 +212,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -253,7 +253,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.815160+00:00", + "inferred_at": "2026-01-09T19:51:02.677371+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_198X_NL-ZH-TH_XXXX_KRIJN-WIJNANDS.json b/data/person/ID_NL-ZH-DEL_198X_NL-ZH-TH_XXXX_KRIJN-WIJNANDS.json index 9daec053ff..389945593a 100644 --- a/data/person/ID_NL-ZH-DEL_198X_NL-ZH-TH_XXXX_KRIJN-WIJNANDS.json +++ b/data/person/ID_NL-ZH-DEL_198X_NL-ZH-TH_XXXX_KRIJN-WIJNANDS.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/krijn-wijnands-52498149_20251214T112734Z.json" ], - "modified_at": "2026-01-09T19:18:15.072871+00:00", + "modified_at": "2026-01-09T19:51:06.679118+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "krijn-wijnands-52498149", @@ -142,7 +142,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.072866+00:00", + "inferred_at": "2026-01-09T19:51:06.679111+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_198X_NL-ZH-TH_XXXX_THEODORE-KLOUVAS.json b/data/person/ID_NL-ZH-DEL_198X_NL-ZH-TH_XXXX_THEODORE-KLOUVAS.json index 208e6ad53c..006fef352d 100644 --- a/data/person/ID_NL-ZH-DEL_198X_NL-ZH-TH_XXXX_THEODORE-KLOUVAS.json +++ b/data/person/ID_NL-ZH-DEL_198X_NL-ZH-TH_XXXX_THEODORE-KLOUVAS.json @@ -234,7 +234,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/theodoreklouvas_20251214T102846Z.json" ], - "modified_at": "2026-01-09T19:18:16.150019+00:00", + "modified_at": "2026-01-09T19:51:10.606573+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "theodoreklouvas", @@ -272,7 +272,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -321,7 +321,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.150010+00:00", + "inferred_at": "2026-01-09T19:51:10.606559+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_198X_XX-XX-XXX_XXXX_LOUISE-OTTING.json b/data/person/ID_NL-ZH-DEL_198X_XX-XX-XXX_XXXX_LOUISE-OTTING.json index c950e516f2..84b6cce31a 100644 --- a/data/person/ID_NL-ZH-DEL_198X_XX-XX-XXX_XXXX_LOUISE-OTTING.json +++ b/data/person/ID_NL-ZH-DEL_198X_XX-XX-XXX_XXXX_LOUISE-OTTING.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/louiseotting_20251214T104052Z.json" ], - "modified_at": "2026-01-09T19:18:14.760988+00:00", + "modified_at": "2026-01-09T19:51:04.040585+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "louiseotting", @@ -198,7 +198,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +247,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.759123+00:00", + "inferred_at": "2026-01-09T19:51:04.038607+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_AFSHIN-VAHID.json b/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_AFSHIN-VAHID.json index a6b35fc5e7..b675d72485 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_AFSHIN-VAHID.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_AFSHIN-VAHID.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/afshinvahidb_20251214T111123Z.json" ], - "modified_at": "2026-01-09T19:18:15.729231+00:00", + "modified_at": "2026-01-09T19:51:13.562365+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "afshinvahidb", @@ -139,7 +139,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.729228+00:00", + "inferred_at": "2026-01-09T19:51:13.562359+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_ANTANAS-MELAIKA.json b/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_ANTANAS-MELAIKA.json index 5b8a85327f..688a416c3e 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_ANTANAS-MELAIKA.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_ANTANAS-MELAIKA.json @@ -310,7 +310,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/antanas-melaika-16964262_20251214T110832Z.json" ], - "modified_at": "2026-01-09T19:18:14.970428+00:00", + "modified_at": "2026-01-09T19:51:06.337321+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "antanas-melaika-16964262", @@ -339,7 +339,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -388,7 +388,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.970424+00:00", + "inferred_at": "2026-01-09T19:51:06.337315+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_JOEP-ASSENDELFT.json b/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_JOEP-ASSENDELFT.json index 643e4926fe..6feca3b17e 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_JOEP-ASSENDELFT.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_JOEP-ASSENDELFT.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ja95_20251214T110806Z.json" ], - "modified_at": "2026-01-09T19:18:17.408611+00:00", + "modified_at": "2026-01-09T19:51:27.904602+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ja95", @@ -151,7 +151,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.408608+00:00", + "inferred_at": "2026-01-09T19:51:27.904592+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_PRANAV-MANI.json b/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_PRANAV-MANI.json index 16fa1d6d97..5776ba76be 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_PRANAV-MANI.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_PRANAV-MANI.json @@ -177,7 +177,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pranav-sailesh-mani-9417975a_20251214T110820Z.json" ], - "modified_at": "2026-01-09T19:18:14.706800+00:00", + "modified_at": "2026-01-09T19:51:03.395795+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pranav-sailesh-mani-9417975a", @@ -200,7 +200,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.706797+00:00", + "inferred_at": "2026-01-09T19:51:03.395791+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_RAVI-KAPARAPU.json b/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_RAVI-KAPARAPU.json index 4aa41d27d3..4202db33c0 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_RAVI-KAPARAPU.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_RAVI-KAPARAPU.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ravi-kumar-kaparapu_20251214T110834Z.json" ], - "modified_at": "2026-01-09T19:18:11.733627+00:00", + "modified_at": "2026-01-09T19:50:47.280419+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ravi-kumar-kaparapu", @@ -152,7 +152,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.733617+00:00", + "inferred_at": "2026-01-09T19:50:47.280412+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_SOOVAM-BISWAL.json b/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_SOOVAM-BISWAL.json index 45477fd467..cea633a1e4 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_SOOVAM-BISWAL.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-NB-EIN_XXXX_SOOVAM-BISWAL.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/soovam-biswal_20251214T110847Z.json" ], - "modified_at": "2026-01-09T19:18:15.235284+00:00", + "modified_at": "2026-01-09T19:51:11.274075+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "soovam-biswal", @@ -186,7 +186,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -235,7 +235,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.235276+00:00", + "inferred_at": "2026-01-09T19:51:11.274043+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_CHRISTEL-PRINS.json b/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_CHRISTEL-PRINS.json index a7c44239ac..ae5ea807a6 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_CHRISTEL-PRINS.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_CHRISTEL-PRINS.json @@ -167,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/christelprins_20251214T110957Z.json" ], - "modified_at": "2026-01-09T19:18:13.511487+00:00", + "modified_at": "2026-01-09T19:50:54.555550+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "christelprins", @@ -190,7 +190,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +231,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.511483+00:00", + "inferred_at": "2026-01-09T19:50:54.555547+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_MATHIJS-GARMING.json b/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_MATHIJS-GARMING.json index f867b6d938..3fcc291b7a 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_MATHIJS-GARMING.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_MATHIJS-GARMING.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mathijs-garming_20251214T110906Z.json" ], - "modified_at": "2026-01-09T19:18:17.498539+00:00", + "modified_at": "2026-01-09T19:51:28.197405+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mathijs-garming", @@ -141,7 +141,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.498534+00:00", + "inferred_at": "2026-01-09T19:51:28.197399+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_SANDER-BIERENS.json b/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_SANDER-BIERENS.json index fb3771b129..943828a86e 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_SANDER-BIERENS.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_SANDER-BIERENS.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sander-bierens-447259107_20251214T111013Z.json" ], - "modified_at": "2026-01-09T19:18:15.665734+00:00", + "modified_at": "2026-01-09T19:51:13.297548+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sander-bierens-447259107", @@ -166,7 +166,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.665729+00:00", + "inferred_at": "2026-01-09T19:51:13.297543+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_WILLEMIJN-PETERS.json b/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_WILLEMIJN-PETERS.json index b38ed5d132..ead33dd80a 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_WILLEMIJN-PETERS.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-NB-VEL_XXXX_WILLEMIJN-PETERS.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/willemijn-peters-9a3091132_20251214T110950Z.json" ], - "modified_at": "2026-01-09T19:18:16.560698+00:00", + "modified_at": "2026-01-09T19:51:19.048397+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "willemijn-peters-9a3091132", @@ -149,7 +149,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.560694+00:00", + "inferred_at": "2026-01-09T19:51:19.048388+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_IMAN-TANTAWY.json b/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_IMAN-TANTAWY.json index 0f266cf48d..5f6a1c4ef4 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_IMAN-TANTAWY.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_IMAN-TANTAWY.json @@ -195,7 +195,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/imantantawy_20251214T103141Z.json" ], - "modified_at": "2026-01-09T19:18:14.978425+00:00", + "modified_at": "2026-01-09T19:51:06.345645+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "imantantawy", @@ -224,7 +224,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -273,7 +273,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.978420+00:00", + "inferred_at": "2026-01-09T19:51:06.345640+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_KARIMA-ALMOUJY.json b/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_KARIMA-ALMOUJY.json index 1478ea822f..129e39f9ad 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_KARIMA-ALMOUJY.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_KARIMA-ALMOUJY.json @@ -163,7 +163,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karimaalmoujy_20251214T111145Z.json" ], - "modified_at": "2026-01-09T19:18:15.683234+00:00", + "modified_at": "2026-01-09T19:51:13.414583+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karimaalmoujy", @@ -186,7 +186,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.683230+00:00", + "inferred_at": "2026-01-09T19:51:13.414575+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_THIJS-BOLSCHER.json b/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_THIJS-BOLSCHER.json index d7151b2f9c..71974e5398 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_THIJS-BOLSCHER.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_THIJS-BOLSCHER.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thijs-bolscher-b388651a2_20251214T110825Z.json" ], - "modified_at": "2026-01-09T19:18:15.657144+00:00", + "modified_at": "2026-01-09T19:51:13.286916+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thijs-bolscher-b388651a2", @@ -210,7 +210,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.657138+00:00", + "inferred_at": "2026-01-09T19:51:13.286901+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_THOM-WOUDSTRA.json b/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_THOM-WOUDSTRA.json index 1fc55e1800..90a37110ab 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_THOM-WOUDSTRA.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-NH-AMS_XXXX_THOM-WOUDSTRA.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thom-woudstra-6866671a1_20251214T111133Z.json" ], - "modified_at": "2026-01-09T19:18:15.161642+00:00", + "modified_at": "2026-01-09T19:51:06.957965+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thom-woudstra-6866671a1", @@ -149,7 +149,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.161637+00:00", + "inferred_at": "2026-01-09T19:51:06.957957+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-UT-NIE_XXXX_TOM-TOM.json b/data/person/ID_NL-ZH-DEL_199X_NL-UT-NIE_XXXX_TOM-TOM.json index 5f08386223..51a7eb517b 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-UT-NIE_XXXX_TOM-TOM.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-UT-NIE_XXXX_TOM-TOM.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ho-yeung-tom_20251214T110837Z.json" ], - "modified_at": "2026-01-09T19:18:15.727615+00:00", + "modified_at": "2026-01-09T19:51:13.556857+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ho-yeung-tom", @@ -153,7 +153,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.727611+00:00", + "inferred_at": "2026-01-09T19:51:13.556851+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-ZH-DEL_XXXX_FENG-MA.json b/data/person/ID_NL-ZH-DEL_199X_NL-ZH-DEL_XXXX_FENG-MA.json index 92c4735418..2708d7aa95 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-ZH-DEL_XXXX_FENG-MA.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-ZH-DEL_XXXX_FENG-MA.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/feng-ma-b3037b140_20251214T110918Z.json" ], - "modified_at": "2026-01-09T19:18:14.375146+00:00", + "modified_at": "2026-01-09T19:51:01.726433+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "feng-ma-b3037b140", @@ -128,7 +128,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.375142+00:00", + "inferred_at": "2026-01-09T19:51:01.726426+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-ZH-DEL_XXXX_LUIS-NIETO.json b/data/person/ID_NL-ZH-DEL_199X_NL-ZH-DEL_XXXX_LUIS-NIETO.json index 4feaac5d80..2de2ffbc38 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-ZH-DEL_XXXX_LUIS-NIETO.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-ZH-DEL_XXXX_LUIS-NIETO.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/luis-manuel-de-almeida-nieto-3390941aa_20251214T111617Z.json" ], - "modified_at": "2026-01-09T19:18:15.263689+00:00", + "modified_at": "2026-01-09T19:51:07.858961+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "luis-manuel-de-almeida-nieto-3390941aa", @@ -193,7 +193,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.263685+00:00", + "inferred_at": "2026-01-09T19:51:07.858952+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-ZH-DEL_XXXX_MARIO-SOSA.json b/data/person/ID_NL-ZH-DEL_199X_NL-ZH-DEL_XXXX_MARIO-SOSA.json index bd4c881d54..4722a79a60 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-ZH-DEL_XXXX_MARIO-SOSA.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-ZH-DEL_XXXX_MARIO-SOSA.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mariososadi_20251214T104112Z.json" ], - "modified_at": "2026-01-09T19:18:17.049027+00:00", + "modified_at": "2026-01-09T19:51:23.193172+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mariososadi", @@ -197,7 +197,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +246,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.049021+00:00", + "inferred_at": "2026-01-09T19:51:23.193166+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-ZH-TH_XXXX_BERTIEN-BROEKHANS.json b/data/person/ID_NL-ZH-DEL_199X_NL-ZH-TH_XXXX_BERTIEN-BROEKHANS.json index 9ba0d23a2b..4d6c448bb4 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-ZH-TH_XXXX_BERTIEN-BROEKHANS.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-ZH-TH_XXXX_BERTIEN-BROEKHANS.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bertien-broekhans-5b735731_20251214T104047Z.json" ], - "modified_at": "2026-01-09T19:18:14.935791+00:00", + "modified_at": "2026-01-09T19:51:05.549675+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bertien-broekhans-5b735731", @@ -120,7 +120,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.935784+00:00", + "inferred_at": "2026-01-09T19:51:05.549664+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-ZH-TH_XXXX_BRUNO-TOORN.json b/data/person/ID_NL-ZH-DEL_199X_NL-ZH-TH_XXXX_BRUNO-TOORN.json index 814f5b7644..90a9e38590 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-ZH-TH_XXXX_BRUNO-TOORN.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-ZH-TH_XXXX_BRUNO-TOORN.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/brunovandentoorn_20251214T102922Z.json" ], - "modified_at": "2026-01-09T19:18:18.955498+00:00", + "modified_at": "2026-01-09T19:51:31.791371+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "brunovandentoorn", @@ -148,7 +148,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.955490+00:00", + "inferred_at": "2026-01-09T19:51:31.791361+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_NL-ZH-WAD_XXXX_JAAP-DORP.json b/data/person/ID_NL-ZH-DEL_199X_NL-ZH-WAD_XXXX_JAAP-DORP.json index a08b93ce91..b4c6f32ac7 100644 --- a/data/person/ID_NL-ZH-DEL_199X_NL-ZH-WAD_XXXX_JAAP-DORP.json +++ b/data/person/ID_NL-ZH-DEL_199X_NL-ZH-WAD_XXXX_JAAP-DORP.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jaap-van-dorp-93b925102_20251214T110904Z.json" ], - "modified_at": "2026-01-09T19:18:15.493097+00:00", + "modified_at": "2026-01-09T19:51:11.082788+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jaap-van-dorp-93b925102", @@ -144,7 +144,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.493093+00:00", + "inferred_at": "2026-01-09T19:51:11.082780+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_199X_XX-XX-XXX_XXXX_NOA-MAN.json b/data/person/ID_NL-ZH-DEL_199X_XX-XX-XXX_XXXX_NOA-MAN.json index 4a6241dd30..68c81148fb 100644 --- a/data/person/ID_NL-ZH-DEL_199X_XX-XX-XXX_XXXX_NOA-MAN.json +++ b/data/person/ID_NL-ZH-DEL_199X_XX-XX-XXX_XXXX_NOA-MAN.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/noa-de-man-723070118_20251214T103344Z.json" ], - "modified_at": "2026-01-09T19:18:16.533977+00:00", + "modified_at": "2026-01-09T19:51:29.255307+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "noa-de-man-723070118", @@ -173,7 +173,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.532068+00:00", + "inferred_at": "2026-01-09T19:51:29.253421+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_200X_NL-NB-EIN_XXXX_HARIPRASADH-PARTHASARATHY.json b/data/person/ID_NL-ZH-DEL_200X_NL-NB-EIN_XXXX_HARIPRASADH-PARTHASARATHY.json index db0b38da89..dabbcb1ea6 100644 --- a/data/person/ID_NL-ZH-DEL_200X_NL-NB-EIN_XXXX_HARIPRASADH-PARTHASARATHY.json +++ b/data/person/ID_NL-ZH-DEL_200X_NL-NB-EIN_XXXX_HARIPRASADH-PARTHASARATHY.json @@ -178,7 +178,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hariprasadhparthasarathy_20251214T110950Z.json" ], - "modified_at": "2026-01-09T19:18:16.914927+00:00", + "modified_at": "2026-01-09T19:50:47.108375+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hariprasadhparthasarathy", @@ -216,7 +216,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -265,7 +265,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.914919+00:00", + "inferred_at": "2026-01-09T19:50:47.108359+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_DOEKE-SMIT.json b/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_DOEKE-SMIT.json index f56ffe8fed..64e6a72b55 100644 --- a/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_DOEKE-SMIT.json +++ b/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_DOEKE-SMIT.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/doeke-smit-b17a89226_20251214T104113Z.json" ], - "modified_at": "2026-01-09T19:18:16.779888+00:00", + "modified_at": "2026-01-09T19:51:21.951378+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "doeke-smit-b17a89226", @@ -152,7 +152,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.779885+00:00", + "inferred_at": "2026-01-09T19:51:21.951373+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_MADELEIN-FEIJ.json b/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_MADELEIN-FEIJ.json index 4cb8b339a3..a99149b37d 100644 --- a/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_MADELEIN-FEIJ.json +++ b/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_MADELEIN-FEIJ.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/madelein-feij-79857b206_20251214T112939Z.json" ], - "modified_at": "2026-01-09T19:18:14.351766+00:00", + "modified_at": "2026-01-09T19:51:00.917665+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "madelein-feij-79857b206", @@ -155,7 +155,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.351761+00:00", + "inferred_at": "2026-01-09T19:51:00.917660+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_MAX-TANGELDER.json b/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_MAX-TANGELDER.json index 860b32794e..25f12d0923 100644 --- a/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_MAX-TANGELDER.json +++ b/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_MAX-TANGELDER.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/max-tangelder-5bba5b224_20251214T104101Z.json" ], - "modified_at": "2026-01-09T19:18:15.763078+00:00", + "modified_at": "2026-01-09T19:51:14.347445+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "max-tangelder-5bba5b224", @@ -135,7 +135,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.763073+00:00", + "inferred_at": "2026-01-09T19:51:14.347435+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_YASIR-AYDEMIR.json b/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_YASIR-AYDEMIR.json index 7c78083bad..ac9d58c572 100644 --- a/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_YASIR-AYDEMIR.json +++ b/data/person/ID_NL-ZH-DEL_200X_NL-ZH-DEL_XXXX_YASIR-AYDEMIR.json @@ -201,7 +201,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yasir-aydemir_20251214T110254Z.json" ], - "modified_at": "2026-01-09T19:18:13.327347+00:00", + "modified_at": "2026-01-09T19:50:53.885255+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yasir-aydemir", @@ -230,7 +230,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -279,7 +279,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.327342+00:00", + "inferred_at": "2026-01-09T19:50:53.885248+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_200X_NL-ZH-LEI_XXXX_AGNES-SCHIPPER.json b/data/person/ID_NL-ZH-DEL_200X_NL-ZH-LEI_XXXX_AGNES-SCHIPPER.json index 18ed446a73..cb00abe05a 100644 --- a/data/person/ID_NL-ZH-DEL_200X_NL-ZH-LEI_XXXX_AGNES-SCHIPPER.json +++ b/data/person/ID_NL-ZH-DEL_200X_NL-ZH-LEI_XXXX_AGNES-SCHIPPER.json @@ -183,7 +183,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/agnes-schipper-300137233_20251214T110936Z.json" ], - "modified_at": "2026-01-09T19:18:16.925954+00:00", + "modified_at": "2026-01-09T19:51:22.516933+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "agnes-schipper-300137233", @@ -206,7 +206,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +247,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.925950+00:00", + "inferred_at": "2026-01-09T19:51:22.516930+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DEL_200X_XX-XX-XXX_XXXX_EMILIE-AKKER.json b/data/person/ID_NL-ZH-DEL_200X_XX-XX-XXX_XXXX_EMILIE-AKKER.json index 90561da351..4adfce308e 100644 --- a/data/person/ID_NL-ZH-DEL_200X_XX-XX-XXX_XXXX_EMILIE-AKKER.json +++ b/data/person/ID_NL-ZH-DEL_200X_XX-XX-XXX_XXXX_EMILIE-AKKER.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emilie-van-den-akker-8a861a270_20251214T104053Z.json" ], - "modified_at": "2026-01-09T19:18:14.977941+00:00", + "modified_at": "2026-01-09T19:51:06.344956+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emilie-van-den-akker-8a861a270", @@ -127,7 +127,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.974260+00:00", + "inferred_at": "2026-01-09T19:51:06.342656+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-DOR_197X_NL-ZH-ZWI_XXXX_ARNOLD-VELD.json b/data/person/ID_NL-ZH-DOR_197X_NL-ZH-ZWI_XXXX_ARNOLD-VELD.json index 4469ce1d48..1ba43d739d 100644 --- a/data/person/ID_NL-ZH-DOR_197X_NL-ZH-ZWI_XXXX_ARNOLD-VELD.json +++ b/data/person/ID_NL-ZH-DOR_197X_NL-ZH-ZWI_XXXX_ARNOLD-VELD.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arnold-in-t-veld-a6174595_20251214T112401Z.json" ], - "modified_at": "2026-01-09T19:18:16.496587+00:00", + "modified_at": "2026-01-09T19:51:06.743499+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arnold-in-t-veld-a6174595", @@ -167,7 +167,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.496576+00:00", + "inferred_at": "2026-01-09T19:51:06.743493+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MYLENE-SILVA.json b/data/person/ID_NL-ZH-DOR_198X_XX-XX-XXX_XXXX_MYLENE-SILVA.json similarity index 66% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MYLENE-SILVA.json rename to data/person/ID_NL-ZH-DOR_198X_XX-XX-XXX_XXXX_MYLENE-SILVA.json index 8a87b74a9d..d5eb80f90b 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MYLENE-SILVA.json +++ b/data/person/ID_NL-ZH-DOR_198X_XX-XX-XXX_XXXX_MYLENE-SILVA.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MYLENE-SILVA", + "ppid": "ID_NL-ZH-DOR_198X_XX-XX-XXX_XXXX_MYLENE-SILVA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-ZH-DOR", "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Mylène Da Silva", @@ -97,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mylene-da-silva-20251212T200000Z.json" ], - "modified_at": "2026-01-09T19:18:17.450207+00:00", + "modified_at": "2026-01-09T19:51:12.748470+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mylene-da-silva-20251212T200000Z", @@ -119,6 +120,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MYLENE-SILVA", + "new_ppid": "ID_NL-ZH-DOR_198X_XX-XX-XXX_XXXX_MYLENE-SILVA", + "changed_at": "2026-01-09T19:51:12.748468+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -133,7 +144,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +193,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.450159+00:00", + "inferred_at": "2026-01-09T19:51:12.746290+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Dordrecht", + "formatted": "NL-ZH-DOR", + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "DOR", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Da Vinci College", + "date_range": "2009 - 2015", + "degree": "VWO (Economie en Maatschappij / Cultuur en Maatschappij)" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Da Vinci College", + "mapping_result": "Dordrecht, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Dordrecht, Netherlands", + "result": { + "geonames_id": 2756669, + "geonames_name": "Dordrecht", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 51.81, + "longitude": 4.67361 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "DOR" + }, + "result": "NL-ZH-DOR" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2756669, + "geonames_name": "Dordrecht", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 51.81, + "longitude": 4.67361 + }, + "inferred_at": "2026-01-09T19:51:12.748434+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-GOR_199X_NL-ZH-GOR_XXXX_PATRICIA-VRIES.json b/data/person/ID_NL-ZH-GOR_199X_NL-ZH-GOR_XXXX_PATRICIA-VRIES.json index 10195dcd8f..18a481ce13 100644 --- a/data/person/ID_NL-ZH-GOR_199X_NL-ZH-GOR_XXXX_PATRICIA-VRIES.json +++ b/data/person/ID_NL-ZH-GOR_199X_NL-ZH-GOR_XXXX_PATRICIA-VRIES.json @@ -228,7 +228,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/devriespatricia_20251214T110800Z.json" ], - "modified_at": "2026-01-09T19:18:12.978576+00:00", + "modified_at": "2026-01-09T19:50:49.621683+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "devriespatricia", @@ -257,7 +257,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -306,7 +306,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.978572+00:00", + "inferred_at": "2026-01-09T19:50:49.621678+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-HEN_197X_NL-ZH-ZOE_XXXX_ANNEMIEKE-FIERINCK.json b/data/person/ID_NL-ZH-HEN_197X_NL-ZH-ZOE_XXXX_ANNEMIEKE-FIERINCK.json index 008e59a7d4..bc7d9f0008 100644 --- a/data/person/ID_NL-ZH-HEN_197X_NL-ZH-ZOE_XXXX_ANNEMIEKE-FIERINCK.json +++ b/data/person/ID_NL-ZH-HEN_197X_NL-ZH-ZOE_XXXX_ANNEMIEKE-FIERINCK.json @@ -229,7 +229,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annemieke-fierinck-7440b412_20251214T112347Z.json" ], - "modified_at": "2026-01-09T19:18:14.380213+00:00", + "modified_at": "2026-01-09T19:51:01.727797+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annemieke-fierinck-7440b412", @@ -258,7 +258,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -307,7 +307,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.380209+00:00", + "inferred_at": "2026-01-09T19:51:01.727791+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-HIL_199X_NL-NH-HOO_XXXX_DANNY-ALPHEN.json b/data/person/ID_NL-ZH-HIL_199X_NL-NH-HOO_XXXX_DANNY-ALPHEN.json index 16cb85fc30..065c11b8b0 100644 --- a/data/person/ID_NL-ZH-HIL_199X_NL-NH-HOO_XXXX_DANNY-ALPHEN.json +++ b/data/person/ID_NL-ZH-HIL_199X_NL-NH-HOO_XXXX_DANNY-ALPHEN.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/danny-van-alphen-874b78167_20251214T110112Z.json" ], - "modified_at": "2026-01-09T19:18:18.875592+00:00", + "modified_at": "2026-01-09T19:51:29.475608+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "danny-van-alphen-874b78167", @@ -129,7 +129,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.875582+00:00", + "inferred_at": "2026-01-09T19:51:29.475596+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-HVH_198X_NL-ZH-ROT_XXXX_GERBEN-VISSER.json b/data/person/ID_NL-ZH-HVH_198X_NL-ZH-ROT_XXXX_GERBEN-VISSER.json index 55e72e1d12..4063aa6f6f 100644 --- a/data/person/ID_NL-ZH-HVH_198X_NL-ZH-ROT_XXXX_GERBEN-VISSER.json +++ b/data/person/ID_NL-ZH-HVH_198X_NL-ZH-ROT_XXXX_GERBEN-VISSER.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerben-visser-48a17045_20251214T110353Z.json" ], - "modified_at": "2026-01-09T19:18:11.238368+00:00", + "modified_at": "2026-01-09T19:50:46.694950+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerben-visser-48a17045", @@ -176,7 +176,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.238362+00:00", + "inferred_at": "2026-01-09T19:50:46.694943+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_193X_NL-ZH-VOO_XXXX_HELEEN-DUPUIS.json b/data/person/ID_NL-ZH-LEI_193X_NL-ZH-VOO_XXXX_HELEEN-DUPUIS.json index 726cc44afd..bfbcbaec08 100644 --- a/data/person/ID_NL-ZH-LEI_193X_NL-ZH-VOO_XXXX_HELEEN-DUPUIS.json +++ b/data/person/ID_NL-ZH-LEI_193X_NL-ZH-VOO_XXXX_HELEEN-DUPUIS.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/heleen-dupuis-6224814b_20251214T112656Z.json" ], - "modified_at": "2026-01-09T19:18:13.627713+00:00", + "modified_at": "2026-01-09T19:50:55.379759+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "heleen-dupuis-6224814b", @@ -161,7 +161,7 @@ "primary_rationale": "1939 is in 193X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1939 spans decades 193X/194X", - "inferred_at": "2026-01-09T19:18:13.627705+00:00", + "inferred_at": "2026-01-09T19:50:55.379752+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_194X_NL-GE-APE_XXXX_MARIANNE-WILMER.json b/data/person/ID_NL-ZH-LEI_194X_NL-GE-APE_XXXX_MARIANNE-WILMER.json index 7cd3c06686..541db41542 100644 --- a/data/person/ID_NL-ZH-LEI_194X_NL-GE-APE_XXXX_MARIANNE-WILMER.json +++ b/data/person/ID_NL-ZH-LEI_194X_NL-GE-APE_XXXX_MARIANNE-WILMER.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marianne-wilmer-8376b16_20251212T180000Z.json" ], - "modified_at": "2026-01-09T19:18:16.504472+00:00", + "modified_at": "2026-01-09T19:50:49.594407+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marianne-wilmer-8376b16", @@ -168,7 +168,7 @@ "primary_rationale": "1949 is in 194X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1949 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:16.504466+00:00", + "inferred_at": "2026-01-09T19:50:49.594397+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-GE-APE_XXXX_RON-ELSINGA.json b/data/person/ID_NL-ZH-LEI_195X_NL-GE-APE_XXXX_RON-ELSINGA.json similarity index 80% rename from data/person/ID_XX-XX-XXX_195X_NL-GE-APE_XXXX_RON-ELSINGA.json rename to data/person/ID_NL-ZH-LEI_195X_NL-GE-APE_XXXX_RON-ELSINGA.json index 4b143200e4..b945d4b62b 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-GE-APE_XXXX_RON-ELSINGA.json +++ b/data/person/ID_NL-ZH-LEI_195X_NL-GE-APE_XXXX_RON-ELSINGA.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_195X_NL-GE-APE_XXXX_RON-ELSINGA", + "ppid": "ID_NL-ZH-LEI_195X_NL-GE-APE_XXXX_RON-ELSINGA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-ZH-LEI", "first_date": "195X", "last_location": "NL-GE-APE", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Ron Elsinga", @@ -173,7 +174,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ron-elsinga-491ab11b_20251214T113133Z.json" ], - "modified_at": "2026-01-09T19:18:17.497964+00:00", + "modified_at": "2026-01-09T19:51:08.426435+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ron-elsinga-491ab11b", @@ -196,6 +197,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_195X_NL-GE-APE_XXXX_RON-ELSINGA", + "new_ppid": "ID_NL-ZH-LEI_195X_NL-GE-APE_XXXX_RON-ELSINGA", + "changed_at": "2026-01-09T19:51:08.426433+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -210,7 +221,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +270,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:17.497875+00:00", + "inferred_at": "2026-01-09T19:51:08.424246+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Leiderdorp", + "formatted": "NL-ZH-LEI", + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "LEI", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "LOI", + "date_range": "1994 - 1995 • 1 year", + "degree": "Diploma, Praktijkdiploma Bedrijfsrecht" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "LOI", + "mapping_result": "Leiderdorp, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Leiderdorp, Netherlands", + "result": { + "geonames_id": 2751771, + "geonames_name": "Leiderdorp", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.15833, + "longitude": 4.52917 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "LEI" + }, + "result": "NL-ZH-LEI" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2751771, + "geonames_name": "Leiderdorp", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.15833, + "longitude": 4.52917 + }, + "inferred_at": "2026-01-09T19:51:08.426423+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_195X_NL-NB-TIL_XXXX_GODELIEVE-BROEKLANDER.json b/data/person/ID_NL-ZH-LEI_195X_NL-NB-TIL_XXXX_GODELIEVE-BROEKLANDER.json index e11d8a3446..d33c775ad9 100644 --- a/data/person/ID_NL-ZH-LEI_195X_NL-NB-TIL_XXXX_GODELIEVE-BROEKLANDER.json +++ b/data/person/ID_NL-ZH-LEI_195X_NL-NB-TIL_XXXX_GODELIEVE-BROEKLANDER.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/godelieve-broeklander-0958011b_20251214T112254Z.json" ], - "modified_at": "2026-01-09T19:18:18.872501+00:00", + "modified_at": "2026-01-09T19:51:21.355367+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "godelieve-broeklander-0958011b", @@ -149,7 +149,7 @@ "primary_rationale": "1952 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1952 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:18.872443+00:00", + "inferred_at": "2026-01-09T19:51:21.355361+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_195X_NL-NH-HAA_XXXX_MARCEL-AUWERS.json b/data/person/ID_NL-ZH-LEI_195X_NL-NH-HAA_XXXX_MARCEL-AUWERS.json index bc8a1473c1..f059faccd3 100644 --- a/data/person/ID_NL-ZH-LEI_195X_NL-NH-HAA_XXXX_MARCEL-AUWERS.json +++ b/data/person/ID_NL-ZH-LEI_195X_NL-NH-HAA_XXXX_MARCEL-AUWERS.json @@ -204,7 +204,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marcel-leechburch-auwers-6078366b_20251214T102709Z.json" ], - "modified_at": "2026-01-09T19:18:17.597161+00:00", + "modified_at": "2026-01-09T19:51:03.976362+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marcel-leechburch-auwers-6078366b", @@ -242,7 +242,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -291,7 +291,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:17.597150+00:00", + "inferred_at": "2026-01-09T19:51:03.976355+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_195X_NL-ZH-TH_XXXX_LINDA-WIJK.json b/data/person/ID_NL-ZH-LEI_195X_NL-ZH-TH_XXXX_LINDA-WIJK.json index 9e4ab05181..32c5535fcf 100644 --- a/data/person/ID_NL-ZH-LEI_195X_NL-ZH-TH_XXXX_LINDA-WIJK.json +++ b/data/person/ID_NL-ZH-LEI_195X_NL-ZH-TH_XXXX_LINDA-WIJK.json @@ -87,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/linda-van-wijk-83210288_20251214T113127Z.json" ], - "modified_at": "2026-01-09T19:18:12.555418+00:00", + "modified_at": "2026-01-09T19:50:56.840816+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "linda-van-wijk-83210288", @@ -125,7 +125,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:12.555403+00:00", + "inferred_at": "2026-01-09T19:50:56.840807+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_195X_XX-XX-XXX_XXXX_HARRY-VERWEIJ.json b/data/person/ID_NL-ZH-LEI_195X_XX-XX-XXX_XXXX_HARRY-VERWEIJ.json index 7086d27932..97d5eb0f95 100644 --- a/data/person/ID_NL-ZH-LEI_195X_XX-XX-XXX_XXXX_HARRY-VERWEIJ.json +++ b/data/person/ID_NL-ZH-LEI_195X_XX-XX-XXX_XXXX_HARRY-VERWEIJ.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harry-verweij-90a0046_20251214T103137Z.json" ], - "modified_at": "2026-01-09T19:18:15.744519+00:00", + "modified_at": "2026-01-09T19:51:00.927459+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harry-verweij-90a0046", @@ -188,7 +188,7 @@ "primary_rationale": "1957 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -237,7 +237,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1957 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.742244+00:00", + "inferred_at": "2026-01-09T19:51:00.925505+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-GE-ARN_XXXX_HUBERT-SLINGS.json b/data/person/ID_NL-ZH-LEI_196X_NL-GE-ARN_XXXX_HUBERT-SLINGS.json index c3c0e9c670..8c9aefddd4 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-GE-ARN_XXXX_HUBERT-SLINGS.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-GE-ARN_XXXX_HUBERT-SLINGS.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hubertslings_20251214T110528Z.json" ], - "modified_at": "2026-01-09T19:18:15.653138+00:00", + "modified_at": "2026-01-09T19:51:13.277718+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hubertslings", @@ -210,7 +210,7 @@ "primary_rationale": "1961 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1961 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.653133+00:00", + "inferred_at": "2026-01-09T19:51:13.277706+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-GE-GEN_XXXX_CAROLINE-SCHAEFFER.json b/data/person/ID_NL-ZH-LEI_196X_NL-GE-GEN_XXXX_CAROLINE-SCHAEFFER.json similarity index 77% rename from data/person/ID_XX-XX-XXX_196X_NL-GE-GEN_XXXX_CAROLINE-SCHAEFFER.json rename to data/person/ID_NL-ZH-LEI_196X_NL-GE-GEN_XXXX_CAROLINE-SCHAEFFER.json index c96a8ffa5e..6124ec40b8 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-GE-GEN_XXXX_CAROLINE-SCHAEFFER.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-GE-GEN_XXXX_CAROLINE-SCHAEFFER.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_NL-GE-GEN_XXXX_CAROLINE-SCHAEFFER", + "ppid": "ID_NL-ZH-LEI_196X_NL-GE-GEN_XXXX_CAROLINE-SCHAEFFER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-ZH-LEI", "first_date": "196X", "last_location": "NL-GE-GEN", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Caroline Schaeffer", @@ -165,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carolineschaeffer_20251214T110603Z.json" ], - "modified_at": "2026-01-09T19:18:15.735955+00:00", + "modified_at": "2026-01-09T19:51:17.586190+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carolineschaeffer", @@ -188,6 +189,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_NL-GE-GEN_XXXX_CAROLINE-SCHAEFFER", + "new_ppid": "ID_NL-ZH-LEI_196X_NL-GE-GEN_XXXX_CAROLINE-SCHAEFFER", + "changed_at": "2026-01-09T19:51:17.586188+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -202,7 +213,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -251,7 +262,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.735880+00:00", + "inferred_at": "2026-01-09T19:51:17.583985+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Leiden", + "formatted": "NL-ZH-LEI", + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "LEI", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "NTI", + "date_range": "2021 - 2021", + "degree": "Budget Coach, Budget Coaching" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "NTI", + "mapping_result": "Leiden, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Leiden, Netherlands", + "result": { + "geonames_id": 2751773, + "geonames_name": "Leiden", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.15833, + "longitude": 4.49306 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "LEI" + }, + "result": "NL-ZH-LEI" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2751773, + "geonames_name": "Leiden", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.15833, + "longitude": 4.49306 + }, + "inferred_at": "2026-01-09T19:51:17.586182+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-GE-LOC_XXXX_VANESSA-LANN.json b/data/person/ID_NL-ZH-LEI_196X_NL-GE-LOC_XXXX_VANESSA-LANN.json index 27c04e9a28..dd7a66a558 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-GE-LOC_XXXX_VANESSA-LANN.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-GE-LOC_XXXX_VANESSA-LANN.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vanessa-lann-a51724276_20251214T112523Z.json" ], - "modified_at": "2026-01-09T19:18:13.789776+00:00", + "modified_at": "2026-01-09T19:50:56.572499+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vanessa-lann-a51724276", @@ -197,7 +197,7 @@ "primary_rationale": "1960 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +246,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1960 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.789772+00:00", + "inferred_at": "2026-01-09T19:50:56.572494+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-NH-AMS_XXXX_SU-TIMPGAN.json b/data/person/ID_NL-ZH-LEI_196X_NL-NH-AMS_XXXX_SU-TIMPGAN.json index a5542af062..9ab76aa487 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-NH-AMS_XXXX_SU-TIMPGAN.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-NH-AMS_XXXX_SU-TIMPGAN.json @@ -236,7 +236,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/su-yin-timp-gan_20251214T113346Z.json" ], - "modified_at": "2026-01-09T19:18:17.407331+00:00", + "modified_at": "2026-01-09T19:50:54.572141+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "su-yin-timp-gan", @@ -268,7 +268,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -309,7 +309,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.407321+00:00", + "inferred_at": "2026-01-09T19:50:54.572133+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-NH-AMS_XXXX_WIM-HOEBEN.json b/data/person/ID_NL-ZH-LEI_196X_NL-NH-AMS_XXXX_WIM-HOEBEN.json index e639553d4b..2ca55e0210 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-NH-AMS_XXXX_WIM-HOEBEN.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-NH-AMS_XXXX_WIM-HOEBEN.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wim-hoeben-84a3097_20251214T111311Z.json" ], - "modified_at": "2026-01-09T19:18:15.096028+00:00", + "modified_at": "2026-01-09T19:50:59.791221+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wim-hoeben-84a3097", @@ -147,7 +147,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.096019+00:00", + "inferred_at": "2026-01-09T19:50:59.791215+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-NH-HIL_XXXX_HELEEN-RUIJG.json b/data/person/ID_NL-ZH-LEI_196X_NL-NH-HIL_XXXX_HELEEN-RUIJG.json index 9b4e5d0dfc..fc0296d3a9 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-NH-HIL_XXXX_HELEEN-RUIJG.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-NH-HIL_XXXX_HELEEN-RUIJG.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/heleen-ruijg-75749aa_20251214T110023Z.json" ], - "modified_at": "2026-01-09T19:18:13.783719+00:00", + "modified_at": "2026-01-09T19:50:56.486210+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "heleen-ruijg-75749aa", @@ -162,7 +162,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.783715+00:00", + "inferred_at": "2026-01-09T19:50:56.486203+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-ZAA_XXXX_WILMAR-TAAL.json b/data/person/ID_NL-ZH-LEI_196X_NL-NH-ZAA_XXXX_WILMAR-TAAL.json similarity index 71% rename from data/person/ID_XX-XX-XXX_196X_NL-NH-ZAA_XXXX_WILMAR-TAAL.json rename to data/person/ID_NL-ZH-LEI_196X_NL-NH-ZAA_XXXX_WILMAR-TAAL.json index fc4f66129f..f51bb12558 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-ZAA_XXXX_WILMAR-TAAL.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-NH-ZAA_XXXX_WILMAR-TAAL.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_NL-NH-ZAA_XXXX_WILMAR-TAAL", + "ppid": "ID_NL-ZH-LEI_196X_NL-NH-ZAA_XXXX_WILMAR-TAAL", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-ZH-LEI", "first_date": "196X", "last_location": "NL-NH-ZAA", "last_date": "XXXX", @@ -12,7 +12,8 @@ "TAAL" ], "first_date_source": "inferred_birth_decade", - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Wilmar Taal", @@ -142,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wilmar-taal-747bbb30_20251214T111451Z.json" ], - "modified_at": "2026-01-09T19:18:15.025278+00:00", + "modified_at": "2026-01-09T19:51:21.353616+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wilmar-taal-747bbb30", @@ -165,6 +166,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_NL-NH-ZAA_XXXX_WILMAR-TAAL", + "new_ppid": "ID_NL-ZH-LEI_196X_NL-NH-ZAA_XXXX_WILMAR-TAAL", + "changed_at": "2026-01-09T19:51:21.353614+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -173,7 +184,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +225,77 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.025203+00:00", + "inferred_at": "2026-01-09T19:51:21.351648+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Leiderdorp", + "formatted": "NL-ZH-LEI", + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "LEI", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "LOI", + "date_range": "1988 - 1989 • 1 year", + "degree": "NVT, Parapsychologie, 8" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "LOI", + "mapping_result": "Leiderdorp, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Leiderdorp, Netherlands", + "result": { + "geonames_id": 2751771, + "geonames_name": "Leiderdorp", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.15833, + "longitude": 4.52917 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "LEI" + }, + "result": "NL-ZH-LEI" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2751771, + "geonames_name": "Leiderdorp", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.15833, + "longitude": 4.52917 + }, + "inferred_at": "2026-01-09T19:51:21.353605+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-OV-DEV_XXXX_EVA-KLEEMAN.json b/data/person/ID_NL-ZH-LEI_196X_NL-OV-DEV_XXXX_EVA-KLEEMAN.json index 7796492b6d..93ff5fc302 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-OV-DEV_XXXX_EVA-KLEEMAN.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-OV-DEV_XXXX_EVA-KLEEMAN.json @@ -230,7 +230,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/evakleeman_20251214T112453Z.json" ], - "modified_at": "2026-01-09T19:18:15.924123+00:00", + "modified_at": "2026-01-09T19:51:15.175401+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "evakleeman", @@ -253,7 +253,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -294,7 +294,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.924118+00:00", + "inferred_at": "2026-01-09T19:51:15.175393+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-UT-UTR_XXXX_FLOORTJE-TUINSTRA.json b/data/person/ID_NL-ZH-LEI_196X_NL-UT-UTR_XXXX_FLOORTJE-TUINSTRA.json index 3b0c4b229d..6111dc2734 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-UT-UTR_XXXX_FLOORTJE-TUINSTRA.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-UT-UTR_XXXX_FLOORTJE-TUINSTRA.json @@ -230,7 +230,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/floortje-tuinstra-52941531_20251214T104116Z.json" ], - "modified_at": "2026-01-09T19:18:17.907062+00:00", + "modified_at": "2026-01-09T19:50:47.118535+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "floortje-tuinstra-52941531", @@ -268,7 +268,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -317,7 +317,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.907053+00:00", + "inferred_at": "2026-01-09T19:50:47.118523+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-UT-UTR_XXXX_MONIQUE-OKKERSE.json b/data/person/ID_NL-ZH-LEI_196X_NL-UT-UTR_XXXX_MONIQUE-OKKERSE.json index f8cce4a0d5..9df75f1f33 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-UT-UTR_XXXX_MONIQUE-OKKERSE.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-UT-UTR_XXXX_MONIQUE-OKKERSE.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/moniqueokkerse_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:14.903005+00:00", + "modified_at": "2026-01-09T19:50:55.781257+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "moniqueokkerse", @@ -184,7 +184,7 @@ "primary_rationale": "1961 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1961 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:14.902999+00:00", + "inferred_at": "2026-01-09T19:50:55.781248+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-UT-UTR_XXXX_TJYYING-LIU.json b/data/person/ID_NL-ZH-LEI_196X_NL-UT-UTR_XXXX_TJYYING-LIU.json index f2d78a35ce..eb46694bd0 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-UT-UTR_XXXX_TJYYING-LIU.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-UT-UTR_XXXX_TJYYING-LIU.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tjyying-liu-7a988017_20251214T111459Z.json" ], - "modified_at": "2026-01-09T19:18:14.044051+00:00", + "modified_at": "2026-01-09T19:51:24.112145+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tjyying-liu-7a988017", @@ -183,7 +183,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.044045+00:00", + "inferred_at": "2026-01-09T19:51:24.112138+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-LEI_XXXX_DIRK-BIEMOND.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-LEI_XXXX_DIRK-BIEMOND.json index b96a69cff6..5929c2bffd 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-LEI_XXXX_DIRK-BIEMOND.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-LEI_XXXX_DIRK-BIEMOND.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dirkjanbiemond_20251214T111511Z.json" ], - "modified_at": "2026-01-09T19:18:13.352626+00:00", + "modified_at": "2026-01-09T19:51:05.266212+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dirkjanbiemond", @@ -173,7 +173,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.352615+00:00", + "inferred_at": "2026-01-09T19:51:05.266202+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-LEI_XXXX_EWALD-EBING.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-LEI_XXXX_EWALD-EBING.json index 2fe71c85c5..fe195b3869 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-LEI_XXXX_EWALD-EBING.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-LEI_XXXX_EWALD-EBING.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ewaldebing_20251214T103741Z.json" ], - "modified_at": "2026-01-09T19:18:16.962488+00:00", + "modified_at": "2026-01-09T19:51:22.800958+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ewaldebing", @@ -138,7 +138,7 @@ "primary_rationale": "1960 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1960 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.962482+00:00", + "inferred_at": "2026-01-09T19:51:22.800954+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-LEI_XXXX_WILCO-KAMP.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-LEI_XXXX_WILCO-KAMP.json index d12f6d253f..bccda5cf15 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-LEI_XXXX_WILCO-KAMP.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-LEI_XXXX_WILCO-KAMP.json @@ -224,7 +224,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wilco-van-de-kamp-4a34b225_20251214T102721Z.json" ], - "modified_at": "2026-01-09T19:18:13.554881+00:00", + "modified_at": "2026-01-09T19:50:54.652647+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wilco-van-de-kamp-4a34b225", @@ -253,7 +253,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -302,7 +302,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.554878+00:00", + "inferred_at": "2026-01-09T19:50:54.652638+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_AGNES-STORM.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_AGNES-STORM.json index 7a3220e7f8..702468470b 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_AGNES-STORM.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_AGNES-STORM.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/agnes-storm-26965936_20251214T112250Z.json" ], - "modified_at": "2026-01-09T19:18:16.919157+00:00", + "modified_at": "2026-01-09T19:51:07.035273+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "agnes-storm-26965936", @@ -164,7 +164,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.919151+00:00", + "inferred_at": "2026-01-09T19:51:07.035268+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_ANTON-BAL.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_ANTON-BAL.json index 47cd6e1234..639f57939b 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_ANTON-BAL.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_ANTON-BAL.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anton-bal-3179644_20251214T112318Z.json" ], - "modified_at": "2026-01-09T19:18:15.569404+00:00", + "modified_at": "2026-01-09T19:51:12.117156+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anton-bal-3179644", @@ -204,7 +204,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -253,7 +253,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.569399+00:00", + "inferred_at": "2026-01-09T19:51:12.117151+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_ARIE-MEIJBOOM.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_ARIE-MEIJBOOM.json index 2a317d9883..dc49f2cd4e 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_ARIE-MEIJBOOM.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_ARIE-MEIJBOOM.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arie-meijboom-731620161_20251214T102936Z.json" ], - "modified_at": "2026-01-09T19:18:13.024288+00:00", + "modified_at": "2026-01-09T19:50:50.607648+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arie-meijboom-731620161", @@ -181,7 +181,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.024281+00:00", + "inferred_at": "2026-01-09T19:50:50.607623+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_CARIETTE-ITTERSUM.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_CARIETTE-ITTERSUM.json index 93f9fd22d3..4d2005a9a5 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_CARIETTE-ITTERSUM.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_CARIETTE-ITTERSUM.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cariette-schenkelaars-van-ittersum-39722a25_20251214T112426Z.json" ], - "modified_at": "2026-01-09T19:18:17.015893+00:00", + "modified_at": "2026-01-09T19:51:22.334187+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cariette-schenkelaars-van-ittersum-39722a25", @@ -173,7 +173,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.015887+00:00", + "inferred_at": "2026-01-09T19:51:22.334184+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_DRSMA-ENGELENBURG.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_DRSMA-ENGELENBURG.json index 34e9407b67..6913e26f9c 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_DRSMA-ENGELENBURG.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_DRSMA-ENGELENBURG.json @@ -229,7 +229,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kirstenvanengelenburg_20251214T113416Z.json" ], - "modified_at": "2026-01-09T19:18:14.224489+00:00", + "modified_at": "2026-01-09T19:51:00.089900+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kirstenvanengelenburg", @@ -267,7 +267,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -316,7 +316,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.224483+00:00", + "inferred_at": "2026-01-09T19:51:00.089891+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_FREDERIQUE-SYBRANDI.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_FREDERIQUE-SYBRANDI.json similarity index 72% rename from data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_FREDERIQUE-SYBRANDI.json rename to data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_FREDERIQUE-SYBRANDI.json index af5f680828..026b1e172a 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_FREDERIQUE-SYBRANDI.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_FREDERIQUE-SYBRANDI.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_FREDERIQUE-SYBRANDI", + "ppid": "ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_FREDERIQUE-SYBRANDI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-ZH-LEI", "first_date": "196X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Frederique Sybrandi", @@ -146,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frederique-sybrandi-a8002940_20251214T103306Z.json" ], - "modified_at": "2026-01-09T19:18:13.330865+00:00", + "modified_at": "2026-01-09T19:50:53.912302+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frederique-sybrandi-a8002940", @@ -169,6 +170,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_FREDERIQUE-SYBRANDI", + "new_ppid": "ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_FREDERIQUE-SYBRANDI", + "changed_at": "2026-01-09T19:50:53.912300+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -183,7 +194,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +243,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.328643+00:00", + "inferred_at": "2026-01-09T19:50:53.910075+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Leiderdorp", + "formatted": "NL-ZH-LEI", + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "LEI", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "LOI", + "date_range": "2017 - 2018 • 1 year", + "degree": "Praktijk Diploma boekhouden" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "LOI", + "mapping_result": "Leiderdorp, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Leiderdorp, Netherlands", + "result": { + "geonames_id": 2751771, + "geonames_name": "Leiderdorp", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.15833, + "longitude": 4.52917 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "LEI" + }, + "result": "NL-ZH-LEI" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2751771, + "geonames_name": "Leiderdorp", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.15833, + "longitude": 4.52917 + }, + "inferred_at": "2026-01-09T19:50:53.912292+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_HELIA-D.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_HELIA-D.json index 81cc3d2b3d..c2e5bf8d68 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_HELIA-D.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_HELIA-D.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/helia-d-31170a11_20251214T112715Z.json" ], - "modified_at": "2026-01-09T19:18:16.762051+00:00", + "modified_at": "2026-01-09T19:51:06.622570+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "helia-d-31170a11", @@ -169,7 +169,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +218,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.762045+00:00", + "inferred_at": "2026-01-09T19:51:06.622563+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_INGRID-DILLO.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_INGRID-DILLO.json index 7cc8101627..bd30812686 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_INGRID-DILLO.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_INGRID-DILLO.json @@ -176,7 +176,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ingriddillo_20251214T110503Z.json" ], - "modified_at": "2026-01-09T19:18:16.035819+00:00", + "modified_at": "2026-01-09T19:51:16.724548+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ingriddillo", @@ -205,7 +205,7 @@ "primary_rationale": "1960 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -254,7 +254,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1960 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.035815+00:00", + "inferred_at": "2026-01-09T19:51:16.724540+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_LAMAN-BERNINI.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_LAMAN-BERNINI.json index d099767444..3b79c64b2e 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_LAMAN-BERNINI.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_LAMAN-BERNINI.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laman-bernini-1268468_20251214T112400Z.json" ], - "modified_at": "2026-01-09T19:18:14.720777+00:00", + "modified_at": "2026-01-09T19:51:03.565375+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laman-bernini-1268468", @@ -146,7 +146,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.720773+00:00", + "inferred_at": "2026-01-09T19:51:03.565371+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_MAARTJE-EIJK.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_MAARTJE-EIJK.json index b6f17e6153..0604f47533 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_MAARTJE-EIJK.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_MAARTJE-EIJK.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maartje-van-eijk-462877162_20251214T112651Z.json" ], - "modified_at": "2026-01-09T19:18:12.219144+00:00", + "modified_at": "2026-01-09T19:51:18.316162+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maartje-van-eijk-462877162", @@ -147,7 +147,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.219130+00:00", + "inferred_at": "2026-01-09T19:51:18.316156+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_PETER-ELLENS.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_PETER-ELLENS.json index 17f2a36cea..caa12aeee9 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_PETER-ELLENS.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_PETER-ELLENS.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/peter-ellens-126a28168_20251214T103333Z.json" ], - "modified_at": "2026-01-09T19:18:18.452029+00:00", + "modified_at": "2026-01-09T19:50:56.659895+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "peter-ellens-126a28168", @@ -177,7 +177,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:18.452012+00:00", + "inferred_at": "2026-01-09T19:50:56.659887+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_REIN-DEKKERS.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_REIN-DEKKERS.json index ce28f87461..25da319e79 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_REIN-DEKKERS.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_REIN-DEKKERS.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rein-dekkers-8872454a_20251214T102956Z.json" ], - "modified_at": "2026-01-09T19:18:13.169759+00:00", + "modified_at": "2026-01-09T19:51:10.856306+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rein-dekkers-8872454a", @@ -185,7 +185,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.169752+00:00", + "inferred_at": "2026-01-09T19:51:10.856299+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_STEVEN-CLAEYSSENS.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_STEVEN-CLAEYSSENS.json index 8123132a0a..c42d23126d 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_STEVEN-CLAEYSSENS.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_STEVEN-CLAEYSSENS.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stevenclaeyssens_20251214T113227Z.json" ], - "modified_at": "2026-01-09T19:18:13.128536+00:00", + "modified_at": "2026-01-09T19:50:51.059427+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stevenclaeyssens", @@ -163,7 +163,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.128530+00:00", + "inferred_at": "2026-01-09T19:50:51.059421+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_VALIKA-SMEULDERS.json b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_VALIKA-SMEULDERS.json index a61c28ae56..8306ba2343 100644 --- a/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_VALIKA-SMEULDERS.json +++ b/data/person/ID_NL-ZH-LEI_196X_NL-ZH-TH_XXXX_VALIKA-SMEULDERS.json @@ -231,7 +231,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/valika-smeulders-8988045_20251214T111401Z.json" ], - "modified_at": "2026-01-09T19:18:13.943660+00:00", + "modified_at": "2026-01-09T19:51:29.256200+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "valika-smeulders-8988045", @@ -263,7 +263,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -304,7 +304,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.943654+00:00", + "inferred_at": "2026-01-09T19:51:29.256196+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_XX-XX-XXX_XXXX_DOMINIQUE-GEELEN.json b/data/person/ID_NL-ZH-LEI_196X_XX-XX-XXX_XXXX_DOMINIQUE-GEELEN.json index 39b7563bb4..f78a0cf1e2 100644 --- a/data/person/ID_NL-ZH-LEI_196X_XX-XX-XXX_XXXX_DOMINIQUE-GEELEN.json +++ b/data/person/ID_NL-ZH-LEI_196X_XX-XX-XXX_XXXX_DOMINIQUE-GEELEN.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dominique-geelen-b96b281a6_20251214T103202Z.json" ], - "modified_at": "2026-01-09T19:18:17.384900+00:00", + "modified_at": "2026-01-09T19:51:23.912838+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dominique-geelen-b96b281a6", @@ -176,7 +176,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.380551+00:00", + "inferred_at": "2026-01-09T19:51:23.909247+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_XX-XX-XXX_XXXX_IRIS-TULKENS.json b/data/person/ID_NL-ZH-LEI_196X_XX-XX-XXX_XXXX_IRIS-TULKENS.json index 7769d3ad1b..3df044d1f9 100644 --- a/data/person/ID_NL-ZH-LEI_196X_XX-XX-XXX_XXXX_IRIS-TULKENS.json +++ b/data/person/ID_NL-ZH-LEI_196X_XX-XX-XXX_XXXX_IRIS-TULKENS.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/iris-tulkens-6082ab11_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:14.952347+00:00", + "modified_at": "2026-01-09T19:50:50.141039+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "iris-tulkens-6082ab11", @@ -189,7 +189,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.950409+00:00", + "inferred_at": "2026-01-09T19:50:50.107052+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_196X_XX-XX-XXX_XXXX_SANDER-JANSSEN.json b/data/person/ID_NL-ZH-LEI_196X_XX-XX-XXX_XXXX_SANDER-JANSSEN.json index 2fc371d6c4..71e4624443 100644 --- a/data/person/ID_NL-ZH-LEI_196X_XX-XX-XXX_XXXX_SANDER-JANSSEN.json +++ b/data/person/ID_NL-ZH-LEI_196X_XX-XX-XXX_XXXX_SANDER-JANSSEN.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sander-janssen-74b2b86_20251214T102845Z.json" ], - "modified_at": "2026-01-09T19:18:16.109235+00:00", + "modified_at": "2026-01-09T19:51:17.476861+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sander-janssen-74b2b86", @@ -197,7 +197,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.107382+00:00", + "inferred_at": "2026-01-09T19:51:17.474989+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-NB-VEL_XXXX_AMAL-TOURABI.json b/data/person/ID_NL-ZH-LEI_197X_NL-NB-VEL_XXXX_AMAL-TOURABI.json index ad28b7f5ab..3611599b18 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-NB-VEL_XXXX_AMAL-TOURABI.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-NB-VEL_XXXX_AMAL-TOURABI.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amal-tourabi-3a248a13_20251214T110837Z.json" ], - "modified_at": "2026-01-09T19:18:13.299277+00:00", + "modified_at": "2026-01-09T19:50:47.335532+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "amal-tourabi-3a248a13", @@ -188,7 +188,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.299270+00:00", + "inferred_at": "2026-01-09T19:50:47.335524+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_ANNETTE-WIT.json b/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_ANNETTE-WIT.json index 7b326d98e7..59748bac1b 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_ANNETTE-WIT.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_ANNETTE-WIT.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annette-de-wit-7b296a27_20251214T104158Z.json" ], - "modified_at": "2026-01-09T19:18:16.161790+00:00", + "modified_at": "2026-01-09T19:51:17.883085+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annette-de-wit-7b296a27", @@ -194,7 +194,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.161784+00:00", + "inferred_at": "2026-01-09T19:51:17.883072+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_ANNIEK-MEINDERS.json b/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_ANNIEK-MEINDERS.json index d11404d7e6..8a6725931f 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_ANNIEK-MEINDERS.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_ANNIEK-MEINDERS.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anniekdurksz_20251214T110043Z.json" ], - "modified_at": "2026-01-09T19:18:17.815091+00:00", + "modified_at": "2026-01-09T19:51:28.589943+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anniekdurksz", @@ -147,7 +147,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.815086+00:00", + "inferred_at": "2026-01-09T19:51:28.589938+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_BERNADETTE-MEIBORG.json b/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_BERNADETTE-MEIBORG.json index d50bbd6837..3fda9a99f9 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_BERNADETTE-MEIBORG.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_BERNADETTE-MEIBORG.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bernadette-meiborg-a2326b5_20251214T110240Z.json" ], - "modified_at": "2026-01-09T19:18:15.217247+00:00", + "modified_at": "2026-01-09T19:51:07.020864+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bernadette-meiborg-a2326b5", @@ -155,7 +155,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.217243+00:00", + "inferred_at": "2026-01-09T19:51:07.020858+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_LUCIEN-XIAN.json b/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_LUCIEN-XIAN.json index a0a1baae7f..6f471f5754 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_LUCIEN-XIAN.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_LUCIEN-XIAN.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lucienvv_20251214T111254Z.json" ], - "modified_at": "2026-01-09T19:18:14.733729+00:00", + "modified_at": "2026-01-09T19:50:53.838307+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lucienvv", @@ -192,7 +192,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.733724+00:00", + "inferred_at": "2026-01-09T19:50:53.838300+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_MARGOT-KOOTEN.json b/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_MARGOT-KOOTEN.json index 5103714000..405a8e6242 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_MARGOT-KOOTEN.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_MARGOT-KOOTEN.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/margot-van-kooten-1ba5804_20251214T102906Z.json" ], - "modified_at": "2026-01-09T19:18:15.531300+00:00", + "modified_at": "2026-01-09T19:50:53.002097+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "margot-van-kooten-1ba5804", @@ -141,7 +141,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.531294+00:00", + "inferred_at": "2026-01-09T19:50:53.002092+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_MICHELLE-BERK.json b/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_MICHELLE-BERK.json index 82adc69c3d..14e1594cd5 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_MICHELLE-BERK.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_MICHELLE-BERK.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michelle-van-den-berk-839b197_20251214T110455Z.json" ], - "modified_at": "2026-01-09T19:18:15.865923+00:00", + "modified_at": "2026-01-09T19:50:48.493450+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michelle-van-den-berk-839b197", @@ -142,7 +142,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.865916+00:00", + "inferred_at": "2026-01-09T19:50:48.493444+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_NIENKE-BAKKER.json b/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_NIENKE-BAKKER.json index 494d238a83..9378ac3249 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_NIENKE-BAKKER.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-NH-AMS_XXXX_NIENKE-BAKKER.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nienke-bakker-49a2b910_20251214T110039Z.json" ], - "modified_at": "2026-01-09T19:18:16.638258+00:00", + "modified_at": "2026-01-09T19:51:21.111149+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nienke-bakker-49a2b910", @@ -148,7 +148,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.638253+00:00", + "inferred_at": "2026-01-09T19:51:21.111144+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-NH-HIL_XXXX_ELSBETH-KWANT.json b/data/person/ID_NL-ZH-LEI_197X_NL-NH-HIL_XXXX_ELSBETH-KWANT.json index 6c75873fcb..14d47b2c60 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-NH-HIL_XXXX_ELSBETH-KWANT.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-NH-HIL_XXXX_ELSBETH-KWANT.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elsbethkwant_20251214T113234Z.json" ], - "modified_at": "2026-01-09T19:18:15.448900+00:00", + "modified_at": "2026-01-09T19:51:10.870928+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elsbethkwant", @@ -155,7 +155,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.448896+00:00", + "inferred_at": "2026-01-09T19:51:10.870924+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-UT-AME_XXXX_JASMIJN-BUS.json b/data/person/ID_NL-ZH-LEI_197X_NL-UT-AME_XXXX_JASMIJN-BUS.json index 9125248417..f1c3f86e28 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-UT-AME_XXXX_JASMIJN-BUS.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-UT-AME_XXXX_JASMIJN-BUS.json @@ -249,7 +249,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jasmijnbus_20251214T110756Z.json" ], - "modified_at": "2026-01-09T19:18:17.246630+00:00", + "modified_at": "2026-01-09T19:51:13.252206+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jasmijnbus", @@ -287,7 +287,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -336,7 +336,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.246623+00:00", + "inferred_at": "2026-01-09T19:51:13.252164+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-UT-UTR_XXXX_MARCEL-TORSING.json b/data/person/ID_NL-ZH-LEI_197X_NL-UT-UTR_XXXX_MARCEL-TORSING.json index 48c50ec44e..f0760d7b44 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-UT-UTR_XXXX_MARCEL-TORSING.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-UT-UTR_XXXX_MARCEL-TORSING.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marceltorsing_20251214T111713Z.json" ], - "modified_at": "2026-01-09T19:18:17.871692+00:00", + "modified_at": "2026-01-09T19:51:02.677952+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marceltorsing", @@ -200,7 +200,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -249,7 +249,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.871683+00:00", + "inferred_at": "2026-01-09T19:51:02.677943+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-UT-UTR_XXXX_YVONNE-HEMMEN.json b/data/person/ID_NL-ZH-LEI_197X_NL-UT-UTR_XXXX_YVONNE-HEMMEN.json index 8e3aac99c3..d5cd8fe4d8 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-UT-UTR_XXXX_YVONNE-HEMMEN.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-UT-UTR_XXXX_YVONNE-HEMMEN.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yvonnevanhemmen_20251214T103309Z.json" ], - "modified_at": "2026-01-09T19:18:15.639698+00:00", + "modified_at": "2026-01-09T19:51:12.744014+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yvonnevanhemmen", @@ -151,7 +151,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.639693+00:00", + "inferred_at": "2026-01-09T19:51:12.744008+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-LEI_XXXX_CHANNA-HOOGERVORST.json b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-LEI_XXXX_CHANNA-HOOGERVORST.json index 4ebdbed63c..4ee747790b 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-LEI_XXXX_CHANNA-HOOGERVORST.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-LEI_XXXX_CHANNA-HOOGERVORST.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/channahoogervorst_20251214T113355Z.json" ], - "modified_at": "2026-01-09T19:18:13.508320+00:00", + "modified_at": "2026-01-09T19:51:04.062135+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "channahoogervorst", @@ -129,7 +129,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.508314+00:00", + "inferred_at": "2026-01-09T19:51:04.062130+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-LEI_XXXX_FIONA-ROMBOUTSHARMS.json b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-LEI_XXXX_FIONA-ROMBOUTSHARMS.json index 4ad66750d7..186b4bd25a 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-LEI_XXXX_FIONA-ROMBOUTSHARMS.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-LEI_XXXX_FIONA-ROMBOUTSHARMS.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fionarombouts_20251214T113248Z.json" ], - "modified_at": "2026-01-09T19:18:12.974837+00:00", + "modified_at": "2026-01-09T19:50:49.618280+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fionarombouts", @@ -172,7 +172,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.974834+00:00", + "inferred_at": "2026-01-09T19:50:49.618275+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-LEI_XXXX_VERA-HUBERS.json b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-LEI_XXXX_VERA-HUBERS.json index 9ffc1ecada..af52bdd041 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-LEI_XXXX_VERA-HUBERS.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-LEI_XXXX_VERA-HUBERS.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/verahubers_20251214T113310Z.json" ], - "modified_at": "2026-01-09T19:18:14.167595+00:00", + "modified_at": "2026-01-09T19:50:48.806521+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "verahubers", @@ -194,7 +194,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.167586+00:00", + "inferred_at": "2026-01-09T19:50:48.806512+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-RIJ_XXXX_TEUNIS-HAAS.json b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-RIJ_XXXX_TEUNIS-HAAS.json index 87466a4e15..8d4ffac247 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-RIJ_XXXX_TEUNIS-HAAS.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-RIJ_XXXX_TEUNIS-HAAS.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/teunis-de-haas-a4133140_20251214T112710Z.json" ], - "modified_at": "2026-01-09T19:18:13.187813+00:00", + "modified_at": "2026-01-09T19:50:53.226846+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "teunis-de-haas-a4133140", @@ -153,7 +153,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.187809+00:00", + "inferred_at": "2026-01-09T19:50:53.226842+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-ROT_XXXX_ANTOINETTE-BRUMMELINK.json b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-ROT_XXXX_ANTOINETTE-BRUMMELINK.json index 5c5543f95a..f8481bf012 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-ROT_XXXX_ANTOINETTE-BRUMMELINK.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-ROT_XXXX_ANTOINETTE-BRUMMELINK.json @@ -191,7 +191,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/antoinettebrummelink_20251214T113241Z.json" ], - "modified_at": "2026-01-09T19:18:15.232452+00:00", + "modified_at": "2026-01-09T19:51:07.269110+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "antoinettebrummelink", @@ -214,7 +214,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -255,7 +255,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.232449+00:00", + "inferred_at": "2026-01-09T19:51:07.269101+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_ARLETTE-SJERP.json b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_ARLETTE-SJERP.json index 7715a2e4ee..b3506f5807 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_ARLETTE-SJERP.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_ARLETTE-SJERP.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/asjerp_20251214T113258Z.json" ], - "modified_at": "2026-01-09T19:18:11.442147+00:00", + "modified_at": "2026-01-09T19:50:51.599250+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "asjerp", @@ -200,7 +200,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -249,7 +249,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.442138+00:00", + "inferred_at": "2026-01-09T19:50:51.599240+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_CORINNE-HOFMAN.json b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_CORINNE-HOFMAN.json index 7ea16aff6d..6ee57c7ba3 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_CORINNE-HOFMAN.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_CORINNE-HOFMAN.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/corinne-hofman-29008bb_20251214T103734Z.json" ], - "modified_at": "2026-01-09T19:18:13.235202+00:00", + "modified_at": "2026-01-09T19:50:53.690252+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "corinne-hofman-29008bb", @@ -174,7 +174,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.235198+00:00", + "inferred_at": "2026-01-09T19:50:53.690247+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_INA-DIJKMAN.json b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_INA-DIJKMAN.json index 99e6e600f3..16b2e531c0 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_INA-DIJKMAN.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_INA-DIJKMAN.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ina-dijkman-aa2a4115_20251214T112858Z.json" ], - "modified_at": "2026-01-09T19:18:16.949049+00:00", + "modified_at": "2026-01-09T19:50:58.682904+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ina-dijkman-aa2a4115", @@ -167,7 +167,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.949025+00:00", + "inferred_at": "2026-01-09T19:50:58.682894+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_KIM-SMIT.json b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_KIM-SMIT.json index 4ba54a6a8a..6cbc7aa9c0 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_KIM-SMIT.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_KIM-SMIT.json @@ -224,7 +224,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kim-smit-2497158_20251214T110718Z.json" ], - "modified_at": "2026-01-09T19:18:13.767608+00:00", + "modified_at": "2026-01-09T19:51:14.355691+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kim-smit-2497158", @@ -262,7 +262,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -311,7 +311,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.767602+00:00", + "inferred_at": "2026-01-09T19:51:14.355686+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_MEREL-LEIDELMEIJER.json b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_MEREL-LEIDELMEIJER.json index b8049e74fc..dd71abad4e 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_MEREL-LEIDELMEIJER.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_MEREL-LEIDELMEIJER.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merel-leidelmeijer-096b8a10_20251214T112437Z.json" ], - "modified_at": "2026-01-09T19:18:16.375773+00:00", + "modified_at": "2026-01-09T19:50:55.985962+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merel-leidelmeijer-096b8a10", @@ -173,7 +173,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.375764+00:00", + "inferred_at": "2026-01-09T19:50:55.985954+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_OLAF-JANSSEN.json b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_OLAF-JANSSEN.json index 16909ef7d1..4a85453dad 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_OLAF-JANSSEN.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_OLAF-JANSSEN.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/olafjanssen_20251214T113223Z.json" ], - "modified_at": "2026-01-09T19:18:14.011373+00:00", + "modified_at": "2026-01-09T19:50:48.670944+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "olafjanssen", @@ -140,7 +140,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.011368+00:00", + "inferred_at": "2026-01-09T19:50:48.670939+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_RUBEN-WAARDHUIZEN.json b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_RUBEN-WAARDHUIZEN.json index 6b1882cdbc..a946427c3a 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_RUBEN-WAARDHUIZEN.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_RUBEN-WAARDHUIZEN.json @@ -140,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ruben-van-waardhuizen-511b821a_20251212T180000Z.json" ], - "modified_at": "2026-01-09T19:18:17.114298+00:00", + "modified_at": "2026-01-09T19:51:23.908483+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ruben-van-waardhuizen-511b821a", @@ -171,7 +171,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.114294+00:00", + "inferred_at": "2026-01-09T19:51:23.908478+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_SUGENG-MSC.json b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_SUGENG-MSC.json index 1fff821127..4e5f42999e 100644 --- a/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_SUGENG-MSC.json +++ b/data/person/ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_SUGENG-MSC.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sugengrahardjo_20251214T102744Z.json" ], - "modified_at": "2026-01-09T19:18:13.914525+00:00", + "modified_at": "2026-01-09T19:51:21.307755+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sugengrahardjo", @@ -179,7 +179,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.914519+00:00", + "inferred_at": "2026-01-09T19:51:21.307750+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ADRIANA-ARELLANO.json b/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_ADRIANA-ARELLANO.json similarity index 77% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ADRIANA-ARELLANO.json rename to data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_ADRIANA-ARELLANO.json index 50079ab9ed..2b56d81baa 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ADRIANA-ARELLANO.json +++ b/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_ADRIANA-ARELLANO.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ADRIANA-ARELLANO", + "ppid": "ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_ADRIANA-ARELLANO", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-ZH-LEI", "first_date": "197X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "196X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Adriana Da Silva Arellano", @@ -198,7 +199,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/adriana-da-silva-arellano-04a3486b_20251214T103955Z.json" ], - "modified_at": "2026-01-09T19:18:13.162460+00:00", + "modified_at": "2026-01-09T19:50:52.997281+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "adriana-da-silva-arellano-04a3486b", @@ -211,6 +212,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ADRIANA-ARELLANO", + "new_ppid": "ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_ADRIANA-ARELLANO", + "changed_at": "2026-01-09T19:50:52.997278+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -225,7 +236,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -274,7 +285,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.162359+00:00", + "inferred_at": "2026-01-09T19:50:52.995084+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Leiden", + "formatted": "NL-ZH-LEI", + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "LEI", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Pontificia Universidad Católica del Perú", + "date_range": "1993 - 1999 • 6 years", + "degree": "Bachiller en Humanidades con mención en Bibliotecología" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Pontificia Universidad Católica del Perú", + "mapping_result": "Leiden, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Leiden, Netherlands", + "result": { + "geonames_id": 2751773, + "geonames_name": "Leiden", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.15833, + "longitude": 4.49306 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "LEI" + }, + "result": "NL-ZH-LEI" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2751773, + "geonames_name": "Leiden", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.15833, + "longitude": 4.49306 + }, + "inferred_at": "2026-01-09T19:50:52.997234+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_ARNE-WOSSINK.json b/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_ARNE-WOSSINK.json index a204125b42..555b4ed27e 100644 --- a/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_ARNE-WOSSINK.json +++ b/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_ARNE-WOSSINK.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arnewossink_20251214T104040Z.json" ], - "modified_at": "2026-01-09T19:18:15.008593+00:00", + "modified_at": "2026-01-09T19:50:58.873984+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arnewossink", @@ -155,7 +155,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.006683+00:00", + "inferred_at": "2026-01-09T19:50:58.867076+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_ARTHUR-NIGGEBRUGGE.json b/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_ARTHUR-NIGGEBRUGGE.json index 2d4c19a6fd..fa1bf11ebc 100644 --- a/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_ARTHUR-NIGGEBRUGGE.json +++ b/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_ARTHUR-NIGGEBRUGGE.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/niggebrugge_20251214T110521Z.json" ], - "modified_at": "2026-01-09T19:18:11.831970+00:00", + "modified_at": "2026-01-09T19:50:47.325985+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "niggebrugge", @@ -177,7 +177,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.829370+00:00", + "inferred_at": "2026-01-09T19:50:47.321113+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_EVELINE-GOEDE.json b/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_EVELINE-GOEDE.json index 4e8a3b3e9d..4e84032d02 100644 --- a/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_EVELINE-GOEDE.json +++ b/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_EVELINE-GOEDE.json @@ -223,7 +223,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eveline-de-goede-85454a1a_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:13.644843+00:00", + "modified_at": "2026-01-09T19:50:55.278768+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eveline-de-goede-85454a1a", @@ -251,7 +251,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -300,7 +300,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.642970+00:00", + "inferred_at": "2026-01-09T19:50:55.276656+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_HARRY-ASSEN.json b/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_HARRY-ASSEN.json index c32b95db26..fe62cdaf64 100644 --- a/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_HARRY-ASSEN.json +++ b/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_HARRY-ASSEN.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harry-van-assen-5a277225_20251212T221600Z.json" ], - "modified_at": "2026-01-09T19:18:16.806206+00:00", + "modified_at": "2026-01-09T19:51:08.441892+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harry-van-assen-5a277225", @@ -139,7 +139,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.804294+00:00", + "inferred_at": "2026-01-09T19:51:08.436530+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_HILDE-HALM.json b/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_HILDE-HALM.json index 80c2587778..73c2ac694a 100644 --- a/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_HILDE-HALM.json +++ b/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_HILDE-HALM.json @@ -174,7 +174,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hilde-van-halm-8884b22a_20251214T112113Z.json" ], - "modified_at": "2026-01-09T19:18:16.154980+00:00", + "modified_at": "2026-01-09T19:51:28.431559+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hilde-van-halm-8884b22a", @@ -205,7 +205,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -246,7 +246,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.153059+00:00", + "inferred_at": "2026-01-09T19:51:28.415920+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_PAULINE-GOETTSCH.json b/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_PAULINE-GOETTSCH.json index 5257151302..bcd601462d 100644 --- a/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_PAULINE-GOETTSCH.json +++ b/data/person/ID_NL-ZH-LEI_197X_XX-XX-XXX_XXXX_PAULINE-GOETTSCH.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pauline-sijrier-goettsch-078b56178_20251214T104044Z.json" ], - "modified_at": "2026-01-09T19:18:13.860164+00:00", + "modified_at": "2026-01-09T19:50:56.593065+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pauline-sijrier-goettsch-078b56178", @@ -112,7 +112,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -153,7 +153,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.857257+00:00", + "inferred_at": "2026-01-09T19:50:56.591097+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-GE-ARN_XXXX_FREDERIK-KNEGTEL.json b/data/person/ID_NL-ZH-LEI_198X_NL-GE-ARN_XXXX_FREDERIK-KNEGTEL.json index 936412115d..6d349e9b2e 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-GE-ARN_XXXX_FREDERIK-KNEGTEL.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-GE-ARN_XXXX_FREDERIK-KNEGTEL.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frederik-knegtel-3a917461_20251214T110550Z.json" ], - "modified_at": "2026-01-09T19:18:14.943146+00:00", + "modified_at": "2026-01-09T19:51:06.603051+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frederik-knegtel-3a917461", @@ -157,7 +157,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.943139+00:00", + "inferred_at": "2026-01-09T19:51:06.603042+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-NB-BRE_XXXX_SJOERD-BAKKER.json b/data/person/ID_NL-ZH-LEI_198X_NL-NB-BRE_XXXX_SJOERD-BAKKER.json index f74070ffab..519c73e069 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-NB-BRE_XXXX_SJOERD-BAKKER.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-NB-BRE_XXXX_SJOERD-BAKKER.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sjoerd-bakker-44a93134_20251214T113324Z.json" ], - "modified_at": "2026-01-09T19:18:13.254794+00:00", + "modified_at": "2026-01-09T19:51:03.352230+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sjoerd-bakker-44a93134", @@ -155,7 +155,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.254788+00:00", + "inferred_at": "2026-01-09T19:51:03.352224+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-NB-EIN_XXXX_RICK-LEIJSSEN.json b/data/person/ID_NL-ZH-LEI_198X_NL-NB-EIN_XXXX_RICK-LEIJSSEN.json index 9363b0135b..0de5922088 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-NB-EIN_XXXX_RICK-LEIJSSEN.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-NB-EIN_XXXX_RICK-LEIJSSEN.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rick-leijssen-41310918_20251214T110827Z.json" ], - "modified_at": "2026-01-09T19:18:14.115432+00:00", + "modified_at": "2026-01-09T19:50:49.086753+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rick-leijssen-41310918", @@ -181,7 +181,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.115423+00:00", + "inferred_at": "2026-01-09T19:50:49.086748+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_CAROLINE-KONING.json b/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_CAROLINE-KONING.json index 89dde2fe2c..91d6efb515 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_CAROLINE-KONING.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_CAROLINE-KONING.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/caroline-wittop-koning-065185a_20251214T111320Z.json" ], - "modified_at": "2026-01-09T19:18:13.646361+00:00", + "modified_at": "2026-01-09T19:51:03.364669+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "caroline-wittop-koning-065185a", @@ -124,7 +124,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.646356+00:00", + "inferred_at": "2026-01-09T19:51:03.364662+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_LISA-BEEK.json b/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_LISA-BEEK.json index 3ad0463228..20d6ce0821 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_LISA-BEEK.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_LISA-BEEK.json @@ -246,7 +246,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lisavanbeek_20251214T102706Z.json" ], - "modified_at": "2026-01-09T19:18:17.716694+00:00", + "modified_at": "2026-01-09T19:51:28.555191+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lisavanbeek", @@ -269,7 +269,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -310,7 +310,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.716686+00:00", + "inferred_at": "2026-01-09T19:51:28.555188+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_RIENTSANNE-SLOTEMA.json b/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_RIENTSANNE-SLOTEMA.json index 1918e4ac23..c6e20ca510 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_RIENTSANNE-SLOTEMA.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_RIENTSANNE-SLOTEMA.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rients-anne-slotema-535544157_20251214T110757Z.json" ], - "modified_at": "2026-01-09T19:18:16.659083+00:00", + "modified_at": "2026-01-09T19:51:21.358761+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rients-anne-slotema-535544157", @@ -161,7 +161,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -210,7 +210,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.659079+00:00", + "inferred_at": "2026-01-09T19:51:21.358758+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_ROBERT-VUUREN.json b/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_ROBERT-VUUREN.json index d1c8d72f77..c845c511bb 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_ROBERT-VUUREN.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_ROBERT-VUUREN.json @@ -189,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robert-van-vuuren-7652847_20251214T102727Z.json" ], - "modified_at": "2026-01-09T19:18:13.510917+00:00", + "modified_at": "2026-01-09T19:51:06.925105+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robert-van-vuuren-7652847", @@ -227,7 +227,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -276,7 +276,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.510909+00:00", + "inferred_at": "2026-01-09T19:51:06.925095+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_SARA-DIJK.json b/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_SARA-DIJK.json index 03fc3416cf..0f6c45f2c5 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_SARA-DIJK.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-NH-AMS_XXXX_SARA-DIJK.json @@ -160,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sara-van-dijk-163b4a1a_20251214T111353Z.json" ], - "modified_at": "2026-01-09T19:18:15.680858+00:00", + "modified_at": "2026-01-09T19:51:28.164635+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sara-van-dijk-163b4a1a", @@ -192,7 +192,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.680853+00:00", + "inferred_at": "2026-01-09T19:51:28.164629+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-NH-HAA_XXXX_EWOUT-VREEBURG.json b/data/person/ID_NL-ZH-LEI_198X_NL-NH-HAA_XXXX_EWOUT-VREEBURG.json index 1c792addaf..b2c0cfef3d 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-NH-HAA_XXXX_EWOUT-VREEBURG.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-NH-HAA_XXXX_EWOUT-VREEBURG.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ewout-vreeburg_20251214T111251Z.json" ], - "modified_at": "2026-01-09T19:18:13.676148+00:00", + "modified_at": "2026-01-09T19:51:21.545685+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ewout-vreeburg", @@ -160,7 +160,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.676141+00:00", + "inferred_at": "2026-01-09T19:51:21.545678+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-UT-AME_XXXX_REMCO-VERMEULEN.json b/data/person/ID_NL-ZH-LEI_198X_NL-UT-AME_XXXX_REMCO-VERMEULEN.json index a1acc9de11..718bac1576 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-UT-AME_XXXX_REMCO-VERMEULEN.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-UT-AME_XXXX_REMCO-VERMEULEN.json @@ -188,7 +188,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/remcovermeulen_20251214T103727Z.json" ], - "modified_at": "2026-01-09T19:18:13.764851+00:00", + "modified_at": "2026-01-09T19:50:56.098028+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "remcovermeulen", @@ -217,7 +217,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -266,7 +266,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.764847+00:00", + "inferred_at": "2026-01-09T19:50:56.098021+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-UT-LEU_XXXX_LOEK-BRINKMAN.json b/data/person/ID_NL-ZH-LEI_198X_NL-UT-LEU_XXXX_LOEK-BRINKMAN.json index 52071fddc2..d10733edb0 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-UT-LEU_XXXX_LOEK-BRINKMAN.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-UT-LEU_XXXX_LOEK-BRINKMAN.json @@ -223,7 +223,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/loek-brinkman-52b25814_20251214T110511Z.json" ], - "modified_at": "2026-01-09T19:18:15.619727+00:00", + "modified_at": "2026-01-09T19:51:12.717905+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "loek-brinkman-52b25814", @@ -246,7 +246,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -287,7 +287,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.619722+00:00", + "inferred_at": "2026-01-09T19:51:12.717900+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_ALEID-SCHELTEMA.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_ALEID-SCHELTEMA.json index 8f035c1183..3356bdc987 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_ALEID-SCHELTEMA.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_ALEID-SCHELTEMA.json @@ -188,7 +188,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aleid-scheltema-50760513b_20251214T110208Z.json" ], - "modified_at": "2026-01-09T19:18:16.187412+00:00", + "modified_at": "2026-01-09T19:51:08.610189+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aleid-scheltema-50760513b", @@ -226,7 +226,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -275,7 +275,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.187404+00:00", + "inferred_at": "2026-01-09T19:51:08.610184+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_BRITTA-W.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_BRITTA-W.json index b65fa3ca75..cc0ee59b9f 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_BRITTA-W.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_BRITTA-W.json @@ -177,7 +177,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/brittawielaard_20251214T113328Z.json" ], - "modified_at": "2026-01-09T19:18:14.933985+00:00", + "modified_at": "2026-01-09T19:51:05.541772+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "brittawielaard", @@ -206,7 +206,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -255,7 +255,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.933980+00:00", + "inferred_at": "2026-01-09T19:51:05.541762+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_DIANA-SUHARDIMAN.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_DIANA-SUHARDIMAN.json index 9bad9a3313..f3aeecc03c 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_DIANA-SUHARDIMAN.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_DIANA-SUHARDIMAN.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/diana-suhardiman-5ba19a4_20251214T103724Z.json" ], - "modified_at": "2026-01-09T19:18:16.048614+00:00", + "modified_at": "2026-01-09T19:51:16.852375+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "diana-suhardiman-5ba19a4", @@ -171,7 +171,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.048607+00:00", + "inferred_at": "2026-01-09T19:51:16.852362+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_LAURA-VELD.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_LAURA-VELD.json index 2b91e5d963..9c10490f08 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_LAURA-VELD.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_LAURA-VELD.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lhuisintveld_20251214T110513Z.json" ], - "modified_at": "2026-01-09T19:18:14.948563+00:00", + "modified_at": "2026-01-09T19:51:05.592994+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lhuisintveld", @@ -149,7 +149,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.948559+00:00", + "inferred_at": "2026-01-09T19:51:05.592985+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_MARIJKE-HARTOG.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_MARIJKE-HARTOG.json index e64c8cc148..fbb64908dd 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_MARIJKE-HARTOG.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_MARIJKE-HARTOG.json @@ -145,7 +145,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marijke-den-hartog-22b00722_20251214T113358Z.json" ], - "modified_at": "2026-01-09T19:18:12.977223+00:00", + "modified_at": "2026-01-09T19:50:49.620865+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marijke-den-hartog-22b00722", @@ -168,7 +168,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.977220+00:00", + "inferred_at": "2026-01-09T19:50:49.620861+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_WENGKY-ARIANDO.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_WENGKY-ARIANDO.json index 7f87209556..5c95a8e0bd 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_WENGKY-ARIANDO.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-LEI_XXXX_WENGKY-ARIANDO.json @@ -266,7 +266,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wengky-ariando-99b42738_20251214T103730Z.json" ], - "modified_at": "2026-01-09T19:18:15.978743+00:00", + "modified_at": "2026-01-09T19:51:15.719583+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wengky-ariando-99b42738", @@ -295,7 +295,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -344,7 +344,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.978738+00:00", + "inferred_at": "2026-01-09T19:51:15.719575+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-OEG_XXXX_ALEX-BRANDSEN.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-OEG_XXXX_ALEX-BRANDSEN.json index 2f83693ed3..1a95fa8b11 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-OEG_XXXX_ALEX-BRANDSEN.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-OEG_XXXX_ALEX-BRANDSEN.json @@ -183,7 +183,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alex-brandsen_20251214T110453Z.json" ], - "modified_at": "2026-01-09T19:18:13.628253+00:00", + "modified_at": "2026-01-09T19:50:55.249906+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alex-brandsen", @@ -212,7 +212,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -261,7 +261,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.628249+00:00", + "inferred_at": "2026-01-09T19:50:55.249897+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-OEG_XXXX_JAN-KLERK.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-OEG_XXXX_JAN-KLERK.json index 636a3f086e..af7a249826 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-OEG_XXXX_JAN-KLERK.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-OEG_XXXX_JAN-KLERK.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-de-klerk-402256a7_20251214T111307Z.json" ], - "modified_at": "2026-01-09T19:18:15.291467+00:00", + "modified_at": "2026-01-09T19:51:08.363488+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-de-klerk-402256a7", @@ -165,7 +165,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.291462+00:00", + "inferred_at": "2026-01-09T19:51:08.363483+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-OEG_XXXX_LUCAS-KNITEL.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-OEG_XXXX_LUCAS-KNITEL.json index 458d3c51e1..541a47af72 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-OEG_XXXX_LUCAS-KNITEL.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-OEG_XXXX_LUCAS-KNITEL.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lucas-knitel-994a4792_20251214T110548Z.json" ], - "modified_at": "2026-01-09T19:18:16.808606+00:00", + "modified_at": "2026-01-09T19:51:22.048115+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lucas-knitel-994a4792", @@ -210,7 +210,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.808602+00:00", + "inferred_at": "2026-01-09T19:51:22.048111+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_DAAN-ELDERS.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_DAAN-ELDERS.json index 36f95fa6b3..20911c7c90 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_DAAN-ELDERS.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_DAAN-ELDERS.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daan-elders-37782019_20251214T102741Z.json" ], - "modified_at": "2026-01-09T19:18:14.042174+00:00", + "modified_at": "2026-01-09T19:51:07.879001+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daan-elders-37782019", @@ -189,7 +189,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.042167+00:00", + "inferred_at": "2026-01-09T19:51:07.878995+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_DIEDERIK-ROMONDT.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_DIEDERIK-ROMONDT.json index 3896916e5a..b4d2bcb19c 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_DIEDERIK-ROMONDT.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_DIEDERIK-ROMONDT.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/diederik-van-romondt-8249a11a_20251214T112851Z.json" ], - "modified_at": "2026-01-09T19:18:13.174341+00:00", + "modified_at": "2026-01-09T19:50:47.435576+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "diederik-van-romondt-8249a11a", @@ -155,7 +155,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.174335+00:00", + "inferred_at": "2026-01-09T19:50:47.435564+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_GUUS-ZWOLL.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_GUUS-ZWOLL.json index 43bed6d220..cd40098337 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_GUUS-ZWOLL.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_GUUS-ZWOLL.json @@ -207,7 +207,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/guusvanzwoll_20251214T102747Z.json" ], - "modified_at": "2026-01-09T19:18:14.036303+00:00", + "modified_at": "2026-01-09T19:50:49.611567+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "guusvanzwoll", @@ -245,7 +245,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -294,7 +294,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.036296+00:00", + "inferred_at": "2026-01-09T19:50:49.611560+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_HESTER-TORN.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_HESTER-TORN.json index 1c523d6bb4..975578bc27 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_HESTER-TORN.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_HESTER-TORN.json @@ -209,7 +209,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hestertorn_20251214T103120Z.json" ], - "modified_at": "2026-01-09T19:18:18.193243+00:00", + "modified_at": "2026-01-09T19:50:53.709324+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hestertorn", @@ -241,7 +241,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -282,7 +282,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.193214+00:00", + "inferred_at": "2026-01-09T19:50:53.709319+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_LIANNE-BELT.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_LIANNE-BELT.json index a5049efd29..849fee06f8 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_LIANNE-BELT.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_LIANNE-BELT.json @@ -264,7 +264,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/liannebelt_20251214T103230Z.json" ], - "modified_at": "2026-01-09T19:18:13.818526+00:00", + "modified_at": "2026-01-09T19:50:56.608039+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "liannebelt", @@ -287,7 +287,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -328,7 +328,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.818522+00:00", + "inferred_at": "2026-01-09T19:50:56.608032+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_PEDRO-ROCO.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_PEDRO-ROCO.json index 39424876d1..8135fa5523 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_PEDRO-ROCO.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_PEDRO-ROCO.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pedro-roco-b7495315_20251214T103013Z.json" ], - "modified_at": "2026-01-09T19:18:14.665226+00:00", + "modified_at": "2026-01-09T19:50:51.769637+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pedro-roco-b7495315", @@ -148,7 +148,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.665221+00:00", + "inferred_at": "2026-01-09T19:50:51.769632+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_PIM-WIENTJES.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_PIM-WIENTJES.json index 753faf6277..f5e3d2a9db 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_PIM-WIENTJES.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_PIM-WIENTJES.json @@ -159,7 +159,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pwientjes_20251214T102746Z.json" ], - "modified_at": "2026-01-09T19:18:16.741834+00:00", + "modified_at": "2026-01-09T19:51:21.791845+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pwientjes", @@ -182,7 +182,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.741829+00:00", + "inferred_at": "2026-01-09T19:51:21.791837+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_QUINTEN-SNIJDERS.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_QUINTEN-SNIJDERS.json index 1ff6f75a29..dda352de85 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_QUINTEN-SNIJDERS.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_QUINTEN-SNIJDERS.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/quinten-snijders-2a611114_20251214T112612Z.json" ], - "modified_at": "2026-01-09T19:18:13.030014+00:00", + "modified_at": "2026-01-09T19:50:50.613299+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "quinten-snijders-2a611114", @@ -144,7 +144,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.030010+00:00", + "inferred_at": "2026-01-09T19:50:50.613291+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_SEDA-AKTAS.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_SEDA-AKTAS.json index 74d4403af9..133b4e8f9f 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_SEDA-AKTAS.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_SEDA-AKTAS.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/seda-aktas-8837847b_20251214T112923Z.json" ], - "modified_at": "2026-01-09T19:18:15.321183+00:00", + "modified_at": "2026-01-09T19:51:08.539332+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "seda-aktas-8837847b", @@ -167,7 +167,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.321180+00:00", + "inferred_at": "2026-01-09T19:51:08.539327+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_TOM-HOOGERVORST.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_TOM-HOOGERVORST.json index c3c752e7e8..62e9998a33 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_TOM-HOOGERVORST.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_TOM-HOOGERVORST.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tom-hoogervorst-680a418a_20251214T103721Z.json" ], - "modified_at": "2026-01-09T19:18:14.607438+00:00", + "modified_at": "2026-01-09T19:51:02.994747+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tom-hoogervorst-680a418a", @@ -146,7 +146,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.607434+00:00", + "inferred_at": "2026-01-09T19:51:02.994738+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_VIOLET-M.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_VIOLET-M.json index 27b99d40d5..500e063a12 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_VIOLET-M.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-TH_XXXX_VIOLET-M.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/violet-m-8589088_20251214T112816Z.json" ], - "modified_at": "2026-01-09T19:18:18.419214+00:00", + "modified_at": "2026-01-09T19:51:29.321363+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "violet-m-8589088", @@ -145,7 +145,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.419188+00:00", + "inferred_at": "2026-01-09T19:51:29.321356+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-ZOE_XXXX_WENDY-ZWAANSWIJK.json b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-ZOE_XXXX_WENDY-ZWAANSWIJK.json index c535057f94..3f8f4f6bcb 100644 --- a/data/person/ID_NL-ZH-LEI_198X_NL-ZH-ZOE_XXXX_WENDY-ZWAANSWIJK.json +++ b/data/person/ID_NL-ZH-LEI_198X_NL-ZH-ZOE_XXXX_WENDY-ZWAANSWIJK.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wendy-zwaanswijk-8184b430_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:14.750245+00:00", + "modified_at": "2026-01-09T19:51:04.027923+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wendy-zwaanswijk-8184b430", @@ -184,7 +184,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -233,7 +233,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.750241+00:00", + "inferred_at": "2026-01-09T19:51:04.027915+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_ALEXANDER-DENCHER.json b/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_ALEXANDER-DENCHER.json index 322ff079f1..8ea5e21842 100644 --- a/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_ALEXANDER-DENCHER.json +++ b/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_ALEXANDER-DENCHER.json @@ -160,8 +160,10 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T00:35:00Z", + "result": "not_found", + "notes": "Exa search found Rijksmuseum curator profile but no birth date. Search query: \"Alexander Dencher\" Rijksmuseum curator born birthday biography" } }, "provenance": { @@ -170,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alexander-dencher-30342131_20251214T111409Z.json" ], - "modified_at": "2026-01-09T19:18:13.927454+00:00", + "modified_at": "2026-01-09T19:51:18.250888+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alexander-dencher-30342131", @@ -207,7 +209,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -256,7 +258,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.924434+00:00", + "inferred_at": "2026-01-09T19:51:18.248016+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_EGON-OEVER.json b/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_EGON-OEVER.json index a77da250a5..3c52453e17 100644 --- a/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_EGON-OEVER.json +++ b/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_EGON-OEVER.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/egon-ten-oever-68a6a17_20251214T112712Z.json" ], - "modified_at": "2026-01-09T19:18:18.136012+00:00", + "modified_at": "2026-01-09T19:51:28.926562+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "egon-ten-oever-68a6a17", @@ -149,7 +149,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.080849+00:00", + "inferred_at": "2026-01-09T19:51:28.922651+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_ELLEN-WAERDEN.json b/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_ELLEN-WAERDEN.json index fdfdc6d1e1..3a6bd6b285 100644 --- a/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_ELLEN-WAERDEN.json +++ b/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_ELLEN-WAERDEN.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ellen-van-der-waerden-9b8bab9_20251214T112411Z.json" ], - "modified_at": "2026-01-09T19:18:14.616607+00:00", + "modified_at": "2026-01-09T19:51:03.020794+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ellen-van-der-waerden-9b8bab9", @@ -177,7 +177,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.612924+00:00", + "inferred_at": "2026-01-09T19:51:03.015890+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_GERRIT-KROL.json b/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_GERRIT-KROL.json index 373e2353de..019021c49f 100644 --- a/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_GERRIT-KROL.json +++ b/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_GERRIT-KROL.json @@ -160,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerrit-krol-2249a321_20251214T103021Z.json" ], - "modified_at": "2026-01-09T19:18:16.401925+00:00", + "modified_at": "2026-01-09T19:51:18.456139+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerrit-krol-2249a321", @@ -182,7 +182,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.399888+00:00", + "inferred_at": "2026-01-09T19:51:18.454223+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_RIES-KAMPHOF.json b/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_RIES-KAMPHOF.json index 068389908b..56013ed527 100644 --- a/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_RIES-KAMPHOF.json +++ b/data/person/ID_NL-ZH-LEI_198X_XX-XX-XXX_XXXX_RIES-KAMPHOF.json @@ -226,7 +226,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ries-kamphof-b22bb613_20251214T103328Z.json" ], - "modified_at": "2026-01-09T19:18:15.650602+00:00", + "modified_at": "2026-01-09T19:51:28.154100+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ries-kamphof-b22bb613", @@ -263,7 +263,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -312,7 +312,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.647378+00:00", + "inferred_at": "2026-01-09T19:51:28.152279+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-GE-BED_XXXX_BASTIAN-STEPHOUDT.json b/data/person/ID_NL-ZH-LEI_199X_NL-GE-BED_XXXX_BASTIAN-STEPHOUDT.json index 555340541e..5412c9cd8c 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-GE-BED_XXXX_BASTIAN-STEPHOUDT.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-GE-BED_XXXX_BASTIAN-STEPHOUDT.json @@ -188,7 +188,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bastian-van-stephoudt-404820192_20251212T181500Z.json" ], - "modified_at": "2026-01-09T19:18:13.841739+00:00", + "modified_at": "2026-01-09T19:50:54.089377+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bastian-van-stephoudt-404820192", @@ -234,7 +234,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -283,7 +283,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.841732+00:00", + "inferred_at": "2026-01-09T19:50:54.089370+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-NB-BOZ_XXXX_TIM-KERKHOFS.json b/data/person/ID_NL-ZH-LEI_199X_NL-NB-BOZ_XXXX_TIM-KERKHOFS.json index 3fe2d57578..ad2b257651 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-NB-BOZ_XXXX_TIM-KERKHOFS.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-NB-BOZ_XXXX_TIM-KERKHOFS.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tim-kerkhofs-231739145_20251214T104037Z.json" ], - "modified_at": "2026-01-09T19:18:14.905685+00:00", + "modified_at": "2026-01-09T19:51:05.486782+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tim-kerkhofs-231739145", @@ -118,7 +118,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +159,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.905680+00:00", + "inferred_at": "2026-01-09T19:51:05.486774+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_EMMA-BREE.json b/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_EMMA-BREE.json index 4061f79dd1..cc12463e8d 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_EMMA-BREE.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_EMMA-BREE.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emma-bree-0378a03a_20251214T112708Z.json" ], - "modified_at": "2026-01-09T19:18:17.518726+00:00", + "modified_at": "2026-01-09T19:51:28.392354+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emma-bree-0378a03a", @@ -199,7 +199,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -248,7 +248,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.518720+00:00", + "inferred_at": "2026-01-09T19:51:28.392349+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_GEETA-BRUIN.json b/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_GEETA-BRUIN.json index 071671a1cd..89a68d7494 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_GEETA-BRUIN.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_GEETA-BRUIN.json @@ -208,7 +208,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/geeta-bruin-8530b46_20251214T110053Z.json" ], - "modified_at": "2026-01-09T19:18:14.685504+00:00", + "modified_at": "2026-01-09T19:51:03.361208+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "geeta-bruin-8530b46", @@ -237,7 +237,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -286,7 +286,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.685499+00:00", + "inferred_at": "2026-01-09T19:51:03.361203+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_JOELLE-DAEMS.json b/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_JOELLE-DAEMS.json index b6708c01d2..2b34a89bdb 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_JOELLE-DAEMS.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_JOELLE-DAEMS.json @@ -170,7 +170,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joelledaems_20251214T111303Z.json" ], - "modified_at": "2026-01-09T19:18:15.298808+00:00", + "modified_at": "2026-01-09T19:51:08.429593+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joelledaems", @@ -193,7 +193,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.298805+00:00", + "inferred_at": "2026-01-09T19:51:08.429586+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_KERSTIN-WINKING.json b/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_KERSTIN-WINKING.json index 4ebff65645..9b30938dee 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_KERSTIN-WINKING.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_KERSTIN-WINKING.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kerstin-winking-a0a71328_20251214T103732Z.json" ], - "modified_at": "2026-01-09T19:18:14.027792+00:00", + "modified_at": "2026-01-09T19:51:03.570571+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kerstin-winking-a0a71328", @@ -175,7 +175,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.027787+00:00", + "inferred_at": "2026-01-09T19:51:03.570566+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_STERRE-CAMPEN.json b/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_STERRE-CAMPEN.json index 516f513982..f84668a8b1 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_STERRE-CAMPEN.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_STERRE-CAMPEN.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sterre-van-campen-969547175_20251214T103336Z.json" ], - "modified_at": "2026-01-09T19:18:12.021074+00:00", + "modified_at": "2026-01-09T19:50:47.393965+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sterre-van-campen-969547175", @@ -187,7 +187,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.021063+00:00", + "inferred_at": "2026-01-09T19:50:47.393952+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_SUDI-S.json b/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_SUDI-S.json index 73cc53e596..a026363269 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_SUDI-S.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_SUDI-S.json @@ -159,7 +159,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sudisuleiman_20251214T103024Z.json" ], - "modified_at": "2026-01-09T19:18:15.420620+00:00", + "modified_at": "2026-01-09T19:51:10.611553+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sudisuleiman", @@ -182,7 +182,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.420615+00:00", + "inferred_at": "2026-01-09T19:51:10.611547+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_TAMAR-HESTRINGRADER.json b/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_TAMAR-HESTRINGRADER.json index e2bfc67361..12ed1fb2b3 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_TAMAR-HESTRINGRADER.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-NH-AMS_XXXX_TAMAR-HESTRINGRADER.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tamar-hestrin-grader-2a5b7354_20251214T111859Z.json" ], - "modified_at": "2026-01-09T19:18:14.865832+00:00", + "modified_at": "2026-01-09T19:51:05.211004+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tamar-hestrin-grader-2a5b7354", @@ -150,7 +150,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.865826+00:00", + "inferred_at": "2026-01-09T19:51:05.210994+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-NH-HAA_XXXX_ESTHER-GRAFTDIJK.json b/data/person/ID_NL-ZH-LEI_199X_NL-NH-HAA_XXXX_ESTHER-GRAFTDIJK.json index f58051d5a6..670a10b021 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-NH-HAA_XXXX_ESTHER-GRAFTDIJK.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-NH-HAA_XXXX_ESTHER-GRAFTDIJK.json @@ -213,7 +213,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/esther-graftdijk-869693b2_20251214T102721Z.json" ], - "modified_at": "2026-01-09T19:18:16.906526+00:00", + "modified_at": "2026-01-09T19:51:22.501034+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "esther-graftdijk-869693b2", @@ -236,7 +236,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -277,7 +277,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.906522+00:00", + "inferred_at": "2026-01-09T19:51:22.501024+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-OV-ENS_XXXX_JASMIJN-MENNINK.json b/data/person/ID_NL-ZH-LEI_199X_NL-OV-ENS_XXXX_JASMIJN-MENNINK.json index 6ee26a806d..2804e7bc3b 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-OV-ENS_XXXX_JASMIJN-MENNINK.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-OV-ENS_XXXX_JASMIJN-MENNINK.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jasmijn-mennink-16050b1a5_20251214T110409Z.json" ], - "modified_at": "2026-01-09T19:18:15.371757+00:00", + "modified_at": "2026-01-09T19:51:08.621060+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jasmijn-mennink-16050b1a5", @@ -178,7 +178,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.371752+00:00", + "inferred_at": "2026-01-09T19:51:08.621053+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-OV-LOS_XXXX_THIJS-SPIN.json b/data/person/ID_NL-ZH-LEI_199X_NL-OV-LOS_XXXX_THIJS-SPIN.json index 153374d823..786e432435 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-OV-LOS_XXXX_THIJS-SPIN.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-OV-LOS_XXXX_THIJS-SPIN.json @@ -177,7 +177,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thijs-spin-3ba371162_20251214T110050Z.json" ], - "modified_at": "2026-01-09T19:18:15.767524+00:00", + "modified_at": "2026-01-09T19:51:14.349963+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thijs-spin-3ba371162", @@ -206,7 +206,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -255,7 +255,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.767519+00:00", + "inferred_at": "2026-01-09T19:51:14.349955+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-UT-UTR_XXXX_EMIEL-WALGAARD.json b/data/person/ID_NL-ZH-LEI_199X_NL-UT-UTR_XXXX_EMIEL-WALGAARD.json index 8bec48a22a..7331719f86 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-UT-UTR_XXXX_EMIEL-WALGAARD.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-UT-UTR_XXXX_EMIEL-WALGAARD.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emiel-walgaard-4b039a175_20251214T103244Z.json" ], - "modified_at": "2026-01-09T19:18:14.344984+00:00", + "modified_at": "2026-01-09T19:51:08.563710+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emiel-walgaard-4b039a175", @@ -154,7 +154,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.344977+00:00", + "inferred_at": "2026-01-09T19:51:08.563698+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-DEL_XXXX_CHELSEY-RENSEN.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-DEL_XXXX_CHELSEY-RENSEN.json index 4dbc37bdd5..2bd8a7d510 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-DEL_XXXX_CHELSEY-RENSEN.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-DEL_XXXX_CHELSEY-RENSEN.json @@ -140,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chelsey-rensen-692408193_20251214T103143Z.json" ], - "modified_at": "2026-01-09T19:18:15.296901+00:00", + "modified_at": "2026-01-09T19:51:01.727124+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "chelsey-rensen-692408193", @@ -178,7 +178,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.296896+00:00", + "inferred_at": "2026-01-09T19:51:01.727118+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-DEL_XXXX_KRISHTI-KRISHTI.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-DEL_XXXX_KRISHTI-KRISHTI.json index 1f5cde2e97..557b53e695 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-DEL_XXXX_KRISHTI-KRISHTI.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-DEL_XXXX_KRISHTI-KRISHTI.json @@ -177,7 +177,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/krishti-das-54a5701b_20251214T111150Z.json" ], - "modified_at": "2026-01-09T19:18:14.226555+00:00", + "modified_at": "2026-01-09T19:50:58.935214+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "krishti-das-54a5701b", @@ -200,7 +200,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.226549+00:00", + "inferred_at": "2026-01-09T19:50:58.935205+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-DOR_XXXX_DENNIS-DAVRADOS.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-DOR_XXXX_DENNIS-DAVRADOS.json index a2a536f44b..2258f7b500 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-DOR_XXXX_DENNIS-DAVRADOS.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-DOR_XXXX_DENNIS-DAVRADOS.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dennisdavrados_20251214T112837Z.json" ], - "modified_at": "2026-01-09T19:18:12.204973+00:00", + "modified_at": "2026-01-09T19:50:47.466907+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dennisdavrados", @@ -155,7 +155,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.204961+00:00", + "inferred_at": "2026-01-09T19:50:47.466896+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_ASHLEIGH-MORRIS.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_ASHLEIGH-MORRIS.json index a7dff51541..f2397fe068 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_ASHLEIGH-MORRIS.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_ASHLEIGH-MORRIS.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ashleigh-morris-889a1633_20251214T103739Z.json" ], - "modified_at": "2026-01-09T19:18:12.979169+00:00", + "modified_at": "2026-01-09T19:50:49.622092+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ashleigh-morris-889a1633", @@ -198,7 +198,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.979165+00:00", + "inferred_at": "2026-01-09T19:50:49.622088+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_DAPHNE-WIJNGAARDEN.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_DAPHNE-WIJNGAARDEN.json index dcc0737e1b..4836fed0b6 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_DAPHNE-WIJNGAARDEN.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_DAPHNE-WIJNGAARDEN.json @@ -187,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daphne-van-wijngaarden-2a7248202_20251214T104041Z.json" ], - "modified_at": "2026-01-09T19:18:12.173953+00:00", + "modified_at": "2026-01-09T19:50:47.456543+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daphne-van-wijngaarden-2a7248202", @@ -216,7 +216,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -265,7 +265,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.173943+00:00", + "inferred_at": "2026-01-09T19:50:47.456535+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_DIRK-HUIJSMANS.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_DIRK-HUIJSMANS.json index 7de183901f..5c716fe710 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_DIRK-HUIJSMANS.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_DIRK-HUIJSMANS.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dirk-huijsmans-0a0349186_20251214T113238Z.json" ], - "modified_at": "2026-01-09T19:18:16.927325+00:00", + "modified_at": "2026-01-09T19:51:22.556465+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dirk-huijsmans-0a0349186", @@ -165,7 +165,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.927319+00:00", + "inferred_at": "2026-01-09T19:51:22.556460+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_JIM-DWINGER.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_JIM-DWINGER.json index 8017887e95..7e8b2ba77e 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_JIM-DWINGER.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_JIM-DWINGER.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jim-dwinger-99a529181_20251214T111313Z.json" ], - "modified_at": "2026-01-09T19:18:13.017436+00:00", + "modified_at": "2026-01-09T19:50:50.592014+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jim-dwinger-99a529181", @@ -149,7 +149,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.017432+00:00", + "inferred_at": "2026-01-09T19:50:50.592009+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_JORT-ZIJLSTRA.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_JORT-ZIJLSTRA.json index 2e670ec5fe..e6329df216 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_JORT-ZIJLSTRA.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_JORT-ZIJLSTRA.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jort-zijlstra-b7091b1a6_20251214T112750Z.json" ], - "modified_at": "2026-01-09T19:18:13.565472+00:00", + "modified_at": "2026-01-09T19:50:53.721651+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jort-zijlstra-b7091b1a6", @@ -139,7 +139,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.565467+00:00", + "inferred_at": "2026-01-09T19:50:53.721645+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_KARIN-KEESMAAT.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_KARIN-KEESMAAT.json index 4d6bd7b921..46e6c72c90 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_KARIN-KEESMAAT.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_KARIN-KEESMAAT.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karin-keesmaat-b16b6a1ab_20251214T112918Z.json" ], - "modified_at": "2026-01-09T19:18:16.576514+00:00", + "modified_at": "2026-01-09T19:51:19.920140+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karin-keesmaat-b16b6a1ab", @@ -151,7 +151,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.576508+00:00", + "inferred_at": "2026-01-09T19:51:19.920128+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_KARWAN-FATAHBLACK.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_KARWAN-FATAHBLACK.json index c2ae98bbea..23b8d388da 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_KARWAN-FATAHBLACK.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_KARWAN-FATAHBLACK.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karwan-fatah-black-765021237_20251214T103725Z.json" ], - "modified_at": "2026-01-09T19:18:15.237795+00:00", + "modified_at": "2026-01-09T19:51:07.273714+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karwan-fatah-black-765021237", @@ -134,7 +134,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.237792+00:00", + "inferred_at": "2026-01-09T19:51:07.273706+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MANOUK-OORD.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MANOUK-OORD.json index 7bc9364a7e..008b69c392 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MANOUK-OORD.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MANOUK-OORD.json @@ -248,7 +248,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/manouk-oord-74471a83_20251214T111530Z.json" ], - "modified_at": "2026-01-09T19:18:15.709099+00:00", + "modified_at": "2026-01-09T19:50:49.082355+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "manouk-oord-74471a83", @@ -280,7 +280,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -321,7 +321,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.709093+00:00", + "inferred_at": "2026-01-09T19:50:49.082351+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MARIJE-PLOMP.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MARIJE-PLOMP.json index 69d1a54d63..82e7c18ec0 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MARIJE-PLOMP.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MARIJE-PLOMP.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marijeplomp_20251214T103726Z.json" ], - "modified_at": "2026-01-09T19:18:15.426757+00:00", + "modified_at": "2026-01-09T19:51:28.909657+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marijeplomp", @@ -204,7 +204,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -253,7 +253,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.426750+00:00", + "inferred_at": "2026-01-09T19:51:28.909651+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MARIJE-REST.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MARIJE-REST.json index a191778288..8666c2cebd 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MARIJE-REST.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MARIJE-REST.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marije-van-rest-01b34616_20251214T112456Z.json" ], - "modified_at": "2026-01-09T19:18:16.437531+00:00", + "modified_at": "2026-01-09T19:51:05.263333+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marije-van-rest-01b34616", @@ -207,7 +207,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -248,7 +248,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.437525+00:00", + "inferred_at": "2026-01-09T19:51:05.263323+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MARTHE-KES.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MARTHE-KES.json index 773b2f8fa1..0968d2dcd9 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MARTHE-KES.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MARTHE-KES.json @@ -188,7 +188,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marthe-kes-b07a7670_20251214T111455Z.json" ], - "modified_at": "2026-01-09T19:18:13.949088+00:00", + "modified_at": "2026-01-09T19:50:56.877090+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marthe-kes-b07a7670", @@ -211,7 +211,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.949084+00:00", + "inferred_at": "2026-01-09T19:50:56.877082+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MILOU-DEKKER.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MILOU-DEKKER.json index 18fdc09c84..d1e91431c8 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MILOU-DEKKER.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_MILOU-DEKKER.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/milou-dekker-90_20251214T113408Z.json" ], - "modified_at": "2026-01-09T19:18:15.905252+00:00", + "modified_at": "2026-01-09T19:51:15.057584+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "milou-dekker-90", @@ -181,7 +181,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.905248+00:00", + "inferred_at": "2026-01-09T19:51:15.057577+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_OTTO-STUPARITZ.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_OTTO-STUPARITZ.json index 2b4fbfe435..5a154eea2a 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_OTTO-STUPARITZ.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_OTTO-STUPARITZ.json @@ -236,7 +236,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/otto-stuparitz-51733716_20251214T103739Z.json" ], - "modified_at": "2026-01-09T19:18:16.858090+00:00", + "modified_at": "2026-01-09T19:51:22.323580+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "otto-stuparitz-51733716", @@ -265,7 +265,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -314,7 +314,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.858086+00:00", + "inferred_at": "2026-01-09T19:51:22.323575+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_SANDER-HORST.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_SANDER-HORST.json index 768174d328..10dd8b285f 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_SANDER-HORST.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_SANDER-HORST.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/spvanderhorst_20251214T103720Z.json" ], - "modified_at": "2026-01-09T19:18:15.318408+00:00", + "modified_at": "2026-01-09T19:51:08.535399+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "spvanderhorst", @@ -180,7 +180,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.318405+00:00", + "inferred_at": "2026-01-09T19:51:08.535393+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_SUZAN-BOREEL.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_SUZAN-BOREEL.json index 9d02200f2d..d1b2e25d2f 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_SUZAN-BOREEL.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_SUZAN-BOREEL.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/suzanboreel_20251214T113228Z.json" ], - "modified_at": "2026-01-09T19:18:14.226116+00:00", + "modified_at": "2026-01-09T19:50:58.933931+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "suzanboreel", @@ -187,7 +187,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -236,7 +236,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.226110+00:00", + "inferred_at": "2026-01-09T19:50:58.933907+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_TEUKU-FADELI.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_TEUKU-FADELI.json index dfa779df2b..383928872b 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_TEUKU-FADELI.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_TEUKU-FADELI.json @@ -216,7 +216,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/teukurezafadeli_20251214T103725Z.json" ], - "modified_at": "2026-01-09T19:18:15.915837+00:00", + "modified_at": "2026-01-09T19:51:15.171841+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "teukurezafadeli", @@ -245,7 +245,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -294,7 +294,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.915834+00:00", + "inferred_at": "2026-01-09T19:51:15.171832+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_THOMASJAN-KOERHUIS.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_THOMASJAN-KOERHUIS.json index 73e54901b4..21e6574f4f 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_THOMASJAN-KOERHUIS.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_THOMASJAN-KOERHUIS.json @@ -178,7 +178,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thomas-jan-koerhuis-519359122_20251214T102842Z.json" ], - "modified_at": "2026-01-09T19:18:16.433557+00:00", + "modified_at": "2026-01-09T19:51:18.483144+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thomas-jan-koerhuis-519359122", @@ -207,7 +207,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -256,7 +256,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.433552+00:00", + "inferred_at": "2026-01-09T19:51:18.483137+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_TOM-GERRITSEN.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_TOM-GERRITSEN.json index 9fb9f9ebc6..ea72917869 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_TOM-GERRITSEN.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-LEI_XXXX_TOM-GERRITSEN.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tom-gerritsen-llm_20251214T112742Z.json" ], - "modified_at": "2026-01-09T19:18:11.231569+00:00", + "modified_at": "2026-01-09T19:50:46.692139+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tom-gerritsen-llm", @@ -127,7 +127,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.231558+00:00", + "inferred_at": "2026-01-09T19:50:46.692134+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-ROT_XXXX_JESPER-HESHUSIUS.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-ROT_XXXX_JESPER-HESHUSIUS.json index c25b847a2b..178163a774 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-ROT_XXXX_JESPER-HESHUSIUS.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-ROT_XXXX_JESPER-HESHUSIUS.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jesper-heshusius-291b76214_20251214T112944Z.json" ], - "modified_at": "2026-01-09T19:18:15.132983+00:00", + "modified_at": "2026-01-09T19:51:06.737719+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jesper-heshusius-291b76214", @@ -115,7 +115,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.132972+00:00", + "inferred_at": "2026-01-09T19:51:06.737714+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-ROT_XXXX_RABER-HAKIM.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-ROT_XXXX_RABER-HAKIM.json index 4a8b7e0f4b..51bbe28057 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-ROT_XXXX_RABER-HAKIM.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-ROT_XXXX_RABER-HAKIM.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/raber-hakim-2a2929228_20251214T112743Z.json" ], - "modified_at": "2026-01-09T19:18:15.294994+00:00", + "modified_at": "2026-01-09T19:51:08.423724+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "raber-hakim-2a2929228", @@ -152,7 +152,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.294991+00:00", + "inferred_at": "2026-01-09T19:51:08.423719+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_ALANY-R.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_ALANY-R.json index 8be0c67a9b..e7c412ea2a 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_ALANY-R.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_ALANY-R.json @@ -174,7 +174,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alany-reyes_20251214T112603Z.json" ], - "modified_at": "2026-01-09T19:18:15.468700+00:00", + "modified_at": "2026-01-09T19:51:11.038063+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alany-reyes", @@ -197,7 +197,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.468696+00:00", + "inferred_at": "2026-01-09T19:51:11.038058+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_CLAUDIA-DIJK.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_CLAUDIA-DIJK.json index 821ed655c2..fc79bb189b 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_CLAUDIA-DIJK.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_CLAUDIA-DIJK.json @@ -185,7 +185,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/claudia-van-dijk-a19ba913a_20251214T103032Z.json" ], - "modified_at": "2026-01-09T19:18:16.462259+00:00", + "modified_at": "2026-01-09T19:51:18.538321+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "claudia-van-dijk-a19ba913a", @@ -214,7 +214,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -263,7 +263,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.462255+00:00", + "inferred_at": "2026-01-09T19:51:18.538315+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_CORS-BRINKMAN.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_CORS-BRINKMAN.json index 2c0da7971b..d27c31b418 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_CORS-BRINKMAN.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_CORS-BRINKMAN.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/corsbrinkman_20251214T112945Z.json" ], - "modified_at": "2026-01-09T19:18:14.922913+00:00", + "modified_at": "2026-01-09T19:51:05.522331+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "corsbrinkman", @@ -149,7 +149,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.922908+00:00", + "inferred_at": "2026-01-09T19:51:05.522323+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_FJODOR-RIJSSELBERG.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_FJODOR-RIJSSELBERG.json index d1f156cfc1..f4ccee3bcb 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_FJODOR-RIJSSELBERG.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_FJODOR-RIJSSELBERG.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fjodor-van-rijsselberg-21b863186_20251214T110518Z.json" ], - "modified_at": "2026-01-09T19:18:15.522255+00:00", + "modified_at": "2026-01-09T19:51:11.793556+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fjodor-van-rijsselberg-21b863186", @@ -146,7 +146,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.522249+00:00", + "inferred_at": "2026-01-09T19:51:11.793503+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_ISABEL-CORTABITARTE.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_ISABEL-CORTABITARTE.json index 45f0881028..fe8f5f5d44 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_ISABEL-CORTABITARTE.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_ISABEL-CORTABITARTE.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/isabel-de-sena-cortabitarte-ab690296_20251214T111912Z.json" ], - "modified_at": "2026-01-09T19:18:14.039113+00:00", + "modified_at": "2026-01-09T19:50:58.538049+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "isabel-de-sena-cortabitarte-ab690296", @@ -115,7 +115,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.039109+00:00", + "inferred_at": "2026-01-09T19:50:58.538041+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_JORIS-KUIPER.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_JORIS-KUIPER.json index 68509aec64..17785fcc33 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_JORIS-KUIPER.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_JORIS-KUIPER.json @@ -279,7 +279,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joris-kuiper-3637a0175_20251214T102736Z.json" ], - "modified_at": "2026-01-09T19:18:15.550717+00:00", + "modified_at": "2026-01-09T19:50:46.890470+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joris-kuiper-3637a0175", @@ -317,7 +317,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -366,7 +366,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.550681+00:00", + "inferred_at": "2026-01-09T19:50:46.890458+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_LAURA-NIJSSEN.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_LAURA-NIJSSEN.json index ddfc377fff..26e8897f1c 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_LAURA-NIJSSEN.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_LAURA-NIJSSEN.json @@ -228,7 +228,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laura-nijssen_20251214T103008Z.json" ], - "modified_at": "2026-01-09T19:18:18.944215+00:00", + "modified_at": "2026-01-09T19:51:29.955685+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laura-nijssen", @@ -257,7 +257,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -306,7 +306,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.944203+00:00", + "inferred_at": "2026-01-09T19:51:29.955676+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_MARIEKE-MOOLENAAR.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_MARIEKE-MOOLENAAR.json index 5e81324af5..c26478de1b 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_MARIEKE-MOOLENAAR.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_MARIEKE-MOOLENAAR.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mariekemoolenaar_20251214T113246Z.json" ], - "modified_at": "2026-01-09T19:18:15.636169+00:00", + "modified_at": "2026-01-09T19:51:13.529873+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mariekemoolenaar", @@ -179,7 +179,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.636162+00:00", + "inferred_at": "2026-01-09T19:51:13.529865+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_MATTHIJS-BAART.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_MATTHIJS-BAART.json index b123cd0fba..e356817df6 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_MATTHIJS-BAART.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_MATTHIJS-BAART.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/matthijsbaart_20251214T112815Z.json" ], - "modified_at": "2026-01-09T19:18:16.760629+00:00", + "modified_at": "2026-01-09T19:51:10.678518+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "matthijsbaart", @@ -174,7 +174,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.760621+00:00", + "inferred_at": "2026-01-09T19:51:10.678510+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_MATTHIJS-HERWEIJER.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_MATTHIJS-HERWEIJER.json index 4bdb2df353..2b8d853289 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_MATTHIJS-HERWEIJER.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_MATTHIJS-HERWEIJER.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/matthijs-herweijer-90372334_20251214T103220Z.json" ], - "modified_at": "2026-01-09T19:18:13.034365+00:00", + "modified_at": "2026-01-09T19:50:50.622997+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "matthijs-herweijer-90372334", @@ -167,7 +167,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.034358+00:00", + "inferred_at": "2026-01-09T19:50:50.622987+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_OLIVIER-MEULEN.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_OLIVIER-MEULEN.json index de6bdc7990..7192ef724c 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_OLIVIER-MEULEN.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_OLIVIER-MEULEN.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/olivier-ter-meulen-25bb76113_20251214T102745Z.json" ], - "modified_at": "2026-01-09T19:18:12.411541+00:00", + "modified_at": "2026-01-09T19:50:48.477945+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "olivier-ter-meulen-25bb76113", @@ -160,7 +160,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.411525+00:00", + "inferred_at": "2026-01-09T19:50:48.477937+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_ROSALIE-WERD.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_ROSALIE-WERD.json index 06db11fa63..bef536b935 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_ROSALIE-WERD.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_ROSALIE-WERD.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rosalie-de-werd-9a6538294_20251214T103334Z.json" ], - "modified_at": "2026-01-09T19:18:17.309782+00:00", + "modified_at": "2026-01-09T19:51:06.352324+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rosalie-de-werd-9a6538294", @@ -181,7 +181,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.309773+00:00", + "inferred_at": "2026-01-09T19:51:06.352321+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_SADE-DEVILEE.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_SADE-DEVILEE.json index 6a27e70ce5..3da2c83991 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_SADE-DEVILEE.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_SADE-DEVILEE.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sade-devilee-a3243417b_20251214T113018Z.json" ], - "modified_at": "2026-01-09T19:18:15.028199+00:00", + "modified_at": "2026-01-09T19:51:24.113097+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sade-devilee-a3243417b", @@ -153,7 +153,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.028193+00:00", + "inferred_at": "2026-01-09T19:51:24.113092+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_TESSA-STADEN.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_TESSA-STADEN.json index 791a069ed4..d38c94a327 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_TESSA-STADEN.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-TH_XXXX_TESSA-STADEN.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tessa-van-staden-a68807182_20251214T103320Z.json" ], - "modified_at": "2026-01-09T19:18:18.438608+00:00", + "modified_at": "2026-01-09T19:51:29.322981+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tessa-van-staden-a68807182", @@ -137,7 +137,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.438594+00:00", + "inferred_at": "2026-01-09T19:51:29.322977+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-ZOE_XXXX_KYRA-M.json b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-ZOE_XXXX_KYRA-M.json index 00a3943c68..79a83426d4 100644 --- a/data/person/ID_NL-ZH-LEI_199X_NL-ZH-ZOE_XXXX_KYRA-M.json +++ b/data/person/ID_NL-ZH-LEI_199X_NL-ZH-ZOE_XXXX_KYRA-M.json @@ -178,7 +178,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kyracmac_20251214T103238Z.json" ], - "modified_at": "2026-01-09T19:18:13.991208+00:00", + "modified_at": "2026-01-09T19:50:57.779742+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kyracmac", @@ -201,7 +201,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +242,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.991204+00:00", + "inferred_at": "2026-01-09T19:50:57.779732+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_ALEC-RIJSEWIJK.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_ALEC-RIJSEWIJK.json index 8acf9ecbb4..dee0f56948 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_ALEC-RIJSEWIJK.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_ALEC-RIJSEWIJK.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alec-van-rijsewijk-233883173_20251214T111347Z.json" ], - "modified_at": "2026-01-09T19:18:14.354257+00:00", + "modified_at": "2026-01-09T19:51:00.921894+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alec-van-rijsewijk-233883173", @@ -148,7 +148,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.352185+00:00", + "inferred_at": "2026-01-09T19:51:00.918566+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_AMY-KOOIJ.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_AMY-KOOIJ.json index ee5ccfcce0..4569fb96db 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_AMY-KOOIJ.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_AMY-KOOIJ.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amy-kooij-9194bb44_20251214T113417Z.json" ], - "modified_at": "2026-01-09T19:18:14.268700+00:00", + "modified_at": "2026-01-09T19:50:59.786255+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "amy-kooij-9194bb44", @@ -170,7 +170,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.266880+00:00", + "inferred_at": "2026-01-09T19:50:59.783612+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_CAITLIN-BOER.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_CAITLIN-BOER.json index 12b10082ca..02cc9f83c1 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_CAITLIN-BOER.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_CAITLIN-BOER.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/caitlin-de-boer-8160452ab_20251214T103249Z.json" ], - "modified_at": "2026-01-09T19:18:15.344947+00:00", + "modified_at": "2026-01-09T19:51:08.597484+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "caitlin-de-boer-8160452ab", @@ -155,7 +155,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.336196+00:00", + "inferred_at": "2026-01-09T19:51:08.591805+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_CORNELIA-SANDIKCILARLOOIJE.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_CORNELIA-SANDIKCILARLOOIJE.json index f386ff4bae..4cc971c9c5 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_CORNELIA-SANDIKCILARLOOIJE.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_CORNELIA-SANDIKCILARLOOIJE.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cornelia-sandikcilar-looije-317187105_20251214T102911Z.json" ], - "modified_at": "2026-01-09T19:18:13.494671+00:00", + "modified_at": "2026-01-09T19:50:54.539363+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cornelia-sandikcilar-looije-317187105", @@ -154,7 +154,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.492424+00:00", + "inferred_at": "2026-01-09T19:50:54.537268+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_DAAN-BEERS.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_DAAN-BEERS.json index 2b49ea528b..e46f6cfb22 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_DAAN-BEERS.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_DAAN-BEERS.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daan-beers-566201136_20251214T112406Z.json" ], - "modified_at": "2026-01-09T19:18:14.769771+00:00", + "modified_at": "2026-01-09T19:51:04.056230+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daan-beers-566201136", @@ -157,7 +157,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.767835+00:00", + "inferred_at": "2026-01-09T19:51:04.054176+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_DAVID-STOLWIJK.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_DAVID-STOLWIJK.json index a492ec70b2..c8550ac324 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_DAVID-STOLWIJK.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_DAVID-STOLWIJK.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/david-stolwijk-27024120_20251214T103053Z.json" ], - "modified_at": "2026-01-09T19:18:13.282877+00:00", + "modified_at": "2026-01-09T19:50:53.739670+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "david-stolwijk-27024120", @@ -124,7 +124,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.281022+00:00", + "inferred_at": "2026-01-09T19:50:53.736689+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_FATIHA-ABBACH.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_FATIHA-ABBACH.json index a44a88b797..7fd4ad994e 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_FATIHA-ABBACH.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_FATIHA-ABBACH.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fatiha-abbach_20251214T102900Z.json" ], - "modified_at": "2026-01-09T19:18:13.987794+00:00", + "modified_at": "2026-01-09T19:51:00.085855+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fatiha-abbach", @@ -139,7 +139,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.985857+00:00", + "inferred_at": "2026-01-09T19:51:00.083625+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_HANNA-RUIZ.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_HANNA-RUIZ.json index 7c457815fb..f737572fb2 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_HANNA-RUIZ.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_HANNA-RUIZ.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hanna-ruiz-242090198_20251214T113017Z.json" ], - "modified_at": "2026-01-09T19:18:13.366654+00:00", + "modified_at": "2026-01-09T19:50:53.937110+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hanna-ruiz-242090198", @@ -162,7 +162,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.362824+00:00", + "inferred_at": "2026-01-09T19:50:53.924447+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_JOEL-ANTONIE.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_JOEL-ANTONIE.json index 7fb8387d3e..e2f120fa4c 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_JOEL-ANTONIE.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_JOEL-ANTONIE.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joelantonie_20251214T102751Z.json" ], - "modified_at": "2026-01-09T19:18:13.068224+00:00", + "modified_at": "2026-01-09T19:50:50.960108+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joelantonie", @@ -189,7 +189,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.066373+00:00", + "inferred_at": "2026-01-09T19:50:50.957995+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_KELLY-SCHENK.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_KELLY-SCHENK.json index ac9c2e51ed..f028fc4467 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_KELLY-SCHENK.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_KELLY-SCHENK.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/schenkkelly_20251214T111507Z.json" ], - "modified_at": "2026-01-09T19:18:14.851031+00:00", + "modified_at": "2026-01-09T19:51:05.133345+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "schenkkelly", @@ -166,7 +166,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.846850+00:00", + "inferred_at": "2026-01-09T19:51:05.119555+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_LISANNE-NOORDZIJ.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_LISANNE-NOORDZIJ.json index 6fe1c650d7..3d0952980b 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_LISANNE-NOORDZIJ.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_LISANNE-NOORDZIJ.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lisanne-noordzij_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:12.724124+00:00", + "modified_at": "2026-01-09T19:50:48.669290+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lisanne-noordzij", @@ -180,7 +180,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.721119+00:00", + "inferred_at": "2026-01-09T19:50:48.667287+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_LOUISE-DORTMOND.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_LOUISE-DORTMOND.json index 5d3ca55e50..745d3beeff 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_LOUISE-DORTMOND.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_LOUISE-DORTMOND.json @@ -189,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/louise-dortmond-2a2288121_20251214T103116Z.json" ], - "modified_at": "2026-01-09T19:18:14.889380+00:00", + "modified_at": "2026-01-09T19:51:05.331214+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "louise-dortmond-2a2288121", @@ -211,7 +211,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.887389+00:00", + "inferred_at": "2026-01-09T19:51:05.324195+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_MAARTEN-MANSE.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_MAARTEN-MANSE.json index 49868aadf5..7c550ded1e 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_MAARTEN-MANSE.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_MAARTEN-MANSE.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maarten-manse-315797104_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:13.086426+00:00", + "modified_at": "2026-01-09T19:50:51.067610+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maarten-manse-315797104", @@ -129,7 +129,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.084119+00:00", + "inferred_at": "2026-01-09T19:50:51.059815+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_MARIJN-WEYTINGH.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_MARIJN-WEYTINGH.json index 921705160f..69ae8e66eb 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_MARIJN-WEYTINGH.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_MARIJN-WEYTINGH.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marijn-weytingh-0464b5297_20251214T103344Z.json" ], - "modified_at": "2026-01-09T19:18:13.666031+00:00", + "modified_at": "2026-01-09T19:51:06.357415+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marijn-weytingh-0464b5297", @@ -145,7 +145,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.664118+00:00", + "inferred_at": "2026-01-09T19:51:06.354837+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_MEREL-THIJSSEN.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_MEREL-THIJSSEN.json index 4be6f494b0..61d3ac2b8b 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_MEREL-THIJSSEN.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_MEREL-THIJSSEN.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merel-thijssen-501932107_20251214T103134Z.json" ], - "modified_at": "2026-01-09T19:18:15.568560+00:00", + "modified_at": "2026-01-09T19:51:12.116506+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merel-thijssen-501932107", @@ -135,7 +135,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.566223+00:00", + "inferred_at": "2026-01-09T19:51:12.114368+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_NICK-WARMERDAM.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_NICK-WARMERDAM.json index 0ff4b6ff14..e02eb2f105 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_NICK-WARMERDAM.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_NICK-WARMERDAM.json @@ -157,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nick-warmerdam-43031365_20251214T112356Z.json" ], - "modified_at": "2026-01-09T19:18:16.840553+00:00", + "modified_at": "2026-01-09T19:51:22.268157+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nick-warmerdam-43031365", @@ -185,7 +185,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.838576+00:00", + "inferred_at": "2026-01-09T19:51:22.266356+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_ROSA-KONING.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_ROSA-KONING.json index 335015eb2b..3951e85460 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_ROSA-KONING.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_ROSA-KONING.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rosa-de-koning-45907911a_20251214T103015Z.json" ], - "modified_at": "2026-01-09T19:18:14.050710+00:00", + "modified_at": "2026-01-09T19:51:21.509515+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rosa-de-koning-45907911a", @@ -151,7 +151,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.048858+00:00", + "inferred_at": "2026-01-09T19:51:21.507651+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_SIMONE-VUURPIJL.json b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_SIMONE-VUURPIJL.json index 202fee0296..9614d06ee7 100644 --- a/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_SIMONE-VUURPIJL.json +++ b/data/person/ID_NL-ZH-LEI_199X_XX-XX-XXX_XXXX_SIMONE-VUURPIJL.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/simone-vuurpijl-0b432b13b_20251214T103222Z.json" ], - "modified_at": "2026-01-09T19:18:17.703560+00:00", + "modified_at": "2026-01-09T19:51:28.553349+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "simone-vuurpijl-0b432b13b", @@ -179,7 +179,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.697667+00:00", + "inferred_at": "2026-01-09T19:51:28.551494+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_NL-GE-ZUT_XXXX_SANDER-ERADES.json b/data/person/ID_NL-ZH-LEI_200X_NL-GE-ZUT_XXXX_SANDER-ERADES.json index 581ef5900b..3b285b2391 100644 --- a/data/person/ID_NL-ZH-LEI_200X_NL-GE-ZUT_XXXX_SANDER-ERADES.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-GE-ZUT_XXXX_SANDER-ERADES.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sander-erades-31586728a_20251214T110605Z.json" ], - "modified_at": "2026-01-09T19:18:13.331732+00:00", + "modified_at": "2026-01-09T19:50:53.886166+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sander-erades-31586728a", @@ -146,7 +146,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.331726+00:00", + "inferred_at": "2026-01-09T19:50:53.886161+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_DENISE-SCHALKWIJK.json b/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_DENISE-SCHALKWIJK.json index 7072eccd20..8af2281b63 100644 --- a/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_DENISE-SCHALKWIJK.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_DENISE-SCHALKWIJK.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/denise-van-schalkwijk-846934234_20251214T110129Z.json" ], - "modified_at": "2026-01-09T19:18:13.721636+00:00", + "modified_at": "2026-01-09T19:50:55.992163+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "denise-van-schalkwijk-846934234", @@ -178,7 +178,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.721633+00:00", + "inferred_at": "2026-01-09T19:50:55.992157+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_KAI-TJONGAYONG.json b/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_KAI-TJONGAYONG.json index 19a9537c29..d96c3f28df 100644 --- a/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_KAI-TJONGAYONG.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_KAI-TJONGAYONG.json @@ -261,7 +261,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kai-tjong-ayong-9683b3235_20251214T112550Z.json" ], - "modified_at": "2026-01-09T19:18:15.259734+00:00", + "modified_at": "2026-01-09T19:51:07.643143+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kai-tjong-ayong-9683b3235", @@ -290,7 +290,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -339,7 +339,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.259731+00:00", + "inferred_at": "2026-01-09T19:51:07.643134+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_LEA-HAASTER.json b/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_LEA-HAASTER.json index 7a14bff68a..12e686340b 100644 --- a/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_LEA-HAASTER.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_LEA-HAASTER.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lea-van-haaster-b44145227_20251214T110050Z.json" ], - "modified_at": "2026-01-09T19:18:18.186680+00:00", + "modified_at": "2026-01-09T19:51:29.006173+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lea-van-haaster-b44145227", @@ -143,7 +143,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.186675+00:00", + "inferred_at": "2026-01-09T19:51:29.006168+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_PUCK-BRANTJES.json b/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_PUCK-BRANTJES.json index 24a19ac12c..3aadd1670b 100644 --- a/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_PUCK-BRANTJES.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-NH-AMS_XXXX_PUCK-BRANTJES.json @@ -174,7 +174,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/puck-brantjes-153761194_20251214T102739Z.json" ], - "modified_at": "2026-01-09T19:18:15.620436+00:00", + "modified_at": "2026-01-09T19:51:12.718794+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "puck-brantjes-153761194", @@ -203,7 +203,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.620432+00:00", + "inferred_at": "2026-01-09T19:51:12.718789+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_NL-UT-UTR_XXXX_IRIS-BRANDTS.json b/data/person/ID_NL-ZH-LEI_200X_NL-UT-UTR_XXXX_IRIS-BRANDTS.json similarity index 60% rename from data/person/ID_XX-XX-XXX_200X_NL-UT-UTR_XXXX_IRIS-BRANDTS.json rename to data/person/ID_NL-ZH-LEI_200X_NL-UT-UTR_XXXX_IRIS-BRANDTS.json index ba4f838433..b165536cb3 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-UT-UTR_XXXX_IRIS-BRANDTS.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-UT-UTR_XXXX_IRIS-BRANDTS.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_200X_NL-UT-UTR_XXXX_IRIS-BRANDTS", + "ppid": "ID_NL-ZH-LEI_200X_NL-UT-UTR_XXXX_IRIS-BRANDTS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-ZH-LEI", "first_date": "200X", "last_location": "NL-UT-UTR", "last_date": "XXXX", @@ -12,7 +12,8 @@ "BRANDTS" ], "last_location_source": "inferred_current_settlement", - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Iris Brandts", @@ -76,7 +77,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/iris-brandts-b9457b150_20251214T112346Z.json" ], - "modified_at": "2026-01-09T19:18:15.026413+00:00", + "modified_at": "2026-01-09T19:51:03.740932+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "iris-brandts-b9457b150", @@ -98,6 +99,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_NL-UT-UTR_XXXX_IRIS-BRANDTS", + "new_ppid": "ID_NL-ZH-LEI_200X_NL-UT-UTR_XXXX_IRIS-BRANDTS", + "changed_at": "2026-01-09T19:51:03.740930+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -106,7 +117,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -147,7 +158,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.026391+00:00", + "inferred_at": "2026-01-09T19:51:03.738774+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Leiderdorp", + "formatted": "NL-ZH-LEI", + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "LEI", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "LOI", + "date_range": "2021 - 2022 • 1 year", + "degree": "" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "LOI", + "mapping_result": "Leiderdorp, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Leiderdorp, Netherlands", + "result": { + "geonames_id": 2751771, + "geonames_name": "Leiderdorp", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.15833, + "longitude": 4.52917 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "LEI" + }, + "result": "NL-ZH-LEI" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2751771, + "geonames_name": "Leiderdorp", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 52.15833, + "longitude": 4.52917 + }, + "inferred_at": "2026-01-09T19:51:03.740922+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_AMAAL-SALIE.json b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_AMAAL-SALIE.json index c43f72419e..0356689c6d 100644 --- a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_AMAAL-SALIE.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_AMAAL-SALIE.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amaal-salie-899322155_20251214T103737Z.json" ], - "modified_at": "2026-01-09T19:18:17.287646+00:00", + "modified_at": "2026-01-09T19:51:25.487484+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "amaal-salie-899322155", @@ -194,7 +194,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.287641+00:00", + "inferred_at": "2026-01-09T19:51:25.487480+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_FONS-HOOFT.json b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_FONS-HOOFT.json index 664bf33e63..159ff76067 100644 --- a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_FONS-HOOFT.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_FONS-HOOFT.json @@ -160,7 +160,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fons-hooft-69114a20b_20251214T103210Z.json" ], - "modified_at": "2026-01-09T19:18:15.467146+00:00", + "modified_at": "2026-01-09T19:51:11.030344+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fons-hooft-69114a20b", @@ -189,7 +189,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.467142+00:00", + "inferred_at": "2026-01-09T19:51:11.030337+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_MARRE-WESTERBEEK.json b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_MARRE-WESTERBEEK.json index 64d6fb1314..d3100be60a 100644 --- a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_MARRE-WESTERBEEK.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_MARRE-WESTERBEEK.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marre-westerbeek-333660225_20251214T113357Z.json" ], - "modified_at": "2026-01-09T19:18:15.409808+00:00", + "modified_at": "2026-01-09T19:51:08.789326+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marre-westerbeek-333660225", @@ -181,7 +181,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.409802+00:00", + "inferred_at": "2026-01-09T19:51:08.789319+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_RUQAYA-ZAKI.json b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_RUQAYA-ZAKI.json index afb9522717..9329932b20 100644 --- a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_RUQAYA-ZAKI.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-LEI_XXXX_RUQAYA-ZAKI.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ruqaya-zaki_20251214T112826Z.json" ], - "modified_at": "2026-01-09T19:18:17.900698+00:00", + "modified_at": "2026-01-09T19:51:28.838178+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ruqaya-zaki", @@ -171,7 +171,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.900692+00:00", + "inferred_at": "2026-01-09T19:51:28.838173+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-NAD_XXXX_REBECCA-PRINSEN.json b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-NAD_XXXX_REBECCA-PRINSEN.json index 48e654bc16..e93551e1ae 100644 --- a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-NAD_XXXX_REBECCA-PRINSEN.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-NAD_XXXX_REBECCA-PRINSEN.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rebecca-prinsen-013bb9266_20251214T112857Z.json" ], - "modified_at": "2026-01-09T19:18:16.089077+00:00", + "modified_at": "2026-01-09T19:51:17.444553+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rebecca-prinsen-013bb9266", @@ -133,7 +133,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.089072+00:00", + "inferred_at": "2026-01-09T19:51:17.444546+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-ROT_XXXX_JULIA-BLOMBERG.json b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-ROT_XXXX_JULIA-BLOMBERG.json index 04c151b3b2..4e25eea610 100644 --- a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-ROT_XXXX_JULIA-BLOMBERG.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-ROT_XXXX_JULIA-BLOMBERG.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/julia-blomberg-5b18b8255_20251214T113255Z.json" ], - "modified_at": "2026-01-09T19:18:14.811199+00:00", + "modified_at": "2026-01-09T19:51:04.561285+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "julia-blomberg-5b18b8255", @@ -131,7 +131,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.811184+00:00", + "inferred_at": "2026-01-09T19:51:04.561268+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-TH_XXXX_AMIN-DHAOU.json b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-TH_XXXX_AMIN-DHAOU.json index ed17de44c7..6da27c367e 100644 --- a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-TH_XXXX_AMIN-DHAOU.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-TH_XXXX_AMIN-DHAOU.json @@ -163,7 +163,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aminbendhaou_20251214T103223Z.json" ], - "modified_at": "2026-01-09T19:18:13.683829+00:00", + "modified_at": "2026-01-09T19:50:55.430167+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aminbendhaou", @@ -192,7 +192,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.683823+00:00", + "inferred_at": "2026-01-09T19:50:55.430162+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-TH_XXXX_JORIS-VULTO.json b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-TH_XXXX_JORIS-VULTO.json index 7647aa7996..88246f6556 100644 --- a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-TH_XXXX_JORIS-VULTO.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-TH_XXXX_JORIS-VULTO.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joris-vulto-5790831a3_20251214T103146Z.json" ], - "modified_at": "2026-01-09T19:18:16.036245+00:00", + "modified_at": "2026-01-09T19:51:16.725073+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joris-vulto-5790831a3", @@ -132,7 +132,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.036242+00:00", + "inferred_at": "2026-01-09T19:51:16.725066+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-TH_XXXX_MARIA-POLUSHKINA.json b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-TH_XXXX_MARIA-POLUSHKINA.json index 9032b61ae1..003d4bca72 100644 --- a/data/person/ID_NL-ZH-LEI_200X_NL-ZH-TH_XXXX_MARIA-POLUSHKINA.json +++ b/data/person/ID_NL-ZH-LEI_200X_NL-ZH-TH_XXXX_MARIA-POLUSHKINA.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maria-polushkina-06a559237_20251214T103037Z.json" ], - "modified_at": "2026-01-09T19:18:15.564773+00:00", + "modified_at": "2026-01-09T19:51:12.112188+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maria-polushkina-06a559237", @@ -172,7 +172,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.564766+00:00", + "inferred_at": "2026-01-09T19:51:12.112181+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_XX-XX-XXX_XXXX_ANNE-BERGEN.json b/data/person/ID_NL-ZH-LEI_200X_XX-XX-XXX_XXXX_ANNE-BERGEN.json index a6f19fd32d..9768d7a6e4 100644 --- a/data/person/ID_NL-ZH-LEI_200X_XX-XX-XXX_XXXX_ANNE-BERGEN.json +++ b/data/person/ID_NL-ZH-LEI_200X_XX-XX-XXX_XXXX_ANNE-BERGEN.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-bergen-6105a0165_20251214T112617Z.json" ], - "modified_at": "2026-01-09T19:18:15.548424+00:00", + "modified_at": "2026-01-09T19:51:12.034405+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-bergen-6105a0165", @@ -124,7 +124,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.546373+00:00", + "inferred_at": "2026-01-09T19:51:12.020225+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-LEI_200X_XX-XX-XXX_XXXX_SUZE-WARMERDAM.json b/data/person/ID_NL-ZH-LEI_200X_XX-XX-XXX_XXXX_SUZE-WARMERDAM.json index 12dfc8b6c3..f95d7cd689 100644 --- a/data/person/ID_NL-ZH-LEI_200X_XX-XX-XXX_XXXX_SUZE-WARMERDAM.json +++ b/data/person/ID_NL-ZH-LEI_200X_XX-XX-XXX_XXXX_SUZE-WARMERDAM.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/suze-warmerdam-5a963a22b_20251214T102927Z.json" ], - "modified_at": "2026-01-09T19:18:11.559761+00:00", + "modified_at": "2026-01-09T19:50:47.185191+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "suze-warmerdam-5a963a22b", @@ -155,7 +155,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.556443+00:00", + "inferred_at": "2026-01-09T19:50:47.180322+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-MAA_197X_NL-ZH-DEL_XXXX_BIANCA-VLIET.json b/data/person/ID_NL-ZH-MAA_197X_NL-ZH-DEL_XXXX_BIANCA-VLIET.json index 079651e1cb..caca93054d 100644 --- a/data/person/ID_NL-ZH-MAA_197X_NL-ZH-DEL_XXXX_BIANCA-VLIET.json +++ b/data/person/ID_NL-ZH-MAA_197X_NL-ZH-DEL_XXXX_BIANCA-VLIET.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bianca-van-vliet-a4bb8425_20251214T104106Z.json" ], - "modified_at": "2026-01-09T19:18:16.198942+00:00", + "modified_at": "2026-01-09T19:51:18.292533+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bianca-van-vliet-a4bb8425", @@ -149,7 +149,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.198938+00:00", + "inferred_at": "2026-01-09T19:51:18.292527+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-MAA_199X_NL-NB-EIN_XXXX_GHANISHTHA-BHATTI.json b/data/person/ID_NL-ZH-MAA_199X_NL-NB-EIN_XXXX_GHANISHTHA-BHATTI.json index 0c55b35d44..c552def109 100644 --- a/data/person/ID_NL-ZH-MAA_199X_NL-NB-EIN_XXXX_GHANISHTHA-BHATTI.json +++ b/data/person/ID_NL-ZH-MAA_199X_NL-NB-EIN_XXXX_GHANISHTHA-BHATTI.json @@ -198,7 +198,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ghanishtha-bhatti-748b21164_20251214T111127Z.json" ], - "modified_at": "2026-01-09T19:18:15.666224+00:00", + "modified_at": "2026-01-09T19:51:13.320004+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ghanishtha-bhatti-748b21164", @@ -227,7 +227,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -276,7 +276,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.666220+00:00", + "inferred_at": "2026-01-09T19:51:13.319975+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-RIJ_196X_XX-XX-XXX_XXXX_HERMAN-PLAS.json b/data/person/ID_NL-ZH-RIJ_196X_XX-XX-XXX_XXXX_HERMAN-PLAS.json index 99976b8150..8a39a530a8 100644 --- a/data/person/ID_NL-ZH-RIJ_196X_XX-XX-XXX_XXXX_HERMAN-PLAS.json +++ b/data/person/ID_NL-ZH-RIJ_196X_XX-XX-XXX_XXXX_HERMAN-PLAS.json @@ -217,7 +217,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hermanvanderplas_20251214T103010Z.json" ], - "modified_at": "2026-01-09T19:18:17.953116+00:00", + "modified_at": "2026-01-09T19:51:28.863422+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hermanvanderplas", @@ -245,7 +245,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -294,7 +294,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.950336+00:00", + "inferred_at": "2026-01-09T19:51:28.861473+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROE_199X_NL-ZH-TH_XXXX_DANIELLA-KERN.json b/data/person/ID_NL-ZH-ROE_199X_NL-ZH-TH_XXXX_DANIELLA-KERN.json index 99984c6ff2..6b48623f64 100644 --- a/data/person/ID_NL-ZH-ROE_199X_NL-ZH-TH_XXXX_DANIELLA-KERN.json +++ b/data/person/ID_NL-ZH-ROE_199X_NL-ZH-TH_XXXX_DANIELLA-KERN.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daniella-kern-84b759133_20251214T112710Z.json" ], - "modified_at": "2026-01-09T19:18:13.381024+00:00", + "modified_at": "2026-01-09T19:50:54.001301+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daniella-kern-84b759133", @@ -184,7 +184,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.381017+00:00", + "inferred_at": "2026-01-09T19:50:54.001294+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_194X_NL-GE-LOC_XXXX_NEIL-WALLACE.json b/data/person/ID_NL-ZH-ROT_194X_NL-GE-LOC_XXXX_NEIL-WALLACE.json index 7cb8bd3aeb..f85c34ae06 100644 --- a/data/person/ID_NL-ZH-ROT_194X_NL-GE-LOC_XXXX_NEIL-WALLACE.json +++ b/data/person/ID_NL-ZH-ROT_194X_NL-GE-LOC_XXXX_NEIL-WALLACE.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/neil-wallace-9237247_20251214T112519Z.json" ], - "modified_at": "2026-01-09T19:18:14.851859+00:00", + "modified_at": "2026-01-09T19:50:54.097798+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "neil-wallace-9237247", @@ -192,7 +192,7 @@ "primary_rationale": "1948 is in 194X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1948 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:14.851851+00:00", + "inferred_at": "2026-01-09T19:50:54.097793+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_195X_XX-XX-XXX_XXXX_JACQUELINE-K.json b/data/person/ID_NL-ZH-ROT_195X_XX-XX-XXX_XXXX_JACQUELINE-K.json index f068ec528e..11590c488a 100644 --- a/data/person/ID_NL-ZH-ROT_195X_XX-XX-XXX_XXXX_JACQUELINE-K.json +++ b/data/person/ID_NL-ZH-ROT_195X_XX-XX-XXX_XXXX_JACQUELINE-K.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jacqueline-k-b3061412_20251214T112218Z.json" ], - "modified_at": "2026-01-09T19:18:16.086582+00:00", + "modified_at": "2026-01-09T19:51:15.068221+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jacqueline-k-b3061412", @@ -137,7 +137,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.084648+00:00", + "inferred_at": "2026-01-09T19:51:15.065924+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_195X_XX-XX-XXX_XXXX_RENE-BROUWER.json b/data/person/ID_NL-ZH-ROT_195X_XX-XX-XXX_XXXX_RENE-BROUWER.json index 344457f80a..046262aaa4 100644 --- a/data/person/ID_NL-ZH-ROT_195X_XX-XX-XXX_XXXX_RENE-BROUWER.json +++ b/data/person/ID_NL-ZH-ROT_195X_XX-XX-XXX_XXXX_RENE-BROUWER.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rene-brouwer-413a1289_20251213T010000Z.json" ], - "modified_at": "2026-01-09T19:18:13.479568+00:00", + "modified_at": "2026-01-09T19:50:54.525768+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rene-brouwer-413a1289", @@ -148,7 +148,7 @@ "primary_rationale": "1950 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1950 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:13.476476+00:00", + "inferred_at": "2026-01-09T19:50:54.523494+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_196X_NL-NB-BRE_XXXX_THIJS-HEIJDEN.json b/data/person/ID_NL-ZH-ROT_196X_NL-NB-BRE_XXXX_THIJS-HEIJDEN.json index ee487d5852..a916d742ae 100644 --- a/data/person/ID_NL-ZH-ROT_196X_NL-NB-BRE_XXXX_THIJS-HEIJDEN.json +++ b/data/person/ID_NL-ZH-ROT_196X_NL-NB-BRE_XXXX_THIJS-HEIJDEN.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thijs-van-der-heijden-6492141a_20251214T112839Z.json" ], - "modified_at": "2026-01-09T19:18:14.296282+00:00", + "modified_at": "2026-01-09T19:50:50.590189+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thijs-van-der-heijden-6492141a", @@ -189,7 +189,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.296273+00:00", + "inferred_at": "2026-01-09T19:50:50.590181+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_196X_NL-NB-OIS_XXXX_FRANS-PEGT.json b/data/person/ID_NL-ZH-ROT_196X_NL-NB-OIS_XXXX_FRANS-PEGT.json index 855963211a..16fbf0e398 100644 --- a/data/person/ID_NL-ZH-ROT_196X_NL-NB-OIS_XXXX_FRANS-PEGT.json +++ b/data/person/ID_NL-ZH-ROT_196X_NL-NB-OIS_XXXX_FRANS-PEGT.json @@ -159,7 +159,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/franspegt_20251214T111615Z.json" ], - "modified_at": "2026-01-09T19:18:17.943112+00:00", + "modified_at": "2026-01-09T19:51:28.857809+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "franspegt", @@ -188,7 +188,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -237,7 +237,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.943104+00:00", + "inferred_at": "2026-01-09T19:51:28.857803+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_196X_NL-NH-SCH_XXXX_PATRICK-MIL.json b/data/person/ID_NL-ZH-ROT_196X_NL-NH-SCH_XXXX_PATRICK-MIL.json index ec6887ff2c..c99c577804 100644 --- a/data/person/ID_NL-ZH-ROT_196X_NL-NH-SCH_XXXX_PATRICK-MIL.json +++ b/data/person/ID_NL-ZH-ROT_196X_NL-NH-SCH_XXXX_PATRICK-MIL.json @@ -319,7 +319,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/patrick-van-mil-a2bb9ab_20251214T112459Z.json" ], - "modified_at": "2026-01-09T19:18:11.437011+00:00", + "modified_at": "2026-01-09T19:50:46.887321+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "patrick-van-mil-a2bb9ab", @@ -348,7 +348,7 @@ "primary_rationale": "1966 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -397,7 +397,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1966 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.437002+00:00", + "inferred_at": "2026-01-09T19:50:46.887303+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_196X_NL-UT-AME_XXXX_ROBERT-WICHINK.json b/data/person/ID_NL-ZH-ROT_196X_NL-UT-AME_XXXX_ROBERT-WICHINK.json index 265555a402..7e14c71277 100644 --- a/data/person/ID_NL-ZH-ROT_196X_NL-UT-AME_XXXX_ROBERT-WICHINK.json +++ b/data/person/ID_NL-ZH-ROT_196X_NL-UT-AME_XXXX_ROBERT-WICHINK.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robert-wichink-75607261_20251214T102857Z.json" ], - "modified_at": "2026-01-09T19:18:15.553430+00:00", + "modified_at": "2026-01-09T19:50:48.651879+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robert-wichink-75607261", @@ -179,7 +179,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.553423+00:00", + "inferred_at": "2026-01-09T19:50:48.651874+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_196X_NL-ZH-ROT_XXXX_DIRK-OOSTHOEK.json b/data/person/ID_NL-ZH-ROT_196X_NL-ZH-ROT_XXXX_DIRK-OOSTHOEK.json index c6c9e9ba41..d52b8772e6 100644 --- a/data/person/ID_NL-ZH-ROT_196X_NL-ZH-ROT_XXXX_DIRK-OOSTHOEK.json +++ b/data/person/ID_NL-ZH-ROT_196X_NL-ZH-ROT_XXXX_DIRK-OOSTHOEK.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dirk-oosthoek-762333258_20251214T112114Z.json" ], - "modified_at": "2026-01-09T19:18:13.239000+00:00", + "modified_at": "2026-01-09T19:50:53.694566+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dirk-oosthoek-762333258", @@ -193,7 +193,7 @@ "primary_rationale": "1964 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +242,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1964 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.238995+00:00", + "inferred_at": "2026-01-09T19:50:53.694561+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_196X_NL-ZH-TH_XXXX_WAMPIE-LIBON.json b/data/person/ID_NL-ZH-ROT_196X_NL-ZH-TH_XXXX_WAMPIE-LIBON.json index 8549fde020..09a80879ea 100644 --- a/data/person/ID_NL-ZH-ROT_196X_NL-ZH-TH_XXXX_WAMPIE-LIBON.json +++ b/data/person/ID_NL-ZH-ROT_196X_NL-ZH-TH_XXXX_WAMPIE-LIBON.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wampielibon_20251214T103237Z.json" ], - "modified_at": "2026-01-09T19:18:17.046137+00:00", + "modified_at": "2026-01-09T19:51:03.564289+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wampielibon", @@ -186,7 +186,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -235,7 +235,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.046129+00:00", + "inferred_at": "2026-01-09T19:51:03.564284+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNETTE-VRIES.json b/data/person/ID_NL-ZH-ROT_196X_XX-XX-XXX_XXXX_ANNETTE-VRIES.json similarity index 63% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNETTE-VRIES.json rename to data/person/ID_NL-ZH-ROT_196X_XX-XX-XXX_XXXX_ANNETTE-VRIES.json index 5d5ca34289..665748ed9d 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNETTE-VRIES.json +++ b/data/person/ID_NL-ZH-ROT_196X_XX-XX-XXX_XXXX_ANNETTE-VRIES.json @@ -1,16 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNETTE-VRIES", + "ppid": "ID_NL-ZH-ROT_196X_XX-XX-XXX_XXXX_ANNETTE-VRIES", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-ZH-ROT", + "first_date": "196X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "ANNETTE", "VRIES" - ] + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "195X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Annette de Vries", @@ -24,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -155,7 +161,86 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annette-de-vries-a8875910_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:58.757179+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "annette-de-vries-a8875910" + "linkedin_slug": "annette-de-vries-a8875910", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNETTE-VRIES", + "new_ppid": "ID_NL-ZH-ROT_196X_XX-XX-XXX_XXXX_ANNETTE-VRIES", + "changed_at": "2026-01-09T19:43:41.441489+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "195X", + "196X" + ], + "edtf": "[195X,196X]", + "edtf_meaning": "one of: 1950s or 1960s", + "precision": "decade_set", + "primary_value": "196X", + "primary_rationale": "1963 is in 196X, but range extends into 195X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Vereniging van Nederlandse Gemeenten (VNG)", + "title": "Policy Advisor", + "date_range": "1986 - 1990" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1986 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1986 - 23 = 1963", + "result": "Estimated birth year: 1963", + "range": "1958-1968 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1958, + 1968 + ], + "output": [ + "195X", + "196X" + ], + "edtf": "[195X,196X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1963 spans decades 195X/196X", + "inferred_at": "2026-01-09T19:50:58.753864+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-ZH-ROT_196X_XX-XX-XXX_XXXX_BARBERA-KOOIJ.json b/data/person/ID_NL-ZH-ROT_196X_XX-XX-XXX_XXXX_BARBERA-KOOIJ.json index c3f7ed8557..8310da5ebc 100644 --- a/data/person/ID_NL-ZH-ROT_196X_XX-XX-XXX_XXXX_BARBERA-KOOIJ.json +++ b/data/person/ID_NL-ZH-ROT_196X_XX-XX-XXX_XXXX_BARBERA-KOOIJ.json @@ -97,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/barbera-van-kooij-9b73229_20251214T111733Z.json" ], - "modified_at": "2026-01-09T19:18:13.351439+00:00", + "modified_at": "2026-01-09T19:50:53.902541+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "barbera-van-kooij-9b73229", @@ -125,7 +125,7 @@ "primary_rationale": "1966 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1966 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.348969+00:00", + "inferred_at": "2026-01-09T19:50:53.900519+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_196X_XX-XX-XXX_XXXX_KARIN-STEIJGER.json b/data/person/ID_NL-ZH-ROT_196X_XX-XX-XXX_XXXX_KARIN-STEIJGER.json index bb2b37c59f..c8669ef1ce 100644 --- a/data/person/ID_NL-ZH-ROT_196X_XX-XX-XXX_XXXX_KARIN-STEIJGER.json +++ b/data/person/ID_NL-ZH-ROT_196X_XX-XX-XXX_XXXX_KARIN-STEIJGER.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karin-steijger-21541410_20251212T230000Z.json" ], - "modified_at": "2026-01-09T19:18:15.987229+00:00", + "modified_at": "2026-01-09T19:50:51.769002+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karin-steijger-21541410", @@ -168,7 +168,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.985293+00:00", + "inferred_at": "2026-01-09T19:50:51.766940+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_NL-GE-APE_XXXX_BRENDA-GRAAF.json b/data/person/ID_NL-ZH-ROT_197X_NL-GE-APE_XXXX_BRENDA-GRAAF.json index f24e2729d1..275a622c09 100644 --- a/data/person/ID_NL-ZH-ROT_197X_NL-GE-APE_XXXX_BRENDA-GRAAF.json +++ b/data/person/ID_NL-ZH-ROT_197X_NL-GE-APE_XXXX_BRENDA-GRAAF.json @@ -199,7 +199,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/brendavanrosmalen_20251214T103417Z.json" ], - "modified_at": "2026-01-09T19:18:12.493117+00:00", + "modified_at": "2026-01-09T19:50:48.492110+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "brendavanrosmalen", @@ -228,7 +228,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -277,7 +277,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.493111+00:00", + "inferred_at": "2026-01-09T19:50:48.492104+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_NL-GE-BED_XXXX_ELISABETH-OVERLOOP.json b/data/person/ID_NL-ZH-ROT_197X_NL-GE-BED_XXXX_ELISABETH-OVERLOOP.json index a96e6aa0b3..31dfbeb015 100644 --- a/data/person/ID_NL-ZH-ROT_197X_NL-GE-BED_XXXX_ELISABETH-OVERLOOP.json +++ b/data/person/ID_NL-ZH-ROT_197X_NL-GE-BED_XXXX_ELISABETH-OVERLOOP.json @@ -178,7 +178,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elisabethvanoverloop_20251214T110540Z.json" ], - "modified_at": "2026-01-09T19:18:11.287058+00:00", + "modified_at": "2026-01-09T19:50:50.594121+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elisabethvanoverloop", @@ -216,7 +216,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -265,7 +265,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.287049+00:00", + "inferred_at": "2026-01-09T19:50:50.594115+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_NL-NH-AMS_XXXX_JAN-PELSDONK.json b/data/person/ID_NL-ZH-ROT_197X_NL-NH-AMS_XXXX_JAN-PELSDONK.json index e7ace06029..08785bb711 100644 --- a/data/person/ID_NL-ZH-ROT_197X_NL-NH-AMS_XXXX_JAN-PELSDONK.json +++ b/data/person/ID_NL-ZH-ROT_197X_NL-NH-AMS_XXXX_JAN-PELSDONK.json @@ -226,7 +226,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pelsdonk_20251214T111538Z.json" ], - "modified_at": "2026-01-09T19:18:13.434192+00:00", + "modified_at": "2026-01-09T19:50:54.177539+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pelsdonk", @@ -255,7 +255,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -304,7 +304,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.434186+00:00", + "inferred_at": "2026-01-09T19:50:54.177528+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_NL-NH-AMS_XXXX_MINUS-HUYNH.json b/data/person/ID_NL-ZH-ROT_197X_NL-NH-AMS_XXXX_MINUS-HUYNH.json index d90989e51d..075b1e3971 100644 --- a/data/person/ID_NL-ZH-ROT_197X_NL-NH-AMS_XXXX_MINUS-HUYNH.json +++ b/data/person/ID_NL-ZH-ROT_197X_NL-NH-AMS_XXXX_MINUS-HUYNH.json @@ -94,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/minus-huynh_20251214T111913Z.json" ], - "modified_at": "2026-01-09T19:18:16.972508+00:00", + "modified_at": "2026-01-09T19:50:53.707313+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "minus-huynh", @@ -132,7 +132,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.972500+00:00", + "inferred_at": "2026-01-09T19:50:53.707307+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_NL-NH-AMS_XXXX_SENNAY-GHEBREAB.json b/data/person/ID_NL-ZH-ROT_197X_NL-NH-AMS_XXXX_SENNAY-GHEBREAB.json index f8e1eabc07..6647799a8b 100644 --- a/data/person/ID_NL-ZH-ROT_197X_NL-NH-AMS_XXXX_SENNAY-GHEBREAB.json +++ b/data/person/ID_NL-ZH-ROT_197X_NL-NH-AMS_XXXX_SENNAY-GHEBREAB.json @@ -29,9 +29,9 @@ "source": "linkedin_profile" }, "birth_date": { - "edtf": "XXXX", - "precision": "unknown", - "note": "See inferred_birth_decade for heuristic estimate" + "edtf": "1973-07", + "precision": "month", + "note": "Verified from personal website sennay.net" }, "is_living": true, "heritage_relevance": { @@ -245,7 +245,23 @@ "languages": [], "profile_image_url": "https://media.licdn.com/dms/image/v2/C4D03AQGplqukTKj18w/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1516860366333?e=2147483647&v=beta&t=pmQGz73He5IJxOtxvdLI3f9JTKY4lbpM1plySLqyFvA" }, - "web_claims": [], + "web_claims": [ + { + "claim_type": "birth_date", + "claim_value": "1973-07", + "claim_value_raw": "I was born in July 1973 in Addis Abeba, Ethiopia", + "source_url": "https://www.sennay.net/early-years", + "retrieved_on": "2025-01-10T00:30:00Z", + "retrieval_agent": "exa_web_search_exa", + "confidence": "high", + "provenance": { + "statement_created_at": "2025-01-10T00:35:00Z", + "source_archived_at": "2025-01-10T00:30:00Z", + "retrieval_method": "exa_web_search_exa", + "search_query": "\"Sennay Ghebreab\" professor Amsterdam born birthday biography" + } + } + ], "source_observations": [ { "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/sennay-ghebreab-3770411b_20251214T110357Z.json", @@ -255,8 +271,10 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T00:30:00Z", + "result": "found", + "notes": "Found on personal website sennay.net/early-years" } }, "provenance": { @@ -265,8 +283,8 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sennay-ghebreab-3770411b_20251214T110357Z.json" ], - "modified_at": "2026-01-09T19:18:18.884989+00:00", - "modified_by": "enrich_ppids.py" + "modified_at": "2025-01-10T00:35:00Z", + "modified_by": "opencode-claude-sonnet-4" }, "linkedin_slug": "sennay-ghebreab-3770411b", "ppid_history": [ @@ -294,7 +312,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -343,7 +361,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:18.884980+00:00", + "inferred_at": "2026-01-09T19:51:29.491818+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_NL-NH-DHE_XXXX_MARK-D.json b/data/person/ID_NL-ZH-ROT_197X_NL-NH-DHE_XXXX_MARK-D.json index d008ebc60d..ad7ff9bd2b 100644 --- a/data/person/ID_NL-ZH-ROT_197X_NL-NH-DHE_XXXX_MARK-D.json +++ b/data/person/ID_NL-ZH-ROT_197X_NL-NH-DHE_XXXX_MARK-D.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mark-d-96184733_20251214T102846Z.json" ], - "modified_at": "2026-01-09T19:18:14.621698+00:00", + "modified_at": "2026-01-09T19:50:59.858514+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mark-d-96184733", @@ -172,7 +172,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.621692+00:00", + "inferred_at": "2026-01-09T19:50:59.858482+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_NL-NH-WAA_XXXX_BOUDIEN-RI.json b/data/person/ID_NL-ZH-ROT_197X_NL-NH-WAA_XXXX_BOUDIEN-RI.json index 4a58546321..c258549868 100644 --- a/data/person/ID_NL-ZH-ROT_197X_NL-NH-WAA_XXXX_BOUDIEN-RI.json +++ b/data/person/ID_NL-ZH-ROT_197X_NL-NH-WAA_XXXX_BOUDIEN-RI.json @@ -323,7 +323,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/boudien-glashouwer-re-ri-cisa-87b0b86_20251214T102727Z.json" ], - "modified_at": "2026-01-09T19:18:15.446708+00:00", + "modified_at": "2026-01-09T19:51:10.868031+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "boudien-glashouwer-re-ri-cisa-87b0b86", @@ -346,7 +346,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -387,7 +387,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.446704+00:00", + "inferred_at": "2026-01-09T19:51:10.868027+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_NL-ZH-DEL_XXXX_DAVE-VANDERHEIJDEN.json b/data/person/ID_NL-ZH-ROT_197X_NL-ZH-DEL_XXXX_DAVE-VANDERHEIJDEN.json index deaa3a8040..04f3e63b7c 100644 --- a/data/person/ID_NL-ZH-ROT_197X_NL-ZH-DEL_XXXX_DAVE-VANDERHEIJDEN.json +++ b/data/person/ID_NL-ZH-ROT_197X_NL-ZH-DEL_XXXX_DAVE-VANDERHEIJDEN.json @@ -200,7 +200,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/davevanderheijden_20251214T112529Z.json" ], - "modified_at": "2026-01-09T19:18:15.308342+00:00", + "modified_at": "2026-01-09T19:51:08.503422+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "davevanderheijden", @@ -229,7 +229,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -278,7 +278,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.308339+00:00", + "inferred_at": "2026-01-09T19:51:08.503414+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_NL-ZH-KAD_XXXX_ANGELA-BERBEN.json b/data/person/ID_NL-ZH-ROT_197X_NL-ZH-KAD_XXXX_ANGELA-BERBEN.json index a068577dbf..0bf8fd713f 100644 --- a/data/person/ID_NL-ZH-ROT_197X_NL-ZH-KAD_XXXX_ANGELA-BERBEN.json +++ b/data/person/ID_NL-ZH-ROT_197X_NL-ZH-KAD_XXXX_ANGELA-BERBEN.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/angela-berben-2b9542258_20251214T112847Z.json" ], - "modified_at": "2026-01-09T19:18:11.546486+00:00", + "modified_at": "2026-01-09T19:50:47.167636+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "angela-berben-2b9542258", @@ -127,7 +127,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.546476+00:00", + "inferred_at": "2026-01-09T19:50:47.167626+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_NL-ZH-LEI_XXXX_LOES-VALK.json b/data/person/ID_NL-ZH-ROT_197X_NL-ZH-LEI_XXXX_LOES-VALK.json index c1e08c5db0..c933d9b032 100644 --- a/data/person/ID_NL-ZH-ROT_197X_NL-ZH-LEI_XXXX_LOES-VALK.json +++ b/data/person/ID_NL-ZH-ROT_197X_NL-ZH-LEI_XXXX_LOES-VALK.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mr-anne-loes-van-den-brand-valk-73583557_20251214T112813Z.json" ], - "modified_at": "2026-01-09T19:18:15.262146+00:00", + "modified_at": "2026-01-09T19:50:46.680871+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mr-anne-loes-van-den-brand-valk-73583557", @@ -138,7 +138,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.262139+00:00", + "inferred_at": "2026-01-09T19:50:46.680863+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_NL-ZH-TH_XXXX_KATJA-MUR.json b/data/person/ID_NL-ZH-ROT_197X_NL-ZH-TH_XXXX_KATJA-MUR.json index 0004f51eee..ad86aa04a9 100644 --- a/data/person/ID_NL-ZH-ROT_197X_NL-ZH-TH_XXXX_KATJA-MUR.json +++ b/data/person/ID_NL-ZH-ROT_197X_NL-ZH-TH_XXXX_KATJA-MUR.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/katja-mur-2069505_20251214T112709Z.json" ], - "modified_at": "2026-01-09T19:18:19.023093+00:00", + "modified_at": "2026-01-09T19:51:28.531817+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "katja-mur-2069505", @@ -157,7 +157,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:19.023085+00:00", + "inferred_at": "2026-01-09T19:51:28.531809+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_NL-ZH-TH_XXXX_NICO-LAAN.json b/data/person/ID_NL-ZH-ROT_197X_NL-ZH-TH_XXXX_NICO-LAAN.json index 58ead57c26..d29e5d32d3 100644 --- a/data/person/ID_NL-ZH-ROT_197X_NL-ZH-TH_XXXX_NICO-LAAN.json +++ b/data/person/ID_NL-ZH-ROT_197X_NL-ZH-TH_XXXX_NICO-LAAN.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nico-van-der-laan-20b65613_20251214T103345Z.json" ], - "modified_at": "2026-01-09T19:18:14.147084+00:00", + "modified_at": "2026-01-09T19:50:58.717043+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nico-van-der-laan-20b65613", @@ -138,7 +138,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.147079+00:00", + "inferred_at": "2026-01-09T19:50:58.717037+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_BRAM-OOSTDIJK.json b/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_BRAM-OOSTDIJK.json index 2410cf9280..d00bfed795 100644 --- a/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_BRAM-OOSTDIJK.json +++ b/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_BRAM-OOSTDIJK.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bram-oostdijk-51aa9361_20251214T112245Z.json" ], - "modified_at": "2026-01-09T19:18:14.285318+00:00", + "modified_at": "2026-01-09T19:51:23.918263+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bram-oostdijk-51aa9361", @@ -180,7 +180,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.281738+00:00", + "inferred_at": "2026-01-09T19:51:23.914521+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_CLAUDETTE-MEER.json b/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_CLAUDETTE-MEER.json index 32e872c272..ebefb2e645 100644 --- a/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_CLAUDETTE-MEER.json +++ b/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_CLAUDETTE-MEER.json @@ -154,7 +154,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/claudettevandermeer_20251214T103147Z.json" ], - "modified_at": "2026-01-09T19:18:16.969894+00:00", + "modified_at": "2026-01-09T19:51:22.804662+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "claudettevandermeer", @@ -176,7 +176,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.965642+00:00", + "inferred_at": "2026-01-09T19:51:22.801320+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_FUCHUNG-M.json b/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_FUCHUNG-M.json index 74e1181f99..761e06a507 100644 --- a/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_FUCHUNG-M.json +++ b/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_FUCHUNG-M.json @@ -190,7 +190,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fuchung-m-3b09b22_20251214T113000Z.json" ], - "modified_at": "2026-01-09T19:18:16.632993+00:00", + "modified_at": "2026-01-09T19:50:46.673734+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fuchung-m-3b09b22", @@ -227,7 +227,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -276,7 +276,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.631112+00:00", + "inferred_at": "2026-01-09T19:50:46.636834+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_MARTIJN-KLEPPE.json b/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_MARTIJN-KLEPPE.json index 5824dcbcf2..4a725d1226 100644 --- a/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_MARTIJN-KLEPPE.json +++ b/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_MARTIJN-KLEPPE.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martijnkleppe_20251214T113236Z.json" ], - "modified_at": "2026-01-09T19:18:13.942510+00:00", + "modified_at": "2026-01-09T19:50:58.724033+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martijnkleppe", @@ -168,7 +168,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.938519+00:00", + "inferred_at": "2026-01-09T19:50:58.718567+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_REMCO-BOER.json b/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_REMCO-BOER.json index 69638a64c7..107000453a 100644 --- a/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_REMCO-BOER.json +++ b/data/person/ID_NL-ZH-ROT_197X_XX-XX-XXX_XXXX_REMCO-BOER.json @@ -276,7 +276,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rcdeboer_20251212T200000Z.json" ], - "modified_at": "2026-01-09T19:18:13.752432+00:00", + "modified_at": "2026-01-09T19:50:56.087579+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rcdeboer", @@ -307,7 +307,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -348,7 +348,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.748789+00:00", + "inferred_at": "2026-01-09T19:50:56.070504+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-GE-APE_XXXX_ELMA-PLAISIER.json b/data/person/ID_NL-ZH-ROT_198X_NL-GE-APE_XXXX_ELMA-PLAISIER.json index 165b4eb07c..8ce0d6da55 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-GE-APE_XXXX_ELMA-PLAISIER.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-GE-APE_XXXX_ELMA-PLAISIER.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elmaplaisier_20251214T103421Z.json" ], - "modified_at": "2026-01-09T19:18:15.418797+00:00", + "modified_at": "2026-01-09T19:51:10.609055+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elmaplaisier", @@ -182,7 +182,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +231,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.418793+00:00", + "inferred_at": "2026-01-09T19:51:10.609049+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-GE-WAG_XXXX_LIESBETH-NIEMANSKOM.json b/data/person/ID_NL-ZH-ROT_198X_NL-GE-WAG_XXXX_LIESBETH-NIEMANSKOM.json index 39f53c27bb..a099ec1bec 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-GE-WAG_XXXX_LIESBETH-NIEMANSKOM.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-GE-WAG_XXXX_LIESBETH-NIEMANSKOM.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/liesbethkom_20251214T110658Z.json" ], - "modified_at": "2026-01-09T19:18:14.972742+00:00", + "modified_at": "2026-01-09T19:51:06.340082+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "liesbethkom", @@ -188,7 +188,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.972738+00:00", + "inferred_at": "2026-01-09T19:51:06.340077+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-NB-BOZ_XXXX_ISABELLE-TOUSSAINT.json b/data/person/ID_NL-ZH-ROT_198X_NL-NB-BOZ_XXXX_ISABELLE-TOUSSAINT.json index 9f67c431c4..59e0385fd4 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-NB-BOZ_XXXX_ISABELLE-TOUSSAINT.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-NB-BOZ_XXXX_ISABELLE-TOUSSAINT.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/isabelle-toussaint-6818675b_20251214T104034Z.json" ], - "modified_at": "2026-01-09T19:18:14.747223+00:00", + "modified_at": "2026-01-09T19:51:04.045429+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "isabelle-toussaint-6818675b", @@ -185,7 +185,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.747218+00:00", + "inferred_at": "2026-01-09T19:51:04.045423+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-NB-BRE_XXXX_DIEDERIK-SMITS.json b/data/person/ID_NL-ZH-ROT_198X_NL-NB-BRE_XXXX_DIEDERIK-SMITS.json index cf08f0c2f8..4b3712c298 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-NB-BRE_XXXX_DIEDERIK-SMITS.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-NB-BRE_XXXX_DIEDERIK-SMITS.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/diederik-smits-74004023_20251214T112420Z.json" ], - "modified_at": "2026-01-09T19:18:16.313834+00:00", + "modified_at": "2026-01-09T19:51:18.388256+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "diederik-smits-74004023", @@ -130,7 +130,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.313829+00:00", + "inferred_at": "2026-01-09T19:51:18.388250+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-NB-DOM_XXXX_JURJEN-GEENEN.json b/data/person/ID_NL-ZH-ROT_198X_NL-NB-DOM_XXXX_JURJEN-GEENEN.json index 1a1aaa650f..889effb910 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-NB-DOM_XXXX_JURJEN-GEENEN.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-NB-DOM_XXXX_JURJEN-GEENEN.json @@ -236,7 +236,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jurjenvangeenen_20251214T110820Z.json" ], - "modified_at": "2026-01-09T19:18:15.976674+00:00", + "modified_at": "2026-01-09T19:51:15.717683+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jurjenvangeenen", @@ -265,7 +265,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -314,7 +314,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.976667+00:00", + "inferred_at": "2026-01-09T19:51:15.717676+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-NB-EIN_XXXX_RUPAL-BASAK.json b/data/person/ID_NL-ZH-ROT_198X_NL-NB-EIN_XXXX_RUPAL-BASAK.json index df6d198117..a122ac6136 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-NB-EIN_XXXX_RUPAL-BASAK.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-NB-EIN_XXXX_RUPAL-BASAK.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rupal-basak-7a7b9118_20251214T111132Z.json" ], - "modified_at": "2026-01-09T19:18:17.990905+00:00", + "modified_at": "2026-01-09T19:51:28.875337+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rupal-basak-7a7b9118", @@ -155,7 +155,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.990898+00:00", + "inferred_at": "2026-01-09T19:51:28.875332+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-NB-VEL_XXXX_BART-HEZEWIJK.json b/data/person/ID_NL-ZH-ROT_198X_NL-NB-VEL_XXXX_BART-HEZEWIJK.json index 7a17e83148..ea04298858 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-NB-VEL_XXXX_BART-HEZEWIJK.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-NB-VEL_XXXX_BART-HEZEWIJK.json @@ -156,7 +156,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bartvanhezewijk_20251214T111044Z.json" ], - "modified_at": "2026-01-09T19:18:16.181138+00:00", + "modified_at": "2026-01-09T19:51:18.246047+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bartvanhezewijk", @@ -185,7 +185,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.181132+00:00", + "inferred_at": "2026-01-09T19:51:18.246038+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-NH-AMS_XXXX_CASPER-KRUIT.json b/data/person/ID_NL-ZH-ROT_198X_NL-NH-AMS_XXXX_CASPER-KRUIT.json index 06bee71e16..596e859483 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-NH-AMS_XXXX_CASPER-KRUIT.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-NH-AMS_XXXX_CASPER-KRUIT.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/caspervanderkruit_20251214T111727Z.json" ], - "modified_at": "2026-01-09T19:18:16.871475+00:00", + "modified_at": "2026-01-09T19:51:34.113783+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "caspervanderkruit", @@ -168,7 +168,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.871466+00:00", + "inferred_at": "2026-01-09T19:51:34.113775+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-NH-AMS_XXXX_CINDY-DOFF.json b/data/person/ID_NL-ZH-ROT_198X_NL-NH-AMS_XXXX_CINDY-DOFF.json index 06dd286a49..eeef02df72 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-NH-AMS_XXXX_CINDY-DOFF.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-NH-AMS_XXXX_CINDY-DOFF.json @@ -171,7 +171,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cindydoff_20251214T111526Z.json" ], - "modified_at": "2026-01-09T19:18:17.693300+00:00", + "modified_at": "2026-01-09T19:50:54.003630+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cindydoff", @@ -209,7 +209,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.693289+00:00", + "inferred_at": "2026-01-09T19:50:54.003625+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-NH-AMS_XXXX_LENA-HOOGSTADT.json b/data/person/ID_NL-ZH-ROT_198X_NL-NH-AMS_XXXX_LENA-HOOGSTADT.json index 01b5fe459a..d1b08de95c 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-NH-AMS_XXXX_LENA-HOOGSTADT.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-NH-AMS_XXXX_LENA-HOOGSTADT.json @@ -222,7 +222,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lenahoogstadt_20251214T111445Z.json" ], - "modified_at": "2026-01-09T19:18:15.449916+00:00", + "modified_at": "2026-01-09T19:50:50.213908+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lenahoogstadt", @@ -254,7 +254,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -295,7 +295,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.449910+00:00", + "inferred_at": "2026-01-09T19:50:50.213897+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-OV-ALM_XXXX_SOFIE-BOUWHUIS.json b/data/person/ID_NL-ZH-ROT_198X_NL-OV-ALM_XXXX_SOFIE-BOUWHUIS.json index 73b67c3313..d61b9aeffe 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-OV-ALM_XXXX_SOFIE-BOUWHUIS.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-OV-ALM_XXXX_SOFIE-BOUWHUIS.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sofie-bouwhuis-1303b791_20251214T103303Z.json" ], - "modified_at": "2026-01-09T19:18:16.201108+00:00", + "modified_at": "2026-01-09T19:51:22.930306+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sofie-bouwhuis-1303b791", @@ -142,7 +142,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.201103+00:00", + "inferred_at": "2026-01-09T19:51:22.930301+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-OV-DEV_XXXX_DARIO-BONGIOVANNI.json b/data/person/ID_NL-ZH-ROT_198X_NL-OV-DEV_XXXX_DARIO-BONGIOVANNI.json index 6ba00c46e2..a2bf6a034c 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-OV-DEV_XXXX_DARIO-BONGIOVANNI.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-OV-DEV_XXXX_DARIO-BONGIOVANNI.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dario-bongiovanni-b5aa6576_20251214T110414Z.json" ], - "modified_at": "2026-01-09T19:18:13.652474+00:00", + "modified_at": "2026-01-09T19:51:17.477666+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dario-bongiovanni-b5aa6576", @@ -149,7 +149,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.652468+00:00", + "inferred_at": "2026-01-09T19:51:17.477658+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-UT-UTR_XXXX_DENNIS-WEGINK.json b/data/person/ID_NL-ZH-ROT_198X_NL-UT-UTR_XXXX_DENNIS-WEGINK.json index 468fb0a88b..1f1e0da6fb 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-UT-UTR_XXXX_DENNIS-WEGINK.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-UT-UTR_XXXX_DENNIS-WEGINK.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dennis-wegink-07745671_20251214T104057Z.json" ], - "modified_at": "2026-01-09T19:18:15.437955+00:00", + "modified_at": "2026-01-09T19:51:10.858196+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dennis-wegink-07745671", @@ -165,7 +165,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.437949+00:00", + "inferred_at": "2026-01-09T19:51:10.858191+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-UT-UTR_XXXX_MICHAEL-WILLEMS.json b/data/person/ID_NL-ZH-ROT_198X_NL-UT-UTR_XXXX_MICHAEL-WILLEMS.json index 7c226c6211..c41a792ae0 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-UT-UTR_XXXX_MICHAEL-WILLEMS.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-UT-UTR_XXXX_MICHAEL-WILLEMS.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michael-willems-757b3272_20251212T221700Z.json" ], - "modified_at": "2026-01-09T19:18:14.081087+00:00", + "modified_at": "2026-01-09T19:50:58.570161+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michael-willems-757b3272", @@ -181,7 +181,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.081083+00:00", + "inferred_at": "2026-01-09T19:50:58.570155+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-LEI_XXXX_BIEKE-MARK.json b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-LEI_XXXX_BIEKE-MARK.json index eabe241e05..fd62b6c972 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-LEI_XXXX_BIEKE-MARK.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-LEI_XXXX_BIEKE-MARK.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/biekevandermark_20251214T111450Z.json" ], - "modified_at": "2026-01-09T19:18:12.863802+00:00", + "modified_at": "2026-01-09T19:50:49.081343+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "biekevandermark", @@ -178,7 +178,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.863796+00:00", + "inferred_at": "2026-01-09T19:50:49.081337+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-LEI_XXXX_ERIK-BERG.json b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-LEI_XXXX_ERIK-BERG.json index a8557a1007..bd443cc414 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-LEI_XXXX_ERIK-BERG.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-LEI_XXXX_ERIK-BERG.json @@ -192,7 +192,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erikrutgervandenberg_20251214T112357Z.json" ], - "modified_at": "2026-01-09T19:18:13.634169+00:00", + "modified_at": "2026-01-09T19:50:55.261147+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erikrutgervandenberg", @@ -221,7 +221,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -270,7 +270,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.634165+00:00", + "inferred_at": "2026-01-09T19:50:55.261140+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-LEI_XXXX_GRACE-LEKSANA.json b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-LEI_XXXX_GRACE-LEKSANA.json index 5a0b59999c..cfbeb869cc 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-LEI_XXXX_GRACE-LEKSANA.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-LEI_XXXX_GRACE-LEKSANA.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/grace-leksana-05439920_20251214T103730Z.json" ], - "modified_at": "2026-01-09T19:18:16.361342+00:00", + "modified_at": "2026-01-09T19:51:18.409781+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "grace-leksana-05439920", @@ -134,7 +134,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.361333+00:00", + "inferred_at": "2026-01-09T19:51:18.409776+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-RIJ_XXXX_BEHRANG-MOUSAVI.json b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-RIJ_XXXX_BEHRANG-MOUSAVI.json similarity index 76% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-RIJ_XXXX_BEHRANG-MOUSAVI.json rename to data/person/ID_NL-ZH-ROT_198X_NL-ZH-RIJ_XXXX_BEHRANG-MOUSAVI.json index 4554b336c6..5e777e7ffa 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-RIJ_XXXX_BEHRANG-MOUSAVI.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-RIJ_XXXX_BEHRANG-MOUSAVI.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-RIJ_XXXX_BEHRANG-MOUSAVI", + "ppid": "ID_NL-ZH-ROT_198X_NL-ZH-RIJ_XXXX_BEHRANG-MOUSAVI", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-ZH-ROT", + "first_date": "198X", "last_location": "NL-ZH-RIJ", "last_date": "XXXX", "name_tokens": [ "BEHRANG", "MOUSAVI" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Behrang Mousavi", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -209,63 +215,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/behrang-mousavi-85430a_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:57.329517+00:00", + "modified_at": "2026-01-09T19:50:54.585267+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "behrang-mousavi-85430a", - "inferred_current_settlement": { - "value": "Rijswijk", - "formatted": "NL-ZH-RIJ", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "RIJ", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Rijswijk, Zuid-Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Rijswijk, Zuid-Holland, Netherlands", - "result": { - "geonames_id": 2748076, - "geonames_name": "Rijswijk", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPL", - "latitude": 52.03634, - "longitude": 4.32501 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-RIJ" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2748076, - "geonames_name": "Rijswijk", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPL", - "latitude": 52.03634, - "longitude": 4.32501 - }, - "inferred_at": "2026-01-09T17:42:57.329509+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BEHRANG-MOUSAVI", @@ -275,6 +228,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-RIJ_XXXX_BEHRANG-MOUSAVI", + "new_ppid": "ID_NL-ZH-ROT_198X_NL-ZH-RIJ_XXXX_BEHRANG-MOUSAVI", + "changed_at": "2026-01-09T19:43:38.972622+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1987 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Het Nieuwe Instituut", + "title": "Manager Heritage Department", + "date_range": "2010 - 2024" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2010 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2010 - 23 = 1987", + "result": "Estimated birth year: 1987", + "range": "1982-1992 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1982, + 1992 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:54.585261+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-RIJ_XXXX_ELKE-FINKH.json b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-RIJ_XXXX_ELKE-FINKH.json index fefc1e20fa..46c90fba63 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-RIJ_XXXX_ELKE-FINKH.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-RIJ_XXXX_ELKE-FINKH.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elke-finkh-944312141_20251214T111854Z.json" ], - "modified_at": "2026-01-09T19:18:13.238088+00:00", + "modified_at": "2026-01-09T19:50:53.693936+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elke-finkh-944312141", @@ -125,7 +125,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.238083+00:00", + "inferred_at": "2026-01-09T19:50:53.693931+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-ROT_XXXX_ANDRE-CASTRO.json b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-ROT_XXXX_ANDRE-CASTRO.json index 87c8d7e488..57deedd949 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-ROT_XXXX_ANDRE-CASTRO.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-ROT_XXXX_ANDRE-CASTRO.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/andre-castr0_20251214T110511Z.json" ], - "modified_at": "2026-01-09T19:18:12.283042+00:00", + "modified_at": "2026-01-09T19:50:47.495261+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "andre-castr0", @@ -187,7 +187,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.283032+00:00", + "inferred_at": "2026-01-09T19:50:47.495255+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-ROT_XXXX_GERTJAN-BALLEGOOIJEN.json b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-ROT_XXXX_GERTJAN-BALLEGOOIJEN.json index 8c73cdf2df..19ba12e95d 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-ROT_XXXX_GERTJAN-BALLEGOOIJEN.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-ROT_XXXX_GERTJAN-BALLEGOOIJEN.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gert-jan-van-ballegooijen-1b143120_20251214T112337Z.json" ], - "modified_at": "2026-01-09T19:18:14.706138+00:00", + "modified_at": "2026-01-09T19:51:03.385731+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gert-jan-van-ballegooijen-1b143120", @@ -139,7 +139,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.706134+00:00", + "inferred_at": "2026-01-09T19:51:03.385726+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_MARWAN-JEZRAWI.json b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_MARWAN-JEZRAWI.json index 3034af274d..dd10098f18 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_MARWAN-JEZRAWI.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_MARWAN-JEZRAWI.json @@ -248,7 +248,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marwan-jezrawi-9a9387105_20251214T102711Z.json" ], - "modified_at": "2026-01-09T19:18:15.731543+00:00", + "modified_at": "2026-01-09T19:51:13.577130+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marwan-jezrawi-9a9387105", @@ -277,7 +277,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -326,7 +326,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.731538+00:00", + "inferred_at": "2026-01-09T19:51:13.577113+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_MSC-TOMA.json b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_MSC-TOMA.json index 184479e2e9..0bcbb12de4 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_MSC-TOMA.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_MSC-TOMA.json @@ -171,7 +171,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anmar-toma-msc-4b437a63_20251214T103045Z.json" ], - "modified_at": "2026-01-09T19:18:14.026779+00:00", + "modified_at": "2026-01-09T19:50:58.353938+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anmar-toma-msc-4b437a63", @@ -200,7 +200,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -249,7 +249,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.026776+00:00", + "inferred_at": "2026-01-09T19:50:58.353932+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_NIEK-VRIES.json b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_NIEK-VRIES.json index 49f48aaec1..a430e6a4ad 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_NIEK-VRIES.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_NIEK-VRIES.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/niek-de-vries-schmidt_20251214T112909Z.json" ], - "modified_at": "2026-01-09T19:18:15.914005+00:00", + "modified_at": "2026-01-09T19:51:25.530939+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "niek-de-vries-schmidt", @@ -136,7 +136,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.913999+00:00", + "inferred_at": "2026-01-09T19:51:25.530935+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_ROP-LAAR.json b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_ROP-LAAR.json index 1bb6bbdc1a..fa3bdc70e0 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_ROP-LAAR.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_ROP-LAAR.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ropvandelaar_20251214T112959Z.json" ], - "modified_at": "2026-01-09T19:18:14.870345+00:00", + "modified_at": "2026-01-09T19:51:05.255501+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ropvandelaar", @@ -155,7 +155,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.870341+00:00", + "inferred_at": "2026-01-09T19:51:05.255485+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_THIJS-PRIJKEL.json b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_THIJS-PRIJKEL.json index 72e1d0bd6a..e984b357ed 100644 --- a/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_THIJS-PRIJKEL.json +++ b/data/person/ID_NL-ZH-ROT_198X_NL-ZH-TH_XXXX_THIJS-PRIJKEL.json @@ -189,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thijsprijkel_20251214T103019Z.json" ], - "modified_at": "2026-01-09T19:18:17.711225+00:00", + "modified_at": "2026-01-09T19:51:28.554483+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thijsprijkel", @@ -218,7 +218,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -267,7 +267,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.711216+00:00", + "inferred_at": "2026-01-09T19:51:28.554479+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_CUISHAN-ZHUANG.json b/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_CUISHAN-ZHUANG.json index 240000e3fc..04d053df67 100644 --- a/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_CUISHAN-ZHUANG.json +++ b/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_CUISHAN-ZHUANG.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cuishanzhuang_20251214T112731Z.json" ], - "modified_at": "2026-01-09T19:18:17.510931+00:00", + "modified_at": "2026-01-09T19:51:28.204680+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cuishanzhuang", @@ -159,7 +159,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.508717+00:00", + "inferred_at": "2026-01-09T19:51:28.202865+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_DIGNA-NIELEN.json b/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_DIGNA-NIELEN.json index ba4817b00f..dce918ce4a 100644 --- a/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_DIGNA-NIELEN.json +++ b/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_DIGNA-NIELEN.json @@ -182,7 +182,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dignavannielen_20251214T111325Z.json" ], - "modified_at": "2026-01-09T19:18:14.997634+00:00", + "modified_at": "2026-01-09T19:51:06.575767+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dignavannielen", @@ -210,7 +210,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.995721+00:00", + "inferred_at": "2026-01-09T19:51:06.573743+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_INGE-BOUTS.json b/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_INGE-BOUTS.json index 5abb3bcc54..847d32f6b1 100644 --- a/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_INGE-BOUTS.json +++ b/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_INGE-BOUTS.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/inge-bouts-5b40142a_20251214T113423Z.json" ], - "modified_at": "2026-01-09T19:18:13.811853+00:00", + "modified_at": "2026-01-09T19:51:11.086312+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "inge-bouts-5b40142a", @@ -157,7 +157,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.810021+00:00", + "inferred_at": "2026-01-09T19:51:11.083752+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_RIANNE-GROEN.json b/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_RIANNE-GROEN.json index 8a7244690b..6608b942e8 100644 --- a/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_RIANNE-GROEN.json +++ b/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_RIANNE-GROEN.json @@ -185,7 +185,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/regroen_20251214T103354Z.json" ], - "modified_at": "2026-01-09T19:18:11.656694+00:00", + "modified_at": "2026-01-09T19:50:47.266091+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "regroen", @@ -207,7 +207,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -248,7 +248,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.654379+00:00", + "inferred_at": "2026-01-09T19:50:47.262167+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_ROSEMARIJN-STEVENSSMEETS.json b/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_ROSEMARIJN-STEVENSSMEETS.json index f42325f84e..35e9de0873 100644 --- a/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_ROSEMARIJN-STEVENSSMEETS.json +++ b/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_ROSEMARIJN-STEVENSSMEETS.json @@ -140,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rosemarijnsmeets_20251214T103138Z.json" ], - "modified_at": "2026-01-09T19:18:15.243035+00:00", + "modified_at": "2026-01-09T19:51:07.281641+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rosemarijnsmeets", @@ -162,7 +162,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.240985+00:00", + "inferred_at": "2026-01-09T19:51:07.279453+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_YVONNE-WILMER.json b/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_YVONNE-WILMER.json index 5cfd7887b3..11588ed3e8 100644 --- a/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_YVONNE-WILMER.json +++ b/data/person/ID_NL-ZH-ROT_198X_XX-XX-XXX_XXXX_YVONNE-WILMER.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yvonne-wilmer-53aba111_20251214T103308Z.json" ], - "modified_at": "2026-01-09T19:18:14.657167+00:00", + "modified_at": "2026-01-09T19:50:53.683883+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yvonne-wilmer-53aba111", @@ -175,7 +175,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.652977+00:00", + "inferred_at": "2026-01-09T19:50:53.679810+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_NL-NB-HEI_XXXX_JOHAN-HOENINK.json b/data/person/ID_NL-ZH-ROT_199X_NL-NB-HEI_XXXX_JOHAN-HOENINK.json index 6f15588e88..58eb09414e 100644 --- a/data/person/ID_NL-ZH-ROT_199X_NL-NB-HEI_XXXX_JOHAN-HOENINK.json +++ b/data/person/ID_NL-ZH-ROT_199X_NL-NB-HEI_XXXX_JOHAN-HOENINK.json @@ -212,7 +212,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/johanhoenink_20251214T113241Z.json" ], - "modified_at": "2026-01-09T19:18:13.798982+00:00", + "modified_at": "2026-01-09T19:50:56.593628+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "johanhoenink", @@ -235,7 +235,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -276,7 +276,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.798979+00:00", + "inferred_at": "2026-01-09T19:50:56.593624+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_DONNA-RIJST.json b/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_DONNA-RIJST.json index 6e80031b18..10f77888f0 100644 --- a/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_DONNA-RIJST.json +++ b/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_DONNA-RIJST.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/donna-van-der-rijst-693586123_20251214T111038Z.json" ], - "modified_at": "2026-01-09T19:18:13.418514+00:00", + "modified_at": "2026-01-09T19:51:14.423869+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "donna-van-der-rijst-693586123", @@ -181,7 +181,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.418508+00:00", + "inferred_at": "2026-01-09T19:51:14.423864+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_GIANNA-GIANOTTEN.json b/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_GIANNA-GIANOTTEN.json index 296ac6ad69..11f58245e4 100644 --- a/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_GIANNA-GIANOTTEN.json +++ b/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_GIANNA-GIANOTTEN.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gianna-gianotten-110a2917a_20251214T110135Z.json" ], - "modified_at": "2026-01-09T19:18:17.532667+00:00", + "modified_at": "2026-01-09T19:51:28.395557+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gianna-gianotten-110a2917a", @@ -181,7 +181,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.532659+00:00", + "inferred_at": "2026-01-09T19:51:28.395552+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_OUMAIMA-HJRY.json b/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_OUMAIMA-HJRY.json index 4c789ed3db..2c12d54107 100644 --- a/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_OUMAIMA-HJRY.json +++ b/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_OUMAIMA-HJRY.json @@ -238,7 +238,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/oumaima-hajri_20251214T112601Z.json" ], - "modified_at": "2026-01-09T19:18:15.710196+00:00", + "modified_at": "2026-01-09T19:51:13.482217+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "oumaima-hajri", @@ -267,7 +267,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -316,7 +316,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.710192+00:00", + "inferred_at": "2026-01-09T19:51:13.482210+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_TIM-RAMSCHE.json b/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_TIM-RAMSCHE.json index dd63195267..7c2238351a 100644 --- a/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_TIM-RAMSCHE.json +++ b/data/person/ID_NL-ZH-ROT_199X_NL-NH-AMS_XXXX_TIM-RAMSCHE.json @@ -198,7 +198,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/timramsche_20251214T111715Z.json" ], - "modified_at": "2026-01-09T19:18:15.290461+00:00", + "modified_at": "2026-01-09T19:51:08.361523+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "timramsche", @@ -227,7 +227,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -276,7 +276,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.290456+00:00", + "inferred_at": "2026-01-09T19:51:08.361519+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_NL-UT-DOO_XXXX_EWOUT-HEUKER.json b/data/person/ID_NL-ZH-ROT_199X_NL-UT-DOO_XXXX_EWOUT-HEUKER.json index cd64bcb9ca..b7e5e2b3a6 100644 --- a/data/person/ID_NL-ZH-ROT_199X_NL-UT-DOO_XXXX_EWOUT-HEUKER.json +++ b/data/person/ID_NL-ZH-ROT_199X_NL-UT-DOO_XXXX_EWOUT-HEUKER.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ewoutheuker_20251214T111457Z.json" ], - "modified_at": "2026-01-09T19:18:16.441338+00:00", + "modified_at": "2026-01-09T19:51:18.508073+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ewoutheuker", @@ -160,7 +160,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.441332+00:00", + "inferred_at": "2026-01-09T19:51:18.508064+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_NL-UT-RHE_XXXX_JEANETTE-VLIET.json b/data/person/ID_NL-ZH-ROT_199X_NL-UT-RHE_XXXX_JEANETTE-VLIET.json index 5412a61362..0f5248cbaa 100644 --- a/data/person/ID_NL-ZH-ROT_199X_NL-UT-RHE_XXXX_JEANETTE-VLIET.json +++ b/data/person/ID_NL-ZH-ROT_199X_NL-UT-RHE_XXXX_JEANETTE-VLIET.json @@ -278,7 +278,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeanettepors_20251214T104118Z.json" ], - "modified_at": "2026-01-09T19:18:16.691650+00:00", + "modified_at": "2026-01-09T19:51:21.517850+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeanettepors", @@ -307,7 +307,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -356,7 +356,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.691644+00:00", + "inferred_at": "2026-01-09T19:51:21.517845+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_JULIE-GROESEN.json b/data/person/ID_NL-ZH-ROT_199X_NL-UT-UTR_XXXX_JULIE-GROESEN.json similarity index 66% rename from data/person/ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_JULIE-GROESEN.json rename to data/person/ID_NL-ZH-ROT_199X_NL-UT-UTR_XXXX_JULIE-GROESEN.json index 317eb768e6..1265da9d4e 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_JULIE-GROESEN.json +++ b/data/person/ID_NL-ZH-ROT_199X_NL-UT-UTR_XXXX_JULIE-GROESEN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_JULIE-GROESEN", + "ppid": "ID_NL-ZH-ROT_199X_NL-UT-UTR_XXXX_JULIE-GROESEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NL-ZH-ROT", "first_date": "199X", "last_location": "NL-UT-UTR", "last_date": "XXXX", @@ -12,7 +12,8 @@ "GROESEN" ], "first_date_source": "inferred_birth_decade", - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Julie van Groesen", @@ -123,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/julievangroesen_20251214T111626Z.json" ], - "modified_at": "2026-01-09T19:18:15.502649+00:00", + "modified_at": "2026-01-09T19:51:11.245234+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "julievangroesen", @@ -137,6 +138,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_JULIE-GROESEN", + "new_ppid": "ID_NL-ZH-ROT_199X_NL-UT-UTR_XXXX_JULIE-GROESEN", + "changed_at": "2026-01-09T19:51:11.245232+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -145,7 +156,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +197,77 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.497036+00:00", + "inferred_at": "2026-01-09T19:51:11.240750+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Rotterdam", + "formatted": "NL-ZH-ROT", + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "ROT", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Willem de Kooning Academie", + "date_range": "2015 - 2016 • 1 year", + "degree": "Minor, Branding" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Willem de Kooning Academie", + "mapping_result": "Rotterdam, Netherlands" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Rotterdam, Netherlands", + "result": { + "geonames_id": 2747891, + "geonames_name": "Rotterdam", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 51.9225, + "longitude": 4.47917 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "NL", + "region_code": "ZH", + "settlement_code": "ROT" + }, + "result": "NL-ZH-ROT" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 2747891, + "geonames_name": "Rotterdam", + "admin1_code": "11", + "admin1_name": "South Holland", + "feature_code": "PPL", + "latitude": 51.9225, + "longitude": 4.47917 + }, + "inferred_at": "2026-01-09T19:51:11.245219+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_NL-UT-UTR_XXXX_MEREL-BRUGMAN.json b/data/person/ID_NL-ZH-ROT_199X_NL-UT-UTR_XXXX_MEREL-BRUGMAN.json index 7565176b85..a43a76aaa7 100644 --- a/data/person/ID_NL-ZH-ROT_199X_NL-UT-UTR_XXXX_MEREL-BRUGMAN.json +++ b/data/person/ID_NL-ZH-ROT_199X_NL-UT-UTR_XXXX_MEREL-BRUGMAN.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merel-brugman-868a38b_20251214T111415Z.json" ], - "modified_at": "2026-01-09T19:18:15.716729+00:00", + "modified_at": "2026-01-09T19:51:13.534257+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merel-brugman-868a38b", @@ -180,7 +180,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.716725+00:00", + "inferred_at": "2026-01-09T19:51:13.534251+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_NL-ZH-BOD_XXXX_STEFFI-BERG.json b/data/person/ID_NL-ZH-ROT_199X_NL-ZH-BOD_XXXX_STEFFI-BERG.json index 7122dbd510..187adeab8d 100644 --- a/data/person/ID_NL-ZH-ROT_199X_NL-ZH-BOD_XXXX_STEFFI-BERG.json +++ b/data/person/ID_NL-ZH-ROT_199X_NL-ZH-BOD_XXXX_STEFFI-BERG.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/steffi-van-den-berg-395051159_20251214T111831Z.json" ], - "modified_at": "2026-01-09T19:18:16.993529+00:00", + "modified_at": "2026-01-09T19:51:22.931285+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "steffi-van-den-berg-395051159", @@ -184,7 +184,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.993522+00:00", + "inferred_at": "2026-01-09T19:51:22.931281+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_NL-ZH-ROT_XXXX_JIM-DUIJL.json b/data/person/ID_NL-ZH-ROT_199X_NL-ZH-ROT_XXXX_JIM-DUIJL.json index 457abf3b9e..89837a876b 100644 --- a/data/person/ID_NL-ZH-ROT_199X_NL-ZH-ROT_XXXX_JIM-DUIJL.json +++ b/data/person/ID_NL-ZH-ROT_199X_NL-ZH-ROT_XXXX_JIM-DUIJL.json @@ -191,7 +191,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jim-van-duijl-509b8767_20251214T110356Z.json" ], - "modified_at": "2026-01-09T19:18:14.833416+00:00", + "modified_at": "2026-01-09T19:50:53.730540+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jim-van-duijl-509b8767", @@ -223,7 +223,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -264,7 +264,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.833410+00:00", + "inferred_at": "2026-01-09T19:50:53.730535+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_NL-ZH-ROT_XXXX_SANNE-JONG.json b/data/person/ID_NL-ZH-ROT_199X_NL-ZH-ROT_XXXX_SANNE-JONG.json index 52d02daed4..12f7f4bfe3 100644 --- a/data/person/ID_NL-ZH-ROT_199X_NL-ZH-ROT_XXXX_SANNE-JONG.json +++ b/data/person/ID_NL-ZH-ROT_199X_NL-ZH-ROT_XXXX_SANNE-JONG.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sanne-de-jong-6072a588_20251214T111719Z.json" ], - "modified_at": "2026-01-09T19:18:13.299860+00:00", + "modified_at": "2026-01-09T19:50:53.837200+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sanne-de-jong-6072a588", @@ -152,7 +152,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.299856+00:00", + "inferred_at": "2026-01-09T19:50:53.837191+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_NL-ZH-SCH_XXXX_MATHIJS-BARTELS.json b/data/person/ID_NL-ZH-ROT_199X_NL-ZH-SCH_XXXX_MATHIJS-BARTELS.json index 03d5210eb5..b286d697fd 100644 --- a/data/person/ID_NL-ZH-ROT_199X_NL-ZH-SCH_XXXX_MATHIJS-BARTELS.json +++ b/data/person/ID_NL-ZH-ROT_199X_NL-ZH-SCH_XXXX_MATHIJS-BARTELS.json @@ -227,7 +227,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mathijsbartels_20251214T111836Z.json" ], - "modified_at": "2026-01-09T19:18:15.146707+00:00", + "modified_at": "2026-01-09T19:51:06.757454+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mathijsbartels", @@ -256,7 +256,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -305,7 +305,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.146700+00:00", + "inferred_at": "2026-01-09T19:51:06.757444+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_NL-ZH-TH_XXXX_LARISSA-CHUA.json b/data/person/ID_NL-ZH-ROT_199X_NL-ZH-TH_XXXX_LARISSA-CHUA.json index 08d5eac04e..69c67304dd 100644 --- a/data/person/ID_NL-ZH-ROT_199X_NL-ZH-TH_XXXX_LARISSA-CHUA.json +++ b/data/person/ID_NL-ZH-ROT_199X_NL-ZH-TH_XXXX_LARISSA-CHUA.json @@ -223,7 +223,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/larissa-chua-034059115_20251214T103003Z.json" ], - "modified_at": "2026-01-09T19:18:14.983050+00:00", + "modified_at": "2026-01-09T19:51:06.349734+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "larissa-chua-034059115", @@ -252,7 +252,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -301,7 +301,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.983045+00:00", + "inferred_at": "2026-01-09T19:51:06.349728+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_JENNY-JONG.json b/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_JENNY-JONG.json index 1e87f79e8f..61874a4535 100644 --- a/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_JENNY-JONG.json +++ b/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_JENNY-JONG.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jenny-de-jong-a4b422180_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:13.797738+00:00", + "modified_at": "2026-01-09T19:50:56.589339+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jenny-de-jong-a4b422180", @@ -164,7 +164,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.795691+00:00", + "inferred_at": "2026-01-09T19:50:56.587312+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_JOS-VERHEIJ.json b/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_JOS-VERHEIJ.json index c49ad013ee..6126c3a14a 100644 --- a/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_JOS-VERHEIJ.json +++ b/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_JOS-VERHEIJ.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/josverheij_20251214T112805Z.json" ], - "modified_at": "2026-01-09T19:18:16.038833+00:00", + "modified_at": "2026-01-09T19:51:16.739178+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "josverheij", @@ -118,7 +118,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +159,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.036893+00:00", + "inferred_at": "2026-01-09T19:51:16.725573+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_LAURA-REIJM.json b/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_LAURA-REIJM.json index 9bd7800716..92d2ec37a8 100644 --- a/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_LAURA-REIJM.json +++ b/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_LAURA-REIJM.json @@ -246,7 +246,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laura-reijm-673a982a_20251214T112833Z.json" ], - "modified_at": "2026-01-09T19:18:11.774494+00:00", + "modified_at": "2026-01-09T19:50:47.295044+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laura-reijm-673a982a", @@ -274,7 +274,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -323,7 +323,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.769807+00:00", + "inferred_at": "2026-01-09T19:50:47.290749+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_SHIVANI-FUZZALLY.json b/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_SHIVANI-FUZZALLY.json index 64d2131376..cdbc31b5bf 100644 --- a/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_SHIVANI-FUZZALLY.json +++ b/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_SHIVANI-FUZZALLY.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/shivani-fuzzally-132707202_20251214T112655Z.json" ], - "modified_at": "2026-01-09T19:18:17.001564+00:00", + "modified_at": "2026-01-09T19:51:22.956110+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "shivani-fuzzally-132707202", @@ -145,7 +145,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.994909+00:00", + "inferred_at": "2026-01-09T19:51:22.952209+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_TUGBA-KAYA.json b/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_TUGBA-KAYA.json index f4444b21b1..f4df878a3a 100644 --- a/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_TUGBA-KAYA.json +++ b/data/person/ID_NL-ZH-ROT_199X_XX-XX-XXX_XXXX_TUGBA-KAYA.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tugba-kaya-_20251214T112817Z.json" ], - "modified_at": "2026-01-09T19:18:14.114783+00:00", + "modified_at": "2026-01-09T19:50:58.618212+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tugba-kaya-", @@ -143,7 +143,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.112789+00:00", + "inferred_at": "2026-01-09T19:50:58.609222+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_200X_BE-VL-KIN_XXXX_JOS-BIE.json b/data/person/ID_NL-ZH-ROT_200X_BE-VL-KIN_XXXX_JOS-BIE.json index 7a6f171393..b1fb43c913 100644 --- a/data/person/ID_NL-ZH-ROT_200X_BE-VL-KIN_XXXX_JOS-BIE.json +++ b/data/person/ID_NL-ZH-ROT_200X_BE-VL-KIN_XXXX_JOS-BIE.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jos-de-bie-81056329a_20251214T110445Z.json" ], - "modified_at": "2026-01-09T19:18:11.505371+00:00", + "modified_at": "2026-01-09T19:50:47.035203+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jos-de-bie-81056329a", @@ -114,7 +114,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +163,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.505365+00:00", + "inferred_at": "2026-01-09T19:50:47.035188+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_200X_NL-NH-AMS_XXXX_FLEUR-PELT.json b/data/person/ID_NL-ZH-ROT_200X_NL-NH-AMS_XXXX_FLEUR-PELT.json index dd4d412f07..feb0367791 100644 --- a/data/person/ID_NL-ZH-ROT_200X_NL-NH-AMS_XXXX_FLEUR-PELT.json +++ b/data/person/ID_NL-ZH-ROT_200X_NL-NH-AMS_XXXX_FLEUR-PELT.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fleur-van-pelt-a943a4198_20251214T110307Z.json" ], - "modified_at": "2026-01-09T19:18:15.233181+00:00", + "modified_at": "2026-01-09T19:51:07.269921+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fleur-van-pelt-a943a4198", @@ -190,7 +190,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.233176+00:00", + "inferred_at": "2026-01-09T19:51:07.269915+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_200X_NL-ZH-ROT_XXXX_DESIREE-HUIZER.json b/data/person/ID_NL-ZH-ROT_200X_NL-ZH-ROT_XXXX_DESIREE-HUIZER.json index abd806b2d6..cdd2d6f082 100644 --- a/data/person/ID_NL-ZH-ROT_200X_NL-ZH-ROT_XXXX_DESIREE-HUIZER.json +++ b/data/person/ID_NL-ZH-ROT_200X_NL-ZH-ROT_XXXX_DESIREE-HUIZER.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/desiree-huizer-bb750a193_20251214T110350Z.json" ], - "modified_at": "2026-01-09T19:18:12.360911+00:00", + "modified_at": "2026-01-09T19:51:25.389200+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "desiree-huizer-bb750a193", @@ -156,7 +156,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.360901+00:00", + "inferred_at": "2026-01-09T19:51:25.389187+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_200X_NL-ZH-ROT_XXXX_LAKSHITA-BHATTI.json b/data/person/ID_NL-ZH-ROT_200X_NL-ZH-ROT_XXXX_LAKSHITA-BHATTI.json index 528c3564d2..c4d1d0a5b3 100644 --- a/data/person/ID_NL-ZH-ROT_200X_NL-ZH-ROT_XXXX_LAKSHITA-BHATTI.json +++ b/data/person/ID_NL-ZH-ROT_200X_NL-ZH-ROT_XXXX_LAKSHITA-BHATTI.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lakshita-bhatti-034ba51b2_20251214T111128Z.json" ], - "modified_at": "2026-01-09T19:18:16.162488+00:00", + "modified_at": "2026-01-09T19:51:17.883943+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lakshita-bhatti-034ba51b2", @@ -144,7 +144,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.162483+00:00", + "inferred_at": "2026-01-09T19:51:17.883933+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_200X_NL-ZH-ROT_XXXX_SANNE-GOEDHART.json b/data/person/ID_NL-ZH-ROT_200X_NL-ZH-ROT_XXXX_SANNE-GOEDHART.json index 6e96b70b1b..af3c47f240 100644 --- a/data/person/ID_NL-ZH-ROT_200X_NL-ZH-ROT_XXXX_SANNE-GOEDHART.json +++ b/data/person/ID_NL-ZH-ROT_200X_NL-ZH-ROT_XXXX_SANNE-GOEDHART.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sanne-goedhart-6834771a6_20251214T112814Z.json" ], - "modified_at": "2026-01-09T19:18:17.449752+00:00", + "modified_at": "2026-01-09T19:51:28.148274+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sanne-goedhart-6834771a6", @@ -147,7 +147,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.449747+00:00", + "inferred_at": "2026-01-09T19:51:28.148266+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_200X_NL-ZH-TH_XXXX_TIJS-VLIET.json b/data/person/ID_NL-ZH-ROT_200X_NL-ZH-TH_XXXX_TIJS-VLIET.json index c9f006dbe5..88131759ac 100644 --- a/data/person/ID_NL-ZH-ROT_200X_NL-ZH-TH_XXXX_TIJS-VLIET.json +++ b/data/person/ID_NL-ZH-ROT_200X_NL-ZH-TH_XXXX_TIJS-VLIET.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tijsvanvliet_20251214T103112Z.json" ], - "modified_at": "2026-01-09T19:18:17.116502+00:00", + "modified_at": "2026-01-09T19:51:23.913815+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tijsvanvliet", @@ -157,7 +157,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.116498+00:00", + "inferred_at": "2026-01-09T19:51:23.913812+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_200X_NL-ZH-VLA_XXXX_LORENZO-HALEVY.json b/data/person/ID_NL-ZH-ROT_200X_NL-ZH-VLA_XXXX_LORENZO-HALEVY.json index 1a318a1e44..7504f5d3c0 100644 --- a/data/person/ID_NL-ZH-ROT_200X_NL-ZH-VLA_XXXX_LORENZO-HALEVY.json +++ b/data/person/ID_NL-ZH-ROT_200X_NL-ZH-VLA_XXXX_LORENZO-HALEVY.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lorenzo-halevy-460ba71b2_20251214T112634Z.json" ], - "modified_at": "2026-01-09T19:18:16.142995+00:00", + "modified_at": "2026-01-09T19:51:17.605255+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lorenzo-halevy-460ba71b2", @@ -136,7 +136,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.142990+00:00", + "inferred_at": "2026-01-09T19:51:17.605248+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_200X_XX-XX-XXX_XXXX_DIONYSIA-DINIUS.json b/data/person/ID_NL-ZH-ROT_200X_XX-XX-XXX_XXXX_DIONYSIA-DINIUS.json index 5044d18a21..7482c199b9 100644 --- a/data/person/ID_NL-ZH-ROT_200X_XX-XX-XXX_XXXX_DIONYSIA-DINIUS.json +++ b/data/person/ID_NL-ZH-ROT_200X_XX-XX-XXX_XXXX_DIONYSIA-DINIUS.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dionysia-dinius-b9a967225_20251214T103331Z.json" ], - "modified_at": "2026-01-09T19:18:13.962140+00:00", + "modified_at": "2026-01-09T19:50:56.905548+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dionysia-dinius-b9a967225", @@ -169,7 +169,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +218,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.957253+00:00", + "inferred_at": "2026-01-09T19:50:56.894788+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_200X_XX-XX-XXX_XXXX_MEREL-HAVERKAMP.json b/data/person/ID_NL-ZH-ROT_200X_XX-XX-XXX_XXXX_MEREL-HAVERKAMP.json index 7087b56b88..ae181c73c3 100644 --- a/data/person/ID_NL-ZH-ROT_200X_XX-XX-XXX_XXXX_MEREL-HAVERKAMP.json +++ b/data/person/ID_NL-ZH-ROT_200X_XX-XX-XXX_XXXX_MEREL-HAVERKAMP.json @@ -206,7 +206,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merelhaverkamp_20251214T102759Z.json" ], - "modified_at": "2026-01-09T19:18:15.384967+00:00", + "modified_at": "2026-01-09T19:51:08.640979+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merelhaverkamp", @@ -234,7 +234,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -283,7 +283,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.383064+00:00", + "inferred_at": "2026-01-09T19:51:08.633949+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ROT_200X_XX-XX-XXX_XXXX_RICK-HOEK.json b/data/person/ID_NL-ZH-ROT_200X_XX-XX-XXX_XXXX_RICK-HOEK.json index 4d36ce817c..3b45fea0e6 100644 --- a/data/person/ID_NL-ZH-ROT_200X_XX-XX-XXX_XXXX_RICK-HOEK.json +++ b/data/person/ID_NL-ZH-ROT_200X_XX-XX-XXX_XXXX_RICK-HOEK.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rick-van-der-hoek-21a864171_20251214T112431Z.json" ], - "modified_at": "2026-01-09T19:18:13.370544+00:00", + "modified_at": "2026-01-09T19:50:53.943870+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rick-van-der-hoek-21a864171", @@ -151,7 +151,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.368674+00:00", + "inferred_at": "2026-01-09T19:50:53.940536+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-SCH_200X_NL-ZH-ROT_XXXX_BRITT-BENNEKOM.json b/data/person/ID_NL-ZH-SCH_200X_NL-ZH-ROT_XXXX_BRITT-BENNEKOM.json index cc867f7c0f..03ac4c8b32 100644 --- a/data/person/ID_NL-ZH-SCH_200X_NL-ZH-ROT_XXXX_BRITT-BENNEKOM.json +++ b/data/person/ID_NL-ZH-SCH_200X_NL-ZH-ROT_XXXX_BRITT-BENNEKOM.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/brittvanbennekom_20251214T110117Z.json" ], - "modified_at": "2026-01-09T19:18:15.317825+00:00", + "modified_at": "2026-01-09T19:51:08.534698+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "brittvanbennekom", @@ -144,7 +144,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.317821+00:00", + "inferred_at": "2026-01-09T19:51:08.534687+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-SLI_198X_NL-ZH-DOR_XXXX_INGRID-HUIZER.json b/data/person/ID_NL-ZH-SLI_198X_NL-ZH-DOR_XXXX_INGRID-HUIZER.json index 49b746c077..fe9550daa3 100644 --- a/data/person/ID_NL-ZH-SLI_198X_NL-ZH-DOR_XXXX_INGRID-HUIZER.json +++ b/data/person/ID_NL-ZH-SLI_198X_NL-ZH-DOR_XXXX_INGRID-HUIZER.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ingrid-huizer-7b826927_20251214T112609Z.json" ], - "modified_at": "2026-01-09T19:18:16.202100+00:00", + "modified_at": "2026-01-09T19:51:18.293865+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ingrid-huizer-7b826927", @@ -148,7 +148,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.202097+00:00", + "inferred_at": "2026-01-09T19:51:18.293859+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TA_199X_NL-NB-EIN_XXXX_VICTOR-OGUNMODEDE.json b/data/person/ID_NL-ZH-TA_199X_NL-NB-EIN_XXXX_VICTOR-OGUNMODEDE.json index 8ab3958124..720bcd7f23 100644 --- a/data/person/ID_NL-ZH-TA_199X_NL-NB-EIN_XXXX_VICTOR-OGUNMODEDE.json +++ b/data/person/ID_NL-ZH-TA_199X_NL-NB-EIN_XXXX_VICTOR-OGUNMODEDE.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/victor-ogunmodede-a3b363110_20251214T110836Z.json" ], - "modified_at": "2026-01-09T19:18:16.295080+00:00", + "modified_at": "2026-01-09T19:51:18.384044+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "victor-ogunmodede-a3b363110", @@ -152,7 +152,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.295071+00:00", + "inferred_at": "2026-01-09T19:51:18.384038+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_195X_NL-ZH-TH_XXXX_CAICO-KOEK.json b/data/person/ID_NL-ZH-TH_195X_NL-ZH-TH_XXXX_CAICO-KOEK.json index 9ecffc1052..98fb074df0 100644 --- a/data/person/ID_NL-ZH-TH_195X_NL-ZH-TH_XXXX_CAICO-KOEK.json +++ b/data/person/ID_NL-ZH-TH_195X_NL-ZH-TH_XXXX_CAICO-KOEK.json @@ -302,7 +302,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mariankoek_20251214T103153Z.json" ], - "modified_at": "2026-01-09T19:18:16.055102+00:00", + "modified_at": "2026-01-09T19:51:28.391175+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mariankoek", @@ -340,7 +340,7 @@ "primary_rationale": "1957 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -389,7 +389,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1957 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.055094+00:00", + "inferred_at": "2026-01-09T19:51:28.391170+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_195X_NL-ZH-TH_XXXX_JAAP-HART.json b/data/person/ID_NL-ZH-TH_195X_NL-ZH-TH_XXXX_JAAP-HART.json index 49fbec026a..9e22ae8d50 100644 --- a/data/person/ID_NL-ZH-TH_195X_NL-ZH-TH_XXXX_JAAP-HART.json +++ b/data/person/ID_NL-ZH-TH_195X_NL-ZH-TH_XXXX_JAAP-HART.json @@ -134,7 +134,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jaap-t-hart-27936a6_20251214T112546Z.json" ], - "modified_at": "2026-01-09T19:18:15.953491+00:00", + "modified_at": "2026-01-09T19:50:58.665037+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jaap-t-hart-27936a6", @@ -166,7 +166,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +207,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.953483+00:00", + "inferred_at": "2026-01-09T19:50:58.665029+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_196X_NL-NH-AMS_XXXX_BETTY-BEUNK.json b/data/person/ID_NL-ZH-TH_196X_NL-NH-AMS_XXXX_BETTY-BEUNK.json index add0291c9c..b6c28ed798 100644 --- a/data/person/ID_NL-ZH-TH_196X_NL-NH-AMS_XXXX_BETTY-BEUNK.json +++ b/data/person/ID_NL-ZH-TH_196X_NL-NH-AMS_XXXX_BETTY-BEUNK.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bettybeunk_20251214T110500Z.json" ], - "modified_at": "2026-01-09T19:18:16.115123+00:00", + "modified_at": "2026-01-09T19:51:17.561192+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bettybeunk", @@ -153,7 +153,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.115119+00:00", + "inferred_at": "2026-01-09T19:51:17.561185+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_196X_NL-NH-AMS_XXXX_PETER-ASSENDELFT.json b/data/person/ID_NL-ZH-TH_196X_NL-NH-AMS_XXXX_PETER-ASSENDELFT.json index 70b16c7db3..72d29e5379 100644 --- a/data/person/ID_NL-ZH-TH_196X_NL-NH-AMS_XXXX_PETER-ASSENDELFT.json +++ b/data/person/ID_NL-ZH-TH_196X_NL-NH-AMS_XXXX_PETER-ASSENDELFT.json @@ -223,7 +223,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/peter-assendelft-6b58386_20251214T103243Z.json" ], - "modified_at": "2026-01-09T19:18:16.605916+00:00", + "modified_at": "2026-01-09T19:51:20.531413+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "peter-assendelft-6b58386", @@ -252,7 +252,7 @@ "primary_rationale": "1964 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -301,7 +301,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1964 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.605912+00:00", + "inferred_at": "2026-01-09T19:51:20.531408+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_196X_NL-ZH-TH_XXXX_JOYCE-NIJSSEN.json b/data/person/ID_NL-ZH-TH_196X_NL-ZH-TH_XXXX_JOYCE-NIJSSEN.json index a2a72e8ad8..b11b94617f 100644 --- a/data/person/ID_NL-ZH-TH_196X_NL-ZH-TH_XXXX_JOYCE-NIJSSEN.json +++ b/data/person/ID_NL-ZH-TH_196X_NL-ZH-TH_XXXX_JOYCE-NIJSSEN.json @@ -174,7 +174,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joyce-nijssen-b289b29_20251214T103342Z.json" ], - "modified_at": "2026-01-09T19:18:17.291199+00:00", + "modified_at": "2026-01-09T19:51:13.554773+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joyce-nijssen-b289b29", @@ -206,7 +206,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +247,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.291193+00:00", + "inferred_at": "2026-01-09T19:51:13.554766+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_196X_NL-ZH-WAS_XXXX_PAUL-IJSSEL.json b/data/person/ID_NL-ZH-TH_196X_NL-ZH-WAS_XXXX_PAUL-IJSSEL.json index 840e87a1fc..a32c8d9731 100644 --- a/data/person/ID_NL-ZH-TH_196X_NL-ZH-WAS_XXXX_PAUL-IJSSEL.json +++ b/data/person/ID_NL-ZH-TH_196X_NL-ZH-WAS_XXXX_PAUL-IJSSEL.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paul-van-den-ijssel-92882419_20251214T103330Z.json" ], - "modified_at": "2026-01-09T19:18:12.849639+00:00", + "modified_at": "2026-01-09T19:50:49.075681+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paul-van-den-ijssel-92882419", @@ -146,7 +146,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.849632+00:00", + "inferred_at": "2026-01-09T19:50:49.075674+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_196X_XX-XX-XXX_XXXX_INGRID-KORVERKUIJPERS.json b/data/person/ID_NL-ZH-TH_196X_XX-XX-XXX_XXXX_INGRID-KORVERKUIJPERS.json index e24f1e22e6..44b530c5c6 100644 --- a/data/person/ID_NL-ZH-TH_196X_XX-XX-XXX_XXXX_INGRID-KORVERKUIJPERS.json +++ b/data/person/ID_NL-ZH-TH_196X_XX-XX-XXX_XXXX_INGRID-KORVERKUIJPERS.json @@ -255,7 +255,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ingridkorver_20251214T110519Z.json" ], - "modified_at": "2026-01-09T19:18:13.885917+00:00", + "modified_at": "2026-01-09T19:50:47.166162+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ingridkorver", @@ -292,7 +292,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -341,7 +341,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.881911+00:00", + "inferred_at": "2026-01-09T19:50:47.152557+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_196X_XX-XX-XXX_XXXX_SANDRA-PELLEGROM.json b/data/person/ID_NL-ZH-TH_196X_XX-XX-XXX_XXXX_SANDRA-PELLEGROM.json index 723153b36c..564e156d32 100644 --- a/data/person/ID_NL-ZH-TH_196X_XX-XX-XXX_XXXX_SANDRA-PELLEGROM.json +++ b/data/person/ID_NL-ZH-TH_196X_XX-XX-XXX_XXXX_SANDRA-PELLEGROM.json @@ -183,7 +183,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sandra-pellegrom-b9639912_20251214T102855Z.json" ], - "modified_at": "2026-01-09T19:18:16.597215+00:00", + "modified_at": "2026-01-09T19:51:20.519245+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sandra-pellegrom-b9639912", @@ -211,7 +211,7 @@ "primary_rationale": "1961 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -260,7 +260,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1961 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.593557+00:00", + "inferred_at": "2026-01-09T19:51:20.515630+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_MARJAN-HERSCHEIT.json b/data/person/ID_NL-ZH-TH_197X_AT-09-VIE_XXXX_MARJAN-HERSCHEIT.json similarity index 73% rename from data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_MARJAN-HERSCHEIT.json rename to data/person/ID_NL-ZH-TH_197X_AT-09-VIE_XXXX_MARJAN-HERSCHEIT.json index 8219f30c3c..667e14c4ae 100644 --- a/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_MARJAN-HERSCHEIT.json +++ b/data/person/ID_NL-ZH-TH_197X_AT-09-VIE_XXXX_MARJAN-HERSCHEIT.json @@ -1,11 +1,11 @@ { - "ppid": "ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_MARJAN-HERSCHEIT", + "ppid": "ID_NL-ZH-TH_197X_AT-09-VIE_XXXX_MARJAN-HERSCHEIT", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "NL-ZH-TH", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AT-09-VIE", "last_date": "XXXX", "name_tokens": [ "MARJAN", @@ -15,7 +15,8 @@ "first_location_source": "inferred_birth_settlement", "first_date_alternatives": [ "196X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "marjan herscheit", @@ -132,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjan-herscheit-82b51713_20251214T103305Z.json" ], - "modified_at": "2026-01-09T19:18:17.349623+00:00", + "modified_at": "2026-01-09T19:51:26.676130+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjan-herscheit-82b51713", @@ -146,6 +147,16 @@ "inferred_birth_decade", "inferred_birth_settlement" ] + }, + { + "previous_ppid": "ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_MARJAN-HERSCHEIT", + "new_ppid": "ID_NL-ZH-TH_197X_AT-09-VIE_XXXX_MARJAN-HERSCHEIT", + "changed_at": "2026-01-09T19:51:26.676127+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -160,7 +171,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +220,70 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.344083+00:00", + "inferred_at": "2026-01-09T19:51:26.639617+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Vienna", + "formatted": "AT-09-VIE", + "country_code": "AT", + "region_code": "09", + "settlement_code": "VIE", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Netherlands (NL)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministerie van Buitenlandse Zaken", + "title": "Operational Manager", + "location": "Vienna, Austria" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Vienna, Austria", + "result": { + "geonames_id": 2761369, + "geonames_name": "Vienna", + "admin1_code": "09", + "admin1_name": "Vienna", + "feature_code": "PPLC", + "latitude": 48.20849, + "longitude": 16.37208 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "AT-09-VIE" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 2761369, + "geonames_name": "Vienna", + "admin1_code": "09", + "admin1_name": "Vienna", + "feature_code": "PPLC", + "latitude": 48.20849, + "longitude": 16.37208 + }, + "inferred_at": "2026-01-09T19:51:26.676107+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-NB-VEL_XXXX_ALEXANDER-BRINK.json b/data/person/ID_NL-ZH-TH_197X_NL-NB-VEL_XXXX_ALEXANDER-BRINK.json index 9b565d491b..31576f323b 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-NB-VEL_XXXX_ALEXANDER-BRINK.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-NB-VEL_XXXX_ALEXANDER-BRINK.json @@ -240,7 +240,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alexanderbrink_20251214T110822Z.json" ], - "modified_at": "2026-01-09T19:18:14.045383+00:00", + "modified_at": "2026-01-09T19:50:58.556360+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alexanderbrink", @@ -269,7 +269,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -318,7 +318,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.045379+00:00", + "inferred_at": "2026-01-09T19:50:58.556351+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-NB-VEL_XXXX_JEROEN-STEGGINK.json b/data/person/ID_NL-ZH-TH_197X_NL-NB-VEL_XXXX_JEROEN-STEGGINK.json index c9667a315f..24e9d0665d 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-NB-VEL_XXXX_JEROEN-STEGGINK.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-NB-VEL_XXXX_JEROEN-STEGGINK.json @@ -183,7 +183,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeroensteggink_20251214T111030Z.json" ], - "modified_at": "2026-01-09T19:18:15.309832+00:00", + "modified_at": "2026-01-09T19:51:08.507228+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeroensteggink", @@ -212,7 +212,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -261,7 +261,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.309828+00:00", + "inferred_at": "2026-01-09T19:51:08.507221+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-NH-AMS_XXXX_FRANS-HORST.json b/data/person/ID_NL-ZH-TH_197X_NL-NH-AMS_XXXX_FRANS-HORST.json index 1b9271a245..768dba6253 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-NH-AMS_XXXX_FRANS-HORST.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-NH-AMS_XXXX_FRANS-HORST.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frans-van-der-horst-63167916_20251214T113138Z.json" ], - "modified_at": "2026-01-09T19:18:12.954600+00:00", + "modified_at": "2026-01-09T19:50:58.974421+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frans-van-der-horst-63167916", @@ -177,7 +177,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -226,7 +226,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.954591+00:00", + "inferred_at": "2026-01-09T19:50:58.974412+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-NH-AMS_XXXX_MISCHA-KOPPENBERG.json b/data/person/ID_NL-ZH-TH_197X_NL-NH-AMS_XXXX_MISCHA-KOPPENBERG.json index db47b6fd0e..44465c6e45 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-NH-AMS_XXXX_MISCHA-KOPPENBERG.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-NH-AMS_XXXX_MISCHA-KOPPENBERG.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mischa-koppenberg-8818121a_20251214T103110Z.json" ], - "modified_at": "2026-01-09T19:18:16.857237+00:00", + "modified_at": "2026-01-09T19:51:22.318447+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mischa-koppenberg-8818121a", @@ -149,7 +149,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.857233+00:00", + "inferred_at": "2026-01-09T19:51:22.318441+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_THOMAS-CASTRO.json b/data/person/ID_NL-ZH-TH_197X_NL-NH-AMS_XXXX_THOMAS-CASTRO.json similarity index 76% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_THOMAS-CASTRO.json rename to data/person/ID_NL-ZH-TH_197X_NL-NH-AMS_XXXX_THOMAS-CASTRO.json index 70a4f2d1b2..6b23ce61f8 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_THOMAS-CASTRO.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-NH-AMS_XXXX_THOMAS-CASTRO.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_THOMAS-CASTRO", + "ppid": "ID_NL-ZH-TH_197X_NL-NH-AMS_XXXX_THOMAS-CASTRO", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-ZH-TH", + "first_date": "197X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "THOMAS", "CASTRO" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Thomas Castro", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -181,73 +187,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/trmcastro_20251214T115050Z.json" ], - "modified_at": "2026-01-09T18:58:13.879926+00:00", + "modified_at": "2026-01-09T19:51:29.261308+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "trmcastro", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Netherlands" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "Stedelijk Museum Amsterdam", - "title": "Curator/Conservator of Graphic Design", - "location": "Amsterdam, Netherlands" - } - }, - { - "step": 3, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 4, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T18:58:13.879907+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_THOMAS-CASTRO", @@ -257,6 +200,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_THOMAS-CASTRO", + "new_ppid": "ID_NL-ZH-TH_197X_NL-NH-AMS_XXXX_THOMAS-CASTRO", + "changed_at": "2026-01-09T19:43:39.900064+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1973 is in 197X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "LUST / LUSTLab", + "title": "Co-founder", + "date_range": "1996" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1996 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1996 - 23 = 1973", + "result": "Estimated birth year: 1973", + "range": "1968-1978 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1968, + 1978 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:51:29.261302+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-ZH-TH_197X_NL-UT-HOU_XXXX_RONALD-HUIZER.json b/data/person/ID_NL-ZH-TH_197X_NL-UT-HOU_XXXX_RONALD-HUIZER.json index 9cafd4eaef..cd8dd50e92 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-UT-HOU_XXXX_RONALD-HUIZER.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-UT-HOU_XXXX_RONALD-HUIZER.json @@ -199,7 +199,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rhuizer_20251214T113318Z.json" ], - "modified_at": "2026-01-09T19:18:17.543413+00:00", + "modified_at": "2026-01-09T19:51:28.399798+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rhuizer", @@ -228,7 +228,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -277,7 +277,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.543406+00:00", + "inferred_at": "2026-01-09T19:51:28.399794+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-UT-UTR_XXXX_BEATRICE-GRAAF.json b/data/person/ID_NL-ZH-TH_197X_NL-UT-UTR_XXXX_BEATRICE-GRAAF.json index 4636ad494f..a1dcbf8772 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-UT-UTR_XXXX_BEATRICE-GRAAF.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-UT-UTR_XXXX_BEATRICE-GRAAF.json @@ -201,7 +201,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/beatrice-de-graaf-93630a6_20251214T113320Z.json" ], - "modified_at": "2026-01-09T19:18:13.791428+00:00", + "modified_at": "2026-01-09T19:50:59.308997+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "beatrice-de-graaf-93630a6", @@ -233,7 +233,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -274,7 +274,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.791423+00:00", + "inferred_at": "2026-01-09T19:50:59.308989+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-DEL_XXXX_ANJALIE-RAMKISOR.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-DEL_XXXX_ANJALIE-RAMKISOR.json index 6709cf5047..992a92e757 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-DEL_XXXX_ANJALIE-RAMKISOR.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-DEL_XXXX_ANJALIE-RAMKISOR.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anjalieramkisor_20251214T103217Z.json" ], - "modified_at": "2026-01-09T19:18:12.358210+00:00", + "modified_at": "2026-01-09T19:51:07.661878+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anjalieramkisor", @@ -207,7 +207,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -248,7 +248,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.358197+00:00", + "inferred_at": "2026-01-09T19:51:07.661870+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-LEI_XXXX_VAN-WOLF.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-LEI_XXXX_VAN-WOLF.json index 776863d95d..2abc5dcde6 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-LEI_XXXX_VAN-WOLF.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-LEI_XXXX_VAN-WOLF.json @@ -159,7 +159,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/victor-wolf-van-der-b59aa86_20251214T113244Z.json" ], - "modified_at": "2026-01-09T19:18:14.343645+00:00", + "modified_at": "2026-01-09T19:51:00.912936+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "victor-wolf-van-der-b59aa86", @@ -188,7 +188,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -237,7 +237,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.343636+00:00", + "inferred_at": "2026-01-09T19:51:00.912928+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-RIJ_XXXX_DAVID-TJIOE.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-RIJ_XXXX_DAVID-TJIOE.json index e3adaab61f..7fa916643b 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-RIJ_XXXX_DAVID-TJIOE.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-RIJ_XXXX_DAVID-TJIOE.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dtjioe_20251214T103325Z.json" ], - "modified_at": "2026-01-09T19:18:14.766080+00:00", + "modified_at": "2026-01-09T19:51:04.050273+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dtjioe", @@ -170,7 +170,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -219,7 +219,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.766075+00:00", + "inferred_at": "2026-01-09T19:51:04.050267+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_BERTIL-VOOGD.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_BERTIL-VOOGD.json index bc791cf16b..711d854081 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_BERTIL-VOOGD.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_BERTIL-VOOGD.json @@ -193,7 +193,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bertilvoogd_20251214T113426Z.json" ], - "modified_at": "2026-01-09T19:18:14.237606+00:00", + "modified_at": "2026-01-09T19:50:58.947710+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bertilvoogd", @@ -222,7 +222,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -271,7 +271,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.237601+00:00", + "inferred_at": "2026-01-09T19:50:58.947705+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_DUSANKA-LATINOVIC.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_DUSANKA-LATINOVIC.json index 569cdf4c15..454915683e 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_DUSANKA-LATINOVIC.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_DUSANKA-LATINOVIC.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dusanka-djeric-latinovic-6a43718_20251214T112119Z.json" ], - "modified_at": "2026-01-09T19:18:15.545314+00:00", + "modified_at": "2026-01-09T19:51:12.018305+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dusanka-djeric-latinovic-6a43718", @@ -142,7 +142,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.545308+00:00", + "inferred_at": "2026-01-09T19:51:12.018299+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_ELS-BRENNINKMEIJER.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_ELS-BRENNINKMEIJER.json index 57d4c60ffa..ca3e475d9a 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_ELS-BRENNINKMEIJER.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_ELS-BRENNINKMEIJER.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elsbrenninkmeijer_20251214T102924Z.json" ], - "modified_at": "2026-01-09T19:18:17.566393+00:00", + "modified_at": "2026-01-09T19:51:28.432200+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elsbrenninkmeijer", @@ -142,7 +142,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.566386+00:00", + "inferred_at": "2026-01-09T19:51:28.432196+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_ESTHER-KLOET.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_ESTHER-KLOET.json index f14742bcb4..cb789e5359 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_ESTHER-KLOET.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_ESTHER-KLOET.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/esther-kloet-12849622_20251214T112658Z.json" ], - "modified_at": "2026-01-09T19:18:15.746158+00:00", + "modified_at": "2026-01-09T19:51:14.184000+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "esther-kloet-12849622", @@ -142,7 +142,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.746154+00:00", + "inferred_at": "2026-01-09T19:51:14.183994+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_GERBEN-PLANTING.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_GERBEN-PLANTING.json index 0c4a0799fb..0a2b62c643 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_GERBEN-PLANTING.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_GERBEN-PLANTING.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerben-planting-915a8510_20251214T102759Z.json" ], - "modified_at": "2026-01-09T19:18:13.170904+00:00", + "modified_at": "2026-01-09T19:50:53.214280+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerben-planting-915a8510", @@ -130,7 +130,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.170899+00:00", + "inferred_at": "2026-01-09T19:50:53.214262+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_GERRIE-WILLEMS.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_GERRIE-WILLEMS.json index 8e75a53914..599f9af829 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_GERRIE-WILLEMS.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_GERRIE-WILLEMS.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerrie-willems-7563a828_20251214T103037Z.json" ], - "modified_at": "2026-01-09T19:18:15.462909+00:00", + "modified_at": "2026-01-09T19:51:11.025777+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerrie-willems-7563a828", @@ -145,7 +145,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.462904+00:00", + "inferred_at": "2026-01-09T19:51:11.025766+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JACCO-HOOGE.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JACCO-HOOGE.json index 92dd2c75a7..7795ee4af4 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JACCO-HOOGE.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JACCO-HOOGE.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jaccodehooge_20251214T103313Z.json" ], - "modified_at": "2026-01-09T19:18:15.044788+00:00", + "modified_at": "2026-01-09T19:51:06.649242+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jaccodehooge", @@ -154,7 +154,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.044782+00:00", + "inferred_at": "2026-01-09T19:51:06.649238+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JACQUELINE-TEGELAAR.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JACQUELINE-TEGELAAR.json index 1b4301c5de..5f60e0872a 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JACQUELINE-TEGELAAR.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JACQUELINE-TEGELAAR.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jacquelinetegelaar_20251214T112726Z.json" ], - "modified_at": "2026-01-09T19:18:14.007236+00:00", + "modified_at": "2026-01-09T19:50:58.037374+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jacquelinetegelaar", @@ -210,7 +210,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.007232+00:00", + "inferred_at": "2026-01-09T19:50:58.037359+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JEROEN-VUUREN.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JEROEN-VUUREN.json index 5451fcb1a8..56b9aebca6 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JEROEN-VUUREN.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JEROEN-VUUREN.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeroenvanvuuren_20251214T113243Z.json" ], - "modified_at": "2026-01-09T19:18:17.857800+00:00", + "modified_at": "2026-01-09T19:51:28.827964+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeroenvanvuuren", @@ -157,7 +157,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.857766+00:00", + "inferred_at": "2026-01-09T19:51:28.827957+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JOYCE-SIMONS.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JOYCE-SIMONS.json index 231385f41e..796d26cff5 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JOYCE-SIMONS.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_JOYCE-SIMONS.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joyce-simons-23415634_20251214T103202Z.json" ], - "modified_at": "2026-01-09T19:18:12.944485+00:00", + "modified_at": "2026-01-09T19:50:49.145167+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joyce-simons-23415634", @@ -173,7 +173,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.944465+00:00", + "inferred_at": "2026-01-09T19:50:49.145162+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_KLAUS-RIJK.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_KLAUS-RIJK.json index 966c467df8..794d4c18b2 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_KLAUS-RIJK.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_KLAUS-RIJK.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/klaus-de-rijk-0a918811_20251214T102856Z.json" ], - "modified_at": "2026-01-09T19:18:15.532584+00:00", + "modified_at": "2026-01-09T19:51:11.846926+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "klaus-de-rijk-0a918811", @@ -159,7 +159,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.532580+00:00", + "inferred_at": "2026-01-09T19:51:11.846897+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_MICHIEL-VALKENBURCHT.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_MICHIEL-VALKENBURCHT.json index 89602f4590..00a0e423f3 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_MICHIEL-VALKENBURCHT.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_MICHIEL-VALKENBURCHT.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michiel-valkenburcht-651a5618_20251214T112409Z.json" ], - "modified_at": "2026-01-09T19:18:15.170682+00:00", + "modified_at": "2026-01-09T19:51:06.976505+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michiel-valkenburcht-651a5618", @@ -143,7 +143,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.170676+00:00", + "inferred_at": "2026-01-09T19:51:06.976498+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_THOM-KLUCK.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_THOM-KLUCK.json index 144d1f161f..9bf692035e 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_THOM-KLUCK.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_THOM-KLUCK.json @@ -179,7 +179,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thomkluck_20251214T102949Z.json" ], - "modified_at": "2026-01-09T19:18:13.792593+00:00", + "modified_at": "2026-01-09T19:50:56.585204+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thomkluck", @@ -208,7 +208,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -257,7 +257,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.792588+00:00", + "inferred_at": "2026-01-09T19:50:56.585197+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_WENDELA-HARINGHUIZEN.json b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_WENDELA-HARINGHUIZEN.json index 300eecd046..c95a797413 100644 --- a/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_WENDELA-HARINGHUIZEN.json +++ b/data/person/ID_NL-ZH-TH_197X_NL-ZH-TH_XXXX_WENDELA-HARINGHUIZEN.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wendela-haringhuizen-b244959_20251214T103011Z.json" ], - "modified_at": "2026-01-09T19:18:14.583543+00:00", + "modified_at": "2026-01-09T19:51:01.937276+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wendela-haringhuizen-b244959", @@ -154,7 +154,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.583538+00:00", + "inferred_at": "2026-01-09T19:51:01.937268+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_ASTRID-CAPELLEVEEN.json b/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_ASTRID-CAPELLEVEEN.json index 8d682b1c56..2013134c04 100644 --- a/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_ASTRID-CAPELLEVEEN.json +++ b/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_ASTRID-CAPELLEVEEN.json @@ -255,7 +255,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/astrid-huiskens-e-v-van-capelleveen-aab9b945_20251214T102839Z.json" ], - "modified_at": "2026-01-09T19:18:15.247463+00:00", + "modified_at": "2026-01-09T19:51:07.291488+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "astrid-huiskens-e-v-van-capelleveen-aab9b945", @@ -283,7 +283,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -332,7 +332,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.243642+00:00", + "inferred_at": "2026-01-09T19:51:07.282408+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_CHRISTIAAN-REBERGEN.json b/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_CHRISTIAAN-REBERGEN.json index bb46827009..aecb4d44c6 100644 --- a/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_CHRISTIAAN-REBERGEN.json +++ b/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_CHRISTIAAN-REBERGEN.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/christiaan-rebergen-56ba2416_20251214T103052Z.json" ], - "modified_at": "2026-01-09T19:18:14.266137+00:00", + "modified_at": "2026-01-09T19:50:59.782739+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "christiaan-rebergen-56ba2416", @@ -158,7 +158,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +207,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.264286+00:00", + "inferred_at": "2026-01-09T19:50:59.767933+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_HELEEN-BAKKER.json b/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_HELEEN-BAKKER.json index f8b9b2447d..0b6ce1e1d0 100644 --- a/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_HELEEN-BAKKER.json +++ b/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_HELEEN-BAKKER.json @@ -167,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/heleen-bakker-5b04b81b_20251214T103058Z.json" ], - "modified_at": "2026-01-09T19:18:16.239056+00:00", + "modified_at": "2026-01-09T19:51:18.328653+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "heleen-bakker-5b04b81b", @@ -195,7 +195,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -244,7 +244,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.236180+00:00", + "inferred_at": "2026-01-09T19:51:18.326488+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_JOEY-PIJKEREN.json b/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_JOEY-PIJKEREN.json index 5abe927f5a..79084e4662 100644 --- a/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_JOEY-PIJKEREN.json +++ b/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_JOEY-PIJKEREN.json @@ -187,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joeypijkeren_20251214T103106Z.json" ], - "modified_at": "2026-01-09T19:18:15.872658+00:00", + "modified_at": "2026-01-09T19:51:14.947727+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joeypijkeren", @@ -215,7 +215,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -264,7 +264,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.870821+00:00", + "inferred_at": "2026-01-09T19:51:14.945577+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PROF-MIERT.json b/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_PROF-MIERT.json similarity index 71% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PROF-MIERT.json rename to data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_PROF-MIERT.json index 1c46e93f40..51b03d01a7 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PROF-MIERT.json +++ b/data/person/ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_PROF-MIERT.json @@ -1,16 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PROF-MIERT", + "ppid": "ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_PROF-MIERT", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-ZH-TH", + "first_date": "197X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "PROF", "MIERT" - ] + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Prof. dr. Dirk van Miert", @@ -24,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -204,8 +210,10 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T00:25:00Z", + "result": "not_found", + "notes": "Exa search found CV and academic profile but no birth date. Search query: \"Dirk van Miert\" Utrecht professor born birthday biography" } }, "provenance": { @@ -213,7 +221,86 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dirkvanmiert_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:53.275242+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "dirkvanmiert" + "linkedin_slug": "dirkvanmiert", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PROF-MIERT", + "new_ppid": "ID_NL-ZH-TH_197X_XX-XX-XXX_XXXX_PROF-MIERT", + "changed_at": "2026-01-09T19:43:39.847237+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1975 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Constantijn Huygens Institute (KNAW)", + "title": "Research Assistant", + "date_range": "1998 - 1999" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1998 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1998 - 23 = 1975", + "result": "Estimated birth year: 1975", + "range": "1970-1980 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1970, + 1980 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:50:53.271987+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-ZH-TH_198X_NL-GE-APE_XXXX_SJENG-PHO.json b/data/person/ID_NL-ZH-TH_198X_NL-GE-APE_XXXX_SJENG-PHO.json index 1d6156a520..e34a354898 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-GE-APE_XXXX_SJENG-PHO.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-GE-APE_XXXX_SJENG-PHO.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sjeng-pho-35946582_20251214T112912Z.json" ], - "modified_at": "2026-01-09T19:18:17.778976+00:00", + "modified_at": "2026-01-09T19:51:13.532810+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sjeng-pho-35946582", @@ -183,7 +183,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +224,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.778967+00:00", + "inferred_at": "2026-01-09T19:51:13.532803+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-LENDERS.json b/data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_ANNE-LENDERS.json similarity index 63% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-LENDERS.json rename to data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_ANNE-LENDERS.json index 7c38567959..8a8aeb5eb8 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-LENDERS.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_ANNE-LENDERS.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-LENDERS", + "ppid": "ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_ANNE-LENDERS", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-ZH-TH", + "first_date": "198X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ANNE", "LENDERS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Anne Lenders", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -114,73 +120,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-lenders-2ab0901b_20251214T111520Z.json" ], - "modified_at": "2026-01-09T18:58:13.564849+00:00", + "modified_at": "2026-01-09T19:50:53.678371+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-lenders-2ab0901b", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Netherlands (NL)" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "Rijksmuseum", - "title": "Curator of 17th-Century Dutch Painting", - "location": "Amsterdam, The Netherlands" - } - }, - { - "step": 3, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, The Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 4, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T18:58:13.564830+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNE-LENDERS", @@ -190,6 +133,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ANNE-LENDERS", + "new_ppid": "ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_ANNE-LENDERS", + "changed_at": "2026-01-09T19:43:41.012371+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1989 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Mauritshuis", + "title": "Assistant Curator", + "date_range": "by July 2012 - before 2024" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2012 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2012 - 23 = 1989", + "result": "Estimated birth year: 1989", + "range": "1984-1994 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1984, + 1994 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:53.678363+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_BARBARA-TEDDER.json b/data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_BARBARA-TEDDER.json index cde982859f..4ed25539f9 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_BARBARA-TEDDER.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_BARBARA-TEDDER.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/barbara-tedder-5563169_20251214T111809Z.json" ], - "modified_at": "2026-01-09T19:18:15.732747+00:00", + "modified_at": "2026-01-09T19:50:53.227260+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "barbara-tedder-5563169", @@ -202,7 +202,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -251,7 +251,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.732742+00:00", + "inferred_at": "2026-01-09T19:50:53.227253+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_BERNA-KESKINDEMIR.json b/data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_BERNA-KESKINDEMIR.json index 2578f33a93..c5f067b8bc 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_BERNA-KESKINDEMIR.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_BERNA-KESKINDEMIR.json @@ -195,7 +195,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/berna-keskindemir-a47735126_20251214T112610Z.json" ], - "modified_at": "2026-01-09T19:18:15.947094+00:00", + "modified_at": "2026-01-09T19:50:56.566094+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "berna-keskindemir-a47735126", @@ -233,7 +233,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -282,7 +282,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.947085+00:00", + "inferred_at": "2026-01-09T19:50:56.566088+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_HANS-DOCTER.json b/data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_HANS-DOCTER.json index 426eed4ac1..ae50dcf967 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_HANS-DOCTER.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-NH-AMS_XXXX_HANS-DOCTER.json @@ -150,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hans-docter-5910a47_20251214T103313Z.json" ], - "modified_at": "2026-01-09T19:18:15.295645+00:00", + "modified_at": "2026-01-09T19:51:08.427449+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hans-docter-5910a47", @@ -179,7 +179,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.295641+00:00", + "inferred_at": "2026-01-09T19:51:08.427441+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-OV-HEN_XXXX_TJERK-TIELENBURG.json b/data/person/ID_NL-ZH-TH_198X_NL-OV-HEN_XXXX_TJERK-TIELENBURG.json index ef3782eeee..a5c6597dfb 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-OV-HEN_XXXX_TJERK-TIELENBURG.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-OV-HEN_XXXX_TJERK-TIELENBURG.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tjerk-tielenburg-961a61aa_20251214T112922Z.json" ], - "modified_at": "2026-01-09T19:18:17.770081+00:00", + "modified_at": "2026-01-09T19:51:28.567622+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tjerk-tielenburg-961a61aa", @@ -156,7 +156,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.770075+00:00", + "inferred_at": "2026-01-09T19:51:28.567616+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-UT-UTR_XXXX_MARNIX-SEGERS.json b/data/person/ID_NL-ZH-TH_198X_NL-UT-UTR_XXXX_MARNIX-SEGERS.json index bf9cb2bea3..36c283419c 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-UT-UTR_XXXX_MARNIX-SEGERS.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-UT-UTR_XXXX_MARNIX-SEGERS.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marnix-segers-3a008b10_20251214T103104Z.json" ], - "modified_at": "2026-01-09T19:18:14.704213+00:00", + "modified_at": "2026-01-09T19:51:03.382806+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marnix-segers-3a008b10", @@ -165,7 +165,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.704208+00:00", + "inferred_at": "2026-01-09T19:51:03.382800+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-LEI_XXXX_PAUL-YMKERS.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-LEI_XXXX_PAUL-YMKERS.json index f9da92476b..04279ed4ab 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-LEI_XXXX_PAUL-YMKERS.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-LEI_XXXX_PAUL-YMKERS.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paul-ymkers-9525516_20251214T103028Z.json" ], - "modified_at": "2026-01-09T19:18:13.332821+00:00", + "modified_at": "2026-01-09T19:50:53.886910+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paul-ymkers-9525516", @@ -133,7 +133,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.332817+00:00", + "inferred_at": "2026-01-09T19:50:53.886905+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-PIJ_XXXX_SANDRA-SCHERPENISSE.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-PIJ_XXXX_SANDRA-SCHERPENISSE.json index 783aa2983e..bd2b5f8ca9 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-PIJ_XXXX_SANDRA-SCHERPENISSE.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-PIJ_XXXX_SANDRA-SCHERPENISSE.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sandrascherpenisse_20251214T112947Z.json" ], - "modified_at": "2026-01-09T19:18:16.439554+00:00", + "modified_at": "2026-01-09T19:51:18.506284+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sandrascherpenisse", @@ -166,7 +166,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.439531+00:00", + "inferred_at": "2026-01-09T19:51:18.506271+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_ANNE-DANKERT.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_ANNE-DANKERT.json index a34384ead1..1555d60137 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_ANNE-DANKERT.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_ANNE-DANKERT.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-dankert-a6762815_20251214T103026Z.json" ], - "modified_at": "2026-01-09T19:18:13.547813+00:00", + "modified_at": "2026-01-09T19:50:54.602562+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-dankert-a6762815", @@ -138,7 +138,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.547810+00:00", + "inferred_at": "2026-01-09T19:50:54.602556+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_ASTRID-DIRKSEN.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_ASTRID-DIRKSEN.json index 07071b04cf..579a16fc7b 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_ASTRID-DIRKSEN.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_ASTRID-DIRKSEN.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/astrid-dirksen-aab194139_20251214T103204Z.json" ], - "modified_at": "2026-01-09T19:18:14.883046+00:00", + "modified_at": "2026-01-09T19:51:05.310971+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "astrid-dirksen-aab194139", @@ -173,7 +173,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -222,7 +222,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.883041+00:00", + "inferred_at": "2026-01-09T19:51:05.310949+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_DEBORAH-THORPE.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_DEBORAH-THORPE.json index a351e1db3c..810cbede7d 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_DEBORAH-THORPE.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_DEBORAH-THORPE.json @@ -158,7 +158,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/deborah-thorpe-0245a392_20251214T110459Z.json" ], - "modified_at": "2026-01-09T19:18:16.537087+00:00", + "modified_at": "2026-01-09T19:51:06.756147+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "deborah-thorpe-0245a392", @@ -190,7 +190,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -231,7 +231,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.537081+00:00", + "inferred_at": "2026-01-09T19:51:06.756138+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_EDWIN-HIRSCH.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_EDWIN-HIRSCH.json index 2700609cf5..f0c7ac7f8a 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_EDWIN-HIRSCH.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_EDWIN-HIRSCH.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/edwin-hirsch-25a6819_20251214T103254Z.json" ], - "modified_at": "2026-01-09T19:18:14.119178+00:00", + "modified_at": "2026-01-09T19:50:58.645508+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "edwin-hirsch-25a6819", @@ -154,7 +154,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.119171+00:00", + "inferred_at": "2026-01-09T19:50:58.645498+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_GABRIELLE-HURK.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_GABRIELLE-HURK.json index 8d26175f86..111339e5a9 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_GABRIELLE-HURK.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_GABRIELLE-HURK.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gabriellevandenhurk_20251214T103128Z.json" ], - "modified_at": "2026-01-09T19:18:13.013022+00:00", + "modified_at": "2026-01-09T19:51:00.023342+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gabriellevandenhurk", @@ -160,7 +160,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.013016+00:00", + "inferred_at": "2026-01-09T19:51:00.023336+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_GERTY-RUTGERS.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_GERTY-RUTGERS.json index eec8fb354f..b704d5fd74 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_GERTY-RUTGERS.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_GERTY-RUTGERS.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerty-rutgers-7338b07_20251214T102842Z.json" ], - "modified_at": "2026-01-09T19:18:14.857154+00:00", + "modified_at": "2026-01-09T19:51:05.156859+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerty-rutgers-7338b07", @@ -140,7 +140,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.857149+00:00", + "inferred_at": "2026-01-09T19:51:05.156846+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_HANS-JANSEN.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_HANS-JANSEN.json index 59b47aa67f..a7e29036bd 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_HANS-JANSEN.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_HANS-JANSEN.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hansjansen5_20251214T113314Z.json" ], - "modified_at": "2026-01-09T19:18:14.253535+00:00", + "modified_at": "2026-01-09T19:50:59.306579+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hansjansen5", @@ -143,7 +143,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.253530+00:00", + "inferred_at": "2026-01-09T19:50:59.306568+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_JAMES-SMITH.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_JAMES-SMITH.json index d11b2ce1b9..3b22421d3d 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_JAMES-SMITH.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_JAMES-SMITH.json @@ -195,7 +195,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/james-louis-smith-86aa33117_20251214T113223Z.json" ], - "modified_at": "2026-01-09T19:18:14.173225+00:00", + "modified_at": "2026-01-09T19:51:07.032294+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "james-louis-smith-86aa33117", @@ -227,7 +227,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -268,7 +268,7 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.173218+00:00", + "inferred_at": "2026-01-09T19:51:07.032290+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_MATINE-HAAR.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_MATINE-HAAR.json index 50e7a82e23..2d2a36590b 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_MATINE-HAAR.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_MATINE-HAAR.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/matinevanderhaar_20251214T113430Z.json" ], - "modified_at": "2026-01-09T19:18:15.657643+00:00", + "modified_at": "2026-01-09T19:51:13.287796+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "matinevanderhaar", @@ -171,7 +171,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.657639+00:00", + "inferred_at": "2026-01-09T19:51:13.287786+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_PASCAL-NAVARRO.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_PASCAL-NAVARRO.json index d5e861304d..91e76ed11f 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_PASCAL-NAVARRO.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_PASCAL-NAVARRO.json @@ -147,7 +147,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pascal-navarro-0b0b6714_20251214T113311Z.json" ], - "modified_at": "2026-01-09T19:18:15.505618+00:00", + "modified_at": "2026-01-09T19:51:11.264673+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pascal-navarro-0b0b6714", @@ -176,7 +176,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.505615+00:00", + "inferred_at": "2026-01-09T19:51:11.264667+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_PAUL-NIJDAM.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_PAUL-NIJDAM.json index c0cd352116..0853c1fd5a 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_PAUL-NIJDAM.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_PAUL-NIJDAM.json @@ -189,7 +189,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paul-nijdam-0b334189_20251214T113416Z.json" ], - "modified_at": "2026-01-09T19:18:15.319804+00:00", + "modified_at": "2026-01-09T19:51:08.537447+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paul-nijdam-0b334189", @@ -218,7 +218,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -267,7 +267,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.319801+00:00", + "inferred_at": "2026-01-09T19:51:08.537440+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_REINIER-DEINUM.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_REINIER-DEINUM.json index dd6f2f83f5..4b4f93bc38 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_REINIER-DEINUM.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_REINIER-DEINUM.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/reinier-deinum-3a438218_20251214T113252Z.json" ], - "modified_at": "2026-01-09T19:18:16.402689+00:00", + "modified_at": "2026-01-09T19:51:18.456744+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "reinier-deinum-3a438218", @@ -122,7 +122,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -171,7 +171,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.402685+00:00", + "inferred_at": "2026-01-09T19:51:18.456739+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_ROLIEN-HARTEN.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_ROLIEN-HARTEN.json index 470fd4cfb0..7a0d24db54 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_ROLIEN-HARTEN.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_ROLIEN-HARTEN.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rolien-van-der-harten-a58b43b7_20251214T103155Z.json" ], - "modified_at": "2026-01-09T19:18:13.761291+00:00", + "modified_at": "2026-01-09T19:50:56.093541+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rolien-van-der-harten-a58b43b7", @@ -157,7 +157,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.761286+00:00", + "inferred_at": "2026-01-09T19:50:56.093534+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_SAM-ALLOING.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_SAM-ALLOING.json index d4f095e006..1b98c6e021 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_SAM-ALLOING.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_SAM-ALLOING.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/samalloing_20251214T113348Z.json" ], - "modified_at": "2026-01-09T19:18:17.779534+00:00", + "modified_at": "2026-01-09T19:51:28.572117+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "samalloing", @@ -119,7 +119,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.779529+00:00", + "inferred_at": "2026-01-09T19:51:28.572112+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_SANDRA-DEBETS.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_SANDRA-DEBETS.json index dc148f7ec6..eb72d731c2 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_SANDRA-DEBETS.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_SANDRA-DEBETS.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sandradebets_20251214T103033Z.json" ], - "modified_at": "2026-01-09T19:18:14.000061+00:00", + "modified_at": "2026-01-09T19:50:57.997488+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sandradebets", @@ -142,7 +142,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.000056+00:00", + "inferred_at": "2026-01-09T19:50:57.997480+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_SIMONE-BAKKER.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_SIMONE-BAKKER.json index 7b7c5abc8d..1fed9b64d0 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_SIMONE-BAKKER.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_SIMONE-BAKKER.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/simone-bakker-08463027_20251214T103101Z.json" ], - "modified_at": "2026-01-09T19:18:17.095775+00:00", + "modified_at": "2026-01-09T19:51:23.902053+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "simone-bakker-08463027", @@ -131,7 +131,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.095768+00:00", + "inferred_at": "2026-01-09T19:51:23.902045+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_VASSO-KALAITZI.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_VASSO-KALAITZI.json index f836a72dc5..a271031cc4 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_VASSO-KALAITZI.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-TH_XXXX_VASSO-KALAITZI.json @@ -227,7 +227,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vasso-kalaitzi-a8a93722_20251214T110509Z.json" ], - "modified_at": "2026-01-09T19:18:14.716028+00:00", + "modified_at": "2026-01-09T19:51:03.409238+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vasso-kalaitzi-a8a93722", @@ -250,7 +250,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -291,7 +291,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.716024+00:00", + "inferred_at": "2026-01-09T19:51:03.409233+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-WAD_XXXX_KA-CHEUNG.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-WAD_XXXX_KA-CHEUNG.json index 10e711f488..8ce08b81e0 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-WAD_XXXX_KA-CHEUNG.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-WAD_XXXX_KA-CHEUNG.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ka-lai-cheung-6ab20026_20251214T112818Z.json" ], - "modified_at": "2026-01-09T19:18:13.881379+00:00", + "modified_at": "2026-01-09T19:50:56.756274+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ka-lai-cheung-6ab20026", @@ -168,7 +168,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.881375+00:00", + "inferred_at": "2026-01-09T19:50:56.756268+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_NL-ZH-WAS_XXXX_MAARTEN-DERKSEN.json b/data/person/ID_NL-ZH-TH_198X_NL-ZH-WAS_XXXX_MAARTEN-DERKSEN.json index 3892172426..c59e8b5399 100644 --- a/data/person/ID_NL-ZH-TH_198X_NL-ZH-WAS_XXXX_MAARTEN-DERKSEN.json +++ b/data/person/ID_NL-ZH-TH_198X_NL-ZH-WAS_XXXX_MAARTEN-DERKSEN.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maartenmjderksen_20251214T103158Z.json" ], - "modified_at": "2026-01-09T19:18:14.926478+00:00", + "modified_at": "2026-01-09T19:51:05.535761+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maartenmjderksen", @@ -168,7 +168,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.926475+00:00", + "inferred_at": "2026-01-09T19:51:05.535752+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_ALEXANDER-DEINSE.json b/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_ALEXANDER-DEINSE.json index e1345283ed..28be91e798 100644 --- a/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_ALEXANDER-DEINSE.json +++ b/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_ALEXANDER-DEINSE.json @@ -214,7 +214,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alexander-van-deinse-57bb0229_20251214T103140Z.json" ], - "modified_at": "2026-01-09T19:18:17.762706+00:00", + "modified_at": "2026-01-09T19:51:28.565608+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alexander-van-deinse-57bb0229", @@ -236,7 +236,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -277,7 +277,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.757638+00:00", + "inferred_at": "2026-01-09T19:51:28.562913+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_FENN-HINSE.json b/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_FENN-HINSE.json index e00eca5060..4b2a5ef934 100644 --- a/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_FENN-HINSE.json +++ b/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_FENN-HINSE.json @@ -146,7 +146,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fenn-hinse-70912216_20251214T103211Z.json" ], - "modified_at": "2026-01-09T19:18:13.903886+00:00", + "modified_at": "2026-01-09T19:50:56.779976+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fenn-hinse-70912216", @@ -168,7 +168,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.901892+00:00", + "inferred_at": "2026-01-09T19:50:56.777741+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_KRISTINE-RACINA.json b/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_KRISTINE-RACINA.json index 866230ce5c..b00f1b9b1c 100644 --- a/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_KRISTINE-RACINA.json +++ b/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_KRISTINE-RACINA.json @@ -182,7 +182,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kristineracina_20251214T110455Z.json" ], - "modified_at": "2026-01-09T19:18:12.312921+00:00", + "modified_at": "2026-01-09T19:50:47.506791+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kristineracina", @@ -210,7 +210,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -259,7 +259,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.302927+00:00", + "inferred_at": "2026-01-09T19:50:47.501697+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_MARC-SWEELSSEN.json b/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_MARC-SWEELSSEN.json index 596ffe556b..91dcec693e 100644 --- a/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_MARC-SWEELSSEN.json +++ b/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_MARC-SWEELSSEN.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marc-sweelssen-85649a8b_20251214T103157Z.json" ], - "modified_at": "2026-01-09T19:18:17.863665+00:00", + "modified_at": "2026-01-09T19:51:28.832407+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marc-sweelssen-85649a8b", @@ -176,7 +176,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.859657+00:00", + "inferred_at": "2026-01-09T19:51:28.830463+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_STEPHANIE-GERTENAAR.json b/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_STEPHANIE-GERTENAAR.json index f1b3acf403..73c2f9ac9b 100644 --- a/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_STEPHANIE-GERTENAAR.json +++ b/data/person/ID_NL-ZH-TH_198X_XX-XX-XXX_XXXX_STEPHANIE-GERTENAAR.json @@ -166,7 +166,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stephanie-gertenaar-6246557_20251214T113330Z.json" ], - "modified_at": "2026-01-09T19:18:16.336946+00:00", + "modified_at": "2026-01-09T19:51:18.398146+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stephanie-gertenaar-6246557", @@ -194,7 +194,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.327748+00:00", + "inferred_at": "2026-01-09T19:51:18.394474+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_199X_NL-NB-EIN_XXXX_ISAAC-ODOMA.json b/data/person/ID_NL-ZH-TH_199X_NL-NB-EIN_XXXX_ISAAC-ODOMA.json index 83d85c920b..69561421f6 100644 --- a/data/person/ID_NL-ZH-TH_199X_NL-NB-EIN_XXXX_ISAAC-ODOMA.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-NB-EIN_XXXX_ISAAC-ODOMA.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/odoma-chubiyo-ojo-isaac_20251214T111125Z.json" ], - "modified_at": "2026-01-09T19:18:14.882390+00:00", + "modified_at": "2026-01-09T19:51:05.309224+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "odoma-chubiyo-ojo-isaac", @@ -140,7 +140,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.882385+00:00", + "inferred_at": "2026-01-09T19:51:05.309218+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ALEX-ALSEMGEEST.json b/data/person/ID_NL-ZH-TH_199X_NL-NH-AMS_XXXX_ALEX-ALSEMGEEST.json similarity index 68% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ALEX-ALSEMGEEST.json rename to data/person/ID_NL-ZH-TH_199X_NL-NH-AMS_XXXX_ALEX-ALSEMGEEST.json index ba0a5d3c19..a4cd054e05 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ALEX-ALSEMGEEST.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-NH-AMS_XXXX_ALEX-ALSEMGEEST.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ALEX-ALSEMGEEST", + "ppid": "ID_NL-ZH-TH_199X_NL-NH-AMS_XXXX_ALEX-ALSEMGEEST", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-ZH-TH", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ALEX", "ALSEMGEEST" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Alex Alsemgeest", @@ -24,8 +29,9 @@ "source": "linkedin_profile" }, "birth_date": { - "edtf": "XXXX", - "precision": "unknown" + "edtf": "1980", + "precision": "year", + "note": "Verified from personal website alexalsemgeest.nl" }, "is_living": true, "heritage_relevance": { @@ -158,7 +164,23 @@ "twitter": "@AlexAlsemgeest", "instagram": "@alexalsemgeest_" }, - "web_claims": [], + "web_claims": [ + { + "claim_type": "birth_date", + "claim_value": "1980", + "claim_value_raw": "Alex Alsemgeest (1980) is a Dutch book historian and bibliographer", + "source_url": "https://www.alexalsemgeest.nl/biographyalexalsemgeest/", + "retrieved_on": "2025-01-10T01:00:00Z", + "retrieval_agent": "exa_web_search_exa", + "confidence": "high", + "provenance": { + "statement_created_at": "2025-01-10T01:05:00Z", + "source_archived_at": "2025-01-10T01:00:00Z", + "retrieval_method": "exa_web_search_exa", + "search_query": "\"Alex Alsemgeest\" conservator Rijksmuseum born birthday biography" + } + } + ], "source_observations": [ { "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/alex-alsemgeest-3b054b316_20251214T115050Z.json", @@ -168,8 +190,13 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T01:00:00Z", + "search_queries": [ + "\"Alex Alsemgeest\" conservator Rijksmuseum born birthday biography" + ], + "result": "found", + "notes": "Birth year found on personal website biography page" } }, "provenance": { @@ -178,63 +205,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alex-alsemgeest-3b054b316_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:58.167686+00:00", + "modified_at": "2026-01-09T19:51:22.506012+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alex-alsemgeest-3b054b316", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:58.167679+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEX-ALSEMGEEST", @@ -244,6 +218,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ALEX-ALSEMGEEST", + "new_ppid": "ID_NL-ZH-TH_199X_NL-NH-AMS_XXXX_ALEX-ALSEMGEEST", + "changed_at": "2026-01-09T19:43:38.371745+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1996 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Tweede Kamer (Dutch House of Representatives)", + "title": "Researcher / Project Manager", + "date_range": "2019 - 2020" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2019 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2019 - 23 = 1996", + "result": "Estimated birth year: 1996", + "range": "1991-2001 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1991, + 2001 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:22.506003+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-ZH-TH_199X_NL-NH-AMS_XXXX_WANDA-SCHOONHOVEN.json b/data/person/ID_NL-ZH-TH_199X_NL-NH-AMS_XXXX_WANDA-SCHOONHOVEN.json index 1a7ce2a988..69cbd1f83a 100644 --- a/data/person/ID_NL-ZH-TH_199X_NL-NH-AMS_XXXX_WANDA-SCHOONHOVEN.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-NH-AMS_XXXX_WANDA-SCHOONHOVEN.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wanda-schoonhoven-6b251938_20251214T111714Z.json" ], - "modified_at": "2026-01-09T19:18:16.916185+00:00", + "modified_at": "2026-01-09T19:50:53.735998+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wanda-schoonhoven-6b251938", @@ -213,7 +213,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.916178+00:00", + "inferred_at": "2026-01-09T19:50:53.735991+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_199X_NL-UT-UTR_XXXX_LUUK-PEPERS.json b/data/person/ID_NL-ZH-TH_199X_NL-UT-UTR_XXXX_LUUK-PEPERS.json index b43f01bff6..666fcaec65 100644 --- a/data/person/ID_NL-ZH-TH_199X_NL-UT-UTR_XXXX_LUUK-PEPERS.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-UT-UTR_XXXX_LUUK-PEPERS.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/luuk-pepers-7629a01b5_20251214T103314Z.json" ], - "modified_at": "2026-01-09T19:18:17.846852+00:00", + "modified_at": "2026-01-09T19:51:28.825284+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "luuk-pepers-7629a01b5", @@ -172,7 +172,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.846847+00:00", + "inferred_at": "2026-01-09T19:51:28.825276+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_199X_NL-ZH-ROT_XXXX_LEILA-ALMADA.json b/data/person/ID_NL-ZH-TH_199X_NL-ZH-ROT_XXXX_LEILA-ALMADA.json index c91070aed2..4e010cf132 100644 --- a/data/person/ID_NL-ZH-TH_199X_NL-ZH-ROT_XXXX_LEILA-ALMADA.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-ZH-ROT_XXXX_LEILA-ALMADA.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/leila-de-almada-b50a73162_20251214T103304Z.json" ], - "modified_at": "2026-01-09T19:18:11.706842+00:00", + "modified_at": "2026-01-09T19:50:47.273753+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "leila-de-almada-b50a73162", @@ -124,7 +124,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.706831+00:00", + "inferred_at": "2026-01-09T19:50:47.273741+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ANDREA-BERKELDER.json b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_ANDREA-BERKELDER.json similarity index 67% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ANDREA-BERKELDER.json rename to data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_ANDREA-BERKELDER.json index 90286b5cb0..370a36443c 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ANDREA-BERKELDER.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_ANDREA-BERKELDER.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ANDREA-BERKELDER", + "ppid": "ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_ANDREA-BERKELDER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-ZH-TH", + "first_date": "199X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "ANDREA", "BERKELDER" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Andrea Berkelder", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -106,73 +112,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/andreaberkelder_20251214T113329Z.json" ], - "modified_at": "2026-01-09T18:58:10.818576+00:00", + "modified_at": "2026-01-09T19:50:54.548287+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "andreaberkelder", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Netherlands (NL)" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "KB nationale bibliotheek", - "title": "Coördinator Digitale Geletterdheid Jeugd", - "location": "The Hague, Netherlands" - } - }, - { - "step": 3, - "geocoding": "GeoNames resolution", - "query": "The Hague, Netherlands", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 4, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T18:58:10.818563+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANDREA-BERKELDER", @@ -182,6 +125,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ANDREA-BERKELDER", + "new_ppid": "ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_ANDREA-BERKELDER", + "changed_at": "2026-01-09T19:43:42.059688+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1995 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "KB nationale bibliotheek", + "title": "Coördinator Digitale Geletterdheid Jeugd", + "date_range": "2018-05-01" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2018 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2018 - 23 = 1995", + "result": "Estimated birth year: 1995", + "range": "1990-2000 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1990, + 2000 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:54.548281+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_CAROLINE-VOGELAAR.json b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_CAROLINE-VOGELAAR.json index f42686c681..40aadba5fa 100644 --- a/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_CAROLINE-VOGELAAR.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_CAROLINE-VOGELAAR.json @@ -140,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/caroline-vogelaar-889aa517_20251214T103207Z.json" ], - "modified_at": "2026-01-09T19:18:14.253071+00:00", + "modified_at": "2026-01-09T19:50:59.303497+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "caroline-vogelaar-889aa517", @@ -169,7 +169,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +218,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.253065+00:00", + "inferred_at": "2026-01-09T19:50:59.303474+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_FONS-VERHOEF.json b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_FONS-VERHOEF.json index 69e84f2486..d350960a4e 100644 --- a/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_FONS-VERHOEF.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_FONS-VERHOEF.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fons-verhoef-60356380_20251214T113225Z.json" ], - "modified_at": "2026-01-09T19:18:13.324183+00:00", + "modified_at": "2026-01-09T19:50:53.882819+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fons-verhoef-60356380", @@ -152,7 +152,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.324177+00:00", + "inferred_at": "2026-01-09T19:50:53.882813+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_HELLA-HOLLANDER.json b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_HELLA-HOLLANDER.json index a6ea2907db..98ba5ede3f 100644 --- a/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_HELLA-HOLLANDER.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_HELLA-HOLLANDER.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hella-hollander-620b9817_20251214T110502Z.json" ], - "modified_at": "2026-01-09T19:18:15.410295+00:00", + "modified_at": "2026-01-09T19:50:47.010871+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hella-hollander-620b9817", @@ -151,7 +151,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.410289+00:00", + "inferred_at": "2026-01-09T19:50:47.010849+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_JANNEKE-ETTEN.json b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_JANNEKE-ETTEN.json index 0f16289259..7cef8d0417 100644 --- a/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_JANNEKE-ETTEN.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_JANNEKE-ETTEN.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janneke-van-etten-42253aa_20251214T103242Z.json" ], - "modified_at": "2026-01-09T19:18:15.531819+00:00", + "modified_at": "2026-01-09T19:51:29.493359+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janneke-van-etten-42253aa", @@ -141,7 +141,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.531814+00:00", + "inferred_at": "2026-01-09T19:51:29.493356+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_KISHAN-BOEDHOE.json b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_KISHAN-BOEDHOE.json index 6d54817ac9..3226bf2954 100644 --- a/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_KISHAN-BOEDHOE.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_KISHAN-BOEDHOE.json @@ -94,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kishanboedhoe_20251214T103040Z.json" ], - "modified_at": "2026-01-09T19:18:13.122835+00:00", + "modified_at": "2026-01-09T19:50:51.757862+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kishanboedhoe", @@ -123,7 +123,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.122831+00:00", + "inferred_at": "2026-01-09T19:50:51.757852+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RENSKE-ZEE.json b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_RENSKE-ZEE.json similarity index 75% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RENSKE-ZEE.json rename to data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_RENSKE-ZEE.json index 7e751333a2..b64decb4c9 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RENSKE-ZEE.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_RENSKE-ZEE.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RENSKE-ZEE", + "ppid": "ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_RENSKE-ZEE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-ZH-TH", + "first_date": "199X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "RENSKE", "ZEE" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Renske van der Zee", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -179,63 +185,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/renske-van-der-zee-2a9b1651_20251214T112444Z.json" ], - "modified_at": "2026-01-09T17:43:07.632694+00:00", + "modified_at": "2026-01-09T19:50:49.005435+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "renske-van-der-zee-2a9b1651", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, South Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, South Holland, Netherlands (NL)", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:43:07.632686+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RENSKE-ZEE", @@ -245,6 +198,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RENSKE-ZEE", + "new_ppid": "ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_RENSKE-ZEE", + "changed_at": "2026-01-09T19:43:39.122511+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1993 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Raad voor Cultuur (Council for Culture)", + "title": "Senior beleidsadviseur (Senior Policy Advisor)", + "date_range": "2016" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2016 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2016 - 23 = 1993", + "result": "Estimated birth year: 1993", + "range": "1988-1998 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1988, + 1998 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:49.005423+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_STANISLAW-BARAN.json b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_STANISLAW-BARAN.json index 9e0bb10a5a..ec2c3d49db 100644 --- a/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_STANISLAW-BARAN.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_STANISLAW-BARAN.json @@ -169,7 +169,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stanislawbaran_20251214T112829Z.json" ], - "modified_at": "2026-01-09T19:18:14.311743+00:00", + "modified_at": "2026-01-09T19:51:08.504920+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stanislawbaran", @@ -201,7 +201,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +242,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.311737+00:00", + "inferred_at": "2026-01-09T19:51:08.504912+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_THIERRY-HORST.json b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_THIERRY-HORST.json index 16a30cc092..1b13d7eea2 100644 --- a/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_THIERRY-HORST.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-ZH-TH_XXXX_THIERRY-HORST.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/thierryvanderhorst_20251214T103022Z.json" ], - "modified_at": "2026-01-09T19:18:11.572998+00:00", + "modified_at": "2026-01-09T19:50:47.189277+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "thierryvanderhorst", @@ -142,7 +142,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.572990+00:00", + "inferred_at": "2026-01-09T19:50:47.189266+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-WAD_XXXX_BELINDA-SLAAVERBOOM.json b/data/person/ID_NL-ZH-TH_199X_NL-ZH-WAD_XXXX_BELINDA-SLAAVERBOOM.json similarity index 62% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-WAD_XXXX_BELINDA-SLAAVERBOOM.json rename to data/person/ID_NL-ZH-TH_199X_NL-ZH-WAD_XXXX_BELINDA-SLAAVERBOOM.json index 24f8623f0b..ccaf1f18b4 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-WAD_XXXX_BELINDA-SLAAVERBOOM.json +++ b/data/person/ID_NL-ZH-TH_199X_NL-ZH-WAD_XXXX_BELINDA-SLAAVERBOOM.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-WAD_XXXX_BELINDA-SLAAVERBOOM", + "ppid": "ID_NL-ZH-TH_199X_NL-ZH-WAD_XXXX_BELINDA-SLAAVERBOOM", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-ZH-TH", + "first_date": "199X", "last_location": "NL-ZH-WAD", "last_date": "XXXX", "name_tokens": [ "BELINDA", "SLAAVERBOOM" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Belinda Slaa-Verboom", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -107,63 +113,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/belinda-slaa-verboom-7771b96_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:00.786496+00:00", + "modified_at": "2026-01-09T19:50:53.913824+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "belinda-slaa-verboom-7771b96", - "inferred_current_settlement": { - "value": "Waddinxveen", - "formatted": "NL-ZH-WAD", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "WAD", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Waddinxveen, South Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Waddinxveen, South Holland, Netherlands", - "result": { - "geonames_id": 2745096, - "geonames_name": "Waddinxveen", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPL", - "latitude": 52.045, - "longitude": 4.65139 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-WAD" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2745096, - "geonames_name": "Waddinxveen", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPL", - "latitude": 52.045, - "longitude": 4.65139 - }, - "inferred_at": "2026-01-09T17:43:00.786489+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BELINDA-SLAAVERBOOM", @@ -173,6 +126,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-WAD_XXXX_BELINDA-SLAAVERBOOM", + "new_ppid": "ID_NL-ZH-TH_199X_NL-ZH-WAD_XXXX_BELINDA-SLAAVERBOOM", + "changed_at": "2026-01-09T19:43:42.264719+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1997 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Koninklijke Bibliotheek (KB)", + "title": "Afdelingshoofd Gebouw & Facility Management en Inkoop", + "date_range": "2020" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2020 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2020 - 23 = 1997", + "result": "Estimated birth year: 1997", + "range": "1992-2002 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1992, + 2002 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:53.913818+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-ZH-TH_199X_XX-XX-XXX_XXXX_ANNE-BENNETT.json b/data/person/ID_NL-ZH-TH_199X_XX-XX-XXX_XXXX_ANNE-BENNETT.json index f58e0c1dc9..827cd478fc 100644 --- a/data/person/ID_NL-ZH-TH_199X_XX-XX-XXX_XXXX_ANNE-BENNETT.json +++ b/data/person/ID_NL-ZH-TH_199X_XX-XX-XXX_XXXX_ANNE-BENNETT.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-bennett-8b79243b_20251214T112659Z.json" ], - "modified_at": "2026-01-09T19:18:17.372535+00:00", + "modified_at": "2026-01-09T19:51:26.686321+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-bennett-8b79243b", @@ -120,7 +120,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.368082+00:00", + "inferred_at": "2026-01-09T19:51:26.684538+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_199X_XX-XX-XXX_XXXX_LINDA-GUIJT.json b/data/person/ID_NL-ZH-TH_199X_XX-XX-XXX_XXXX_LINDA-GUIJT.json index 232008700f..c2046863bb 100644 --- a/data/person/ID_NL-ZH-TH_199X_XX-XX-XXX_XXXX_LINDA-GUIJT.json +++ b/data/person/ID_NL-ZH-TH_199X_XX-XX-XXX_XXXX_LINDA-GUIJT.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/linda-guijt-a2ba9345_20251214T102850Z.json" ], - "modified_at": "2026-01-09T19:18:11.196178+00:00", + "modified_at": "2026-01-09T19:50:46.683165+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "linda-guijt-a2ba9345", @@ -193,7 +193,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -242,7 +242,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.196161+00:00", + "inferred_at": "2026-01-09T19:50:46.683141+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_199X_XX-XX-XXX_XXXX_NICOLE-EMMENEGGER.json b/data/person/ID_NL-ZH-TH_199X_XX-XX-XXX_XXXX_NICOLE-EMMENEGGER.json index e33b9eebdc..a82e7ad11b 100644 --- a/data/person/ID_NL-ZH-TH_199X_XX-XX-XXX_XXXX_NICOLE-EMMENEGGER.json +++ b/data/person/ID_NL-ZH-TH_199X_XX-XX-XXX_XXXX_NICOLE-EMMENEGGER.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nemmenegger_20251214T110501Z.json" ], - "modified_at": "2026-01-09T19:18:15.847395+00:00", + "modified_at": "2026-01-09T19:50:53.233017+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nemmenegger", @@ -198,7 +198,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -247,7 +247,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.843817+00:00", + "inferred_at": "2026-01-09T19:50:53.228925+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_200X_NL-NH-AMS_XXXX_OKI-U.json b/data/person/ID_NL-ZH-TH_200X_NL-NH-AMS_XXXX_OKI-U.json index a8cbbd1612..fb508e745d 100644 --- a/data/person/ID_NL-ZH-TH_200X_NL-NH-AMS_XXXX_OKI-U.json +++ b/data/person/ID_NL-ZH-TH_200X_NL-NH-AMS_XXXX_OKI-U.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/oki-u_20251214T113350Z.json" ], - "modified_at": "2026-01-09T19:18:17.786478+00:00", + "modified_at": "2026-01-09T19:51:28.575201+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "oki-u", @@ -114,7 +114,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +163,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.786444+00:00", + "inferred_at": "2026-01-09T19:51:28.575197+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_200X_NL-ZH-OEG_XXXX_SOPHIE-HAM.json b/data/person/ID_NL-ZH-TH_200X_NL-ZH-OEG_XXXX_SOPHIE-HAM.json index 7c17579a84..cfa9f2861b 100644 --- a/data/person/ID_NL-ZH-TH_200X_NL-ZH-OEG_XXXX_SOPHIE-HAM.json +++ b/data/person/ID_NL-ZH-TH_200X_NL-ZH-OEG_XXXX_SOPHIE-HAM.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sophie-ham-45a6878_20251214T113349Z.json" ], - "modified_at": "2026-01-09T19:18:13.032555+00:00", + "modified_at": "2026-01-09T19:50:50.618149+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sophie-ham-45a6878", @@ -114,7 +114,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +163,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.032551+00:00", + "inferred_at": "2026-01-09T19:50:50.618144+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-TH_200X_NL-ZH-TH_XXXX_ALIYA-WESENHAGEN.json b/data/person/ID_NL-ZH-TH_200X_NL-ZH-TH_XXXX_ALIYA-WESENHAGEN.json index 51a4f02c8c..81d3c21c17 100644 --- a/data/person/ID_NL-ZH-TH_200X_NL-ZH-TH_XXXX_ALIYA-WESENHAGEN.json +++ b/data/person/ID_NL-ZH-TH_200X_NL-ZH-TH_XXXX_ALIYA-WESENHAGEN.json @@ -88,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aliya-wesenhagen-598665161_20251214T103101Z.json" ], - "modified_at": "2026-01-09T19:18:16.612887+00:00", + "modified_at": "2026-01-09T19:51:20.842014+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aliya-wesenhagen-598665161", @@ -117,7 +117,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -166,7 +166,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.612881+00:00", + "inferred_at": "2026-01-09T19:51:20.842009+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-WAS_199X_NL-NH-AMS_XXXX_OLIVIA-DAWE.json b/data/person/ID_NL-ZH-WAS_199X_NL-NH-AMS_XXXX_OLIVIA-DAWE.json index 6dd56d7a2f..1b00a86701 100644 --- a/data/person/ID_NL-ZH-WAS_199X_NL-NH-AMS_XXXX_OLIVIA-DAWE.json +++ b/data/person/ID_NL-ZH-WAS_199X_NL-NH-AMS_XXXX_OLIVIA-DAWE.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/olivia-dawe_20251214T111746Z.json" ], - "modified_at": "2026-01-09T19:18:17.393925+00:00", + "modified_at": "2026-01-09T19:51:26.691395+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "olivia-dawe", @@ -159,7 +159,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.393921+00:00", + "inferred_at": "2026-01-09T19:51:26.691391+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ZOE_195X_NL-ZH-ZOE_XXXX_PAUL-KLEINE.json b/data/person/ID_NL-ZH-ZOE_195X_NL-ZH-ZOE_XXXX_PAUL-KLEINE.json index d191b0aac1..b5afefe9f1 100644 --- a/data/person/ID_NL-ZH-ZOE_195X_NL-ZH-ZOE_XXXX_PAUL-KLEINE.json +++ b/data/person/ID_NL-ZH-ZOE_195X_NL-ZH-ZOE_XXXX_PAUL-KLEINE.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paul-de-kleine-80a86a17_20251214T112252Z.json" ], - "modified_at": "2026-01-09T19:18:12.001249+00:00", + "modified_at": "2026-01-09T19:51:22.512590+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paul-de-kleine-80a86a17", @@ -144,7 +144,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.001219+00:00", + "inferred_at": "2026-01-09T19:51:22.512586+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ARIE-GROEN.json b/data/person/ID_NL-ZH-ZOE_198X_NL-ZH-TH_XXXX_ARIE-GROEN.json similarity index 66% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ARIE-GROEN.json rename to data/person/ID_NL-ZH-ZOE_198X_NL-ZH-TH_XXXX_ARIE-GROEN.json index 20ef725f3b..f2e6e96aaa 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ARIE-GROEN.json +++ b/data/person/ID_NL-ZH-ZOE_198X_NL-ZH-TH_XXXX_ARIE-GROEN.json @@ -1,17 +1,22 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ARIE-GROEN", + "ppid": "ID_NL-ZH-ZOE_198X_NL-ZH-TH_XXXX_ARIE-GROEN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "NL-ZH-ZOE", + "first_date": "198X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "ARIE", "GROEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Arie Groen", @@ -25,7 +30,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -132,63 +138,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arie-groen-ab0a893_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:54.150907+00:00", + "modified_at": "2026-01-09T19:51:18.191231+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arie-groen-ab0a893", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, Zuid-Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, Zuid-Holland, Netherlands", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:42:54.150901+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARIE-GROEN", @@ -198,6 +151,81 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_ARIE-GROEN", + "new_ppid": "ID_NL-ZH-ZOE_198X_NL-ZH-TH_XXXX_ARIE-GROEN", + "changed_at": "2026-01-09T19:43:41.107955+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1984 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Knight Area", + "title": "Light Technician", + "date_range": "2007 - 2023" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2007 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2007 - 23 = 1984", + "result": "Estimated birth year: 1984", + "range": "1979-1989 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1979, + 1989 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:18.191224+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_NL-ZH-ZOE_199X_NL-ZH-ZOE_XXXX_YOUSSEF-M.json b/data/person/ID_NL-ZH-ZOE_199X_NL-ZH-ZOE_XXXX_YOUSSEF-M.json index 2640d847e5..1ead615c43 100644 --- a/data/person/ID_NL-ZH-ZOE_199X_NL-ZH-ZOE_XXXX_YOUSSEF-M.json +++ b/data/person/ID_NL-ZH-ZOE_199X_NL-ZH-ZOE_XXXX_YOUSSEF-M.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/youssef-makran_20251214T102958Z.json" ], - "modified_at": "2026-01-09T19:18:13.382293+00:00", + "modified_at": "2026-01-09T19:50:54.002089+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "youssef-makran", @@ -136,7 +136,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.382287+00:00", + "inferred_at": "2026-01-09T19:50:54.002083+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ZOE_200X_NL-ZH-PIJ_XXXX_DEWI-RIETBERGEN.json b/data/person/ID_NL-ZH-ZOE_200X_NL-ZH-PIJ_XXXX_DEWI-RIETBERGEN.json index ba31401b41..8a7b938d39 100644 --- a/data/person/ID_NL-ZH-ZOE_200X_NL-ZH-PIJ_XXXX_DEWI-RIETBERGEN.json +++ b/data/person/ID_NL-ZH-ZOE_200X_NL-ZH-PIJ_XXXX_DEWI-RIETBERGEN.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dewi-rietbergen-031a051a1_20251214T112646Z.json" ], - "modified_at": "2026-01-09T19:18:14.598834+00:00", + "modified_at": "2026-01-09T19:50:58.901390+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dewi-rietbergen-031a051a1", @@ -147,7 +147,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.598827+00:00", + "inferred_at": "2026-01-09T19:50:58.901382+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_NL-ZH-ZOE_200X_XX-XX-XXX_XXXX_SOFIE-S.json b/data/person/ID_NL-ZH-ZOE_200X_XX-XX-XXX_XXXX_SOFIE-S.json index fbf109fe35..df75ec91a6 100644 --- a/data/person/ID_NL-ZH-ZOE_200X_XX-XX-XXX_XXXX_SOFIE-S.json +++ b/data/person/ID_NL-ZH-ZOE_200X_XX-XX-XXX_XXXX_SOFIE-S.json @@ -133,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sofie-s-277720b1_20251214T112800Z.json" ], - "modified_at": "2026-01-09T19:18:14.379181+00:00", + "modified_at": "2026-01-09T19:51:18.345720+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sofie-s-277720b1", @@ -164,7 +164,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.375510+00:00", + "inferred_at": "2026-01-09T19:51:18.341791+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JORUNN-HILDRE.json b/data/person/ID_NO-12-OSL_198X_NO-12-OSL_XXXX_JORUNN-HILDRE.json similarity index 59% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JORUNN-HILDRE.json rename to data/person/ID_NO-12-OSL_198X_NO-12-OSL_XXXX_JORUNN-HILDRE.json index 56e51d8d55..3da7b9454b 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JORUNN-HILDRE.json +++ b/data/person/ID_NO-12-OSL_198X_NO-12-OSL_XXXX_JORUNN-HILDRE.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JORUNN-HILDRE", + "ppid": "ID_NO-12-OSL_198X_NO-12-OSL_XXXX_JORUNN-HILDRE", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "NO-12-OSL", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "NO-12-OSL", "last_date": "XXXX", "name_tokens": [ "JORUNN", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Jorunn Kjersem Hildre", @@ -102,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jorunn-kjersem-hildre-13954a6b_20251214T110520Z.json" ], - "modified_at": "2026-01-09T19:18:16.843949+00:00", + "modified_at": "2026-01-09T19:51:22.305521+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jorunn-kjersem-hildre-13954a6b", @@ -115,6 +117,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JORUNN-HILDRE", + "new_ppid": "ID_NO-12-OSL_198X_NO-12-OSL_XXXX_JORUNN-HILDRE", + "changed_at": "2026-01-09T19:51:22.305519+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -129,7 +142,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +191,118 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.843930+00:00", + "inferred_at": "2026-01-09T19:51:22.271315+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Oslo", + "formatted": "NO-12-OSL", + "country_code": "NO", + "region_code": "12", + "settlement_code": "OSL", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Dans (Current)", + "title": "Producer And Dancer - Freelance", + "date_range": "Dec 2012 - Present • 12 years and 10 months", + "location": "Oslo Area, Norway" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Oslo Area, Norway", + "result": { + "geonames_id": 3143244, + "geonames_name": "Oslo", + "admin1_code": "12", + "admin1_name": "Oslo", + "feature_code": "PPLC", + "latitude": 59.91273, + "longitude": 10.74609 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "NO-12-OSL" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 3143244, + "geonames_name": "Oslo", + "admin1_code": "12", + "admin1_name": "Oslo", + "feature_code": "PPLC", + "latitude": 59.91273, + "longitude": 10.74609 + }, + "inferred_at": "2026-01-09T19:51:22.302093+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Oslo", + "formatted": "NO-12-OSL", + "country_code": "NO", + "region_code": "12", + "settlement_code": "OSL", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Oslo, Oslo, Norway (NO)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Oslo, Oslo, Norway (NO)", + "result": { + "geonames_id": 3143244, + "geonames_name": "Oslo", + "admin1_code": "12", + "admin1_name": "Oslo", + "feature_code": "PPLC", + "latitude": 59.91273, + "longitude": 10.74609 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "NO-12-OSL" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 3143244, + "geonames_name": "Oslo", + "admin1_code": "12", + "admin1_name": "Oslo", + "feature_code": "PPLC", + "latitude": 59.91273, + "longitude": 10.74609 + }, + "inferred_at": "2026-01-09T19:51:22.305506+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_YAEL-FRIED.json b/data/person/ID_SE-26-STO_198X_SE-26-STO_XXXX_YAEL-FRIED.json similarity index 52% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_YAEL-FRIED.json rename to data/person/ID_SE-26-STO_198X_SE-26-STO_XXXX_YAEL-FRIED.json index 4b6d48d860..3e8b3c3aec 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_YAEL-FRIED.json +++ b/data/person/ID_SE-26-STO_198X_SE-26-STO_XXXX_YAEL-FRIED.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_YAEL-FRIED", + "ppid": "ID_SE-26-STO_198X_SE-26-STO_XXXX_YAEL-FRIED", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "SE-26-STO", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "SE-26-STO", "last_date": "XXXX", "name_tokens": [ "YAEL", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Yael Fried", @@ -113,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yael-fried-810b176_20251214T113124Z.json" ], - "modified_at": "2026-01-09T19:18:15.230740+00:00", + "modified_at": "2026-01-09T19:51:07.266836+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yael-fried-810b176", @@ -126,6 +128,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_YAEL-FRIED", + "new_ppid": "ID_SE-26-STO_198X_SE-26-STO_XXXX_YAEL-FRIED", + "changed_at": "2026-01-09T19:51:07.266833+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -140,7 +153,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +202,149 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.230716+00:00", + "inferred_at": "2026-01-09T19:51:07.178713+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Stockholm", + "formatted": "SE-26-STO", + "country_code": "SE", + "region_code": "26", + "settlement_code": "STO", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Freelance / Self-employed (Current)", + "title": "Educator", + "date_range": "Jan 2009 - Present • 16 years and 9 months", + "location": "Sweden" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Michael A. Frieds Stiftelse", + "title": "Ordförande", + "date_range": "Jan 2013 - Present • 12 years and 9 months", + "location": "Stockholm, Sweden" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Stockholm, Sweden", + "result": { + "geonames_id": 2673730, + "geonames_name": "Stockholm", + "admin1_code": "26", + "admin1_name": "Stockholm", + "feature_code": "PPLC", + "latitude": 59.32938, + "longitude": 18.06871 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "SE-26-STO" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 2673730, + "geonames_name": "Stockholm", + "admin1_code": "26", + "admin1_name": "Stockholm", + "feature_code": "PPLC", + "latitude": 59.32938, + "longitude": 18.06871 + }, + "inferred_at": "2026-01-09T19:51:07.252431+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Stockholm", + "formatted": "SE-26-STO", + "country_code": "SE", + "region_code": "26", + "settlement_code": "STO", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Sweden (SE)" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "EHRI European Holocaust Research Infrastructure", + "title": "Advisory Board Member", + "location": "EHRI-ERIC Advisory Board Member" + } + }, + { + "step": 3, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Michael A. Frieds Stiftelse", + "title": "Ordförande", + "location": "Stockholm, Sweden" + } + }, + { + "step": 4, + "geocoding": "GeoNames resolution", + "query": "Stockholm, Sweden", + "result": { + "geonames_id": 2673730, + "geonames_name": "Stockholm", + "admin1_code": "26", + "admin1_name": "Stockholm", + "feature_code": "PPLC", + "latitude": 59.32938, + "longitude": 18.06871 + } + }, + { + "step": 5, + "formatting": "CC-RR-PPP generation", + "result": "SE-26-STO" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 2673730, + "geonames_name": "Stockholm", + "admin1_code": "26", + "admin1_name": "Stockholm", + "feature_code": "PPLC", + "latitude": 59.32938, + "longitude": 18.06871 + }, + "inferred_at": "2026-01-09T19:51:07.266816+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JEROEN-GANKEMA.json b/data/person/ID_TR-34-IST_198X_NL-ZH-TH_XXXX_JEROEN-GANKEMA.json similarity index 66% rename from data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JEROEN-GANKEMA.json rename to data/person/ID_TR-34-IST_198X_NL-ZH-TH_XXXX_JEROEN-GANKEMA.json index 768c59c83e..c2d93baa03 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JEROEN-GANKEMA.json +++ b/data/person/ID_TR-34-IST_198X_NL-ZH-TH_XXXX_JEROEN-GANKEMA.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JEROEN-GANKEMA", + "ppid": "ID_TR-34-IST_198X_NL-ZH-TH_XXXX_JEROEN-GANKEMA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "TR-34-IST", "first_date": "198X", "last_location": "NL-ZH-TH", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Jeroen Gankema", @@ -122,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeroen-gankema-98625a32_20251214T103057Z.json" ], - "modified_at": "2026-01-09T19:18:16.559472+00:00", + "modified_at": "2026-01-09T19:51:19.033069+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeroen-gankema-98625a32", @@ -136,6 +137,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JEROEN-GANKEMA", + "new_ppid": "ID_TR-34-IST_198X_NL-ZH-TH_XXXX_JEROEN-GANKEMA", + "changed_at": "2026-01-09T19:51:19.033067+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -150,7 +161,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +210,87 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.559452+00:00", + "inferred_at": "2026-01-09T19:51:18.738267+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Istanbul", + "formatted": "TR-34-IST", + "country_code": "TR", + "region_code": "34", + "settlement_code": "IST", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "JMG-training.nl (Current)", + "title": "Directeur Eigenaar", + "date_range": "Jan 2003 - Present • 22 years and 10 months", + "location": "World wide" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministery of foreign affairs, Erasmus Huis", + "title": "Vice Director", + "date_range": "Jun 2009 - Feb 2011 • 1 year and 8 months", + "location": "Jakarta" + } + }, + { + "step": 3, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministry of Foreign Affairs, Netherlands", + "title": "Head Of Press, Culture And Public Diplomacy", + "date_range": "Feb 2013 - Present • 12 years and 9 months", + "location": "Istanbul, Turkey" + } + }, + { + "step": 4, + "geocoding": "GeoNames resolution", + "query": "Istanbul, Turkey", + "result": { + "geonames_id": 745044, + "geonames_name": "Istanbul", + "admin1_code": "34", + "admin1_name": "Istanbul", + "feature_code": "PPLA", + "latitude": 41.01384, + "longitude": 28.94966 + } + }, + { + "step": 5, + "formatting": "CC-RR-PPP generation", + "result": "TR-34-IST" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 745044, + "geonames_name": "Istanbul", + "admin1_code": "34", + "admin1_name": "Istanbul", + "feature_code": "PPLA", + "latitude": 41.01384, + "longitude": 28.94966 + }, + "inferred_at": "2026-01-09T19:51:19.033046+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DEBBIE-CREMER.json b/data/person/ID_TR-68-ANK_198X_XX-XX-XXX_XXXX_DEBBIE-CREMER.json similarity index 68% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DEBBIE-CREMER.json rename to data/person/ID_TR-68-ANK_198X_XX-XX-XXX_XXXX_DEBBIE-CREMER.json index 7a20d086a3..b2157f7621 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DEBBIE-CREMER.json +++ b/data/person/ID_TR-68-ANK_198X_XX-XX-XXX_XXXX_DEBBIE-CREMER.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DEBBIE-CREMER", + "ppid": "ID_TR-68-ANK_198X_XX-XX-XXX_XXXX_DEBBIE-CREMER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "TR-68-ANK", "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Debbie Cremer", @@ -123,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/debbie-cremer-09b28a7_20251214T102942Z.json" ], - "modified_at": "2026-01-09T19:18:17.818739+00:00", + "modified_at": "2026-01-09T19:51:28.777004+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "debbie-cremer-09b28a7", @@ -136,6 +137,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DEBBIE-CREMER", + "new_ppid": "ID_TR-68-ANK_198X_XX-XX-XXX_XXXX_DEBBIE-CREMER", + "changed_at": "2026-01-09T19:51:28.776995+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -150,7 +161,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +210,76 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.816732+00:00", + "inferred_at": "2026-01-09T19:51:28.590476+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Ankara", + "formatted": "TR-68-ANK", + "country_code": "TR", + "region_code": "68", + "settlement_code": "ANK", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Embassy of the Kingdom of the Netherlands in Guatemala", + "title": "Secretary To The Ambassador", + "date_range": "Jul 2007 - Jul 2011 • 4 years", + "location": "Guatemala City, Guatemala" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Embassy of the Kingdom of the Netherlands in Turkey", + "title": "Secretary To The Ambassador", + "date_range": "Aug 2011 - Jul 2015 • 3 years and 11 months", + "location": "Ankara, Turkey" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Ankara, Turkey", + "result": { + "geonames_id": 323786, + "geonames_name": "Ankara", + "admin1_code": "68", + "admin1_name": "Ankara", + "feature_code": "PPLC", + "latitude": 39.91987, + "longitude": 32.85427 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "TR-68-ANK" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 323786, + "geonames_name": "Ankara", + "admin1_code": "68", + "admin1_name": "Ankara", + "feature_code": "PPLC", + "latitude": 39.91987, + "longitude": 32.85427 + }, + "inferred_at": "2026-01-09T19:51:28.772702+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_BENSU-YILDIRIM.json b/data/person/ID_TR-68-ANK_199X_NL-NB-EIN_XXXX_BENSU-YILDIRIM.json similarity index 78% rename from data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_BENSU-YILDIRIM.json rename to data/person/ID_TR-68-ANK_199X_NL-NB-EIN_XXXX_BENSU-YILDIRIM.json index 0b7cdc7966..1bcfa6f43d 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_BENSU-YILDIRIM.json +++ b/data/person/ID_TR-68-ANK_199X_NL-NB-EIN_XXXX_BENSU-YILDIRIM.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_BENSU-YILDIRIM", + "ppid": "ID_TR-68-ANK_199X_NL-NB-EIN_XXXX_BENSU-YILDIRIM", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "TR-68-ANK", "first_date": "199X", "last_location": "NL-NB-EIN", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Bensu Çel Yıldırım", @@ -193,7 +194,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bensucel_20251214T111000Z.json" ], - "modified_at": "2026-01-09T19:18:13.409113+00:00", + "modified_at": "2026-01-09T19:51:23.164927+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bensucel", @@ -216,6 +217,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_BENSU-YILDIRIM", + "new_ppid": "ID_TR-68-ANK_199X_NL-NB-EIN_XXXX_BENSU-YILDIRIM", + "changed_at": "2026-01-09T19:51:23.164925+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -230,7 +241,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -279,7 +290,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.409050+00:00", + "inferred_at": "2026-01-09T19:51:22.982600+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Ankara", + "formatted": "TR-68-ANK", + "country_code": "TR", + "region_code": "68", + "settlement_code": "ANK", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Orta Doğu Teknik Üniversitesi / Middle East Technical University", + "date_range": "2020 - 2022 • 2 years", + "degree": "Master's degree, Micro and Nanotechnology, 4.00" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Orta Doğu Teknik Üniversitesi / Middle East Technical University", + "mapping_result": "Ankara, Turkey" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Ankara, Turkey", + "result": { + "geonames_id": 323786, + "geonames_name": "Ankara", + "admin1_code": "68", + "admin1_name": "Ankara", + "feature_code": "PPLC", + "latitude": 39.91987, + "longitude": 32.85427 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "TR", + "region_code": "68", + "settlement_code": "ANK" + }, + "result": "TR-68-ANK" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 323786, + "geonames_name": "Ankara", + "admin1_code": "68", + "admin1_name": "Ankara", + "feature_code": "PPLC", + "latitude": 39.91987, + "longitude": 32.85427 + }, + "inferred_at": "2026-01-09T19:51:23.164908+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NB-VEL_XXXX_KAAN-ARSLAN.json b/data/person/ID_TR-68-ANK_199X_NL-NB-VEL_XXXX_KAAN-ARSLAN.json similarity index 71% rename from data/person/ID_XX-XX-XXX_199X_NL-NB-VEL_XXXX_KAAN-ARSLAN.json rename to data/person/ID_TR-68-ANK_199X_NL-NB-VEL_XXXX_KAAN-ARSLAN.json index caafe8d847..8cee258a6f 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NB-VEL_XXXX_KAAN-ARSLAN.json +++ b/data/person/ID_TR-68-ANK_199X_NL-NB-VEL_XXXX_KAAN-ARSLAN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_199X_NL-NB-VEL_XXXX_KAAN-ARSLAN", + "ppid": "ID_TR-68-ANK_199X_NL-NB-VEL_XXXX_KAAN-ARSLAN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "TR-68-ANK", "first_date": "199X", "last_location": "NL-NB-VEL", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "198X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Kaan Sergen Arslan", @@ -141,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kaansarslan_20251214T111228Z.json" ], - "modified_at": "2026-01-09T19:18:14.251115+00:00", + "modified_at": "2026-01-09T19:50:59.292793+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kaansarslan", @@ -155,6 +156,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_NL-NB-VEL_XXXX_KAAN-ARSLAN", + "new_ppid": "ID_TR-68-ANK_199X_NL-NB-VEL_XXXX_KAAN-ARSLAN", + "changed_at": "2026-01-09T19:50:59.292770+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -169,7 +180,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +229,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.251033+00:00", + "inferred_at": "2026-01-09T19:50:58.975202+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Ankara", + "formatted": "TR-68-ANK", + "country_code": "TR", + "region_code": "68", + "settlement_code": "ANK", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "Orta Doğu Teknik Üniversitesi / Middle East Technical University", + "date_range": "2017 - 2020 • 3 years", + "degree": "Master's degree, Cognitive Science, 3.04" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "Orta Doğu Teknik Üniversitesi / Middle East Technical University", + "mapping_result": "Ankara, Turkey" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Ankara, Turkey", + "result": { + "geonames_id": 323786, + "geonames_name": "Ankara", + "admin1_code": "68", + "admin1_name": "Ankara", + "feature_code": "PPLC", + "latitude": 39.91987, + "longitude": 32.85427 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "TR", + "region_code": "68", + "settlement_code": "ANK" + }, + "result": "TR-68-ANK" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 323786, + "geonames_name": "Ankara", + "admin1_code": "68", + "admin1_name": "Ankara", + "feature_code": "PPLC", + "latitude": 39.91987, + "longitude": 32.85427 + }, + "inferred_at": "2026-01-09T19:50:59.292644+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GOWTHAM-SIVAKUMAR.json b/data/person/ID_US-IA-AME_199X_US-CT-STA_XXXX_GOWTHAM-SIVAKUMAR.json similarity index 64% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GOWTHAM-SIVAKUMAR.json rename to data/person/ID_US-IA-AME_199X_US-CT-STA_XXXX_GOWTHAM-SIVAKUMAR.json index 86b24efe34..004a3fa678 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GOWTHAM-SIVAKUMAR.json +++ b/data/person/ID_US-IA-AME_199X_US-CT-STA_XXXX_GOWTHAM-SIVAKUMAR.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GOWTHAM-SIVAKUMAR", + "ppid": "ID_US-IA-AME_199X_US-CT-STA_XXXX_GOWTHAM-SIVAKUMAR", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "US-IA-AME", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "US-CT-STA", "last_date": "XXXX", "name_tokens": [ "GOWTHAM", @@ -14,7 +14,9 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "200X" - ] + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Gowtham Sivakumar", @@ -134,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gowtham-sivakumar-339416a2_20251214T110953Z.json" ], - "modified_at": "2026-01-09T19:18:18.945429+00:00", + "modified_at": "2026-01-09T19:51:30.246208+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gowtham-sivakumar-339416a2", @@ -147,6 +149,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GOWTHAM-SIVAKUMAR", + "new_ppid": "ID_US-IA-AME_199X_US-CT-STA_XXXX_GOWTHAM-SIVAKUMAR", + "changed_at": "2026-01-09T19:51:30.246206+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -155,7 +168,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +209,129 @@ "Entry age for education/first job: 24 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.945310+00:00", + "inferred_at": "2026-01-09T19:51:29.956232+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Ames", + "formatted": "US-IA-AME", + "country_code": "US", + "region_code": "IA", + "settlement_code": "AME", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Iowa State University", + "title": "Graduate Research Assistant, Multiscale Surface Engineering Laboratory", + "date_range": "Jan 2017 - Apr 2019 • 2 years and 3 months", + "location": "United States" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Iowa State University", + "title": "PhD Candidate, Multiscale Surface Engineering Laboratory", + "date_range": "Sep 2019 - Present • 6 years and 1 month", + "location": "Ames, Iowa, United States" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Ames, Iowa, United States", + "result": { + "geonames_id": 4846834, + "geonames_name": "Ames", + "admin1_code": "IA", + "admin1_name": "Iowa", + "feature_code": "PPL", + "latitude": 42.03471, + "longitude": -93.61994 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "US-IA-AME" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 4846834, + "geonames_name": "Ames", + "admin1_code": "IA", + "admin1_name": "Iowa", + "feature_code": "PPL", + "latitude": 42.03471, + "longitude": -93.61994 + }, + "inferred_at": "2026-01-09T19:51:30.172525+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Stamford", + "formatted": "US-CT-STA", + "country_code": "US", + "region_code": "CT", + "settlement_code": "STA", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Stamford, Connecticut, United States (US)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Stamford, Connecticut, United States (US)", + "result": { + "geonames_id": 4843564, + "geonames_name": "Stamford", + "admin1_code": "CT", + "admin1_name": "Connecticut", + "feature_code": "PPL", + "latitude": 41.05343, + "longitude": -73.53873 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-CT-STA" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 4843564, + "geonames_name": "Stamford", + "admin1_code": "CT", + "admin1_name": "Connecticut", + "feature_code": "PPL", + "latitude": 41.05343, + "longitude": -73.53873 + }, + "inferred_at": "2026-01-09T19:51:30.246190+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_US-NC-UC_197X_US-CA-SF_XXXX_AARON-XIMM.json b/data/person/ID_US-NC-UC_197X_US-CA-SF_XXXX_AARON-XIMM.json new file mode 100644 index 0000000000..0cb9c5dcd9 --- /dev/null +++ b/data/person/ID_US-NC-UC_197X_US-CA-SF_XXXX_AARON-XIMM.json @@ -0,0 +1,358 @@ +{ + "ppid": "ID_US-NC-UC_197X_US-CA-SF_XXXX_AARON-XIMM", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "US-NC-UC", + "first_date": "197X", + "last_location": "US-CA-SF", + "last_date": "XXXX", + "name_tokens": [ + "AARON", + "XIMM" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Aaron Ximm", + "display_name": "Aaron Ximm", + "name_romanized": null, + "name_tokens": [ + "AARON", + "XIMM" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "D", + "L" + ], + "rationale": "Principal Engineer at Internet Archive, one of the world's most important digital heritage preservation organizations. Works on core infrastructure for web archiving, distributed crawling, and digital preservation. Contributes to preserving global digital cultural heritage through the Wayback Machine and Archive-It." + }, + "affiliations": [ + { + "custodian_name": "Internet Archive", + "custodian_slug": null, + "role_title": "Principal Engineer", + "department": "Core Infrastructure Engineering", + "heritage_relevant": true, + "heritage_type": "D", + "current": true, + "start_date": "2011", + "observed_on": "2025-12-14T11:50:54.351875+00:00", + "source": "linkup_search" + } + ], + "profile_data": { + "name": "Aaron Ximm", + "headline": "Principal Engineer at Internet Archive", + "linkedin_url": "https://www.linkedin.com/in/aaron-ximm-983213", + "location": "San Francisco, California, USA", + "about": "Senior engineer at the Internet Archive (archive.org) with over 32 years of experience. Aaron joined the Archive in 2011, where he aims to assist with the alchemy of converting ephemera into artifacts. As an artist, Aaron is interested in documentation and its possibilities. Primary projects have included updating the Project Gutenberg collection, developing infrastructure for distributed deep crawling of high-value domains, creating a proof of concept for personal digital archiving, and extending Archive ingestion and distribution through the BitTorrent protocol.", + "experience": [ + { + "title": "Principal Engineer", + "company": "Internet Archive", + "location": "San Francisco, California", + "start_date": "2011", + "current": true, + "description": "Senior engineer working on core infrastructure. Projects include: updating Project Gutenberg collection, developing infrastructure for distributed deep crawling of high-value/high-popularity domains, creating proof of concept for personal digital archiving, extending Archive ingestion and distribution through BitTorrent protocol, and managing large-scale focused crawls for the IA and partners." + }, + { + "title": "Engineer", + "company": "SP Controls, Inc", + "location": "California, USA", + "start_date": "1997", + "end_date": "2010", + "current": false, + "description": "Engineering work in software and embedded systems." + }, + { + "title": "Sr Consultant", + "company": "Andersen Consulting", + "location": "USA", + "start_date": "1993", + "end_date": "1996", + "current": false, + "description": "Senior consulting work." + }, + { + "title": "Halo Helper", + "company": "Pantheon Steel, LLC", + "current": false, + "description": "Side project work with handpan instruments." + } + ], + "education": [], + "skills": [ + "Java", + "Python", + "Embedded Systems", + "Distributed Systems", + "REST", + "Algorithms", + "Web Crawling", + "Digital Archiving", + "Elasticsearch", + "Apache Kafka", + "System Architecture", + "Linux", + "Perl", + "C", + "Shell Scripting", + "Git", + "Ansible", + "Redis", + "Scalability", + "Sound Design", + "Field Recording", + "Spatial Audio", + "Binaural Sound" + ], + "languages": [ + "English" + ], + "interests": [ + "Sound Design", + "Field Recording", + "Binaural Sound", + "Spatial Audio", + "Location Sound" + ] + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/aaron-ximm-983213_20251214T115050Z.json", + "observed_on": "2025-12-14T11:50:54.351875+00:00", + "extraction_agent": "claude-opus-4" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.516696+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/aaron-ximm-983213_20251214T115050Z.json" + ], + "modified_at": "2026-01-09T19:51:03.918802+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "aaron-ximm-983213", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AARON-XIMM", + "new_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_AARON-XIMM", + "changed_at": "2026-01-09T19:43:42.069432+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_AARON-XIMM", + "new_ppid": "ID_US-NC-UC_197X_US-CA-SF_XXXX_AARON-XIMM", + "changed_at": "2026-01-09T19:51:03.918799+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1970 is in 197X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Andersen Consulting", + "title": "Sr Consultant", + "date_range": "1993 - 1996" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1993 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1993 - 23 = 1970", + "result": "Estimated birth year: 1970", + "range": "1965-1975 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1965, + 1975 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:51:03.814036+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "USAR Center", + "formatted": "US-NC-UC", + "country_code": "US", + "region_code": "NC", + "settlement_code": "UC", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Andersen Consulting", + "title": "Sr Consultant", + "date_range": "1993 - 1996", + "location": "USA" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "USA", + "result": { + "geonames_id": 4496087, + "geonames_name": "USAR Center", + "admin1_code": "NC", + "admin1_name": "North Carolina", + "feature_code": "PPL", + "latitude": 35.63183, + "longitude": -77.38024 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-NC-UC" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 4496087, + "geonames_name": "USAR Center", + "admin1_code": "NC", + "admin1_name": "North Carolina", + "feature_code": "PPL", + "latitude": 35.63183, + "longitude": -77.38024 + }, + "inferred_at": "2026-01-09T19:51:03.861333+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "San Francisco", + "formatted": "US-CA-SF", + "country_code": "US", + "region_code": "CA", + "settlement_code": "SF", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "San Francisco, California, USA" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "San Francisco, California, USA", + "result": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-CA-SF" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + }, + "inferred_at": "2026-01-09T19:51:03.918779+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_US-NY-NYC_195X_US-NY-NYC_XXXX_B-GEORGE.json b/data/person/ID_US-NY-NYC_195X_US-NY-NYC_XXXX_B-GEORGE.json new file mode 100644 index 0000000000..c3399b6f3d --- /dev/null +++ b/data/person/ID_US-NY-NYC_195X_US-NY-NYC_XXXX_B-GEORGE.json @@ -0,0 +1,375 @@ +{ + "ppid": "ID_US-NY-NYC_195X_US-NY-NYC_XXXX_B-GEORGE", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "US-NY-NYC", + "first_date": "195X", + "last_location": "US-NY-NYC", + "last_date": "XXXX", + "name_tokens": [ + "B", + "GEORGE" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "194X" + ], + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "B. George", + "display_name": "B. George", + "name_romanized": null, + "name_tokens": [ + "B", + "GEORGE" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "A" + ], + "rationale": "Co-founder and director of the ARChive of Contemporary Music (ARC), the largest popular music archive in the world. Pioneering figure in music heritage preservation." + }, + "affiliations": [ + { + "custodian_name": "ARChive of Contemporary Music", + "custodian_slug": "archive-of-contemporary-music", + "role_title": "Co-Founder and Director", + "heritage_relevant": true, + "heritage_type": "A", + "current": true, + "observed_on": "2025-12-14T11:50:54.356439+00:00", + "source": "arcmusic.org" + }, + { + "custodian_name": "One Ten Records", + "custodian_slug": null, + "role_title": "Founder and Owner", + "heritage_relevant": true, + "heritage_type": "A", + "current": false, + "observed_on": "2025-12-14T11:50:54.356439+00:00", + "source": "arcmusic.org" + } + ], + "profile_data": { + "name": "B. George", + "headline": "Co-Founder and Director at ARChive of Contemporary Music", + "linkedin_url": "https://www.linkedin.com/in/bgeorgearc", + "location": "New York City, New York, USA", + "about": "B. George is the Co-Founder (1985) and current Director of the ARChive of Contemporary Music (ARC), the largest popular music collection in the world with more than 3 million recordings and millions of historic materials spanning all cultures. He came to New York City in 1974 as a visual arts student at the Whitney Museum Independent Study Program. His record label, One Ten Records, released the first commercial compilation of audio work by visual artists, 'Airwaves', which included the initial recordings by performance artist Laurie Anderson and unreleased work by Meredith Monk. He released Laurie Anderson's first single 'O'Superman' which reached #2 on the UK pop charts. In 1980 he authored 'Volume', the first comprehensive discographical reference work on Punk and New Wave music.", + "experience": [ + { + "title": "Co-Founder and Director", + "company": "ARChive of Contemporary Music (ARC)", + "location": "New York City, USA", + "start_date": "1985", + "end_date": null, + "description": "Founded ARC with initial donation of 47,000 discs from personal collection. ARC is a non-profit archive that has grown to be the largest popular music collection in the world with over 3 million recordings. Manages collections from notable donors including Keith Richards and Jonathan Demme." + }, + { + "title": "Consultant and Music Curator", + "company": "Various International Institutions", + "location": "USA/UK/France", + "start_date": "1981", + "end_date": "1989", + "description": "Selected soundworks for Paris Biennale (1981, 1983), New Music America (1984), Arts & Events at NYC's World Financial Center (1985-1989). Produced occasional surveys of new American pop and experimental music for BBC's 'The John Peel Show' (1982-1985)." + }, + { + "title": "Record Label Owner", + "company": "One Ten Records", + "location": "New York City, USA", + "start_date": "1979", + "end_date": "1985", + "description": "Founded One Ten Records. Released 'Airwaves', the first commercial compilation of audio work by visual artists. Released Laurie Anderson's debut single 'O'Superman' which reached #2 on UK charts. Produced singles and remixes for Dr. John, Orchestra Jazira (UK/Ghana), and Sonny Okusun (Nigeria)." + }, + { + "title": "Stage Director for Laurie Anderson", + "company": "Laurie Anderson Productions", + "location": "New York City, USA", + "start_date": "1975", + "end_date": "1979", + "description": "Co-directed performance artist Laurie Anderson's stage show." + }, + { + "title": "Visual Arts Student", + "company": "Whitney Museum Independent Study Program", + "location": "New York City, USA", + "start_date": "1974", + "end_date": "1975", + "description": "Attended on scholarship." + } + ], + "education": [ + { + "institution": "Whitney Museum Independent Study Program", + "degree": "Visual Arts", + "field_of_study": "Visual Arts", + "start_date": "1974", + "end_date": "1975" + }, + { + "institution": "University of Michigan", + "degree": "Undergraduate (incomplete)", + "field_of_study": null, + "start_date": null, + "end_date": null + } + ], + "skills": [ + "Music Archiving", + "Record Production", + "Music Curation", + "Discography", + "Arts Administration", + "Non-profit Management", + "Music History", + "Collection Management", + "Stage Direction", + "Performance Art" + ], + "languages": [ + "English" + ], + "publications": [ + { + "title": "Volume: The Comprehensive Discographical Reference Work on Punk and New Wave Music", + "year": "1980", + "description": "First comprehensive discographical reference work on Punk and New Wave music, later editions running 600+ pages." + } + ] + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/bgeorgearc_20251214T115050Z.json", + "observed_on": "2025-12-14T11:50:54.356439+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.506730+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/bgeorgearc_20251214T115050Z.json" + ], + "modified_at": "2026-01-09T19:51:22.259544+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "bgeorgearc", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_B-GEORGE", + "new_ppid": "ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_B-GEORGE", + "changed_at": "2026-01-09T19:43:40.881192+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_B-GEORGE", + "new_ppid": "ID_US-NY-NYC_195X_US-NY-NYC_XXXX_B-GEORGE", + "changed_at": "2026-01-09T19:51:22.259542+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "194X", + "195X" + ], + "edtf": "[194X,195X]", + "edtf_meaning": "one of: 1940s or 1950s", + "precision": "decade_set", + "primary_value": "195X", + "primary_rationale": "1951 is in 195X, but range extends into 194X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Whitney Museum Independent Study Program", + "title": "Visual Arts Student", + "date_range": "1974 - 1975" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1974 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1974 - 23 = 1951", + "result": "Estimated birth year: 1951", + "range": "1946-1956 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1946, + 1956 + ], + "output": [ + "194X", + "195X" + ], + "edtf": "[194X,195X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1951 spans decades 194X/195X", + "inferred_at": "2026-01-09T19:51:22.070768+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "New York City", + "formatted": "US-NY-NYC", + "country_code": "US", + "region_code": "NY", + "settlement_code": "NYC", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Whitney Museum Independent Study Program", + "title": "Visual Arts Student", + "date_range": "1974 - 1975", + "location": "New York City, USA" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "New York City, USA", + "result": { + "geonames_id": 5128581, + "geonames_name": "New York City", + "admin1_code": "NY", + "admin1_name": "New York", + "feature_code": "PPL", + "latitude": 40.71427, + "longitude": -74.00597 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-NY-NYC" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 5128581, + "geonames_name": "New York City", + "admin1_code": "NY", + "admin1_name": "New York", + "feature_code": "PPL", + "latitude": 40.71427, + "longitude": -74.00597 + }, + "inferred_at": "2026-01-09T19:51:22.214260+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "New York City", + "formatted": "US-NY-NYC", + "country_code": "US", + "region_code": "NY", + "settlement_code": "NYC", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "New York City, New York, USA" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "New York City, New York, USA", + "result": { + "geonames_id": 5128581, + "geonames_name": "New York City", + "admin1_code": "NY", + "admin1_name": "New York", + "feature_code": "PPL", + "latitude": 40.71427, + "longitude": -74.00597 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-NY-NYC" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 5128581, + "geonames_name": "New York City", + "admin1_code": "NY", + "admin1_name": "New York", + "feature_code": "PPL", + "latitude": 40.71427, + "longitude": -74.00597 + }, + "inferred_at": "2026-01-09T19:51:22.259527+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_EMILIE-GORDENKER.json b/data/person/ID_US-NY-NYC_196X_XX-XX-XXX_XXXX_EMILIE-GORDENKER.json similarity index 68% rename from data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_EMILIE-GORDENKER.json rename to data/person/ID_US-NY-NYC_196X_XX-XX-XXX_XXXX_EMILIE-GORDENKER.json index 6ac6872052..2019c1041c 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_EMILIE-GORDENKER.json +++ b/data/person/ID_US-NY-NYC_196X_XX-XX-XXX_XXXX_EMILIE-GORDENKER.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_EMILIE-GORDENKER", + "ppid": "ID_US-NY-NYC_196X_XX-XX-XXX_XXXX_EMILIE-GORDENKER", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "US-NY-NYC", "first_date": "196X", "last_location": "XX-XX-XXX", "last_date": "XXXX", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Emilie Gordenker", @@ -115,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/emilie-gordenker-a35b2513_20251214T110044Z.json" ], - "modified_at": "2026-01-09T19:18:17.851634+00:00", + "modified_at": "2026-01-09T19:51:28.999360+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "emilie-gordenker-a35b2513", @@ -137,6 +138,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_EMILIE-GORDENKER", + "new_ppid": "ID_US-NY-NYC_196X_XX-XX-XXX_XXXX_EMILIE-GORDENKER", + "changed_at": "2026-01-09T19:51:28.999356+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -151,7 +162,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +211,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.847368+00:00", + "inferred_at": "2026-01-09T19:51:28.931418+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "New York City", + "formatted": "US-NY-NYC", + "country_code": "US", + "region_code": "NY", + "settlement_code": "NYC", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "New York University", + "date_range": "1990 - 1991 • 1 year", + "degree": "MA, History of Art" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "New York University", + "mapping_result": "New York, United States" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "New York, United States", + "result": { + "geonames_id": 5128581, + "geonames_name": "New York City", + "admin1_code": "NY", + "admin1_name": "New York", + "feature_code": "PPL", + "latitude": 40.71427, + "longitude": -74.00597 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "US", + "region_code": "NY", + "settlement_code": "NYC" + }, + "result": "US-NY-NYC" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 5128581, + "geonames_name": "New York City", + "admin1_code": "NY", + "admin1_name": "New York", + "feature_code": "PPL", + "latitude": 40.71427, + "longitude": -74.00597 + }, + "inferred_at": "2026-01-09T19:51:28.997404+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-BITKINA.json b/data/person/ID_US-NY-NYC_198X_XX-XX-XXX_XXXX_ANNA-BITKINA.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-BITKINA.json rename to data/person/ID_US-NY-NYC_198X_XX-XX-XXX_XXXX_ANNA-BITKINA.json index 3ffaa7a904..a3c0b32873 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-BITKINA.json +++ b/data/person/ID_US-NY-NYC_198X_XX-XX-XXX_XXXX_ANNA-BITKINA.json @@ -1,16 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-BITKINA", + "ppid": "ID_US-NY-NYC_198X_XX-XX-XXX_XXXX_ANNA-BITKINA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_location": "US-NY-NYC", + "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "ANNA", "BITKINA" - ] + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Anna Bitkina", @@ -24,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -153,7 +159,164 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-bitkina-65870a48_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:26.637615+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "anna-bitkina-65870a48" + "linkedin_slug": "anna-bitkina-65870a48", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-BITKINA", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNA-BITKINA", + "changed_at": "2026-01-09T19:43:41.943882+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNA-BITKINA", + "new_ppid": "ID_US-NY-NYC_198X_XX-XX-XXX_XXXX_ANNA-BITKINA", + "changed_at": "2026-01-09T19:51:26.637606+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1987 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "TOK (The Creative Association of Curators)", + "title": "Co-founder and Curator", + "date_range": "2010 - present" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2010 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2010 - 23 = 1987", + "result": "Estimated birth year: 1987", + "range": "1982-1992 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1982, + 1992 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:26.333639+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "New York City", + "formatted": "US-NY-NYC", + "country_code": "US", + "region_code": "NY", + "settlement_code": "NYC", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "TOK (The Creative Association of Curators)", + "title": "Co-founder and Curator", + "date_range": "2010 - present", + "location": "St. Petersburg, Russia" + } + }, + { + "step": 2, + "observation": "Earliest job with location found (no education location available)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Museum of Modern Art (MoMA)", + "title": "C-MAP Guest", + "date_range": "2016 - 2017", + "location": "New York, USA" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "New York, USA", + "result": { + "geonames_id": 5128581, + "geonames_name": "New York City", + "admin1_code": "NY", + "admin1_name": "New York", + "feature_code": "PPL", + "latitude": 40.71427, + "longitude": -74.00597 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "US-NY-NYC" + } + ], + "assumptions": [ + "First job location represents early life region" + ], + "assumption_note": "Job location is weak proxy for birth location; person likely relocated for work", + "geonames_data": { + "geonames_id": 5128581, + "geonames_name": "New York City", + "admin1_code": "NY", + "admin1_name": "New York", + "feature_code": "PPL", + "latitude": 40.71427, + "longitude": -74.00597 + }, + "inferred_at": "2026-01-09T19:51:26.634795+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARIA-PUZYREVA.json b/data/person/ID_US-NY-NYC_199X_US-NJ-JC_XXXX_MARIA-PUZYREVA.json similarity index 88% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARIA-PUZYREVA.json rename to data/person/ID_US-NY-NYC_199X_US-NJ-JC_XXXX_MARIA-PUZYREVA.json index b4f2b0d255..cb56d6bca5 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARIA-PUZYREVA.json +++ b/data/person/ID_US-NY-NYC_199X_US-NJ-JC_XXXX_MARIA-PUZYREVA.json @@ -1,17 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARIA-PUZYREVA", + "ppid": "ID_US-NY-NYC_199X_US-NJ-JC_XXXX_MARIA-PUZYREVA", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "US-NY-NYC", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "US-NJ-JC", "last_date": "XXXX", "name_tokens": [ "MARIA", "PUZYREVA" ], - "first_date_source": "inferred_birth_decade" + "first_date_source": "inferred_birth_decade", + "first_location_source": "inferred_birth_settlement", + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Maria Puzyreva", @@ -150,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maria-puzyreva-7a0482168_20251214T111918Z.json" ], - "modified_at": "2026-01-09T19:18:11.329970+00:00", + "modified_at": "2026-01-09T19:51:05.610768+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maria-puzyreva-7a0482168", @@ -163,6 +165,17 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARIA-PUZYREVA", + "new_ppid": "ID_US-NY-NYC_199X_US-NJ-JC_XXXX_MARIA-PUZYREVA", + "changed_at": "2026-01-09T19:47:58.595540+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -171,7 +184,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +225,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.329890+00:00", + "inferred_at": "2026-01-09T19:51:05.610759+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_193X_NL-NH-AMS_XXXX_JOOP-HAASTER.json b/data/person/ID_XX-XX-XXX_193X_NL-NH-AMS_XXXX_JOOP-HAASTER.json index b6f7bddfa9..7cd37caad2 100644 --- a/data/person/ID_XX-XX-XXX_193X_NL-NH-AMS_XXXX_JOOP-HAASTER.json +++ b/data/person/ID_XX-XX-XXX_193X_NL-NH-AMS_XXXX_JOOP-HAASTER.json @@ -190,7 +190,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joop-van-haaster-027bb312_20251214T102732Z.json" ], - "modified_at": "2026-01-09T19:18:13.507812+00:00", + "modified_at": "2026-01-09T19:51:21.537682+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joop-van-haaster-027bb312", @@ -221,7 +221,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.507778+00:00", + "inferred_at": "2026-01-09T19:51:21.537622+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_194X_NL-GE-APE_XXXX_KARLA-KASSENAAR.json b/data/person/ID_XX-XX-XXX_194X_NL-GE-APE_XXXX_KARLA-KASSENAAR.json index 4bcc369c4d..6e48647f80 100644 --- a/data/person/ID_XX-XX-XXX_194X_NL-GE-APE_XXXX_KARLA-KASSENAAR.json +++ b/data/person/ID_XX-XX-XXX_194X_NL-GE-APE_XXXX_KARLA-KASSENAAR.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karla-kassenaar-b6aa5112_20251214T103419Z.json" ], - "modified_at": "2026-01-09T19:18:13.188294+00:00", + "modified_at": "2026-01-09T19:50:46.704858+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karla-kassenaar-b6aa5112", @@ -178,7 +178,7 @@ "primary_rationale": "1948 is in 194X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -227,7 +227,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1948 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:13.188258+00:00", + "inferred_at": "2026-01-09T19:50:46.704778+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_ELLEN-MAARSCHALKERWEERD.json b/data/person/ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_ELLEN-MAARSCHALKERWEERD.json index 9b5b93678a..ba8990d040 100644 --- a/data/person/ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_ELLEN-MAARSCHALKERWEERD.json +++ b/data/person/ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_ELLEN-MAARSCHALKERWEERD.json @@ -79,10 +79,21 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ellen-maarschalkerweerd-77b08650_20251214T112238Z.json" ], - "modified_at": "2026-01-09T19:18:15.638801+00:00", + "modified_at": "2026-01-09T19:51:25.491819+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ellen-maarschalkerweerd-77b08650", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ELLEN-MAARSCHALKERWEERD", + "new_ppid": "ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_ELLEN-MAARSCHALKERWEERD", + "changed_at": "2026-01-09T19:18:15.638798+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], "inferred_birth_decade": { "values": [ "194X", @@ -95,7 +106,7 @@ "primary_rationale": "1949 is in 194X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -144,19 +155,8 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1949 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:15.636876+00:00", + "inferred_at": "2026-01-09T19:51:25.489889+00:00", "inferred_by": "enrich_ppids.py" } - }, - "ppid_history": [ - { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ELLEN-MAARSCHALKERWEERD", - "new_ppid": "ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_ELLEN-MAARSCHALKERWEERD", - "changed_at": "2026-01-09T19:18:15.638798+00:00", - "reason": "observation_based_inference", - "inferred_fields": [ - "inferred_birth_decade" - ] - } - ] + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_FARIBORZ-KHOSRAVI.json b/data/person/ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_FARIBORZ-KHOSRAVI.json index 4df60b06eb..e3d7ea0392 100644 --- a/data/person/ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_FARIBORZ-KHOSRAVI.json +++ b/data/person/ID_XX-XX-XXX_194X_XX-XX-XXX_XXXX_FARIBORZ-KHOSRAVI.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fariborz-khosravi-25402144_20251214T103929Z.json" ], - "modified_at": "2026-01-09T19:18:15.737811+00:00", + "modified_at": "2026-01-09T19:50:58.343742+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fariborz-khosravi-25402144", @@ -155,7 +155,7 @@ "primary_rationale": "1948 is in 194X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1948 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:15.737755+00:00", + "inferred_at": "2026-01-09T19:50:58.343589+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-FL-AS_XXXX_HENK-SOOMERS.json b/data/person/ID_XX-XX-XXX_195X_NL-FL-AS_XXXX_HENK-SOOMERS.json index 8538aa76c1..ceb4d8183a 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-FL-AS_XXXX_HENK-SOOMERS.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-FL-AS_XXXX_HENK-SOOMERS.json @@ -109,8 +109,14 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T01:30:00Z", + "search_queries": [ + "\"Henk Soomers\" Inspectie van het Onderwijs born birthday biography", + "\"Henk Soomers\" ROC Flevoland geboren PvdA Lelystad" + ], + "result": "not_found", + "notes": "Web search conducted via Exa; found multiple people named Henk Soomers/Somers but could not confirm match with the specific person (Inspector of Education, ROC Flevoland board member). Education record shows 1970-1974 at kath. leergangen Tilburg suggesting birth around 1952." } }, "provenance": { @@ -119,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henksoomers_20251212T180000Z.json" ], - "modified_at": "2026-01-09T19:18:11.340132+00:00", + "modified_at": "2026-01-09T19:50:46.723447+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henksoomers", @@ -155,7 +161,7 @@ "primary_rationale": "1952 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +210,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1952 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:11.340103+00:00", + "inferred_at": "2026-01-09T19:50:46.723406+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-GE-APE_XXXX_DESIREE-SLAUERHOFF.json b/data/person/ID_XX-XX-XXX_195X_NL-GE-APE_XXXX_DESIREE-SLAUERHOFF.json index fe202101e6..84b6e6d06a 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-GE-APE_XXXX_DESIREE-SLAUERHOFF.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-GE-APE_XXXX_DESIREE-SLAUERHOFF.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/desiree-slauerhoff-95751746_20251214T103407Z.json" ], - "modified_at": "2026-01-09T19:18:17.478551+00:00", + "modified_at": "2026-01-09T19:51:29.239731+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "desiree-slauerhoff-95751746", @@ -143,7 +143,7 @@ "primary_rationale": "1951 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1951 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:17.478498+00:00", + "inferred_at": "2026-01-09T19:51:29.239654+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_CHARLOTTE-RAPPARD.json b/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_CHARLOTTE-RAPPARD.json index d86e64a7df..4be5f8b2a2 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_CHARLOTTE-RAPPARD.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_CHARLOTTE-RAPPARD.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/charlotte-van-rappard-6abb684_20251214T112432Z.json" ], - "modified_at": "2026-01-09T19:18:17.999479+00:00", + "modified_at": "2026-01-09T19:51:28.877061+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "charlotte-van-rappard-6abb684", @@ -139,7 +139,7 @@ "primary_rationale": "1952 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1952 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:17.999462+00:00", + "inferred_at": "2026-01-09T19:51:28.877049+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_ISABELLE-GARACHON.json b/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_ISABELLE-GARACHON.json index 12b3ae9b70..3ff42b9d2c 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_ISABELLE-GARACHON.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_ISABELLE-GARACHON.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/isabelle-garachon-bb417918_20251214T111537Z.json" ], - "modified_at": "2026-01-09T19:18:15.071161+00:00", + "modified_at": "2026-01-09T19:51:08.571398+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "isabelle-garachon-bb417918", @@ -126,7 +126,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.071135+00:00", + "inferred_at": "2026-01-09T19:51:08.571343+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_KAROLIEN-VERBRUGGE.json b/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_KAROLIEN-VERBRUGGE.json index 093b35d24e..0a4dcae154 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_KAROLIEN-VERBRUGGE.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_KAROLIEN-VERBRUGGE.json @@ -187,7 +187,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karolien-verbrugge-9ba64512_20251214T112405Z.json" ], - "modified_at": "2026-01-09T19:18:14.222942+00:00", + "modified_at": "2026-01-09T19:50:58.925645+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karolien-verbrugge-9ba64512", @@ -215,7 +215,7 @@ "primary_rationale": "1953 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -264,7 +264,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1953 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:14.219240+00:00", + "inferred_at": "2026-01-09T19:50:58.917499+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MANJA-ZELDENRUST-manja_zeldenrust_31475912.json b/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_MANJA-ZELDENRUST.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MANJA-ZELDENRUST-manja_zeldenrust_31475912.json rename to data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_MANJA-ZELDENRUST.json index 45e52457e4..6fd1366f4b 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MANJA-ZELDENRUST-manja_zeldenrust_31475912.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_MANJA-ZELDENRUST.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MANJA-ZELDENRUST", + "ppid": "ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_MANJA-ZELDENRUST", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "195X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "MANJA", "ZELDENRUST" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "194X" + ] }, "name": { "full_name": "Manja Zeldenrust", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -77,64 +82,11 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/manja-zeldenrust-31475912_20251214T111853Z.json" ], - "modified_at": "2026-01-09T17:43:08.359979+00:00", + "modified_at": "2026-01-09T19:50:58.916178+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "manja-zeldenrust-31475912", "ppid_collision_suffix": "manja_zeldenrust_31475912", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands (NL)", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:08.359971+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MANJA-ZELDENRUST-manja_zeldenrust_31475912", @@ -144,6 +96,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MANJA-ZELDENRUST", + "new_ppid": "ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_MANJA-ZELDENRUST", + "changed_at": "2026-01-09T19:41:12.331835+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "194X", + "195X" + ], + "edtf": "[194X,195X]", + "edtf_meaning": "one of: 1940s or 1950s", + "precision": "decade_set", + "primary_value": "195X", + "primary_rationale": "1952 is in 195X, but range extends into 194X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 51 years" + }, + { + "step": 2, + "calculation": "2026 - 51 = 1975", + "result": "Estimated first job year: 1975", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1975 - 23 = 1952", + "result": "Estimated birth year: 1952", + "range": "1945-1959 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1945, + 1959 + ], + "output": [ + "194X", + "195X" + ], + "edtf": "[194X,195X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1952 spans decades 194X/195X", + "inferred_at": "2026-01-09T19:50:58.916166+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_WIM-HIJDRA.json b/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_WIM-HIJDRA.json similarity index 65% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_WIM-HIJDRA.json rename to data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_WIM-HIJDRA.json index cc1d030e67..9187d397a4 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_WIM-HIJDRA.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_WIM-HIJDRA.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_WIM-HIJDRA", + "ppid": "ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_WIM-HIJDRA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "195X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "WIM", "HIJDRA" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ] }, "name": { "full_name": "Wim Hijdra", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -143,63 +148,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wim-hijdra-67a9514b_20251214T111902Z.json" ], - "modified_at": "2026-01-09T17:43:05.391555+00:00", + "modified_at": "2026-01-09T19:51:04.810493+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wim-hijdra-67a9514b", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands (NL)", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:05.391550+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_WIM-HIJDRA", @@ -209,6 +161,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_WIM-HIJDRA", + "new_ppid": "ID_XX-XX-XXX_195X_NL-NH-AMS_XXXX_WIM-HIJDRA", + "changed_at": "2026-01-09T19:41:10.187706+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "195X", + "196X" + ], + "edtf": "[195X,196X]", + "edtf_meaning": "one of: 1950s or 1960s", + "precision": "decade_set", + "primary_value": "195X", + "primary_rationale": "1959 is in 195X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 44 years" + }, + { + "step": 2, + "calculation": "2026 - 44 = 1982", + "result": "Estimated first job year: 1982", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1982 - 23 = 1959", + "result": "Estimated birth year: 1959", + "range": "1952-1966 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1952, + 1966 + ], + "output": [ + "195X", + "196X" + ], + "edtf": "[195X,196X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", + "inferred_at": "2026-01-09T19:51:04.810474+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_195X_NL-NH-ZAA_XXXX_ROB-PETERS.json b/data/person/ID_XX-XX-XXX_195X_NL-NH-ZAA_XXXX_ROB-PETERS.json index e8b339b8b4..e0baf8f09b 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-NH-ZAA_XXXX_ROB-PETERS.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-NH-ZAA_XXXX_ROB-PETERS.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rob-peters-467857150_20251214T111552Z.json" ], - "modified_at": "2026-01-09T19:18:13.891574+00:00", + "modified_at": "2026-01-09T19:51:05.619713+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rob-peters-467857150", @@ -155,7 +155,7 @@ "primary_rationale": "1957 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1957 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.889601+00:00", + "inferred_at": "2026-01-09T19:51:05.612431+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-OV-ZWO_XXXX_A-GEVERS.json b/data/person/ID_XX-XX-XXX_195X_NL-OV-ZWO_XXXX_A-GEVERS.json index b1750f6ecf..68d5032ce5 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-OV-ZWO_XXXX_A-GEVERS.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-OV-ZWO_XXXX_A-GEVERS.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/a-j-gevers-42993830_20251214T110424Z.json" ], - "modified_at": "2026-01-09T19:18:15.955418+00:00", + "modified_at": "2026-01-09T19:51:15.706293+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "a-j-gevers-42993830", @@ -108,7 +108,7 @@ "primary_rationale": "1950 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1950 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:15.955412+00:00", + "inferred_at": "2026-01-09T19:51:15.706272+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-UT-SOE_XXXX_JET-BRINKE.json b/data/person/ID_XX-XX-XXX_195X_NL-UT-SOE_XXXX_JET-BRINKE.json index 20bae8c1c0..52b051b05f 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-UT-SOE_XXXX_JET-BRINKE.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-UT-SOE_XXXX_JET-BRINKE.json @@ -144,7 +144,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jet-ten-brinke-40a9a317_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:15.474339+00:00", + "modified_at": "2026-01-09T19:51:11.045130+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jet-ten-brinke-40a9a317", @@ -181,7 +181,7 @@ "primary_rationale": "1953 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1953 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:15.474330+00:00", + "inferred_at": "2026-01-09T19:51:11.045117+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-ZH-LEI_XXXX_HARRY-LEEUWEN.json b/data/person/ID_XX-XX-XXX_195X_NL-ZH-LEI_XXXX_HARRY-LEEUWEN.json index 17ae77823a..48ca2b123a 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-ZH-LEI_XXXX_HARRY-LEEUWEN.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-ZH-LEI_XXXX_HARRY-LEEUWEN.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harry-van-leeuwen-437b7694_20251214T112948Z.json" ], - "modified_at": "2026-01-09T19:18:13.587964+00:00", + "modified_at": "2026-01-09T19:51:29.482951+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harry-van-leeuwen-437b7694", @@ -167,7 +167,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.582055+00:00", + "inferred_at": "2026-01-09T19:51:29.476869+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_ANS-SCHMETZ.json b/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_ANS-SCHMETZ.json index 6ec522aaad..a51c837b39 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_ANS-SCHMETZ.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_ANS-SCHMETZ.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ans-schmetz-7973467_20251214T104054Z.json" ], - "modified_at": "2026-01-09T19:18:12.138102+00:00", + "modified_at": "2026-01-09T19:50:47.451060+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ans-schmetz-7973467", @@ -130,7 +130,7 @@ "primary_rationale": "1951 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1951 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:12.138045+00:00", + "inferred_at": "2026-01-09T19:50:47.451048+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_FRITS-RIJT.json b/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_FRITS-RIJT.json index 9380207cfe..491d543891 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_FRITS-RIJT.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_FRITS-RIJT.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frits-van-rijt-841b9b83_20251214T103338Z.json" ], - "modified_at": "2026-01-09T19:18:14.310797+00:00", + "modified_at": "2026-01-09T19:51:00.105713+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frits-van-rijt-841b9b83", @@ -108,7 +108,7 @@ "primary_rationale": "1953 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1953 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:14.310790+00:00", + "inferred_at": "2026-01-09T19:51:00.105704+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_KEES-NOOREL.json b/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_KEES-NOOREL.json index 2024c228f6..9c7284c04b 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_KEES-NOOREL.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_KEES-NOOREL.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kees-van-noorel-06a973151_20251214T113418Z.json" ], - "modified_at": "2026-01-09T19:18:15.404033+00:00", + "modified_at": "2026-01-09T19:51:08.779627+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kees-van-noorel-06a973151", @@ -139,7 +139,7 @@ "primary_rationale": "1959 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.389907+00:00", + "inferred_at": "2026-01-09T19:51:08.765595+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_MARIAN-POLEN.json b/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_MARIAN-POLEN.json index 6516d75bac..47a9e2bffd 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_MARIAN-POLEN.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_MARIAN-POLEN.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marian-van-polen-9799a550_20251214T112933Z.json" ], - "modified_at": "2026-01-09T19:18:13.255420+00:00", + "modified_at": "2026-01-09T19:51:18.321254+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marian-van-polen-9799a550", @@ -165,7 +165,7 @@ "primary_rationale": "1951 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1951 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:13.255377+00:00", + "inferred_at": "2026-01-09T19:51:18.321151+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_RINSKE-HAAN.json b/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_RINSKE-HAAN.json index 06049adac3..e073fe8b27 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_RINSKE-HAAN.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_RINSKE-HAAN.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rinske-de-haan-0b529712_20251214T113337Z.json" ], - "modified_at": "2026-01-09T19:18:15.466028+00:00", + "modified_at": "2026-01-09T19:50:53.713543+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rinske-de-haan-0b529712", @@ -141,7 +141,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.466000+00:00", + "inferred_at": "2026-01-09T19:50:53.713476+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_ROSA-LACHMAN.json b/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_ROSA-LACHMAN.json index c4bd844918..1e60b7711b 100644 --- a/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_ROSA-LACHMAN.json +++ b/data/person/ID_XX-XX-XXX_195X_NL-ZH-TH_XXXX_ROSA-LACHMAN.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rosa-lachman-43126828_20251214T113001Z.json" ], - "modified_at": "2026-01-09T19:18:11.464547+00:00", + "modified_at": "2026-01-09T19:50:46.973972+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rosa-lachman-43126828", @@ -114,7 +114,7 @@ "primary_rationale": "1958 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +163,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1958 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:11.462205+00:00", + "inferred_at": "2026-01-09T19:50:46.968679+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BREWSTER-KAHLE.json b/data/person/ID_XX-XX-XXX_195X_US-CA-SF_XXXX_BREWSTER-KAHLE.json similarity index 58% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BREWSTER-KAHLE.json rename to data/person/ID_XX-XX-XXX_195X_US-CA-SF_XXXX_BREWSTER-KAHLE.json index 27567c26e8..7399c1f63f 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BREWSTER-KAHLE.json +++ b/data/person/ID_XX-XX-XXX_195X_US-CA-SF_XXXX_BREWSTER-KAHLE.json @@ -1,16 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BREWSTER-KAHLE", + "ppid": "ID_XX-XX-XXX_195X_US-CA-SF_XXXX_BREWSTER-KAHLE", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "first_date": "195X", + "last_location": "US-CA-SF", "last_date": "XXXX", "name_tokens": [ "BREWSTER", "KAHLE" - ] + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Brewster Lurton Kahle", @@ -24,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -153,7 +159,148 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/brewster-kahle-2a647652_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:03.557491+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "brewster-kahle-2a647652" + "linkedin_slug": "brewster-kahle-2a647652", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BREWSTER-KAHLE", + "new_ppid": "ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_BREWSTER-KAHLE", + "changed_at": "2026-01-09T19:43:42.509877+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_BREWSTER-KAHLE", + "new_ppid": "ID_XX-XX-XXX_195X_US-CA-SF_XXXX_BREWSTER-KAHLE", + "changed_at": "2026-01-09T19:51:03.557488+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "195X", + "196X" + ], + "edtf": "[195X,196X]", + "edtf_meaning": "one of: 1950s or 1960s", + "precision": "decade_set", + "primary_value": "195X", + "primary_rationale": "1959 is in 195X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Thinking Machines Corporation", + "title": "Engineer / Co-Founder", + "date_range": "1982 - 1989" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1982 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1982 - 23 = 1959", + "result": "Estimated birth year: 1959", + "range": "1954-1964 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1954, + 1964 + ], + "output": [ + "195X", + "196X" + ], + "edtf": "[195X,196X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1959 spans decades 195X/196X", + "inferred_at": "2026-01-09T19:51:03.424821+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "San Francisco", + "formatted": "US-CA-SF", + "country_code": "US", + "region_code": "CA", + "settlement_code": "SF", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "San Francisco, California, United States" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "San Francisco, California, United States", + "result": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-CA-SF" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + }, + "inferred_at": "2026-01-09T19:51:03.557473+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_BALASAN-HARUTYUNYAN.json b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_BALASAN-HARUTYUNYAN.json index 899d017c6d..e94b0b6745 100644 --- a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_BALASAN-HARUTYUNYAN.json +++ b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_BALASAN-HARUTYUNYAN.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/balasan-harutyunyan-285b88b3_20251214T103904Z.json" ], - "modified_at": "2026-01-09T19:18:12.952194+00:00", + "modified_at": "2026-01-09T19:50:49.595129+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "balasan-harutyunyan-285b88b3", @@ -145,7 +145,7 @@ "primary_rationale": "1953 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1953 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:12.952181+00:00", + "inferred_at": "2026-01-09T19:50:49.595082+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_FRANK-MSC.json b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_FRANK-MSC.json index 5c925d8964..a3776bf895 100644 --- a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_FRANK-MSC.json +++ b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_FRANK-MSC.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frank-wittens-msc-57078834_20251214T110619Z.json" ], - "modified_at": "2026-01-09T19:18:18.016761+00:00", + "modified_at": "2026-01-09T19:51:28.882375+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frank-wittens-msc-57078834", @@ -165,7 +165,7 @@ "primary_rationale": "1953 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1953 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:18.016722+00:00", + "inferred_at": "2026-01-09T19:51:28.882242+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_GERARD-HEUVELINK.json b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_GERARD-HEUVELINK.json index 993083d129..da6ec42c1a 100644 --- a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_GERARD-HEUVELINK.json +++ b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_GERARD-HEUVELINK.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerard-heuvelink-1b83096_20251214T104202Z.json" ], - "modified_at": "2026-01-09T19:18:14.358789+00:00", + "modified_at": "2026-01-09T19:51:03.406351+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerard-heuvelink-1b83096", @@ -171,7 +171,7 @@ "primary_rationale": "1957 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1957 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:14.358749+00:00", + "inferred_at": "2026-01-09T19:51:03.406235+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_IRENE-WOLTERS.json b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_IRENE-WOLTERS.json index cbb8f07869..75e6681045 100644 --- a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_IRENE-WOLTERS.json +++ b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_IRENE-WOLTERS.json @@ -76,7 +76,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/irene-wolters-8283209_20251214T113346Z.json" ], - "modified_at": "2026-01-09T19:18:15.255109+00:00", + "modified_at": "2026-01-09T19:51:07.586484+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "irene-wolters-8283209", @@ -97,7 +97,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -138,7 +138,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.253204+00:00", + "inferred_at": "2026-01-09T19:51:07.584547+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_NM-SMABERS.json b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_NM-SMABERS.json index af69908488..ed9a048fea 100644 --- a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_NM-SMABERS.json +++ b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_NM-SMABERS.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/n-m-smabers-970b2934_20251214T112312Z.json" ], - "modified_at": "2026-01-09T19:18:16.723027+00:00", + "modified_at": "2026-01-09T19:51:21.548905+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "n-m-smabers-970b2934", @@ -106,7 +106,7 @@ "primary_rationale": "1955 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1955 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.721101+00:00", + "inferred_at": "2026-01-09T19:51:21.547110+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_PETER-WOUTERS.json b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_PETER-WOUTERS.json index 2db27703b6..ad760971f1 100644 --- a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_PETER-WOUTERS.json +++ b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_PETER-WOUTERS.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/peter-wouters-b0264b9_20251214T113057Z.json" ], - "modified_at": "2026-01-09T19:18:13.239650+00:00", + "modified_at": "2026-01-09T19:50:53.695418+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "peter-wouters-b0264b9", @@ -134,7 +134,7 @@ "primary_rationale": "1956 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1956 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.239631+00:00", + "inferred_at": "2026-01-09T19:50:53.695374+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_PIET-BOT.json b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_PIET-BOT.json index 66fb6eb8b1..e45457c8a0 100644 --- a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_PIET-BOT.json +++ b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_PIET-BOT.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/piet-bot-68b77030_20251214T110738Z.json" ], - "modified_at": "2026-01-09T19:18:11.532527+00:00", + "modified_at": "2026-01-09T19:50:47.145462+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "piet-bot-68b77030", @@ -106,7 +106,7 @@ "primary_rationale": "1952 is in 195X, but range extends into 194X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1952 spans decades 194X/195X", - "inferred_at": "2026-01-09T19:18:11.532494+00:00", + "inferred_at": "2026-01-09T19:50:47.145361+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_SANDRA-RIKKOERT.json b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_SANDRA-RIKKOERT.json index 6ee1d77f90..9d4dd663f6 100644 --- a/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_SANDRA-RIKKOERT.json +++ b/data/person/ID_XX-XX-XXX_195X_XX-XX-XXX_XXXX_SANDRA-RIKKOERT.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sandra-rikkoert-02924151_20251214T112336Z.json" ], - "modified_at": "2026-01-09T19:18:13.849929+00:00", + "modified_at": "2026-01-09T19:50:56.710773+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sandra-rikkoert-02924151", @@ -111,7 +111,7 @@ "primary_rationale": "1957 is in 195X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1957 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.848186+00:00", + "inferred_at": "2026-01-09T19:50:56.706380+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-FL-AS_XXXX_ERIK-SCHUILING.json b/data/person/ID_XX-XX-XXX_196X_NL-FL-AS_XXXX_ERIK-SCHUILING.json index 7b90d0263e..23c6aa8df2 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-FL-AS_XXXX_ERIK-SCHUILING.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-FL-AS_XXXX_ERIK-SCHUILING.json @@ -132,7 +132,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erik-schuiling-a5b72211_20251214T104205Z.json" ], - "modified_at": "2026-01-09T19:18:15.741789+00:00", + "modified_at": "2026-01-09T19:51:14.182649+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erik-schuiling-a5b72211", @@ -160,7 +160,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.741767+00:00", + "inferred_at": "2026-01-09T19:51:14.182560+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-GE-APE_XXXX_CONNY-AGEMA.json b/data/person/ID_XX-XX-XXX_196X_NL-GE-APE_XXXX_CONNY-AGEMA.json index 74ed72b94b..981a3f4766 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-GE-APE_XXXX_CONNY-AGEMA.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-GE-APE_XXXX_CONNY-AGEMA.json @@ -164,7 +164,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/conny-agema-56605789_20251214T103415Z.json" ], - "modified_at": "2026-01-09T19:18:15.619258+00:00", + "modified_at": "2026-01-09T19:51:12.717079+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "conny-agema-56605789", @@ -192,7 +192,7 @@ "primary_rationale": "1963 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1963 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.619235+00:00", + "inferred_at": "2026-01-09T19:51:12.717013+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-GE-DOE_XXXX_RON-SPAAN.json b/data/person/ID_XX-XX-XXX_196X_NL-GE-DOE_XXXX_RON-SPAAN.json index 12f4c5bf10..0ca166e3ca 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-GE-DOE_XXXX_RON-SPAAN.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-GE-DOE_XXXX_RON-SPAAN.json @@ -233,7 +233,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ron-spaan-274ba324_20251214T110758Z.json" ], - "modified_at": "2026-01-09T19:18:16.905561+00:00", + "modified_at": "2026-01-09T19:51:22.457801+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ron-spaan-274ba324", @@ -261,7 +261,7 @@ "primary_rationale": "1966 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -310,7 +310,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1966 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.905527+00:00", + "inferred_at": "2026-01-09T19:51:22.457655+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-BRE_XXXX_BERT-SCHUUR.json b/data/person/ID_XX-XX-XXX_196X_NL-NB-BRE_XXXX_BERT-SCHUUR.json similarity index 60% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NB-BRE_XXXX_BERT-SCHUUR.json rename to data/person/ID_XX-XX-XXX_196X_NL-NB-BRE_XXXX_BERT-SCHUUR.json index 901a266de9..066842e63b 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-BRE_XXXX_BERT-SCHUUR.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NB-BRE_XXXX_BERT-SCHUUR.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NB-BRE_XXXX_BERT-SCHUUR", + "ppid": "ID_XX-XX-XXX_196X_NL-NB-BRE_XXXX_BERT-SCHUUR", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "196X", "last_location": "NL-NB-BRE", "last_date": "XXXX", "name_tokens": [ "BERT", "SCHUUR" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] }, "name": { "full_name": "Bert Schuur", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -111,63 +116,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bert-schuur-a4870418_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:43:03.161456+00:00", + "modified_at": "2026-01-09T19:50:58.946010+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bert-schuur-a4870418", - "inferred_current_settlement": { - "value": "Breda", - "formatted": "NL-NB-BRE", - "country_code": "NL", - "region_code": "NB", - "settlement_code": "BRE", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Breda, North Brabant, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Breda, North Brabant, Netherlands", - "result": { - "geonames_id": 2758401, - "geonames_name": "Breda", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.58656, - "longitude": 4.77596 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NB-BRE" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2758401, - "geonames_name": "Breda", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.58656, - "longitude": 4.77596 - }, - "inferred_at": "2026-01-09T17:43:03.161450+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BERT-SCHUUR", @@ -177,6 +129,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NB-BRE_XXXX_BERT-SCHUUR", + "new_ppid": "ID_XX-XX-XXX_196X_NL-NB-BRE_XXXX_BERT-SCHUUR", + "changed_at": "2026-01-09T19:43:41.475076+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "196X", + "primary_rationale": "1968 is in 196X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "35 years and 5 months" + }, + { + "step": 2, + "calculation": "2026 - 35 = 1991", + "result": "Estimated first job year: 1991", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1991 - 23 = 1968", + "result": "Estimated birth year: 1968", + "range": "1961-1975 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1961, + 1975 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:50:58.946001+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NB-BRE_XXXX_MARCUS-DOORN.json b/data/person/ID_XX-XX-XXX_196X_NL-NB-BRE_XXXX_MARCUS-DOORN.json index 413a0ec0d5..87a03b4b1a 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NB-BRE_XXXX_MARCUS-DOORN.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NB-BRE_XXXX_MARCUS-DOORN.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marcus-van-doorn-6213858a_20251214T103307Z.json" ], - "modified_at": "2026-01-09T19:18:17.649744+00:00", + "modified_at": "2026-01-09T19:51:28.545209+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marcus-van-doorn-6213858a", @@ -197,7 +197,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.642707+00:00", + "inferred_at": "2026-01-09T19:51:28.539808+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NB-BRE_XXXX_VAN-ESSEN.json b/data/person/ID_XX-XX-XXX_196X_NL-NB-BRE_XXXX_VAN-ESSEN.json index ddeb5f71b9..6cbb2ff76f 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NB-BRE_XXXX_VAN-ESSEN.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NB-BRE_XXXX_VAN-ESSEN.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/niek-essen-van-50b3445a_20251214T104033Z.json" ], - "modified_at": "2026-01-09T19:18:16.622070+00:00", + "modified_at": "2026-01-09T19:51:20.927055+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "niek-essen-van-50b3445a", @@ -140,7 +140,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.618303+00:00", + "inferred_at": "2026-01-09T19:51:20.923393+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_ALFONS-HUTSCHEMAEKERS.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_ALFONS-HUTSCHEMAEKERS.json index 2e67ba5068..6d99d7cc1f 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_ALFONS-HUTSCHEMAEKERS.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_ALFONS-HUTSCHEMAEKERS.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alfons-hutschemaekers-01090946_20251214T112104Z.json" ], - "modified_at": "2026-01-09T19:18:15.044104+00:00", + "modified_at": "2026-01-09T19:51:06.648690+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alfons-hutschemaekers-01090946", @@ -139,7 +139,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.044089+00:00", + "inferred_at": "2026-01-09T19:51:06.648652+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_BENITA-JANSMA.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_BENITA-JANSMA.json new file mode 100644 index 0000000000..ace50f2ddf --- /dev/null +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_BENITA-JANSMA.json @@ -0,0 +1,164 @@ +{ + "ppid": "ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_BENITA-JANSMA", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "196X", + "last_location": "NL-NH-AMS", + "last_date": "XXXX", + "name_tokens": [ + "BENITA", + "JANSMA" + ], + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] + }, + "name": { + "full_name": "Benita Jansma", + "display_name": "Benita Jansma", + "name_romanized": null, + "name_tokens": [ + "BENITA", + "JANSMA" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "A" + ], + "rationale": "Identified as heritage staff at Regionaal Archief Alkmaar" + }, + "affiliations": [], + "profile_data": { + "name": "Benita Jansma", + "linkedin_url": "https://www.linkedin.com/in/benita-jansma-47a30311", + "headline": "book-and paperconservator at Regionaal Archief Alkmaar", + "location": "Amsterdam, North Holland, Netherlands (NL)", + "connections": "208 connections • 210 followers", + "about": "Total Experience: 35 years and 7 months", + "experience": [], + "education": [], + "skills": [], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/benita-jansma-47a30311_20251214T113142Z.json", + "observed_on": "2025-12-14T11:31:42.465344+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.708022+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/benita-jansma-47a30311_20251214T113142Z.json" + ], + "modified_at": "2026-01-09T19:51:21.780966+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "benita-jansma-47a30311", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BENITA-JANSMA", + "new_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BENITA-JANSMA", + "changed_at": "2026-01-09T17:43:05.314571+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BENITA-JANSMA", + "new_ppid": "ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_BENITA-JANSMA", + "changed_at": "2026-01-09T19:41:09.726291+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "196X", + "primary_rationale": "1968 is in 196X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 35 years" + }, + { + "step": 2, + "calculation": "2026 - 35 = 1991", + "result": "Estimated first job year: 1991", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1991 - 23 = 1968", + "result": "Estimated birth year: 1968", + "range": "1961-1975 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1961, + 1975 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:51:21.780958+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_BRAM-VRIES.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_BRAM-VRIES.json index e6f7a1ea31..d52f27a4f6 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_BRAM-VRIES.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_BRAM-VRIES.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bram-vries-71878219_20251214T111622Z.json" ], - "modified_at": "2026-01-09T19:18:13.814037+00:00", + "modified_at": "2026-01-09T19:50:56.603394+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bram-vries-71878219", @@ -126,7 +126,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.814007+00:00", + "inferred_at": "2026-01-09T19:50:56.603330+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_ERIK-GINKEL.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_ERIK-GINKEL.json index 05d0fc4eca..702439b08f 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_ERIK-GINKEL.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_ERIK-GINKEL.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erik-van-ginkel-3933037_20251214T111423Z.json" ], - "modified_at": "2026-01-09T19:18:15.781278+00:00", + "modified_at": "2026-01-09T19:50:49.606025+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erik-van-ginkel-3933037", @@ -136,7 +136,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.781253+00:00", + "inferred_at": "2026-01-09T19:50:49.605925+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_IDELETTE-LEEUWEN.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_IDELETTE-LEEUWEN.json index 1502ec863e..91705762ca 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_IDELETTE-LEEUWEN.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_IDELETTE-LEEUWEN.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/idelette-van-leeuwen-b2221518_20251214T111328Z.json" ], - "modified_at": "2026-01-09T19:18:16.377217+00:00", + "modified_at": "2026-01-09T19:51:18.463577+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "idelette-van-leeuwen-b2221518", @@ -133,7 +133,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.377184+00:00", + "inferred_at": "2026-01-09T19:51:18.463528+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_IGOR-SANTHAGENS.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_IGOR-SANTHAGENS.json index 072967cfe4..2a86165d87 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_IGOR-SANTHAGENS.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_IGOR-SANTHAGENS.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/igor-santhagens-aa284262_20251214T111603Z.json" ], - "modified_at": "2026-01-09T19:18:13.629274+00:00", + "modified_at": "2026-01-09T19:50:55.251368+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "igor-santhagens-aa284262", @@ -124,7 +124,7 @@ "primary_rationale": "1965 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1965 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.629266+00:00", + "inferred_at": "2026-01-09T19:50:55.251354+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_JEPHTA-HERMELINK.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_JEPHTA-HERMELINK.json index d7efed15ba..3c3d8bb4d4 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_JEPHTA-HERMELINK.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_JEPHTA-HERMELINK.json @@ -242,7 +242,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jephta-hermelink-0288a6a_20251214T112525Z.json" ], - "modified_at": "2026-01-09T19:18:14.189102+00:00", + "modified_at": "2026-01-09T19:50:58.814434+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jephta-hermelink-0288a6a", @@ -270,7 +270,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -319,7 +319,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.189035+00:00", + "inferred_at": "2026-01-09T19:50:58.814062+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_LAURENT-SOZZANI.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_LAURENT-SOZZANI.json index 361132c6f9..e1ebb034ed 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_LAURENT-SOZZANI.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_LAURENT-SOZZANI.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laurent-sozzani-5a4b484_20251214T111849Z.json" ], - "modified_at": "2026-01-09T19:18:14.651563+00:00", + "modified_at": "2026-01-09T19:51:03.233482+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laurent-sozzani-5a4b484", @@ -112,7 +112,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -161,7 +161,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.651557+00:00", + "inferred_at": "2026-01-09T19:51:03.233473+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_OLGA-MEER.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_OLGA-MEER.json index 5493bdb159..f278e0f2c9 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_OLGA-MEER.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_OLGA-MEER.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/olga-van-meer-544a1216_20251214T111720Z.json" ], - "modified_at": "2026-01-09T19:18:13.765830+00:00", + "modified_at": "2026-01-09T19:50:47.472284+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "olga-van-meer-544a1216", @@ -157,7 +157,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.765788+00:00", + "inferred_at": "2026-01-09T19:50:47.472208+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_ROSMARIJN-WEDDEPOHL.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_ROSMARIJN-WEDDEPOHL.json index 82b567f7e8..b644b22f95 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_ROSMARIJN-WEDDEPOHL.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_ROSMARIJN-WEDDEPOHL.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rosmarijn-weddepohl-495117100_20251214T110130Z.json" ], - "modified_at": "2026-01-09T19:18:13.114317+00:00", + "modified_at": "2026-01-09T19:51:08.590008+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rosmarijn-weddepohl-495117100", @@ -152,7 +152,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.106848+00:00", + "inferred_at": "2026-01-09T19:51:08.573422+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_SASKIA-MOLENDIJK.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_SASKIA-MOLENDIJK.json index 93b6190ee4..9b02e16729 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_SASKIA-MOLENDIJK.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_SASKIA-MOLENDIJK.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saskia-molendijk-39032817_20251214T111724Z.json" ], - "modified_at": "2026-01-09T19:18:13.867248+00:00", + "modified_at": "2026-01-09T19:50:56.724066+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saskia-molendijk-39032817", @@ -138,7 +138,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +187,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.867228+00:00", + "inferred_at": "2026-01-09T19:50:56.723995+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_SASKIA-MOOREN.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_SASKIA-MOOREN.json index 7d65584736..e16bd33e07 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_SASKIA-MOOREN.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_SASKIA-MOOREN.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saskia-mooren-7a1a288_20251214T111734Z.json" ], - "modified_at": "2026-01-09T19:18:11.234793+00:00", + "modified_at": "2026-01-09T19:51:34.140441+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saskia-mooren-7a1a288", @@ -132,7 +132,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.234760+00:00", + "inferred_at": "2026-01-09T19:51:34.140396+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_TRUUS-VRIES.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_TRUUS-VRIES.json index a25a177385..a8f64a0345 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_TRUUS-VRIES.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_TRUUS-VRIES.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/truus-de-vries-99586b68_20251214T113154Z.json" ], - "modified_at": "2026-01-09T19:18:14.953872+00:00", + "modified_at": "2026-01-09T19:51:05.604396+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "truus-de-vries-99586b68", @@ -114,7 +114,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +163,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.953864+00:00", + "inferred_at": "2026-01-09T19:51:05.604383+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_VAN-SCHAAF.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_VAN-SCHAAF.json index 994b67b5d7..7d68939200 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_VAN-SCHAAF.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_VAN-SCHAAF.json @@ -83,7 +83,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jetske-schaaf-van-der-8177a2a_20251214T110456Z.json" ], - "modified_at": "2026-01-09T19:18:17.207717+00:00", + "modified_at": "2026-01-09T19:51:25.389863+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jetske-schaaf-van-der-8177a2a", @@ -111,7 +111,7 @@ "primary_rationale": "1960 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1960 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:17.207699+00:00", + "inferred_at": "2026-01-09T19:51:25.389836+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-HOO_XXXX_YOLANDA-LIPPENS.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-HOO_XXXX_YOLANDA-LIPPENS.json index eb8338381b..ad62e9301d 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-HOO_XXXX_YOLANDA-LIPPENS.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-HOO_XXXX_YOLANDA-LIPPENS.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yolandalippens_20251214T110425Z.json" ], - "modified_at": "2026-01-09T19:18:16.587898+00:00", + "modified_at": "2026-01-09T19:51:19.936145+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yolandalippens", @@ -196,7 +196,7 @@ "primary_rationale": "1964 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -245,7 +245,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1964 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.587876+00:00", + "inferred_at": "2026-01-09T19:51:19.936078+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-NH-OAD_XXXX_ISKANDER-BREEBAART.json b/data/person/ID_XX-XX-XXX_196X_NL-NH-OAD_XXXX_ISKANDER-BREEBAART.json index ff08723478..b9de3c86f8 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-NH-OAD_XXXX_ISKANDER-BREEBAART.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-NH-OAD_XXXX_ISKANDER-BREEBAART.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/iskander-breebaart-854799b3_20251214T111823Z.json" ], - "modified_at": "2026-01-09T19:18:13.168608+00:00", + "modified_at": "2026-01-09T19:50:53.019260+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "iskander-breebaart-854799b3", @@ -111,7 +111,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.166639+00:00", + "inferred_at": "2026-01-09T19:50:53.017127+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-UT-DBI_XXXX_ANGELIQUE-LUNTEREN.json b/data/person/ID_XX-XX-XXX_196X_NL-UT-DBI_XXXX_ANGELIQUE-LUNTEREN.json index 86c4c9c61b..6c919c34d4 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-UT-DBI_XXXX_ANGELIQUE-LUNTEREN.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-UT-DBI_XXXX_ANGELIQUE-LUNTEREN.json @@ -175,7 +175,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/angelique-van-lunteren-0a1ab2234_20251214T104141Z.json" ], - "modified_at": "2026-01-09T19:18:16.503192+00:00", + "modified_at": "2026-01-09T19:51:18.552373+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "angelique-van-lunteren-0a1ab2234", @@ -203,7 +203,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.503182+00:00", + "inferred_at": "2026-01-09T19:51:18.552341+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-AAD_XXXX_FRED-KOELEWIJN.json b/data/person/ID_XX-XX-XXX_196X_NL-ZH-AAD_XXXX_FRED-KOELEWIJN.json index 7dd11bfe1b..e455f7b8af 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-AAD_XXXX_FRED-KOELEWIJN.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-ZH-AAD_XXXX_FRED-KOELEWIJN.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fred-koelewijn-3456326a_20251214T112150Z.json" ], - "modified_at": "2026-01-09T19:18:17.243697+00:00", + "modified_at": "2026-01-09T19:51:25.477130+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fred-koelewijn-3456326a", @@ -124,7 +124,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.243664+00:00", + "inferred_at": "2026-01-09T19:51:25.477054+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-CAD_XXXX_SUZAN-WELLE.json b/data/person/ID_XX-XX-XXX_196X_NL-ZH-CAD_XXXX_SUZAN-WELLE.json index 5ab3e3d3f4..f3b73324f1 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-CAD_XXXX_SUZAN-WELLE.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-ZH-CAD_XXXX_SUZAN-WELLE.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/suzan-van-der-welle_20251214T112705Z.json" ], - "modified_at": "2026-01-09T19:18:15.079933+00:00", + "modified_at": "2026-01-09T19:51:03.383460+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "suzan-van-der-welle", @@ -115,7 +115,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.079914+00:00", + "inferred_at": "2026-01-09T19:51:03.383414+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-DEL_XXXX_MARION-BERG.json b/data/person/ID_XX-XX-XXX_196X_NL-ZH-DEL_XXXX_MARION-BERG.json index aef20fdde9..61b1e3aa2f 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-DEL_XXXX_MARION-BERG.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-ZH-DEL_XXXX_MARION-BERG.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marionvdberg_20251214T104107Z.json" ], - "modified_at": "2026-01-09T19:18:13.131413+00:00", + "modified_at": "2026-01-09T19:51:11.045662+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marionvdberg", @@ -153,7 +153,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.131393+00:00", + "inferred_at": "2026-01-09T19:51:11.045629+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-RIJ_XXXX_PAOLA-BREMER.json b/data/person/ID_XX-XX-XXX_196X_NL-ZH-RIJ_XXXX_PAOLA-BREMER.json index 2423157e64..b4776dc5a8 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-RIJ_XXXX_PAOLA-BREMER.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-ZH-RIJ_XXXX_PAOLA-BREMER.json @@ -281,7 +281,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paola-tecuatl-bremer-21b74bab_20251214T103259Z.json" ], - "modified_at": "2026-01-09T19:18:15.854647+00:00", + "modified_at": "2026-01-09T19:51:29.312111+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paola-tecuatl-bremer-21b74bab", @@ -318,7 +318,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -367,7 +367,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.848229+00:00", + "inferred_at": "2026-01-09T19:51:29.306378+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_ANNEMARIE-SNELDERWAARD.json b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_ANNEMARIE-SNELDERWAARD.json index e9392853f6..86d736d93e 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_ANNEMARIE-SNELDERWAARD.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_ANNEMARIE-SNELDERWAARD.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annemarie-snelderwaard-41967a89_20251214T113307Z.json" ], - "modified_at": "2026-01-09T19:18:16.076127+00:00", + "modified_at": "2026-01-09T19:51:16.869471+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annemarie-snelderwaard-41967a89", @@ -144,7 +144,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.068757+00:00", + "inferred_at": "2026-01-09T19:51:16.858242+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_ESTHER-SNOEK.json b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_ESTHER-SNOEK.json index d374b66ec0..9628cd5613 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_ESTHER-SNOEK.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_ESTHER-SNOEK.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/esther-snoek-0646a960_20251214T112902Z.json" ], - "modified_at": "2026-01-09T19:18:17.053811+00:00", + "modified_at": "2026-01-09T19:51:12.183313+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "esther-snoek-0646a960", @@ -141,7 +141,7 @@ "primary_rationale": "1961 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1961 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:17.051750+00:00", + "inferred_at": "2026-01-09T19:51:12.180975+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_KARIN-WIGMAN.json b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_KARIN-WIGMAN.json index 13478c4de7..b1afa10655 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_KARIN-WIGMAN.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_KARIN-WIGMAN.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karin-wigman-0b2887196_20251214T103023Z.json" ], - "modified_at": "2026-01-09T19:18:16.461177+00:00", + "modified_at": "2026-01-09T19:51:18.536715+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karin-wigman-0b2887196", @@ -154,7 +154,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.459253+00:00", + "inferred_at": "2026-01-09T19:51:18.533849+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_MARIJKE-BESSELS.json b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_MARIJKE-BESSELS.json index 1bde705b93..97d437eeec 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_MARIJKE-BESSELS.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_MARIJKE-BESSELS.json @@ -89,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marijke-bessels_20251214T113300Z.json" ], - "modified_at": "2026-01-09T19:18:12.474402+00:00", + "modified_at": "2026-01-09T19:50:48.485603+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marijke-bessels", @@ -117,7 +117,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -166,7 +166,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.474388+00:00", + "inferred_at": "2026-01-09T19:50:48.485588+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_PAUL-CAPELLEVEEN.json b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_PAUL-CAPELLEVEEN.json index bdc2fb9dfa..2b67c7a098 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_PAUL-CAPELLEVEEN.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_PAUL-CAPELLEVEEN.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paul-van-capelleveen-0bb9b610_20251214T113301Z.json" ], - "modified_at": "2026-01-09T19:18:17.145032+00:00", + "modified_at": "2026-01-09T19:51:23.923913+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paul-van-capelleveen-0bb9b610", @@ -113,7 +113,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:17.145022+00:00", + "inferred_at": "2026-01-09T19:51:23.923902+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_PAULINE-CARST.json b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_PAULINE-CARST.json index 356d28eef9..ce923b9b1d 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_PAULINE-CARST.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_PAULINE-CARST.json @@ -83,7 +83,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paulinecarst_20251214T103103Z.json" ], - "modified_at": "2026-01-09T19:18:13.653900+00:00", + "modified_at": "2026-01-09T19:50:46.732266+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paulinecarst", @@ -113,7 +113,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -154,7 +154,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.653879+00:00", + "inferred_at": "2026-01-09T19:50:46.732199+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_TON-DIEREN.json b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_TON-DIEREN.json index 86ca76303b..c3ef8bb992 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_TON-DIEREN.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_TON-DIEREN.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tonvandieren_20251214T113035Z.json" ], - "modified_at": "2026-01-09T19:18:15.223155+00:00", + "modified_at": "2026-01-09T19:50:47.213864+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tonvandieren", @@ -123,7 +123,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.223132+00:00", + "inferred_at": "2026-01-09T19:50:47.213761+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_YVONNE-SCHEEPERS.json b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_YVONNE-SCHEEPERS.json index 49b2f3b463..3021460cc6 100644 --- a/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_YVONNE-SCHEEPERS.json +++ b/data/person/ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_YVONNE-SCHEEPERS.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yvonne-scheepers-13241126_20251214T103157Z.json" ], - "modified_at": "2026-01-09T19:18:13.560277+00:00", + "modified_at": "2026-01-09T19:50:55.060133+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yvonne-scheepers-13241126", @@ -150,7 +150,7 @@ "primary_rationale": "1963 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1963 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.560264+00:00", + "inferred_at": "2026-01-09T19:50:55.060113+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ALIDA-RITSEMA.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ALIDA-RITSEMA.json index 4efd870e5d..61ea6ae79e 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ALIDA-RITSEMA.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ALIDA-RITSEMA.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alida-ritsema-9a6a0a101_20251214T103112Z.json" ], - "modified_at": "2026-01-09T19:18:15.434864+00:00", + "modified_at": "2026-01-09T19:51:03.392379+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alida-ritsema-9a6a0a101", @@ -139,7 +139,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.429183+00:00", + "inferred_at": "2026-01-09T19:51:03.386145+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ANCA-EGAS.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ANCA-EGAS.json index 564c0f15b5..81bf758041 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ANCA-EGAS.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ANCA-EGAS.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anca-egas-4b81355_20251214T110559Z.json" ], - "modified_at": "2026-01-09T19:18:14.952933+00:00", + "modified_at": "2026-01-09T19:51:05.598427+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anca-egas-4b81355", @@ -127,7 +127,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.952923+00:00", + "inferred_at": "2026-01-09T19:51:05.598410+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ANN-MARES.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ANN-MARES.json index 25efde10f2..3853bcfca7 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ANN-MARES.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ANN-MARES.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ann-mares-3a1b6373_20251214T104155Z.json" ], - "modified_at": "2026-01-09T19:18:16.564695+00:00", + "modified_at": "2026-01-09T19:51:19.062134+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ann-mares-3a1b6373", @@ -123,7 +123,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.561907+00:00", + "inferred_at": "2026-01-09T19:51:19.049529+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ARIE-WALLERT.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ARIE-WALLERT.json index 7402e00f6c..7f998533ed 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ARIE-WALLERT.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ARIE-WALLERT.json @@ -87,8 +87,10 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T00:26:00Z", + "result": "not_found", + "notes": "Exa search found publications and academic profile but no birth date. Search query: \"Arie Wallert\" Rijksmuseum scientist born birthday biography" } }, "provenance": { @@ -97,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arie-wallert-7a7a0442_20251214T111634Z.json" ], - "modified_at": "2026-01-09T19:18:11.511589+00:00", + "modified_at": "2026-01-09T19:50:47.083832+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arie-wallert-7a7a0442", @@ -125,7 +127,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.509424+00:00", + "inferred_at": "2026-01-09T19:50:47.078936+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ARNO-DIETEREN.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ARNO-DIETEREN.json index 5fae22c8d5..735b05fa51 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ARNO-DIETEREN.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ARNO-DIETEREN.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arno-dieteren-24304519_20251214T112309Z.json" ], - "modified_at": "2026-01-09T19:18:15.459349+00:00", + "modified_at": "2026-01-09T19:51:10.883489+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arno-dieteren-24304519", @@ -112,7 +112,7 @@ "primary_rationale": "1965 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -161,7 +161,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1965 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.459340+00:00", + "inferred_at": "2026-01-09T19:51:10.883480+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_BILIANA-BIBISHAN.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_BILIANA-BIBISHAN.json index c4da903c93..797e83e258 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_BILIANA-BIBISHAN.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_BILIANA-BIBISHAN.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/biliana-bibishe-bibishan-858a6a60_20251214T104017Z.json" ], - "modified_at": "2026-01-09T19:18:18.208064+00:00", + "modified_at": "2026-01-09T19:51:29.212255+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "biliana-bibishe-bibishan-858a6a60", @@ -121,7 +121,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.208024+00:00", + "inferred_at": "2026-01-09T19:51:29.212167+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_BINDA-ROB.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_BINDA-ROB.json index d4a0198768..41cc299a3d 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_BINDA-ROB.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_BINDA-ROB.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/binda-rob-932991b9_20251214T112219Z.json" ], - "modified_at": "2026-01-09T19:18:16.774406+00:00", + "modified_at": "2026-01-09T19:51:21.935750+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "binda-rob-932991b9", @@ -107,7 +107,7 @@ "primary_rationale": "1963 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -156,7 +156,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1963 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:16.769036+00:00", + "inferred_at": "2026-01-09T19:51:21.930150+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_BRIGIDA-ALMEIDA.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_BRIGIDA-ALMEIDA.json index 6538b5fda3..0368ac27d5 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_BRIGIDA-ALMEIDA.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_BRIGIDA-ALMEIDA.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/brigida-almeida-8558757_20251214T110322Z.json" ], - "modified_at": "2026-01-09T19:18:17.359514+00:00", + "modified_at": "2026-01-09T19:51:26.682123+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "brigida-almeida-8558757", @@ -128,7 +128,7 @@ "primary_rationale": "1962 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1962 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:17.357372+00:00", + "inferred_at": "2026-01-09T19:51:26.680136+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_DAISY-HOMBERGEN.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_DAISY-HOMBERGEN.json index f4ac0f95aa..e3419fe22e 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_DAISY-HOMBERGEN.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_DAISY-HOMBERGEN.json @@ -168,7 +168,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daisy-hombergen-7028507_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:13.506497+00:00", + "modified_at": "2026-01-09T19:50:54.551449+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daisy-hombergen-7028507", @@ -189,7 +189,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -230,7 +230,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.504574+00:00", + "inferred_at": "2026-01-09T19:50:54.549340+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ED-BIESTA.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ED-BIESTA.json new file mode 100644 index 0000000000..e1aedc737a --- /dev/null +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ED-BIESTA.json @@ -0,0 +1,166 @@ +{ + "ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ED-BIESTA", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "196X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ED", + "BIESTA" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] + }, + "name": { + "full_name": "Ed Biesta", + "display_name": "Ed Biesta", + "name_romanized": null, + "name_tokens": [ + "ED", + "BIESTA" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "E", + "O" + ], + "rationale": "Veteran education inspector with 35+ years of experience at Dutch Inspectorate of Education" + }, + "affiliations": [], + "profile_data": { + "name": "Ed Biesta", + "linkedin_url": "https://www.linkedin.com/in/ed-biesta-6bb4a824", + "headline": "Inspector of Education at Inspectie van het Onderwijs", + "location": "Netherlands", + "connections": "311 connections • 313 followers", + "about": "Total Experience: 35 years and 4 months", + "experience": [ + { + "title": "Inspector Of Education", + "company": "Inspectie van het Onderwijs", + "duration": "Jul 1990 - Present • 35 years and 3 months", + "company_details": "501-1000 employees • Founded 1801 • Government Agency • Government Administration", + "department": "Education", + "level": "Specialist" + } + ], + "education": [], + "skills": [ + "education" + ], + "languages": [], + "heritage_relevant_experience": [], + "linkedin_photo_url": "https://media.licdn.com/dms/image/v2/C4D03AQEO0w-d11yqGg/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1517076886256?e=2147483647&v=beta&t=Vlpxi7qmDxwhvnHpPUAbOfIhQC3Wg4oDj7NFF5bstF0" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/ed-biesta-6bb4a824_20251213T020000Z.json", + "observed_on": "2025-12-13T02:00:00Z", + "extraction_agent": "claude-opus-4.5" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.514014+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/ed-biesta-6bb4a824_20251213T020000Z.json" + ], + "modified_at": "2026-01-09T19:51:12.037376+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "ed-biesta-6bb4a824", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ED-BIESTA", + "new_ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ED-BIESTA", + "changed_at": "2026-01-09T19:41:09.676940+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "196X", + "primary_rationale": "1968 is in 196X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 35 years" + }, + { + "step": 2, + "calculation": "2026 - 35 = 1991", + "result": "Estimated first job year: 1991", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1991 - 23 = 1968", + "result": "Estimated birth year: 1968", + "range": "1961-1975 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1961, + 1975 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:51:12.035207+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ERIK-HINTERDING.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ERIK-HINTERDING.json index adb9f6959c..e5978c458f 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ERIK-HINTERDING.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ERIK-HINTERDING.json @@ -211,7 +211,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/erikhinterding_20251214T111345Z.json" ], - "modified_at": "2026-01-09T19:18:16.856724+00:00", + "modified_at": "2026-01-09T19:51:22.317876+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "erikhinterding", @@ -238,7 +238,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -287,7 +287,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.854787+00:00", + "inferred_at": "2026-01-09T19:51:22.315907+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_EUGENIE-COPPENS.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_EUGENIE-COPPENS.json index a3d2d24003..2bcdd0b07c 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_EUGENIE-COPPENS.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_EUGENIE-COPPENS.json @@ -97,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eugenie-coppens-1100208_20251214T112217Z.json" ], - "modified_at": "2026-01-09T19:18:15.775880+00:00", + "modified_at": "2026-01-09T19:51:14.419535+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eugenie-coppens-1100208", @@ -124,7 +124,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.775850+00:00", + "inferred_at": "2026-01-09T19:51:14.419462+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GITTA-PAANS.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GITTA-PAANS.json index 9b34884538..a5f97d0dc1 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GITTA-PAANS.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GITTA-PAANS.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gitta-paans-561276b_20251214T110546Z.json" ], - "modified_at": "2026-01-09T19:18:16.386337+00:00", + "modified_at": "2026-01-09T19:51:18.422175+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gitta-paans-561276b", @@ -127,7 +127,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.384365+00:00", + "inferred_at": "2026-01-09T19:51:18.419886+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GUUS-GEURTS.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GUUS-GEURTS.json index a376578bf2..487c97296f 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GUUS-GEURTS.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_GUUS-GEURTS.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/guus-geurts-637447a0_20251214T110714Z.json" ], - "modified_at": "2026-01-09T19:18:16.278882+00:00", + "modified_at": "2026-01-09T19:51:18.363359+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "guus-geurts-637447a0", @@ -123,7 +123,7 @@ "primary_rationale": "1966 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1966 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.278805+00:00", + "inferred_at": "2026-01-09T19:51:18.363295+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_HABIBOLLAH-AZIMI.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_HABIBOLLAH-AZIMI.json index 227b9c19a7..c1769b298a 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_HABIBOLLAH-AZIMI.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_HABIBOLLAH-AZIMI.json @@ -89,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/habibollah-azimi-4298b211a_20251214T103920Z.json" ], - "modified_at": "2026-01-09T19:18:12.592771+00:00", + "modified_at": "2026-01-09T19:50:48.517528+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "habibollah-azimi-4298b211a", @@ -116,7 +116,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.592755+00:00", + "inferred_at": "2026-01-09T19:50:48.517503+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_HENK-SCHOLTEN.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_HENK-SCHOLTEN.json index 63730f1bc8..69ab8b6b02 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_HENK-SCHOLTEN.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_HENK-SCHOLTEN.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henk-scholten-b95894167_20251214T112133Z.json" ], - "modified_at": "2026-01-09T19:18:15.875451+00:00", + "modified_at": "2026-01-09T19:51:14.957765+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henk-scholten-b95894167", @@ -106,7 +106,7 @@ "primary_rationale": "1964 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1964 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:15.873624+00:00", + "inferred_at": "2026-01-09T19:51:14.948871+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_HERMS-LUNENBORG.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_HERMS-LUNENBORG.json index a4fe10828f..c66b3b246c 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_HERMS-LUNENBORG.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_HERMS-LUNENBORG.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/herms-lunenborg-09273a10_20251214T110536Z.json" ], - "modified_at": "2026-01-09T19:18:15.216788+00:00", + "modified_at": "2026-01-09T19:51:07.020367+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "herms-lunenborg-09273a10", @@ -126,7 +126,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.216756+00:00", + "inferred_at": "2026-01-09T19:51:07.020296+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JAN-OELBERS.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JAN-OELBERS.json index c007e29abd..a345f40598 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JAN-OELBERS.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JAN-OELBERS.json @@ -190,7 +190,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-oelbers-86195488_20251214T104149Z.json" ], - "modified_at": "2026-01-09T19:18:13.473524+00:00", + "modified_at": "2026-01-09T19:50:54.520394+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jan-oelbers-86195488", @@ -217,7 +217,7 @@ "primary_rationale": "1963 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -266,7 +266,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1963 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.464750+00:00", + "inferred_at": "2026-01-09T19:50:54.512335+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JANET-LEERAARSMOOK.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JANET-LEERAARSMOOK.json index 0143a7b0b6..cc5b5d27a4 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JANET-LEERAARSMOOK.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JANET-LEERAARSMOOK.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janetleeraarsmook_20251214T112123Z.json" ], - "modified_at": "2026-01-09T19:18:11.467895+00:00", + "modified_at": "2026-01-09T19:50:46.985231+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janetleeraarsmook", @@ -123,7 +123,7 @@ "primary_rationale": "1966 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1966 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.465692+00:00", + "inferred_at": "2026-01-09T19:50:46.976962+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JEANNY-DUIJF.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JEANNY-DUIJF.json index 5fa41e1889..87d34f9aaf 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JEANNY-DUIJF.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JEANNY-DUIJF.json @@ -167,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeanny-duijf-9b3473a0_20251214T111839Z.json" ], - "modified_at": "2026-01-09T19:18:13.414914+00:00", + "modified_at": "2026-01-09T19:50:54.102266+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeanny-duijf-9b3473a0", @@ -194,7 +194,7 @@ "primary_rationale": "1960 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1960 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.412935+00:00", + "inferred_at": "2026-01-09T19:50:54.099800+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JOKE-POL.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JOKE-POL.json index afdf48f53a..5099eb7ae3 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JOKE-POL.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JOKE-POL.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jopol_20251214T110517Z.json" ], - "modified_at": "2026-01-09T19:18:14.188535+00:00", + "modified_at": "2026-01-09T19:50:58.813364+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jopol", @@ -119,7 +119,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.186587+00:00", + "inferred_at": "2026-01-09T19:50:58.810412+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JUDIKJE-KIERS.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JUDIKJE-KIERS.json similarity index 60% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JUDIKJE-KIERS.json rename to data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JUDIKJE-KIERS.json index afc9d18a33..0d86980d48 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JUDIKJE-KIERS.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JUDIKJE-KIERS.json @@ -1,10 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JUDIKJE-KIERS", + "ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_JUDIKJE-KIERS", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "196X", + "first_date_source": "web_claim_birth_year", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ @@ -12,6 +13,14 @@ "KIERS" ] }, + "ppid_history": [ + { + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JUDIKJE-KIERS", + "valid_from": "2026-01-09T17:29:48.639883+00:00", + "valid_to": "2025-01-10T03:00:00Z", + "reason": "Initial PPID with unknown birth date" + } + ], "name": { "full_name": "Judikje Kiers", "display_name": "Judikje Kiers", @@ -23,8 +32,8 @@ "source": "linkedin_profile" }, "birth_date": { - "edtf": "XXXX", - "precision": "unknown" + "edtf": "1962", + "precision": "year" }, "is_living": true, "heritage_relevance": { @@ -57,7 +66,20 @@ "skills": [], "languages": [] }, - "web_claims": [], + "web_claims": [ + { + "claim_type": "birth_year", + "claim_value": "1962", + "source_url": "https://www.amsterdammuseum.nl/en/person/judikje-kiers/2466", + "retrieved_on": "2025-01-10T02:30:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Judikje Kiers (1962) studied art history and architectural history at the Vrije Universiteit Amsterdam", + "verification": { + "status": "verified", + "last_verified": "2025-01-10T02:30:00Z" + } + } + ], "source_observations": [ { "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/judikje_20251214T115050Z.json", @@ -67,8 +89,13 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T02:30:00Z", + "search_queries": [ + "\"Judikje Kiers\" Amsterdam Museum director born birthday biography" + ], + "result": "found", + "notes": "Birth year 1962 found on Amsterdam Museum website person page." } }, "provenance": { @@ -79,4 +106,4 @@ ] }, "linkedin_slug": "judikje" -} \ No newline at end of file +} diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_LOUIS-TILBORGH.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_LOUIS-TILBORGH.json index 3fed6f4e7d..927c0404c9 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_LOUIS-TILBORGH.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_LOUIS-TILBORGH.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/louis-van-tilborgh-30353227_20251214T110136Z.json" ], - "modified_at": "2026-01-09T19:18:13.966585+00:00", + "modified_at": "2026-01-09T19:50:56.908763+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "louis-van-tilborgh-30353227", @@ -107,7 +107,7 @@ "primary_rationale": "1963 is in 196X, but range extends into 195X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -156,7 +156,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1963 spans decades 195X/196X", - "inferred_at": "2026-01-09T19:18:13.964381+00:00", + "inferred_at": "2026-01-09T19:50:56.906487+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_LUMINITA-GRUIA.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_LUMINITA-GRUIA.json index b6241cff1f..94be1f693d 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_LUMINITA-GRUIA.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_LUMINITA-GRUIA.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/luminita-gruia-87810213_20251214T103857Z.json" ], - "modified_at": "2026-01-09T19:18:13.856667+00:00", + "modified_at": "2026-01-09T19:51:18.484022+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "luminita-gruia-87810213", @@ -145,7 +145,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.856636+00:00", + "inferred_at": "2026-01-09T19:51:18.483961+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MADELEINE-PFUNDT.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MADELEINE-PFUNDT.json index ebc1bc5e1f..506dfa74c5 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MADELEINE-PFUNDT.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MADELEINE-PFUNDT.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/madeleinepfundt_20251214T111327Z.json" ], - "modified_at": "2026-01-09T19:18:13.907021+00:00", + "modified_at": "2026-01-09T19:50:56.784233+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "madeleinepfundt", @@ -143,7 +143,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.905161+00:00", + "inferred_at": "2026-01-09T19:50:56.782143+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MARG-CARROLL.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MARG-CARROLL.json index 328ef07169..085a25f5f8 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MARG-CARROLL.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MARG-CARROLL.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marg-carroll-6247113b_20251214T103921Z.json" ], - "modified_at": "2026-01-09T19:18:15.975544+00:00", + "modified_at": "2026-01-09T19:51:27.999632+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marg-carroll-6247113b", @@ -145,7 +145,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.975480+00:00", + "inferred_at": "2026-01-09T19:51:27.908795+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MARIANNE-BOER.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MARIANNE-BOER.json index 2e843f1baa..dffe0251c1 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MARIANNE-BOER.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MARIANNE-BOER.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marianne-den-boer-a00a511a_20251214T112331Z.json" ], - "modified_at": "2026-01-09T19:18:11.324301+00:00", + "modified_at": "2026-01-09T19:50:46.718499+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marianne-den-boer-a00a511a", @@ -106,7 +106,7 @@ "primary_rationale": "1965 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1965 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.320631+00:00", + "inferred_at": "2026-01-09T19:50:46.716480+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARTIJN-EICKHOFF.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MARTIJN-EICKHOFF.json similarity index 60% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARTIJN-EICKHOFF.json rename to data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MARTIJN-EICKHOFF.json index aadeeb2c5d..7e980ae35f 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARTIJN-EICKHOFF.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MARTIJN-EICKHOFF.json @@ -1,10 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARTIJN-EICKHOFF", + "ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MARTIJN-EICKHOFF", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "196X", + "first_date_source": "web_claim_birth_year", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ @@ -12,6 +13,14 @@ "EICKHOFF" ] }, + "ppid_history": [ + { + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARTIJN-EICKHOFF", + "valid_from": "2026-01-09T17:29:48.520140+00:00", + "valid_to": "2025-01-10T03:00:00Z", + "reason": "Initial PPID with unknown birth date" + } + ], "name": { "full_name": "Martijn Eickhoff", "display_name": "Martijn Eickhoff", @@ -23,8 +32,8 @@ "source": "linkedin_profile" }, "birth_date": { - "edtf": "XXXX", - "precision": "unknown" + "edtf": "1967", + "precision": "year" }, "is_living": true, "heritage_relevance": { @@ -57,7 +66,20 @@ "skills": [], "languages": [] }, - "web_claims": [], + "web_claims": [ + { + "claim_type": "birth_year", + "claim_value": "1967", + "source_url": "https://rug.nl/about-ug/latest-news/news/archief2021/nieuwsberichten/martijn-eickhoff-nieuwe-directeur-niod", + "retrieved_on": "2025-01-10T02:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Eickhoff (1967) has been a senior researcher at the NIOD since 2006", + "verification": { + "status": "verified", + "last_verified": "2025-01-10T02:00:00Z" + } + } + ], "source_observations": [ { "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/martijn-eickhoff-03972635_20251214T115050Z.json", @@ -67,8 +89,14 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T02:00:00Z", + "search_queries": [ + "\"Martijn Eickhoff\" NIOD director born birthday biography", + "\"Martijn Eickhoff\" wikipedia born \"1967\" OR \"1968\" NIOD historicus" + ], + "result": "found", + "notes": "Birth year 1967 found in University of Groningen news announcement about Eickhoff appointment as NIOD director." } }, "provenance": { @@ -79,4 +107,4 @@ ] }, "linkedin_slug": "martijn-eickhoff-03972635" -} \ No newline at end of file +} diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MIHAELA-VAZZOLLA.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MIHAELA-VAZZOLLA.json index efdada90ba..b61a749b02 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MIHAELA-VAZZOLLA.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_MIHAELA-VAZZOLLA.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mihaela-vazzolla-a7ab0325_20251214T103950Z.json" ], - "modified_at": "2026-01-09T19:18:12.628158+00:00", + "modified_at": "2026-01-09T19:50:48.639610+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mihaela-vazzolla-a7ab0325", @@ -106,7 +106,7 @@ "primary_rationale": "1967 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.628141+00:00", + "inferred_at": "2026-01-09T19:50:48.639579+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NICO-JONG.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_NICO-JONG.json similarity index 71% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NICO-JONG.json rename to data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_NICO-JONG.json index 375fd34030..489037c056 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NICO-JONG.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_NICO-JONG.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NICO-JONG", + "ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_NICO-JONG", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "196X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "NICO", "JONG" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "194X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -221,7 +226,82 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nico-de-jong-8a26457_20251213T020000Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:12.190934+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "nico-de-jong-8a26457" + "linkedin_slug": "nico-de-jong-8a26457", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NICO-JONG", + "new_ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_NICO-JONG", + "changed_at": "2026-01-09T19:43:39.462523+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "194X", + "196X" + ], + "edtf": "[194X,196X]", + "edtf_meaning": "one of: 1940s or 1960s", + "precision": "decade_set", + "primary_value": "196X", + "primary_rationale": "1955 is in 196X, but range extends into 194X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "48 years and 1 month" + }, + { + "step": 2, + "calculation": "2026 - 48 = 1978", + "result": "Estimated first job year: 1978", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1978 - 23 = 1955", + "result": "Estimated birth year: 1955", + "range": "1948-1962 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1948, + 1962 + ], + "output": [ + "194X", + "196X" + ], + "edtf": "[194X,196X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1955 spans decades 194X/196X", + "inferred_at": "2026-01-09T19:51:12.188739+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_NICOLETTE-STORK.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_NICOLETTE-STORK.json index ac9964d56e..48d6bae159 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_NICOLETTE-STORK.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_NICOLETTE-STORK.json @@ -94,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicolette-stork-2050b4169_20251214T110253Z.json" ], - "modified_at": "2026-01-09T19:18:13.011819+00:00", + "modified_at": "2026-01-09T19:50:50.583235+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicolette-stork-2050b4169", @@ -121,7 +121,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.009985+00:00", + "inferred_at": "2026-01-09T19:50:50.578127+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ROBERT-NITU.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ROBERT-NITU.json index c05b2499e6..af55e067dc 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ROBERT-NITU.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ROBERT-NITU.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robert-nitu-7651bb97_20251214T103908Z.json" ], - "modified_at": "2026-01-09T19:18:15.824359+00:00", + "modified_at": "2026-01-09T19:50:50.849015+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robert-nitu-7651bb97", @@ -191,7 +191,7 @@ "primary_rationale": "1968 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1968 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.824303+00:00", + "inferred_at": "2026-01-09T19:50:50.848879+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_RONALD-WIENTJES.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_RONALD-WIENTJES.json index dc59c48016..d3def41ef9 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_RONALD-WIENTJES.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_RONALD-WIENTJES.json @@ -83,7 +83,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ronald-wientjes-74702b35_20251214T113112Z.json" ], - "modified_at": "2026-01-09T19:18:17.023093+00:00", + "modified_at": "2026-01-09T19:51:22.981831+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ronald-wientjes-74702b35", @@ -110,7 +110,7 @@ "primary_rationale": "1969 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +159,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1969 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.023071+00:00", + "inferred_at": "2026-01-09T19:51:22.981818+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_RONNY-KRAMER.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_RONNY-KRAMER.json index 964283247c..391b1dda96 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_RONNY-KRAMER.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_RONNY-KRAMER.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ronny-kramer-a0723768_20251214T110730Z.json" ], - "modified_at": "2026-01-09T19:18:12.989397+00:00", + "modified_at": "2026-01-09T19:50:50.264333+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ronny-kramer-a0723768", @@ -106,7 +106,7 @@ "primary_rationale": "1965 is in 196X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1965 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.989391+00:00", + "inferred_at": "2026-01-09T19:50:50.264315+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUNITA-J.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_SUNITA-J.json similarity index 62% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUNITA-J.json rename to data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_SUNITA-J.json index b08a85eea9..31e8c02435 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUNITA-J.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_SUNITA-J.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUNITA-J", + "ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_SUNITA-J", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "196X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "SUNITA", "J" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -143,7 +148,85 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sunita-j-a7236592_20251213T020000Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:06.632363+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "sunita-j-a7236592" + "linkedin_slug": "sunita-j-a7236592", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUNITA-J", + "new_ppid": "ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_SUNITA-J", + "changed_at": "2026-01-09T19:43:38.398884+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "196X", + "primary_rationale": "1967 is in 196X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "rijkspolitie", + "title": "Administratief Medewerker", + "date_range": "Mar 1990 - Jul 1992" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1990 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1990 - 23 = 1967", + "result": "Estimated birth year: 1967", + "range": "1962-1972 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1962, + 1972 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1967 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:51:06.630408+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ZWANET-PANMAN.json b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ZWANET-PANMAN.json index 3890170f7b..715a4b2969 100644 --- a/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ZWANET-PANMAN.json +++ b/data/person/ID_XX-XX-XXX_196X_XX-XX-XXX_XXXX_ZWANET-PANMAN.json @@ -83,7 +83,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/zwanet-panman-725064112_20251214T112324Z.json" ], - "modified_at": "2026-01-09T19:18:16.219876+00:00", + "modified_at": "2026-01-09T19:51:18.315648+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "zwanet-panman-725064112", @@ -104,7 +104,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -145,7 +145,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.214483+00:00", + "inferred_at": "2026-01-09T19:51:18.309750+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DOUGLAS-ELFORD.json b/data/person/ID_XX-XX-XXX_197X_AU-01-CAN_XXXX_DOUGLAS-ELFORD.json similarity index 69% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DOUGLAS-ELFORD.json rename to data/person/ID_XX-XX-XXX_197X_AU-01-CAN_XXXX_DOUGLAS-ELFORD.json index 3c37208a9c..e8b14f25d1 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DOUGLAS-ELFORD.json +++ b/data/person/ID_XX-XX-XXX_197X_AU-01-CAN_XXXX_DOUGLAS-ELFORD.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DOUGLAS-ELFORD", + "ppid": "ID_XX-XX-XXX_197X_AU-01-CAN_XXXX_DOUGLAS-ELFORD", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "DOUGLAS", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Douglas Elford", @@ -91,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/douglas-elford-a8223342_20251214T103833Z.json" ], - "modified_at": "2026-01-09T19:18:18.023058+00:00", + "modified_at": "2026-01-09T19:51:28.888110+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "douglas-elford-a8223342", @@ -104,6 +105,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DOUGLAS-ELFORD", + "new_ppid": "ID_XX-XX-XXX_197X_AU-01-CAN_XXXX_DOUGLAS-ELFORD", + "changed_at": "2026-01-09T19:51:28.888108+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -118,7 +129,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +178,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.023040+00:00", + "inferred_at": "2026-01-09T19:51:28.883128+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:28.888102+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MELANIE-BROWN.json b/data/person/ID_XX-XX-XXX_197X_AU-01-CAN_XXXX_MELANIE-BROWN.json similarity index 74% rename from data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MELANIE-BROWN.json rename to data/person/ID_XX-XX-XXX_197X_AU-01-CAN_XXXX_MELANIE-BROWN.json index 76d2c04c69..a214e68fa0 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MELANIE-BROWN.json +++ b/data/person/ID_XX-XX-XXX_197X_AU-01-CAN_XXXX_MELANIE-BROWN.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MELANIE-BROWN", + "ppid": "ID_XX-XX-XXX_197X_AU-01-CAN_XXXX_MELANIE-BROWN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "197X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "MELANIE", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Melanie Brown", @@ -111,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/melanie-brown-04b77886_20251214T103810Z.json" ], - "modified_at": "2026-01-09T19:18:13.286003+00:00", + "modified_at": "2026-01-09T19:50:53.808997+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "melanie-brown-04b77886", @@ -124,6 +125,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MELANIE-BROWN", + "new_ppid": "ID_XX-XX-XXX_197X_AU-01-CAN_XXXX_MELANIE-BROWN", + "changed_at": "2026-01-09T19:50:53.808994+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -138,7 +149,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -187,7 +198,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.285983+00:00", + "inferred_at": "2026-01-09T19:50:53.743984+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:53.808971+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-FL-AS_XXXX_IRIS-LABEUR.json b/data/person/ID_XX-XX-XXX_197X_NL-FL-AS_XXXX_IRIS-LABEUR.json index 4de113c656..fbd58eaf2c 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-FL-AS_XXXX_IRIS-LABEUR.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-FL-AS_XXXX_IRIS-LABEUR.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/iris-labeur-5b5a8633_20251214T111339Z.json" ], - "modified_at": "2026-01-09T19:18:16.787290+00:00", + "modified_at": "2026-01-09T19:51:21.971229+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "iris-labeur-5b5a8633", @@ -126,7 +126,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.787277+00:00", + "inferred_at": "2026-01-09T19:51:21.971207+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-FL-AS_XXXX_MICHAEL-MEERWIJK.json b/data/person/ID_XX-XX-XXX_197X_NL-FL-AS_XXXX_MICHAEL-MEERWIJK.json index 588d32e145..e851492a0f 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-FL-AS_XXXX_MICHAEL-MEERWIJK.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-FL-AS_XXXX_MICHAEL-MEERWIJK.json @@ -190,7 +190,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michael-meerwijk-58407b74_20251214T111518Z.json" ], - "modified_at": "2026-01-09T19:18:14.108980+00:00", + "modified_at": "2026-01-09T19:51:15.709674+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michael-meerwijk-58407b74", @@ -221,7 +221,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.108891+00:00", + "inferred_at": "2026-01-09T19:51:15.709400+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-FR-BUI_XXXX_WILLEM-REITSEMA.json b/data/person/ID_XX-XX-XXX_197X_NL-FR-BUI_XXXX_WILLEM-REITSEMA.json index 1c126c46e5..cdb1f2fa4d 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-FR-BUI_XXXX_WILLEM-REITSEMA.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-FR-BUI_XXXX_WILLEM-REITSEMA.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/willem-reitsema-620a4a84_20251214T112304Z.json" ], - "modified_at": "2026-01-09T19:18:14.166865+00:00", + "modified_at": "2026-01-09T19:50:56.570435+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "willem-reitsema-620a4a84", @@ -120,7 +120,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.166847+00:00", + "inferred_at": "2026-01-09T19:50:56.570419+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-GE-APE_XXXX_JACCO-HOOIKAMMER.json b/data/person/ID_XX-XX-XXX_197X_NL-GE-APE_XXXX_JACCO-HOOIKAMMER.json index cfe1480857..e2926ff20e 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-GE-APE_XXXX_JACCO-HOOIKAMMER.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-GE-APE_XXXX_JACCO-HOOIKAMMER.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jacco-hooikammer-500ba831_20251214T110527Z.json" ], - "modified_at": "2026-01-09T19:18:13.173682+00:00", + "modified_at": "2026-01-09T19:50:53.215065+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jacco-hooikammer-500ba831", @@ -166,7 +166,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -215,7 +215,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.173661+00:00", + "inferred_at": "2026-01-09T19:50:53.215001+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-GE-APE_XXXX_LIDA-BURG.json b/data/person/ID_XX-XX-XXX_197X_NL-GE-APE_XXXX_LIDA-BURG.json index e2692a262d..4e66f0cb2e 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-GE-APE_XXXX_LIDA-BURG.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-GE-APE_XXXX_LIDA-BURG.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lida-elbersen-van-den-burg-58246044_20251214T110606Z.json" ], - "modified_at": "2026-01-09T19:18:13.629731+00:00", + "modified_at": "2026-01-09T19:50:55.251902+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lida-elbersen-van-den-burg-58246044", @@ -132,7 +132,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.629716+00:00", + "inferred_at": "2026-01-09T19:50:55.251851+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-GE-APE_XXXX_MARC-MEULEN.json b/data/person/ID_XX-XX-XXX_197X_NL-GE-APE_XXXX_MARC-MEULEN.json index 0fd37c79f5..62daf0d305 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-GE-APE_XXXX_MARC-MEULEN.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-GE-APE_XXXX_MARC-MEULEN.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marc-van-der-meulen-859286a_20251214T113356Z.json" ], - "modified_at": "2026-01-09T19:18:14.946178+00:00", + "modified_at": "2026-01-09T19:51:05.587602+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marc-van-der-meulen-859286a", @@ -153,7 +153,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.944134+00:00", + "inferred_at": "2026-01-09T19:51:05.581524+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-GE-ARN_XXXX_NICOLE-MAKKINJEVERHALLE.json b/data/person/ID_XX-XX-XXX_197X_NL-GE-ARN_XXXX_NICOLE-MAKKINJEVERHALLE.json index 1b67bec1d3..bb12bd0c02 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-GE-ARN_XXXX_NICOLE-MAKKINJEVERHALLE.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-GE-ARN_XXXX_NICOLE-MAKKINJEVERHALLE.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicole-makkinje-verhalle-b088066_20251214T110740Z.json" ], - "modified_at": "2026-01-09T19:18:11.591985+00:00", + "modified_at": "2026-01-09T19:50:47.201366+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicole-makkinje-verhalle-b088066", @@ -158,7 +158,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +207,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.591953+00:00", + "inferred_at": "2026-01-09T19:50:47.201137+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-GE-ARN_XXXX_PETER-MAAS.json b/data/person/ID_XX-XX-XXX_197X_NL-GE-ARN_XXXX_PETER-MAAS.json index c5f648942f..15b48e8f54 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-GE-ARN_XXXX_PETER-MAAS.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-GE-ARN_XXXX_PETER-MAAS.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/peter-maas-2512252a_20251214T113058Z.json" ], - "modified_at": "2026-01-09T19:18:13.647549+00:00", + "modified_at": "2026-01-09T19:50:55.368671+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "peter-maas-2512252a", @@ -121,7 +121,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.647539+00:00", + "inferred_at": "2026-01-09T19:50:55.368640+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-GE-ARN_XXXX_SANDRA-KLEEDKAMER.json b/data/person/ID_XX-XX-XXX_197X_NL-GE-ARN_XXXX_SANDRA-KLEEDKAMER.json index 7a984758e0..0402bd7ed1 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-GE-ARN_XXXX_SANDRA-KLEEDKAMER.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-GE-ARN_XXXX_SANDRA-KLEEDKAMER.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sandrabooltink_20251214T110715Z.json" ], - "modified_at": "2026-01-09T19:18:15.318859+00:00", + "modified_at": "2026-01-09T19:51:29.503559+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sandrabooltink", @@ -160,7 +160,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.318821+00:00", + "inferred_at": "2026-01-09T19:51:29.503507+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-GE-DOE_XXXX_CHRISTINE-FUENTE.json b/data/person/ID_XX-XX-XXX_197X_NL-GE-DOE_XXXX_CHRISTINE-FUENTE.json index c2042e3e35..d2271c4dd8 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-GE-DOE_XXXX_CHRISTINE-FUENTE.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-GE-DOE_XXXX_CHRISTINE-FUENTE.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/christinefdelafuente_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:11.610833+00:00", + "modified_at": "2026-01-09T19:51:08.362393+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "christinefdelafuente", @@ -145,7 +145,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.610788+00:00", + "inferred_at": "2026-01-09T19:51:08.362298+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-GE-EDE_XXXX_WYTZE-VEER.json b/data/person/ID_XX-XX-XXX_197X_NL-GE-EDE_XXXX_WYTZE-VEER.json index 6071a429d0..c22dad82a6 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-GE-EDE_XXXX_WYTZE-VEER.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-GE-EDE_XXXX_WYTZE-VEER.json @@ -152,7 +152,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wytze-van-der-veer-17359314_20251214T111113Z.json" ], - "modified_at": "2026-01-09T19:18:17.785731+00:00", + "modified_at": "2026-01-09T19:51:28.574749+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wytze-van-der-veer-17359314", @@ -180,7 +180,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.785693+00:00", + "inferred_at": "2026-01-09T19:51:28.574698+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-GE-GRO_XXXX_WILMA-TOOREN.json b/data/person/ID_XX-XX-XXX_197X_NL-GE-GRO_XXXX_WILMA-TOOREN.json index 7d9cc4e853..5b033ff7c1 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-GE-GRO_XXXX_WILMA-TOOREN.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-GE-GRO_XXXX_WILMA-TOOREN.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wilma-van-den-tooren-895203227_20251214T110713Z.json" ], - "modified_at": "2026-01-09T19:18:13.202809+00:00", + "modified_at": "2026-01-09T19:50:53.282903+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wilma-van-den-tooren-895203227", @@ -109,7 +109,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.202803+00:00", + "inferred_at": "2026-01-09T19:50:53.282893+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-GE-OOS_XXXX_ROOS-BEEK.json b/data/person/ID_XX-XX-XXX_197X_NL-GE-OOS_XXXX_ROOS-BEEK.json index bcdc61e79a..f094b62b7a 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-GE-OOS_XXXX_ROOS-BEEK.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-GE-OOS_XXXX_ROOS-BEEK.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roos-van-beek-98a067112_20251214T110638Z.json" ], - "modified_at": "2026-01-09T19:18:14.127066+00:00", + "modified_at": "2026-01-09T19:50:58.662107+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "roos-van-beek-98a067112", @@ -128,7 +128,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.127045+00:00", + "inferred_at": "2026-01-09T19:50:58.662048+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-GE-WAG_XXXX_MARCEL-BHOMER.json b/data/person/ID_XX-XX-XXX_197X_NL-GE-WAG_XXXX_MARCEL-BHOMER.json index e8e4572eae..071db011f6 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-GE-WAG_XXXX_MARCEL-BHOMER.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-GE-WAG_XXXX_MARCEL-BHOMER.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marcel-ten-bhomer-19570953_20251214T110646Z.json" ], - "modified_at": "2026-01-09T19:18:17.044988+00:00", + "modified_at": "2026-01-09T19:51:23.190886+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marcel-ten-bhomer-19570953", @@ -148,7 +148,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.044965+00:00", + "inferred_at": "2026-01-09T19:51:23.190823+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-LI-WEE_XXXX_FREDERIQUE-ROOT.json b/data/person/ID_XX-XX-XXX_197X_NL-LI-WEE_XXXX_FREDERIQUE-ROOT.json index 9149cf062a..1155cb0aa1 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-LI-WEE_XXXX_FREDERIQUE-ROOT.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-LI-WEE_XXXX_FREDERIQUE-ROOT.json @@ -163,7 +163,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frederiqueoptroot_20251214T111211Z.json" ], - "modified_at": "2026-01-09T19:18:11.961275+00:00", + "modified_at": "2026-01-09T19:50:47.366389+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frederiqueoptroot", @@ -191,7 +191,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -240,7 +240,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.961245+00:00", + "inferred_at": "2026-01-09T19:50:47.366343+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_QUINTA-KOOLS.json b/data/person/ID_XX-XX-XXX_197X_NL-NB-TIL_XXXX_QUINTA-KOOLS.json similarity index 71% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_QUINTA-KOOLS.json rename to data/person/ID_XX-XX-XXX_197X_NL-NB-TIL_XXXX_QUINTA-KOOLS.json index d6b24974e0..5468d0437b 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_QUINTA-KOOLS.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NB-TIL_XXXX_QUINTA-KOOLS.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_QUINTA-KOOLS", + "ppid": "ID_XX-XX-XXX_197X_NL-NB-TIL_XXXX_QUINTA-KOOLS", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "197X", "last_location": "NL-NB-TIL", "last_date": "XXXX", "name_tokens": [ "QUINTA", "KOOLS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ] }, "name": { "full_name": "Quinta Kools", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -164,63 +169,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/quinta-kools-74925110_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:43:07.852747+00:00", + "modified_at": "2026-01-09T19:51:00.911961+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "quinta-kools-74925110", - "inferred_current_settlement": { - "value": "Tilburg", - "formatted": "NL-NB-TIL", - "country_code": "NL", - "region_code": "NB", - "settlement_code": "TIL", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Tilburg, North Brabant, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Tilburg, North Brabant, Netherlands", - "result": { - "geonames_id": 2746301, - "geonames_name": "Tilburg", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.55551, - "longitude": 5.0913 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NB-TIL" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2746301, - "geonames_name": "Tilburg", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.55551, - "longitude": 5.0913 - }, - "inferred_at": "2026-01-09T17:43:07.852739+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_QUINTA-KOOLS", @@ -230,6 +182,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_QUINTA-KOOLS", + "new_ppid": "ID_XX-XX-XXX_197X_NL-NB-TIL_XXXX_QUINTA-KOOLS", + "changed_at": "2026-01-09T19:41:09.776512+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1970 is in 197X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 33 years" + }, + { + "step": 2, + "calculation": "2026 - 33 = 1993", + "result": "Estimated first job year: 1993", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1993 - 23 = 1970", + "result": "Estimated birth year: 1970", + "range": "1963-1977 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1963, + 1977 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:51:00.911949+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NB-VEL_XXXX_ALEXANDER-HIL.json b/data/person/ID_XX-XX-XXX_197X_NL-NB-VEL_XXXX_ALEXANDER-HIL.json index 1199ffe8e5..277a56341c 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NB-VEL_XXXX_ALEXANDER-HIL.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NB-VEL_XXXX_ALEXANDER-HIL.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/avdhil_20251214T115050Z.json" ], - "modified_at": "2026-01-09T19:18:17.366729+00:00", + "modified_at": "2026-01-09T19:50:53.234244+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "avdhil", @@ -145,7 +145,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.366714+00:00", + "inferred_at": "2026-01-09T19:50:53.234229+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_ALEX-GROENEWOUD.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_ALEX-GROENEWOUD.json index 2609b8c084..5d37ece928 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_ALEX-GROENEWOUD.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_ALEX-GROENEWOUD.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alex-groenewoud-2b026213a_20251214T111642Z.json" ], - "modified_at": "2026-01-09T19:18:15.510223+00:00", + "modified_at": "2026-01-09T19:51:11.270333+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alex-groenewoud-2b026213a", @@ -132,7 +132,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.506448+00:00", + "inferred_at": "2026-01-09T19:51:11.266272+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_ANNA-MARTENS.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_ANNA-MARTENS.json index db141320d4..4ca75f5af6 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_ANNA-MARTENS.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_ANNA-MARTENS.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-martens-22619747_20251214T111310Z.json" ], - "modified_at": "2026-01-09T19:18:14.017509+00:00", + "modified_at": "2026-01-09T19:50:58.339206+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anna-martens-22619747", @@ -152,7 +152,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -201,7 +201,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.017493+00:00", + "inferred_at": "2026-01-09T19:50:58.339166+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_ANNET-BULT.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_ANNET-BULT.json index 0d41ba78da..d2d7ef25fd 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_ANNET-BULT.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_ANNET-BULT.json @@ -171,7 +171,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annetbult_20251214T112051Z.json" ], - "modified_at": "2026-01-09T19:18:13.714629+00:00", + "modified_at": "2026-01-09T19:50:55.893617+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annetbult", @@ -199,7 +199,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -248,7 +248,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.714585+00:00", + "inferred_at": "2026-01-09T19:50:55.893497+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_BRAM-BUIJZE.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_BRAM-BUIJZE.json index 17cdff56c4..ed9ed777c6 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_BRAM-BUIJZE.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_BRAM-BUIJZE.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bram-buijze-6b316b7_20251214T112513Z.json" ], - "modified_at": "2026-01-09T19:18:15.307571+00:00", + "modified_at": "2026-01-09T19:51:08.502258+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bram-buijze-6b316b7", @@ -144,7 +144,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.307564+00:00", + "inferred_at": "2026-01-09T19:51:08.502243+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_GINNY-FIGUEROA.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_GINNY-FIGUEROA.json index 2529b816ca..b65ca9de69 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_GINNY-FIGUEROA.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_GINNY-FIGUEROA.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ginny-figueroa-8a622340_20251214T103214Z.json" ], - "modified_at": "2026-01-09T19:18:13.269852+00:00", + "modified_at": "2026-01-09T19:50:53.724847+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ginny-figueroa-8a622340", @@ -108,7 +108,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.269846+00:00", + "inferred_at": "2026-01-09T19:50:53.724839+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_HANNIE-DIEPENDAAL.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_HANNIE-DIEPENDAAL.json index 14d56151f7..adfbdce4e3 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_HANNIE-DIEPENDAAL.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_HANNIE-DIEPENDAAL.json @@ -157,7 +157,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hanniediependaal_20251214T110330Z.json" ], - "modified_at": "2026-01-09T19:18:16.406137+00:00", + "modified_at": "2026-01-09T19:51:18.461598+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hanniediependaal", @@ -185,7 +185,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -234,7 +234,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.406114+00:00", + "inferred_at": "2026-01-09T19:51:18.461159+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_HARRY-RAAD.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_HARRY-RAAD.json index 13c5027859..b493f39218 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_HARRY-RAAD.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_HARRY-RAAD.json @@ -87,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hderaad_20251214T113147Z.json" ], - "modified_at": "2026-01-09T19:18:15.236642+00:00", + "modified_at": "2026-01-09T19:51:07.272071+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hderaad", @@ -115,7 +115,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.236629+00:00", + "inferred_at": "2026-01-09T19:51:07.272047+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_INGE-ROSEBOOM.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_INGE-ROSEBOOM.json index 824b1632d2..d2c46b4002 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_INGE-ROSEBOOM.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_INGE-ROSEBOOM.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/inge-roseboom-9801a411_20251214T111910Z.json" ], - "modified_at": "2026-01-09T19:18:13.549155+00:00", + "modified_at": "2026-01-09T19:50:54.604165+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "inge-roseboom-9801a411", @@ -127,7 +127,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.549142+00:00", + "inferred_at": "2026-01-09T19:50:54.604125+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_INGRID-PASMANS.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_INGRID-PASMANS.json index b701b66e3b..f1c7339089 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_INGRID-PASMANS.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_INGRID-PASMANS.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ingrid-pasmans-653a9a89_20251214T111725Z.json" ], - "modified_at": "2026-01-09T19:18:13.201123+00:00", + "modified_at": "2026-01-09T19:51:14.177213+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ingrid-pasmans-653a9a89", @@ -174,7 +174,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.201076+00:00", + "inferred_at": "2026-01-09T19:51:14.177083+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JACQUELINE-PRAASWAKKERMAN.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JACQUELINE-PRAASWAKKERMAN.json index dd45bffce4..ec6519c924 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JACQUELINE-PRAASWAKKERMAN.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JACQUELINE-PRAASWAKKERMAN.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jacqueline-praas-wakkerman-b93a4833_20251214T111857Z.json" ], - "modified_at": "2026-01-09T19:18:13.786220+00:00", + "modified_at": "2026-01-09T19:51:00.916252+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jacqueline-praas-wakkerman-b93a4833", @@ -130,7 +130,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -171,7 +171,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.786163+00:00", + "inferred_at": "2026-01-09T19:51:00.916094+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JANA-RICANEK.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JANA-RICANEK.json index 4f718a3713..582e62b4f3 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JANA-RICANEK.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JANA-RICANEK.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jana-ricanek-3657b469_20251214T111644Z.json" ], - "modified_at": "2026-01-09T19:18:11.725838+00:00", + "modified_at": "2026-01-09T19:50:47.275250+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jana-ricanek-3657b469", @@ -129,7 +129,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.725808+00:00", + "inferred_at": "2026-01-09T19:50:47.275199+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JANWILLEM-SWANE.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JANWILLEM-SWANE.json similarity index 69% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JANWILLEM-SWANE.json rename to data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JANWILLEM-SWANE.json index 8f689d9d65..775d45ede0 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JANWILLEM-SWANE.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JANWILLEM-SWANE.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JANWILLEM-SWANE", + "ppid": "ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JANWILLEM-SWANE", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "197X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "JANWILLEM", "SWANE" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ] }, "name": { "full_name": "Jan-Willem Swane", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -176,63 +181,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janwillemswane_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:42:53.720160+00:00", + "modified_at": "2026-01-09T19:51:06.618859+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janwillemswane", - "inferred_current_settlement": { - "value": "Amstelveen", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amstelveen, North Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amstelveen, North Holland, Netherlands", - "result": { - "geonames_id": 2759798, - "geonames_name": "Amstelveen", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPL", - "latitude": 52.30083, - "longitude": 4.86389 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759798, - "geonames_name": "Amstelveen", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPL", - "latitude": 52.30083, - "longitude": 4.86389 - }, - "inferred_at": "2026-01-09T17:42:53.720154+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JANWILLEM-SWANE", @@ -242,6 +194,80 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_JANWILLEM-SWANE", + "new_ppid": "ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JANWILLEM-SWANE", + "changed_at": "2026-01-09T19:43:39.968204+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1970 is in 197X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "ACCU", + "title": "Beheerder Telefonie-informatie-systemen", + "date_range": "Jan 1993 - Jan 1999" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1993 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1993 - 23 = 1970", + "result": "Estimated birth year: 1970", + "range": "1965-1975 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1965, + 1975 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:51:06.611774+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JERNEY-BELLE.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JERNEY-BELLE.json index 57389a6c72..075e14555f 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JERNEY-BELLE.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JERNEY-BELLE.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jerney-van-belle-92684550_20251214T111605Z.json" ], - "modified_at": "2026-01-09T19:18:15.288108+00:00", + "modified_at": "2026-01-09T19:51:14.432318+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jerney-van-belle-92684550", @@ -152,7 +152,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.288039+00:00", + "inferred_at": "2026-01-09T19:51:14.432162+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JOHN-BOELE.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JOHN-BOELE.json index cf897d440e..24f7e0982c 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JOHN-BOELE.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_JOHN-BOELE.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/john-boele-715b73_20251214T111612Z.json" ], - "modified_at": "2026-01-09T19:18:14.202634+00:00", + "modified_at": "2026-01-09T19:50:58.886357+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "john-boele-715b73", @@ -129,7 +129,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.199545+00:00", + "inferred_at": "2026-01-09T19:50:58.877688+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_KRISZTA-SCHNEIDER.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_KRISZTA-SCHNEIDER.json index 0d47d59c47..8c66bc093f 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_KRISZTA-SCHNEIDER.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_KRISZTA-SCHNEIDER.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kriszta-schneider-b4a1055b_20251214T110140Z.json" ], - "modified_at": "2026-01-09T19:18:16.767191+00:00", + "modified_at": "2026-01-09T19:51:21.926834+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kriszta-schneider-b4a1055b", @@ -167,7 +167,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.765258+00:00", + "inferred_at": "2026-01-09T19:51:21.924796+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_MICHEL-CONCI.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_MICHEL-CONCI.json index b5ce79e56e..92d315aebe 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_MICHEL-CONCI.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_MICHEL-CONCI.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michelconci_20251214T103742Z.json" ], - "modified_at": "2026-01-09T19:18:17.824204+00:00", + "modified_at": "2026-01-09T19:51:28.781333+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michelconci", @@ -137,7 +137,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.824194+00:00", + "inferred_at": "2026-01-09T19:51:28.781308+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_NICOLE-STERREN.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_NICOLE-STERREN.json index 71116f487b..75a46fcae6 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_NICOLE-STERREN.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_NICOLE-STERREN.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicole-van-der-sterren-16467a98_20251214T113336Z.json" ], - "modified_at": "2026-01-09T19:18:15.023931+00:00", + "modified_at": "2026-01-09T19:51:06.602532+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicole-van-der-sterren-16467a98", @@ -119,7 +119,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.022011+00:00", + "inferred_at": "2026-01-09T19:51:06.600436+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_PATRICK-VLEGELS.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_PATRICK-VLEGELS.json index 38338a2ecc..a309bf463f 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_PATRICK-VLEGELS.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_PATRICK-VLEGELS.json @@ -201,7 +201,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/patrick-vlegels-b16a223_20251214T102701Z.json" ], - "modified_at": "2026-01-09T19:18:11.625882+00:00", + "modified_at": "2026-01-09T19:50:47.224105+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "patrick-vlegels-b16a223", @@ -229,7 +229,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -278,7 +278,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.623730+00:00", + "inferred_at": "2026-01-09T19:50:47.217954+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_PAULIEN-RINGS.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_PAULIEN-RINGS.json index ffa0a3f08d..0eec6f8550 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_PAULIEN-RINGS.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_PAULIEN-RINGS.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paulien-rings-83444922_20251214T113358Z.json" ], - "modified_at": "2026-01-09T19:18:13.566089+00:00", + "modified_at": "2026-01-09T19:51:05.536872+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paulien-rings-83444922", @@ -155,7 +155,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.566026+00:00", + "inferred_at": "2026-01-09T19:51:05.536556+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_PIA-WIEL.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_PIA-WIEL.json index 7ad2e8d921..34ac482ade 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_PIA-WIEL.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_PIA-WIEL.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pia-van-de-wiel-82182b24_20251214T111414Z.json" ], - "modified_at": "2026-01-09T19:18:14.225024+00:00", + "modified_at": "2026-01-09T19:50:58.928353+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pia-van-de-wiel-82182b24", @@ -108,7 +108,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.225018+00:00", + "inferred_at": "2026-01-09T19:50:58.928343+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_TED-TOGT.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_TED-TOGT.json index 6b115673ce..738f30eac6 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_TED-TOGT.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_TED-TOGT.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vandertogt_20251214T113348Z.json" ], - "modified_at": "2026-01-09T19:18:15.933513+00:00", + "modified_at": "2026-01-09T19:51:15.188058+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vandertogt", @@ -154,7 +154,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.933494+00:00", + "inferred_at": "2026-01-09T19:51:15.188015+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_WENDELA-BROUWER.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_WENDELA-BROUWER.json index 6c4232ef89..5c2c704c3f 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_WENDELA-BROUWER.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-AMS_XXXX_WENDELA-BROUWER.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wendela-brouwer-549a394_20251214T111531Z.json" ], - "modified_at": "2026-01-09T19:18:18.035432+00:00", + "modified_at": "2026-01-09T19:51:28.890219+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wendela-brouwer-549a394", @@ -108,7 +108,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.035419+00:00", + "inferred_at": "2026-01-09T19:51:28.890211+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-BLA_XXXX_LEJO-SCHENK.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-BLA_XXXX_LEJO-SCHENK.json index 25023d2bae..5c315af3b9 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-BLA_XXXX_LEJO-SCHENK.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-BLA_XXXX_LEJO-SCHENK.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lejo-schenk-2673698_20251214T112450Z.json" ], - "modified_at": "2026-01-09T19:18:15.162418+00:00", + "modified_at": "2026-01-09T19:51:06.958934+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lejo-schenk-2673698", @@ -128,7 +128,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.162405+00:00", + "inferred_at": "2026-01-09T19:51:06.958903+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-HAA_XXXX_ANDREA-ROOSEN.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-HAA_XXXX_ANDREA-ROOSEN.json index de91a83a44..261b60af2c 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-HAA_XXXX_ANDREA-ROOSEN.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-HAA_XXXX_ANDREA-ROOSEN.json @@ -261,7 +261,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/andrearoosen_20251214T102734Z.json" ], - "modified_at": "2026-01-09T19:18:13.558276+00:00", + "modified_at": "2026-01-09T19:50:55.055514+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "andrearoosen", @@ -289,7 +289,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -338,7 +338,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.558239+00:00", + "inferred_at": "2026-01-09T19:50:55.055390+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-HAA_XXXX_ROBBERT-STEMAN.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-HAA_XXXX_ROBBERT-STEMAN.json index d32522ffe9..94fa000253 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-HAA_XXXX_ROBBERT-STEMAN.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-HAA_XXXX_ROBBERT-STEMAN.json @@ -155,7 +155,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robbertsteman_20251214T111348Z.json" ], - "modified_at": "2026-01-09T19:18:14.686857+00:00", + "modified_at": "2026-01-09T19:51:03.363360+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robbertsteman", @@ -183,7 +183,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.686788+00:00", + "inferred_at": "2026-01-09T19:51:03.363179+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-HAA_XXXX_SIMONE-ELST.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-HAA_XXXX_SIMONE-ELST.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-HAA_XXXX_SIMONE-ELST.json rename to data/person/ID_XX-XX-XXX_197X_NL-NH-HAA_XXXX_SIMONE-ELST.json index da5a8979e8..5ee34c4b5d 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-HAA_XXXX_SIMONE-ELST.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-HAA_XXXX_SIMONE-ELST.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-HAA_XXXX_SIMONE-ELST", + "ppid": "ID_XX-XX-XXX_197X_NL-NH-HAA_XXXX_SIMONE-ELST", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "197X", "last_location": "NL-NH-HAA", "last_date": "XXXX", "name_tokens": [ "SIMONE", "ELST" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Simone van Elst", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -72,63 +77,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/simone-van-elst-470997119_20251214T111404Z.json" ], - "modified_at": "2026-01-09T17:43:05.834228+00:00", + "modified_at": "2026-01-09T19:51:08.628528+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "simone-van-elst-470997119", - "inferred_current_settlement": { - "value": "Haarlem", - "formatted": "NL-NH-HAA", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "HAA", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Haarlem, North Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Haarlem, North Holland, Netherlands (NL)", - "result": { - "geonames_id": 2755003, - "geonames_name": "Haarlem", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLA", - "latitude": 52.38084, - "longitude": 4.63683 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-HAA" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2755003, - "geonames_name": "Haarlem", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLA", - "latitude": 52.38084, - "longitude": 4.63683 - }, - "inferred_at": "2026-01-09T17:43:05.834221+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SIMONE-ELST", @@ -138,6 +90,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-HAA_XXXX_SIMONE-ELST", + "new_ppid": "ID_XX-XX-XXX_197X_NL-NH-HAA_XXXX_SIMONE-ELST", + "changed_at": "2026-01-09T19:41:11.557080+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1978 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 25 years" + }, + { + "step": 2, + "calculation": "2026 - 25 = 2001", + "result": "Estimated first job year: 2001", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2001 - 23 = 1978", + "result": "Estimated birth year: 1978", + "range": "1971-1985 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1971, + 1985 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:08.628521+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_197X_NL-NH-HEI_XXXX_LONNEKE-SENGERS.json b/data/person/ID_XX-XX-XXX_197X_NL-NH-HEI_XXXX_LONNEKE-SENGERS.json index 37d28f2d60..ce880f1374 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-NH-HEI_XXXX_LONNEKE-SENGERS.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-NH-HEI_XXXX_LONNEKE-SENGERS.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lonneke-sengers-4381a9141_20251214T112046Z.json" ], - "modified_at": "2026-01-09T19:18:17.587364+00:00", + "modified_at": "2026-01-09T19:51:28.442035+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lonneke-sengers-4381a9141", @@ -144,7 +144,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.578127+00:00", + "inferred_at": "2026-01-09T19:51:28.435177+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-OV-KAM_XXXX_NAOMI-TOL.json b/data/person/ID_XX-XX-XXX_197X_NL-OV-KAM_XXXX_NAOMI-TOL.json index 0b828ceeee..4fdedb3457 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-OV-KAM_XXXX_NAOMI-TOL.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-OV-KAM_XXXX_NAOMI-TOL.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/naomivtol_20251214T110413Z.json" ], - "modified_at": "2026-01-09T19:18:15.387185+00:00", + "modified_at": "2026-01-09T19:50:49.617090+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "naomivtol", @@ -115,7 +115,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.387168+00:00", + "inferred_at": "2026-01-09T19:50:49.617073+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-OV-ZWO_XXXX_FRED-DALHUISEN.json b/data/person/ID_XX-XX-XXX_197X_NL-OV-ZWO_XXXX_FRED-DALHUISEN.json index 4e0ce460b9..2b29c7bbce 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-OV-ZWO_XXXX_FRED-DALHUISEN.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-OV-ZWO_XXXX_FRED-DALHUISEN.json @@ -174,7 +174,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fred-dalhuisen-83781b67_20251214T104139Z.json" ], - "modified_at": "2026-01-09T19:18:15.017546+00:00", + "modified_at": "2026-01-09T19:51:06.595914+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fred-dalhuisen-83781b67", @@ -202,7 +202,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -251,7 +251,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.017494+00:00", + "inferred_at": "2026-01-09T19:51:06.595905+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-UT-BAA_XXXX_NATALIE-KUIK.json b/data/person/ID_XX-XX-XXX_197X_NL-UT-BAA_XXXX_NATALIE-KUIK.json index 5e2825c6e9..00ab4afff0 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-UT-BAA_XXXX_NATALIE-KUIK.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-UT-BAA_XXXX_NATALIE-KUIK.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/natalie-kuik-aa0313a6_20251214T110041Z.json" ], - "modified_at": "2026-01-09T19:18:13.270192+00:00", + "modified_at": "2026-01-09T19:50:53.725280+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "natalie-kuik-aa0313a6", @@ -137,7 +137,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.270173+00:00", + "inferred_at": "2026-01-09T19:50:53.725223+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-BIL_XXXX_SJOERI-JONKERS.json b/data/person/ID_XX-XX-XXX_197X_NL-UT-BIL_XXXX_SJOERI-JONKERS.json similarity index 68% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-BIL_XXXX_SJOERI-JONKERS.json rename to data/person/ID_XX-XX-XXX_197X_NL-UT-BIL_XXXX_SJOERI-JONKERS.json index 0dfeefae3b..546eb8b38e 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-BIL_XXXX_SJOERI-JONKERS.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-UT-BIL_XXXX_SJOERI-JONKERS.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-BIL_XXXX_SJOERI-JONKERS", + "ppid": "ID_XX-XX-XXX_197X_NL-UT-BIL_XXXX_SJOERI-JONKERS", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "197X", "last_location": "NL-UT-BIL", "last_date": "XXXX", "name_tokens": [ "SJOERI", "JONKERS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Sjoeri Jonkers", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -146,63 +151,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sjoeri-jonkers-269b64116_20251212T180000Z.json" ], - "modified_at": "2026-01-09T17:43:03.955642+00:00", + "modified_at": "2026-01-09T19:51:28.889392+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sjoeri-jonkers-269b64116", - "inferred_current_settlement": { - "value": "Bilthoven", - "formatted": "NL-UT-BIL", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "BIL", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Bilthoven, Utrecht, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Bilthoven, Utrecht, Netherlands", - "result": { - "geonames_id": 2758927, - "geonames_name": "Bilthoven", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPL", - "latitude": 52.13, - "longitude": 5.20139 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-BIL" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2758927, - "geonames_name": "Bilthoven", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPL", - "latitude": 52.13, - "longitude": 5.20139 - }, - "inferred_at": "2026-01-09T17:43:03.955636+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SJOERI-JONKERS", @@ -212,6 +164,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-BIL_XXXX_SJOERI-JONKERS", + "new_ppid": "ID_XX-XX-XXX_197X_NL-UT-BIL_XXXX_SJOERI-JONKERS", + "changed_at": "2026-01-09T19:43:42.734561+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1979 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "24 years and 5 months" + }, + { + "step": 2, + "calculation": "2026 - 24 = 2002", + "result": "Estimated first job year: 2002", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2002 - 23 = 1979", + "result": "Estimated birth year: 1979", + "range": "1972-1986 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1972, + 1986 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:28.889383+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-WOE_XXXX_KEES-THEUNIS.json b/data/person/ID_XX-XX-XXX_197X_NL-UT-WOE_XXXX_KEES-THEUNIS.json similarity index 77% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-WOE_XXXX_KEES-THEUNIS.json rename to data/person/ID_XX-XX-XXX_197X_NL-UT-WOE_XXXX_KEES-THEUNIS.json index e97bbfe62a..95d70639fc 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-WOE_XXXX_KEES-THEUNIS.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-UT-WOE_XXXX_KEES-THEUNIS.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-WOE_XXXX_KEES-THEUNIS", + "ppid": "ID_XX-XX-XXX_197X_NL-UT-WOE_XXXX_KEES-THEUNIS", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "197X", "last_location": "NL-UT-WOE", "last_date": "XXXX", "name_tokens": [ "KEES", "THEUNIS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "195X" + ] }, "name": { "full_name": "Kees Theunis", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -226,63 +231,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kees-theunis-960b89262_20251212T220000Z.json" ], - "modified_at": "2026-01-09T17:43:03.614140+00:00", + "modified_at": "2026-01-09T19:51:25.521158+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kees-theunis-960b89262", - "inferred_current_settlement": { - "value": "Woerden", - "formatted": "NL-UT-WOE", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "WOE", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Woerden, Utrecht, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Woerden, Utrecht, Netherlands", - "result": { - "geonames_id": 2744248, - "geonames_name": "Woerden", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPL", - "latitude": 52.085, - "longitude": 4.88333 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-WOE" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2744248, - "geonames_name": "Woerden", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPL", - "latitude": 52.085, - "longitude": 4.88333 - }, - "inferred_at": "2026-01-09T17:43:03.614134+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_KEES-THEUNIS", @@ -292,6 +244,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-WOE_XXXX_KEES-THEUNIS", + "new_ppid": "ID_XX-XX-XXX_197X_NL-UT-WOE_XXXX_KEES-THEUNIS", + "changed_at": "2026-01-09T19:41:11.920836+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "195X", + "197X" + ], + "edtf": "[195X,197X]", + "edtf_meaning": "one of: 1950s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1966 is in 197X, but range extends into 195X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 37 years" + }, + { + "step": 2, + "calculation": "2026 - 37 = 1989", + "result": "Estimated first job year: 1989", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1989 - 23 = 1966", + "result": "Estimated birth year: 1966", + "range": "1959-1973 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1959, + 1973 + ], + "output": [ + "195X", + "197X" + ], + "edtf": "[195X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1966 spans decades 195X/197X", + "inferred_at": "2026-01-09T19:51:25.521148+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-AAD_XXXX_ALIDA-OPPERS.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-AAD_XXXX_ALIDA-OPPERS.json similarity index 77% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-AAD_XXXX_ALIDA-OPPERS.json rename to data/person/ID_XX-XX-XXX_197X_NL-ZH-AAD_XXXX_ALIDA-OPPERS.json index 4798ff5e25..8c46cea5b9 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-AAD_XXXX_ALIDA-OPPERS.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-AAD_XXXX_ALIDA-OPPERS.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-AAD_XXXX_ALIDA-OPPERS", + "ppid": "ID_XX-XX-XXX_197X_NL-ZH-AAD_XXXX_ALIDA-OPPERS", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "197X", "last_location": "NL-ZH-AAD", "last_date": "XXXX", "name_tokens": [ "ALIDA", "OPPERS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "195X" + ] }, "name": { "full_name": "Alida Oppers", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -198,83 +203,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alidaoppers_20251212T220000Z.json" ], - "modified_at": "2026-01-09T18:58:12.045651+00:00", + "modified_at": "2026-01-09T19:51:28.577467+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "alidaoppers", - "inferred_current_settlement": { - "value": "Alphen aan den Rijn", - "formatted": "NL-ZH-AAD", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "AAD", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Netherlands" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "Inspectieraad", - "title": "Voorzitter Van De Inspectieraad", - "location": "Den Haag, Zuid-Holland, Nederland" - } - }, - { - "step": 3, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "Alphen Vitaal", - "title": "Voorzitter Bestuur", - "location": "Alphen aan den Rijn, Zuid-Holland, Nederland" - } - }, - { - "step": 4, - "geocoding": "GeoNames resolution", - "query": "Alphen aan den Rijn, Zuid-Holland, Nederland", - "result": { - "geonames_id": 2759875, - "geonames_name": "Alphen aan den Rijn", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPL", - "latitude": 52.12917, - "longitude": 4.65546 - } - }, - { - "step": 5, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-AAD" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2759875, - "geonames_name": "Alphen aan den Rijn", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPL", - "latitude": 52.12917, - "longitude": 4.65546 - }, - "inferred_at": "2026-01-09T18:58:12.045639+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALIDA-OPPERS", @@ -284,6 +216,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-AAD_XXXX_ALIDA-OPPERS", + "new_ppid": "ID_XX-XX-XXX_197X_NL-ZH-AAD_XXXX_ALIDA-OPPERS", + "changed_at": "2026-01-09T19:41:12.154454+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "195X", + "197X" + ], + "edtf": "[195X,197X]", + "edtf_meaning": "one of: 1950s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1963 is in 197X, but range extends into 195X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 40 years" + }, + { + "step": 2, + "calculation": "2026 - 40 = 1986", + "result": "Estimated first job year: 1986", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1986 - 23 = 1963", + "result": "Estimated birth year: 1963", + "range": "1956-1970 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1956, + 1970 + ], + "output": [ + "195X", + "197X" + ], + "edtf": "[195X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1963 spans decades 195X/197X", + "inferred_at": "2026-01-09T19:51:28.577458+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_ANAND-JAGROEP.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_ANAND-JAGROEP.json index 98473ebe8b..d15bc9ffa0 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_ANAND-JAGROEP.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_ANAND-JAGROEP.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anand-jagroep-4506a224_20251214T102851Z.json" ], - "modified_at": "2026-01-09T19:18:18.330276+00:00", + "modified_at": "2026-01-09T19:51:29.277365+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anand-jagroep-4506a224", @@ -143,7 +143,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.321971+00:00", + "inferred_at": "2026-01-09T19:51:29.273578+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_ANNEMARIE-DEKKER.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_ANNEMARIE-DEKKER.json index 2becd000fe..48a39d70f5 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_ANNEMARIE-DEKKER.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_ANNEMARIE-DEKKER.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annemarie-dekker-2aa03a43_20251214T113327Z.json" ], - "modified_at": "2026-01-09T19:18:16.399235+00:00", + "modified_at": "2026-01-09T19:51:18.453750+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annemarie-dekker-2aa03a43", @@ -131,7 +131,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.399215+00:00", + "inferred_at": "2026-01-09T19:51:18.453701+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_BERT-ELEVELD.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_BERT-ELEVELD.json index 529111da0f..4e036cc23e 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_BERT-ELEVELD.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_BERT-ELEVELD.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/berteleveld_20251214T103210Z.json" ], - "modified_at": "2026-01-09T19:18:16.791042+00:00", + "modified_at": "2026-01-09T19:51:22.028375+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "berteleveld", @@ -167,7 +167,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.791021+00:00", + "inferred_at": "2026-01-09T19:51:22.028327+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_DOMINIQUE-KUHLING.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_DOMINIQUE-KUHLING.json index 4496104d8c..55027b2658 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_DOMINIQUE-KUHLING.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_DOMINIQUE-KUHLING.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dominique-kuhling-2986b112_20251214T102948Z.json" ], - "modified_at": "2026-01-09T19:18:17.418989+00:00", + "modified_at": "2026-01-09T19:51:28.004365+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dominique-kuhling-2986b112", @@ -159,7 +159,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.418958+00:00", + "inferred_at": "2026-01-09T19:51:28.004286+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_ED-VLIST.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_ED-VLIST.json index 592ba3f720..9771012f05 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_ED-VLIST.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_ED-VLIST.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/edvandervlist_20251214T113227Z.json" ], - "modified_at": "2026-01-09T19:18:13.818979+00:00", + "modified_at": "2026-01-09T19:50:56.608852+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "edvandervlist", @@ -120,7 +120,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.818971+00:00", + "inferred_at": "2026-01-09T19:50:56.608842+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_GUUS-RIKHOF.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_GUUS-RIKHOF.json index e1ac71d02b..f5e2fa68b5 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_GUUS-RIKHOF.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_GUUS-RIKHOF.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/guus-rikhof-30554638_20251214T112201Z.json" ], - "modified_at": "2026-01-09T19:18:16.164116+00:00", + "modified_at": "2026-01-09T19:51:17.893527+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "guus-rikhof-30554638", @@ -110,7 +110,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +159,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.164109+00:00", + "inferred_at": "2026-01-09T19:51:17.893513+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_HENRI-HEIJDEN.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_HENRI-HEIJDEN.json similarity index 68% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_HENRI-HEIJDEN.json rename to data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_HENRI-HEIJDEN.json index d47ae46772..4ef8ef83d6 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_HENRI-HEIJDEN.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_HENRI-HEIJDEN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_HENRI-HEIJDEN", + "ppid": "ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_HENRI-HEIJDEN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "197X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "HENRI", "HEIJDEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Henri van der Heijden", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -150,63 +155,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henrivanderheijden_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:43:03.233686+00:00", + "modified_at": "2026-01-09T19:51:08.358593+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henrivanderheijden", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, South Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, South Holland, Netherlands", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:43:03.233679+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HENRI-HEIJDEN", @@ -216,6 +168,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_HENRI-HEIJDEN", + "new_ppid": "ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_HENRI-HEIJDEN", + "changed_at": "2026-01-09T19:41:10.605811+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1978 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 25 years" + }, + { + "step": 2, + "calculation": "2026 - 25 = 2001", + "result": "Estimated first job year: 2001", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2001 - 23 = 1978", + "result": "Estimated birth year: 1978", + "range": "1971-1985 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1971, + 1985 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:08.358582+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_INGMAR-SEELBACH.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_INGMAR-SEELBACH.json index 2fcee8b985..eebbdfdab0 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_INGMAR-SEELBACH.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_INGMAR-SEELBACH.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ingmar-seelbach-54925118_20251214T110746Z.json" ], - "modified_at": "2026-01-09T19:18:13.632788+00:00", + "modified_at": "2026-01-09T19:50:55.256016+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ingmar-seelbach-54925118", @@ -157,7 +157,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.632772+00:00", + "inferred_at": "2026-01-09T19:50:55.255917+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_JACQUELINE-BROERSE.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_JACQUELINE-BROERSE.json index 57943a7e60..7be7894948 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_JACQUELINE-BROERSE.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_JACQUELINE-BROERSE.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jacqueline-tellings-broerse-b295a01a5_20251214T103318Z.json" ], - "modified_at": "2026-01-09T19:18:14.913163+00:00", + "modified_at": "2026-01-09T19:51:05.500913+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jacqueline-tellings-broerse-b295a01a5", @@ -108,7 +108,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.913155+00:00", + "inferred_at": "2026-01-09T19:51:05.500901+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_LEO-BREDIE.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_LEO-BREDIE.json index 2ea96cb4be..71982be19b 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_LEO-BREDIE.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_LEO-BREDIE.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/leo-bredie-69995516_20251214T112359Z.json" ], - "modified_at": "2026-01-09T19:18:14.709675+00:00", + "modified_at": "2026-01-09T19:51:14.179905+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "leo-bredie-69995516", @@ -143,7 +143,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.709637+00:00", + "inferred_at": "2026-01-09T19:51:14.179831+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_MARTIN-OUWENS.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_MARTIN-OUWENS.json index 74c2155ef5..959f0a3d4b 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_MARTIN-OUWENS.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_MARTIN-OUWENS.json @@ -88,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martin-ouwens-507086112_20251214T103311Z.json" ], - "modified_at": "2026-01-09T19:18:15.999274+00:00", + "modified_at": "2026-01-09T19:51:15.727475+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martin-ouwens-507086112", @@ -116,7 +116,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.999261+00:00", + "inferred_at": "2026-01-09T19:51:15.727441+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_MARTINE-WANSBEEK.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_MARTINE-WANSBEEK.json index 0541efcc6c..c6e00205eb 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_MARTINE-WANSBEEK.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_MARTINE-WANSBEEK.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martine-wansbeek-26152044_20251214T113151Z.json" ], - "modified_at": "2026-01-09T19:18:16.905077+00:00", + "modified_at": "2026-01-09T19:51:22.457260+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martine-wansbeek-26152044", @@ -108,7 +108,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.905071+00:00", + "inferred_at": "2026-01-09T19:51:22.457249+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_MICHEL-ZAGARA.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_MICHEL-ZAGARA.json index 17b2c74958..7310c0145b 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_MICHEL-ZAGARA.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_MICHEL-ZAGARA.json @@ -225,7 +225,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/zagara_20251214T110223Z.json" ], - "modified_at": "2026-01-09T19:18:14.362998+00:00", + "modified_at": "2026-01-09T19:51:01.657853+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "zagara", @@ -247,7 +247,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -288,7 +288,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.362929+00:00", + "inferred_at": "2026-01-09T19:51:01.657062+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_NIEK-KLOM.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_NIEK-KLOM.json index 107e2829ef..55fb4f8fe7 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_NIEK-KLOM.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_NIEK-KLOM.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/niekklom_20251214T112129Z.json" ], - "modified_at": "2026-01-09T19:18:12.925874+00:00", + "modified_at": "2026-01-09T19:50:49.131446+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "niekklom", @@ -135,7 +135,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.916070+00:00", + "inferred_at": "2026-01-09T19:50:49.108946+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_REMKO-GEEST.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_REMKO-GEEST.json index c2183077fd..f9f9913812 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_REMKO-GEEST.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_REMKO-GEEST.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/remko-van-der-geest_20251214T112831Z.json" ], - "modified_at": "2026-01-09T19:18:14.755397+00:00", + "modified_at": "2026-01-09T19:50:51.770643+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "remko-van-der-geest", @@ -167,7 +167,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.755337+00:00", + "inferred_at": "2026-01-09T19:50:51.770516+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RUTGER-STOLK.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_RUTGER-STOLK.json similarity index 55% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RUTGER-STOLK.json rename to data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_RUTGER-STOLK.json index 0a82edbbef..88f3fa7bb3 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RUTGER-STOLK.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_RUTGER-STOLK.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RUTGER-STOLK", + "ppid": "ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_RUTGER-STOLK", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "197X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "RUTGER", "STOLK" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "195X" + ] }, "name": { "full_name": "rutger stolk", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -73,63 +78,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rutger-stolk-07448885_20251214T103250Z.json" ], - "modified_at": "2026-01-09T17:42:58.434713+00:00", + "modified_at": "2026-01-09T19:51:04.053581+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rutger-stolk-07448885", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, South Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, South Holland, Netherlands (NL)", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:42:58.434707+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RUTGER-STOLK", @@ -139,6 +91,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RUTGER-STOLK", + "new_ppid": "ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_RUTGER-STOLK", + "changed_at": "2026-01-09T19:41:08.732493+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "195X", + "197X" + ], + "edtf": "[195X,197X]", + "edtf_meaning": "one of: 1950s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1964 is in 197X, but range extends into 195X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 39 years" + }, + { + "step": 2, + "calculation": "2026 - 39 = 1987", + "result": "Estimated first job year: 1987", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1987 - 23 = 1964", + "result": "Estimated birth year: 1964", + "range": "1957-1971 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1957, + 1971 + ], + "output": [ + "195X", + "197X" + ], + "edtf": "[195X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1964 spans decades 195X/197X", + "inferred_at": "2026-01-09T19:51:04.053575+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_SIMONE-DRIESSEN.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_SIMONE-DRIESSEN.json index df627e893b..b24e950fa3 100644 --- a/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_SIMONE-DRIESSEN.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_SIMONE-DRIESSEN.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/simone-driessen-a5a59b23_20251214T113011Z.json" ], - "modified_at": "2026-01-09T19:18:12.716548+00:00", + "modified_at": "2026-01-09T19:50:48.666039+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "simone-driessen-a5a59b23", @@ -133,7 +133,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:12.716493+00:00", + "inferred_at": "2026-01-09T19:50:48.666026+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_STAGECO-BZ.json b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_STAGECO-BZ.json similarity index 56% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_STAGECO-BZ.json rename to data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_STAGECO-BZ.json index 215ccf3290..7050653e1c 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_STAGECO-BZ.json +++ b/data/person/ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_STAGECO-BZ.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_STAGECO-BZ", + "ppid": "ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_STAGECO-BZ", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "197X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "STAGECO", "BZ" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "195X" + ] }, "name": { "full_name": "StageCo BZ", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -72,63 +77,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stageco-bz-46348322_20251214T103144Z.json" ], - "modified_at": "2026-01-09T17:42:59.648672+00:00", + "modified_at": "2026-01-09T19:50:56.868168+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stageco-bz-46348322", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, South Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, South Holland, Netherlands (NL)", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:42:59.648666+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_STAGECO-BZ", @@ -138,6 +90,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_STAGECO-BZ", + "new_ppid": "ID_XX-XX-XXX_197X_NL-ZH-TH_XXXX_STAGECO-BZ", + "changed_at": "2026-01-09T19:41:11.450196+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "195X", + "197X" + ], + "edtf": "[195X,197X]", + "edtf_meaning": "one of: 1950s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1963 is in 197X, but range extends into 195X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 40 years" + }, + { + "step": 2, + "calculation": "2026 - 40 = 1986", + "result": "Estimated first job year: 1986", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1986 - 23 = 1963", + "result": "Estimated birth year: 1963", + "range": "1956-1970 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1956, + 1970 + ], + "output": [ + "195X", + "197X" + ], + "edtf": "[195X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1963 spans decades 195X/197X", + "inferred_at": "2026-01-09T19:50:56.868136+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEXIS-ROSSI.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ALEXIS-ROSSI.json similarity index 67% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEXIS-ROSSI.json rename to data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ALEXIS-ROSSI.json index 22a29512a7..51b82740fd 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEXIS-ROSSI.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ALEXIS-ROSSI.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEXIS-ROSSI", + "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ALEXIS-ROSSI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "197X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "ALEXIS", "ROSSI" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -185,8 +190,14 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T01:00:00Z", + "search_queries": [ + "\"Alexis Rossi\" director \"Internet Archive\" born birthday biography", + "\"Alexis Rossi\" \"Open Library\" born biography" + ], + "result": "not_found", + "notes": "Web search conducted via Exa; found profile info at Internet Archive but no birth date mentioned in any results" } }, "provenance": { @@ -194,7 +205,85 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/alexisrossi_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:50.575728+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "alexisrossi" + "linkedin_slug": "alexisrossi", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEXIS-ROSSI", + "new_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ALEXIS-ROSSI", + "changed_at": "2026-01-09T19:43:38.265785+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1973 is in 197X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "ClariNet Communications", + "title": "Managing Editor", + "date_range": "1996 - 1996" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1996 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1996 - 23 = 1973", + "result": "Estimated birth year: 1973", + "range": "1968-1978 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1968, + 1978 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:50:50.294355+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ANDRIES-VELDE.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ANDRIES-VELDE.json index 9fc367c98e..ba99fcf291 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ANDRIES-VELDE.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ANDRIES-VELDE.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/andries-van-der-velde-ba648363_20251214T112316Z.json" ], - "modified_at": "2026-01-09T19:18:16.548054+00:00", + "modified_at": "2026-01-09T19:51:18.610347+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "andries-van-der-velde-ba648363", @@ -106,7 +106,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.545933+00:00", + "inferred_at": "2026-01-09T19:51:18.606043+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ANGEL-CHORAPCHIEV.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ANGEL-CHORAPCHIEV.json index 7c9ea7e36a..c86d5a359c 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ANGEL-CHORAPCHIEV.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ANGEL-CHORAPCHIEV.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/angelchorapchiev_20251214T113124Z.json" ], - "modified_at": "2026-01-09T19:18:15.596830+00:00", + "modified_at": "2026-01-09T19:51:12.692045+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "angelchorapchiev", @@ -150,7 +150,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.596770+00:00", + "inferred_at": "2026-01-09T19:51:12.691832+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ANN-GASTEL.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ANN-GASTEL.json index a4e1c47fa9..8528a22cfe 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ANN-GASTEL.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ANN-GASTEL.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ann-van-gastel-6234997a_20251214T104156Z.json" ], - "modified_at": "2026-01-09T19:18:14.152228+00:00", + "modified_at": "2026-01-09T19:50:58.728259+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ann-van-gastel-6234997a", @@ -106,7 +106,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.149544+00:00", + "inferred_at": "2026-01-09T19:50:58.725327+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ARNO-DIETEREN.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ARNO-DIETEREN.json new file mode 100644 index 0000000000..9e3f5ca9cf --- /dev/null +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ARNO-DIETEREN.json @@ -0,0 +1,163 @@ +{ + "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ARNO-DIETEREN", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "197X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ARNO", + "DIETEREN" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "195X" + ] + }, + "name": { + "full_name": "arno dieteren", + "display_name": "arno dieteren", + "name_romanized": null, + "name_tokens": [ + "ARNO", + "DIETEREN" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at Dienst Uitvoering Onderwijs (Ministerie van OCW)" + }, + "affiliations": [], + "profile_data": { + "name": "arno dieteren", + "linkedin_url": "https://www.linkedin.com/in/arno-dieteren-37914a30", + "headline": "voorlichter at Dienst Uitvoering Onderwijs (Ministerie van OCW)", + "location": "", + "connections": "112 connections • 113 followers", + "about": "Total Experience: 37 years and 8 months", + "experience": [], + "education": [], + "skills": [], + "languages": [ + { + "language": "English", + "proficiency": "Professional working proficiency" + }, + { + "language": "German", + "proficiency": "Professional working proficiency" + } + ], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C5603AQFAAA2RvY1U0Q/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1516440375479?e=2147483647&v=beta&t=J3rSxrCBBEndWew7BUuqzNhyW7HR6pPtNjHGDlxE2P4" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/arno-dieteren-37914a30_20251214T112145Z.json", + "observed_on": "2025-12-14T11:21:45.620165+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.667800+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/arno-dieteren-37914a30_20251214T112145Z.json" + ], + "modified_at": "2026-01-09T19:51:22.031947+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "arno-dieteren-37914a30", + "ppid_collision_suffix": "arno_dieteren_37914a30", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNO-DIETEREN-arno_dieteren_37914a30", + "new_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ARNO-DIETEREN", + "changed_at": "2026-01-09T19:41:11.925535+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "195X", + "197X" + ], + "edtf": "[195X,197X]", + "edtf_meaning": "one of: 1950s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1966 is in 197X, but range extends into 195X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 37 years" + }, + { + "step": 2, + "calculation": "2026 - 37 = 1989", + "result": "Estimated first job year: 1989", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1989 - 23 = 1966", + "result": "Estimated birth year: 1966", + "range": "1959-1973 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1959, + 1973 + ], + "output": [ + "195X", + "197X" + ], + "edtf": "[195X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1966 spans decades 195X/197X", + "inferred_at": "2026-01-09T19:51:22.031938+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_BEATRIJS-MEIJER.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_BEATRIJS-MEIJER.json index d551bff2d3..0cc9219ea1 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_BEATRIJS-MEIJER.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_BEATRIJS-MEIJER.json @@ -83,7 +83,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/beatrijs-de-meijer-8055619_20251214T112215Z.json" ], - "modified_at": "2026-01-09T19:18:11.648930+00:00", + "modified_at": "2026-01-09T19:50:47.251910+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "beatrijs-de-meijer-8055619", @@ -110,7 +110,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +159,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.646748+00:00", + "inferred_at": "2026-01-09T19:50:47.248734+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_BEN-ALINK.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_BEN-ALINK.json index 1821a87cae..295912c790 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_BEN-ALINK.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_BEN-ALINK.json @@ -159,7 +159,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/benalink_20251214T102959Z.json" ], - "modified_at": "2026-01-09T19:18:13.638539+00:00", + "modified_at": "2026-01-09T19:50:55.268123+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "benalink", @@ -186,7 +186,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -235,7 +235,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.636589+00:00", + "inferred_at": "2026-01-09T19:50:55.265472+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CAMIEL-VINGERHOETS.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CAMIEL-VINGERHOETS.json index dd7d6bffa8..35adf790c1 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CAMIEL-VINGERHOETS.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CAMIEL-VINGERHOETS.json @@ -163,7 +163,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/camiel-vingerhoets-7900738_20251214T112529Z.json" ], - "modified_at": "2026-01-09T19:18:16.882755+00:00", + "modified_at": "2026-01-09T19:51:22.333520+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "camiel-vingerhoets-7900738", @@ -190,7 +190,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -239,7 +239,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.880675+00:00", + "inferred_at": "2026-01-09T19:51:22.331722+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CHRISTIAAN-HUIZINGA.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CHRISTIAAN-HUIZINGA.json index 2454671509..7604d0f9a0 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CHRISTIAAN-HUIZINGA.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CHRISTIAAN-HUIZINGA.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/christiaan-huizinga-011b3a6b_20251214T112325Z.json" ], - "modified_at": "2026-01-09T19:18:14.855505+00:00", + "modified_at": "2026-01-09T19:51:05.150493+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "christiaan-huizinga-011b3a6b", @@ -153,7 +153,7 @@ "primary_rationale": "1971 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:14.853563+00:00", + "inferred_at": "2026-01-09T19:51:05.142952+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CORIEN-BLIJDERVEEN.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CORIEN-BLIJDERVEEN.json index 46afd3e3ac..4232c15ac6 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CORIEN-BLIJDERVEEN.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_CORIEN-BLIJDERVEEN.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/corien-van-blijderveen-7b309476_20251214T110702Z.json" ], - "modified_at": "2026-01-09T19:18:15.438937+00:00", + "modified_at": "2026-01-09T19:51:10.858977+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "corien-van-blijderveen-7b309476", @@ -130,7 +130,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.438893+00:00", + "inferred_at": "2026-01-09T19:51:10.858896+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DANA-PORATH.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DANA-PORATH.json similarity index 61% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DANA-PORATH.json rename to data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DANA-PORATH.json index 48e3038f3d..fd5d08bdc9 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DANA-PORATH.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DANA-PORATH.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DANA-PORATH", + "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DANA-PORATH", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "197X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "DANA", "PORATH" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -130,7 +135,85 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/danaporath_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:28.205342+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "danaporath" + "linkedin_slug": "danaporath", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DANA-PORATH", + "new_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DANA-PORATH", + "changed_at": "2026-01-09T19:43:41.475704+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1971 is in 197X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Yad Vashem, the World Holocaust Remembrance Center", + "title": "Staff Member", + "date_range": "1994 - 1999" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1994 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1994 - 23 = 1971", + "result": "Estimated birth year: 1971", + "range": "1966-1976 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1966, + 1976 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:51:28.205276+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DANIEL-LUIPEN.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DANIEL-LUIPEN.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DANIEL-LUIPEN.json rename to data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DANIEL-LUIPEN.json index a90c95ed90..ba61f11aac 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DANIEL-LUIPEN.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DANIEL-LUIPEN.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DANIEL-LUIPEN", + "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DANIEL-LUIPEN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "197X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "DANIEL", "LUIPEN" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -104,7 +109,94 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daniel-van-luipen-26544138_20251214T111535Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:48.915395+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "daniel-van-luipen-26544138" + "linkedin_slug": "daniel-van-luipen-26544138", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DANIEL-LUIPEN", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_DANIEL-LUIPEN", + "changed_at": "2026-01-09T19:41:11.795317+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_DANIEL-LUIPEN", + "new_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DANIEL-LUIPEN", + "changed_at": "2026-01-09T19:43:43.038971+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1977 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Silkstone V.O.F.", + "title": "Musician (Bass) plus Backing vocals", + "date_range": "2000-12 - 2005-08" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2000 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2000 - 23 = 1977", + "result": "Estimated birth year: 1977", + "range": "1972-1982 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1972, + 1982 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:50:48.902730+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DESIREE-VISSER.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DESIREE-VISSER.json index df08063d57..47708ef5aa 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DESIREE-VISSER.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DESIREE-VISSER.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/desiree-visser-90638917_20251214T112316Z.json" ], - "modified_at": "2026-01-09T19:18:12.961806+00:00", + "modified_at": "2026-01-09T19:50:49.604372+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "desiree-visser-90638917", @@ -126,7 +126,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.955883+00:00", + "inferred_at": "2026-01-09T19:50:49.598100+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DOLF-MULLER.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DOLF-MULLER.json index 172cf82910..c2796ccdc6 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DOLF-MULLER.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DOLF-MULLER.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dolf-muller-9826211a_20251214T112126Z.json" ], - "modified_at": "2026-01-09T19:18:13.770374+00:00", + "modified_at": "2026-01-09T19:50:56.459820+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dolf-muller-9826211a", @@ -136,7 +136,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.768537+00:00", + "inferred_at": "2026-01-09T19:50:56.456502+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DRAMAL-ABDELWAHHAB.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DRAMAL-ABDELWAHHAB.json index f7916b7bee..e14f31cf32 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DRAMAL-ABDELWAHHAB.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DRAMAL-ABDELWAHHAB.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dr-amal-abdelwahhab-6126bb38_20251214T103900Z.json" ], - "modified_at": "2026-01-09T19:18:14.967751+00:00", + "modified_at": "2026-01-09T19:51:06.458813+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dr-amal-abdelwahhab-6126bb38", @@ -132,7 +132,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.967710+00:00", + "inferred_at": "2026-01-09T19:51:06.458680+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DUSAN-NIKODIJEVIC.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DUSAN-NIKODIJEVIC.json index 92256a9cce..f0f0d16038 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DUSAN-NIKODIJEVIC.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_DUSAN-NIKODIJEVIC.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dusan-nikodijevic-0a032080_20251214T103911Z.json" ], - "modified_at": "2026-01-09T19:18:17.651531+00:00", + "modified_at": "2026-01-09T19:51:28.545996+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dusan-nikodijevic-0a032080", @@ -106,7 +106,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.651483+00:00", + "inferred_at": "2026-01-09T19:51:28.545976+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ELLEN-HARDY.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ELLEN-HARDY.json index cc62525f08..5f4e388681 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ELLEN-HARDY.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ELLEN-HARDY.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ellen-hardy-58415630_20251214T112512Z.json" ], - "modified_at": "2026-01-09T19:18:13.856174+00:00", + "modified_at": "2026-01-09T19:50:56.717085+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ellen-hardy-58415630", @@ -188,7 +188,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -237,7 +237,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.853495+00:00", + "inferred_at": "2026-01-09T19:50:56.713703+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_FARAH-ZAHEDI.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_FARAH-ZAHEDI.json index f09d888326..f49dbd8962 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_FARAH-ZAHEDI.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_FARAH-ZAHEDI.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/farah-zahedi-1b46975a_20251214T103754Z.json" ], - "modified_at": "2026-01-09T19:18:13.236663+00:00", + "modified_at": "2026-01-09T19:50:53.691754+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "farah-zahedi-1b46975a", @@ -111,7 +111,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.236651+00:00", + "inferred_at": "2026-01-09T19:50:53.691724+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_GERARD-POEL.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_GERARD-POEL.json index c4df7a0977..5bbb3f62de 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_GERARD-POEL.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_GERARD-POEL.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerard-van-der-poel-13a60b37_20251214T112226Z.json" ], - "modified_at": "2026-01-09T19:18:13.048750+00:00", + "modified_at": "2026-01-09T19:50:50.825207+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerard-van-der-poel-13a60b37", @@ -137,7 +137,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.046858+00:00", + "inferred_at": "2026-01-09T19:50:50.823196+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HELGA-V.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HELGA-V.json index 0feb964b33..0d04939fae 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HELGA-V.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HELGA-V.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/helga-van-der-ploeg_20251214T103152Z.json" ], - "modified_at": "2026-01-09T19:18:12.263150+00:00", + "modified_at": "2026-01-09T19:50:47.490625+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "helga-van-der-ploeg", @@ -135,7 +135,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.256216+00:00", + "inferred_at": "2026-01-09T19:50:47.479378+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HENK-WEVER.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HENK-WEVER.json new file mode 100644 index 0000000000..defdb49d5f --- /dev/null +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HENK-WEVER.json @@ -0,0 +1,155 @@ +{ + "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HENK-WEVER", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "197X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "HENK", + "WEVER" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] + }, + "name": { + "full_name": "Henk Wever", + "display_name": "Henk Wever", + "name_romanized": null, + "name_tokens": [ + "HENK", + "WEVER" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at Dienst Uitvoering Onderwijs (Ministerie van OCW)" + }, + "affiliations": [], + "profile_data": { + "name": "Henk Wever", + "linkedin_url": "https://www.linkedin.com/in/henk-wever-95720961", + "headline": "Medewerker Klantenservice bij Dienst Uitvoering Onderwijs (Ministerie van OCW)", + "location": "Greater Groningen Area (NL)", + "connections": "58 connections • 59 followers", + "about": "Total Experience: 25 years and 10 months", + "experience": [], + "education": [], + "skills": [ + "klantenservice" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/henk-wever-95720961_20251214T112327Z.json", + "observed_on": "2025-12-14T11:23:27.922294+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.516942+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/henk-wever-95720961_20251214T112327Z.json" + ], + "modified_at": "2026-01-09T19:51:23.907969+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "henk-wever-95720961", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HENK-WEVER", + "new_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HENK-WEVER", + "changed_at": "2026-01-09T19:41:10.333498+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1978 is in 197X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 25 years" + }, + { + "step": 2, + "calculation": "2026 - 25 = 2001", + "result": "Estimated first job year: 2001", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2001 - 23 = 1978", + "result": "Estimated birth year: 1978", + "range": "1971-1985 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1971, + 1985 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:23.906111+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HERMAN-TRUMPIE.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HERMAN-TRUMPIE.json index d5c4d9aeb1..67edec3a16 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HERMAN-TRUMPIE.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HERMAN-TRUMPIE.json @@ -76,17 +76,28 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/herman-trumpie-79ab4349_20251214T112315Z.json" ], - "modified_at": "2026-01-09T19:18:15.750942+00:00", + "modified_at": "2026-01-09T19:51:17.568273+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "herman-trumpie-79ab4349", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HERMAN-TRUMPIE", + "new_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HERMAN-TRUMPIE", + "changed_at": "2026-01-09T19:18:15.750940+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], "inferred_birth_decade": { "value": "197X", "edtf": "197X", "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -127,19 +138,8 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.749024+00:00", + "inferred_at": "2026-01-09T19:51:17.565434+00:00", "inferred_by": "enrich_ppids.py" } - }, - "ppid_history": [ - { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HERMAN-TRUMPIE", - "new_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_HERMAN-TRUMPIE", - "changed_at": "2026-01-09T19:18:15.750940+00:00", - "reason": "observation_based_inference", - "inferred_fields": [ - "inferred_birth_decade" - ] - } - ] + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_INGEBORG-SMIT.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_INGEBORG-SMIT.json index 96795b0f2a..5d9bb1097c 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_INGEBORG-SMIT.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_INGEBORG-SMIT.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ingeborg-smit-46214420_20251214T111525Z.json" ], - "modified_at": "2026-01-09T19:18:17.541805+00:00", + "modified_at": "2026-01-09T19:51:28.399317+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ingeborg-smit-46214420", @@ -119,7 +119,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.539457+00:00", + "inferred_at": "2026-01-09T19:51:28.397459+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JEROEN-HEIJDEMANN.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JEROEN-HEIJDEMANN.json index af94297242..729d8aab58 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JEROEN-HEIJDEMANN.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JEROEN-HEIJDEMANN.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeroen-heijdemann-a14b9711_20251214T112955Z.json" ], - "modified_at": "2026-01-09T19:18:15.994596+00:00", + "modified_at": "2026-01-09T19:51:18.418076+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeroen-heijdemann-a14b9711", @@ -158,7 +158,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +207,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.988636+00:00", + "inferred_at": "2026-01-09T19:51:18.412328+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JEROEN-KERSEBOOM.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JEROEN-KERSEBOOM.json index cfeb95e42d..92ab19dda8 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JEROEN-KERSEBOOM.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JEROEN-KERSEBOOM.json @@ -186,7 +186,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jkerseboom_20251214T112630Z.json" ], - "modified_at": "2026-01-09T19:18:13.809413+00:00", + "modified_at": "2026-01-09T19:50:56.602236+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jkerseboom", @@ -213,7 +213,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -262,7 +262,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.800081+00:00", + "inferred_at": "2026-01-09T19:50:56.594665+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JOOST-TOP.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JOOST-TOP.json index 7cbc7b778e..50f623bb88 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JOOST-TOP.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_JOOST-TOP.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joost-top-b7a9676a_20251214T112336Z.json" ], - "modified_at": "2026-01-09T19:18:15.012242+00:00", + "modified_at": "2026-01-09T19:51:06.586443+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joost-top-b7a9676a", @@ -145,7 +145,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.009900+00:00", + "inferred_at": "2026-01-09T19:51:06.584512+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LETTY-SPIEKER.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LETTY-SPIEKER.json index 6918491bd0..bbfdddc59f 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LETTY-SPIEKER.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LETTY-SPIEKER.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/letty-spieker-3ab2291a_20251214T112141Z.json" ], - "modified_at": "2026-01-09T19:18:14.964525+00:00", + "modified_at": "2026-01-09T19:51:06.323518+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "letty-spieker-3ab2291a", @@ -136,7 +136,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.962638+00:00", + "inferred_at": "2026-01-09T19:51:06.319401+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIANE-OTTEN.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIANE-OTTEN.json index 51366bff9d..4337c850db 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIANE-OTTEN.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_LIANE-OTTEN.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/liane-otten-33801426_20251214T112213Z.json" ], - "modified_at": "2026-01-09T19:18:14.022330+00:00", + "modified_at": "2026-01-09T19:50:58.347173+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "liane-otten-33801426", @@ -129,7 +129,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.020508+00:00", + "inferred_at": "2026-01-09T19:50:58.345188+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MAIA-TODRIA.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MAIA-TODRIA.json index 609a5e300b..f4c0e47c07 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MAIA-TODRIA.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MAIA-TODRIA.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maia-todria-3086b434_20251214T103251Z.json" ], - "modified_at": "2026-01-09T19:18:14.757975+00:00", + "modified_at": "2026-01-09T19:51:04.037318+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maia-todria-3086b434", @@ -106,7 +106,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.756053+00:00", + "inferred_at": "2026-01-09T19:51:04.035367+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MALA-DOERGA.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MALA-DOERGA.json index a9c3d11c69..3bafb89fb0 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MALA-DOERGA.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MALA-DOERGA.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mala-doerga-16b3a36b_20251214T112339Z.json" ], - "modified_at": "2026-01-09T19:18:15.819803+00:00", + "modified_at": "2026-01-09T19:51:14.445824+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mala-doerga-16b3a36b", @@ -113,7 +113,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.817884+00:00", + "inferred_at": "2026-01-09T19:51:14.442895+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MANON-HOEPPERMANS.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MANON-HOEPPERMANS.json index 27844642ed..ec15b4e787 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MANON-HOEPPERMANS.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MANON-HOEPPERMANS.json @@ -83,7 +83,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/manon-hoeppermans-67571b58_20251214T112209Z.json" ], - "modified_at": "2026-01-09T19:18:14.320383+00:00", + "modified_at": "2026-01-09T19:51:00.366581+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "manon-hoeppermans-67571b58", @@ -104,7 +104,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -145,7 +145,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.318485+00:00", + "inferred_at": "2026-01-09T19:51:00.364501+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARISSA-SCHUURMANS.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARISSA-SCHUURMANS.json index fa5189bf7d..ab1bd80b1b 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARISSA-SCHUURMANS.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARISSA-SCHUURMANS.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marissa-van-der-bijl_20251214T112724Z.json" ], - "modified_at": "2026-01-09T19:18:18.378124+00:00", + "modified_at": "2026-01-09T19:51:29.297340+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marissa-van-der-bijl", @@ -139,7 +139,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:18.368580+00:00", + "inferred_at": "2026-01-09T19:51:29.290115+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARTINE-BARTELS.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARTINE-BARTELS.json index ecee70df31..562e1607f6 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARTINE-BARTELS.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARTINE-BARTELS.json @@ -176,7 +176,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martine-bartels-65934027_20251214T112924Z.json" ], - "modified_at": "2026-01-09T19:18:16.114455+00:00", + "modified_at": "2026-01-09T19:51:17.560428+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martine-bartels-65934027", @@ -203,7 +203,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -252,7 +252,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.112540+00:00", + "inferred_at": "2026-01-09T19:51:17.558167+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARTINE-GOSSELINK.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARTINE-GOSSELINK.json index 9ab158c442..582fc4df0e 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARTINE-GOSSELINK.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MARTINE-GOSSELINK.json @@ -252,7 +252,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martine-gosselink-0683445_20251214T111415Z.json" ], - "modified_at": "2026-01-09T19:18:15.869260+00:00", + "modified_at": "2026-01-09T19:51:14.943780+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martine-gosselink-0683445", @@ -279,7 +279,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -328,7 +328,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.867320+00:00", + "inferred_at": "2026-01-09T19:51:14.941380+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MICHIEL-HUNEN.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MICHIEL-HUNEN.json index ff2564fe82..4e02b25e1c 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MICHIEL-HUNEN.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MICHIEL-HUNEN.json @@ -180,7 +180,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michiel-van-hunen-03115863_20251214T110759Z.json" ], - "modified_at": "2026-01-09T19:18:17.615398+00:00", + "modified_at": "2026-01-09T19:51:28.537620+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michiel-van-hunen-03115863", @@ -207,7 +207,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -256,7 +256,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:17.613116+00:00", + "inferred_at": "2026-01-09T19:51:28.535565+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIHAELA-GOLBAN.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIHAELA-GOLBAN.json new file mode 100644 index 0000000000..dcef20840d --- /dev/null +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIHAELA-GOLBAN.json @@ -0,0 +1,158 @@ +{ + "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIHAELA-GOLBAN", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "197X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "MIHAELA", + "GOLBAN" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ] + }, + "name": { + "full_name": "Mihaela Golban", + "display_name": "Mihaela Golban", + "name_romanized": null, + "name_tokens": [ + "MIHAELA", + "GOLBAN" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Mihaela Golban", + "linkedin_url": "https://www.linkedin.com/in/mihaela-golban-a4585a121", + "headline": "The Librarian at National Library of Romania", + "location": "Romania (RO)", + "connections": "24 connections • 24 followers", + "about": "Total Experience: 33 years and 7 months", + "experience": [], + "education": [ + { + "degree": "Specialist, Letters, translator/interpret", + "institution": "University of Bucharest" + } + ], + "skills": [], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C4D03AQF88zY9rFJpDQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1548789136108?e=2147483647&v=beta&t=69-1YesWHf0aw2YCzha-eYCmNxLx3A89TWMmWjnJdyE" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/mihaela-golban-a4585a121_20251214T103954Z.json", + "observed_on": "2025-12-14T10:39:54.123197+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.668934+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/mihaela-golban-a4585a121_20251214T103954Z.json" + ], + "modified_at": "2026-01-09T19:51:03.088603+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "mihaela-golban-a4585a121", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIHAELA-GOLBAN", + "new_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIHAELA-GOLBAN", + "changed_at": "2026-01-09T19:41:10.347598+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1970 is in 197X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 33 years" + }, + { + "step": 2, + "calculation": "2026 - 33 = 1993", + "result": "Estimated first job year: 1993", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1993 - 23 = 1970", + "result": "Estimated birth year: 1970", + "range": "1963-1977 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1963, + 1977 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:51:03.088562+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MINOUCHE-BOR.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MINOUCHE-BOR.json similarity index 66% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MINOUCHE-BOR.json rename to data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MINOUCHE-BOR.json index 42753bb7d1..3493649621 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MINOUCHE-BOR.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MINOUCHE-BOR.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MINOUCHE-BOR", + "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MINOUCHE-BOR", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "197X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "MINOUCHE", "BOR" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -185,7 +190,85 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/minouche-van-den-bor-a8727595_20251213T020000Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:58.793047+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "minouche-van-den-bor-a8727595" + "linkedin_slug": "minouche-van-den-bor-a8727595", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MINOUCHE-BOR", + "new_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MINOUCHE-BOR", + "changed_at": "2026-01-09T19:43:39.298375+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "edtf_meaning": "one of: 1960s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1971 is in 197X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "TMS Training & Management Services b.v.", + "title": "Office Manager en deeltijd trainer", + "date_range": "Aug 1994 - Aug 1999" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 1994 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "1994 - 23 = 1971", + "result": "Estimated birth year: 1971", + "range": "1966-1976 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1966, + 1976 + ], + "output": [ + "196X", + "197X" + ], + "edtf": "[196X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1971 spans decades 196X/197X", + "inferred_at": "2026-01-09T19:50:58.760993+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIRELLA-TASSEVA.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIRELLA-TASSEVA.json index c467b4a60e..3f0c52259c 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIRELLA-TASSEVA.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MIRELLA-TASSEVA.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mirella-tasseva-23a68b16_20251214T112001Z.json" ], - "modified_at": "2026-01-09T19:18:11.926853+00:00", + "modified_at": "2026-01-09T19:50:47.353290+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mirella-tasseva-23a68b16", @@ -180,7 +180,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:11.926593+00:00", + "inferred_at": "2026-01-09T19:50:47.352870+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MONIQUE-GOEDESTRUIJK.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MONIQUE-GOEDESTRUIJK.json index a6176a43d4..b1734aa89d 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MONIQUE-GOEDESTRUIJK.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_MONIQUE-GOEDESTRUIJK.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/monique-de-goede-struijk-3a3b7114a_20251214T112319Z.json" ], - "modified_at": "2026-01-09T19:18:13.488572+00:00", + "modified_at": "2026-01-09T19:50:54.532448+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "monique-de-goede-struijk-3a3b7114a", @@ -107,7 +107,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -156,7 +156,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.481419+00:00", + "inferred_at": "2026-01-09T19:50:54.526602+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NARGES-AZIZIAN.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NARGES-AZIZIAN.json index af14705472..cdcd70cd7f 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NARGES-AZIZIAN.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NARGES-AZIZIAN.json @@ -89,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/narges-azizian-8b10ab5b_20251214T103941Z.json" ], - "modified_at": "2026-01-09T19:18:15.311815+00:00", + "modified_at": "2026-01-09T19:51:08.512406+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "narges-azizian-8b10ab5b", @@ -116,7 +116,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.311805+00:00", + "inferred_at": "2026-01-09T19:51:08.512372+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NICOLE-WERINGH.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NICOLE-WERINGH.json index 07f7e7b2ce..2b1e7f9d10 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NICOLE-WERINGH.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_NICOLE-WERINGH.json @@ -142,7 +142,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicole-van-weringh_20251214T112423Z.json" ], - "modified_at": "2026-01-09T19:18:15.614583+00:00", + "modified_at": "2026-01-09T19:51:12.709560+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicole-van-weringh", @@ -169,7 +169,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -218,7 +218,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.603800+00:00", + "inferred_at": "2026-01-09T19:51:12.697505+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_OLAF-PETERS.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_OLAF-PETERS.json index 550d995f1a..82315320c8 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_OLAF-PETERS.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_OLAF-PETERS.json @@ -97,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/olaf-peters-6a6b925_20251214T110529Z.json" ], - "modified_at": "2026-01-09T19:18:15.736659+00:00", + "modified_at": "2026-01-09T19:51:14.173109+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "olaf-peters-6a6b925", @@ -124,7 +124,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.736648+00:00", + "inferred_at": "2026-01-09T19:51:14.173092+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_PETER-KONING.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_PETER-KONING.json index 5101a7e0fa..89f9a6aefb 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_PETER-KONING.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_PETER-KONING.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/peter-koning-2190a064_20251214T112340Z.json" ], - "modified_at": "2026-01-09T19:18:13.361862+00:00", + "modified_at": "2026-01-09T19:50:53.923287+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "peter-koning-2190a064", @@ -112,7 +112,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -161,7 +161,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.359888+00:00", + "inferred_at": "2026-01-09T19:50:53.920810+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RAMIRO-REMOR.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RAMIRO-REMOR.json index b48e66b870..d8fc3b50eb 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RAMIRO-REMOR.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RAMIRO-REMOR.json @@ -94,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ramiro-remor-a4392783_20251214T112246Z.json" ], - "modified_at": "2026-01-09T19:18:14.041833+00:00", + "modified_at": "2026-01-09T19:50:58.551882+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ramiro-remor-a4392783", @@ -121,7 +121,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.039945+00:00", + "inferred_at": "2026-01-09T19:50:58.539964+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RENATE-FLIER.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RENATE-FLIER.json index dd8bdecb00..475e7df166 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RENATE-FLIER.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RENATE-FLIER.json @@ -203,7 +203,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/renatevdflier_20251212T200000Z.json" ], - "modified_at": "2026-01-09T19:18:13.186926+00:00", + "modified_at": "2026-01-09T19:50:47.461091+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "renatevdflier", @@ -233,7 +233,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -274,7 +274,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.184993+00:00", + "inferred_at": "2026-01-09T19:50:47.458481+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RIK-WILLEMSE.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RIK-WILLEMSE.json index 59201bff7b..4b96e3f1d1 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RIK-WILLEMSE.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RIK-WILLEMSE.json @@ -88,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rik-willemse-579aa419_20251214T110729Z.json" ], - "modified_at": "2026-01-09T19:18:13.095854+00:00", + "modified_at": "2026-01-09T19:50:51.597794+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rik-willemse-579aa419", @@ -115,7 +115,7 @@ "primary_rationale": "1973 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1973 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.095844+00:00", + "inferred_at": "2026-01-09T19:50:51.597767+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROB-WILLIS.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROB-WILLIS.json new file mode 100644 index 0000000000..abb8942f5d --- /dev/null +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROB-WILLIS.json @@ -0,0 +1,153 @@ +{ + "ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROB-WILLIS", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "197X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ROB", + "WILLIS" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "195X" + ] + }, + "name": { + "full_name": "Rob Willis", + "display_name": "Rob Willis", + "name_romanized": null, + "name_tokens": [ + "ROB", + "WILLIS" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Rob Willis", + "linkedin_url": "https://www.linkedin.com/in/rob-willis-0a5a4559", + "headline": "Folklore and Social History Interviewer at National Library of Australia. Performance and radio production.", + "location": "New South Wales, Australia (AU)", + "connections": "132 connections • 134 followers", + "about": "Total Experience: 40 years and 1 month", + "experience": [], + "education": [], + "skills": [], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C4E03AQED8FDwjjqhSg/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1563926864871?e=2147483647&v=beta&t=S2VHHQTQGUpxD718gds2G0PWKWrM-dqc3Mpc4Q1MJhE" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/rob-willis-0a5a4559_20251214T103758Z.json", + "observed_on": "2025-12-14T10:37:58.196665+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.520414+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/rob-willis-0a5a4559_20251214T103758Z.json" + ], + "modified_at": "2026-01-09T19:50:53.016438+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "rob-willis-0a5a4559", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROB-WILLIS", + "new_ppid": "ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROB-WILLIS", + "changed_at": "2026-01-09T19:41:10.459477+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "195X", + "197X" + ], + "edtf": "[195X,197X]", + "edtf_meaning": "one of: 1950s or 1970s", + "precision": "decade_set", + "primary_value": "197X", + "primary_rationale": "1963 is in 197X, but range extends into 195X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 40 years" + }, + { + "step": 2, + "calculation": "2026 - 40 = 1986", + "result": "Estimated first job year: 1986", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1986 - 23 = 1963", + "result": "Estimated birth year: 1963", + "range": "1956-1970 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1956, + 1970 + ], + "output": [ + "195X", + "197X" + ], + "edtf": "[195X,197X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1963 spans decades 195X/197X", + "inferred_at": "2026-01-09T19:50:53.002861+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROELOF-KOOI.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROELOF-KOOI.json index 2e91fba94a..25c89a7ece 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROELOF-KOOI.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROELOF-KOOI.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roelofvanderkooi_20251214T110126Z.json" ], - "modified_at": "2026-01-09T19:18:13.155361+00:00", + "modified_at": "2026-01-09T19:50:52.971174+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "roelofvanderkooi", @@ -157,7 +157,7 @@ "primary_rationale": "1970 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1970 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.153354+00:00", + "inferred_at": "2026-01-09T19:50:52.968213+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RONALD-NIJS.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RONALD-NIJS.json index 7f13e8b8a0..dd7fc42c66 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RONALD-NIJS.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RONALD-NIJS.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ronald-de-nijs_20251214T120000Z.json" ], - "modified_at": "2026-01-09T19:18:15.843242+00:00", + "modified_at": "2026-01-09T19:51:14.715586+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ronald-de-nijs", @@ -165,7 +165,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.835999+00:00", + "inferred_at": "2026-01-09T19:51:14.707261+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROSEMARIE-VEENOEI.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROSEMARIE-VEENOEI.json index 7778bb075f..c6ff348928 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROSEMARIE-VEENOEI.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_ROSEMARIE-VEENOEI.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vanderveenoei_20251214T112435Z.json" ], - "modified_at": "2026-01-09T19:18:13.841146+00:00", + "modified_at": "2026-01-09T19:50:56.687061+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vanderveenoei", @@ -156,7 +156,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:13.831992+00:00", + "inferred_at": "2026-01-09T19:50:56.660829+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RUTGER-BRUIN.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RUTGER-BRUIN.json index f0cd2e6002..a908b84510 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RUTGER-BRUIN.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RUTGER-BRUIN.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rutger-de-bruin-48242413a_20251214T112950Z.json" ], - "modified_at": "2026-01-09T19:18:17.468365+00:00", + "modified_at": "2026-01-09T19:51:28.163905+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rutger-de-bruin-48242413a", @@ -107,7 +107,7 @@ "primary_rationale": "1976 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -156,7 +156,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1976 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.466374+00:00", + "inferred_at": "2026-01-09T19:51:28.161976+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RUUD-BANKRAS.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RUUD-BANKRAS.json index 6ae0924118..46895a4028 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RUUD-BANKRAS.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_RUUD-BANKRAS.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ruud-bankras-53201953_20251214T113153Z.json" ], - "modified_at": "2026-01-09T19:18:15.593874+00:00", + "modified_at": "2026-01-09T19:51:12.653414+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ruud-bankras-53201953", @@ -106,7 +106,7 @@ "primary_rationale": "1978 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1978 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.592045+00:00", + "inferred_at": "2026-01-09T19:51:12.650753+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SOMAYEH-HASHEMI.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SOMAYEH-HASHEMI.json index efb3148638..0345900bc0 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SOMAYEH-HASHEMI.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_SOMAYEH-HASHEMI.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/somayeh-hashemi-3555334b_20251214T103944Z.json" ], - "modified_at": "2026-01-09T19:18:13.301426+00:00", + "modified_at": "2026-01-09T19:50:53.839402+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "somayeh-hashemi-3555334b", @@ -107,7 +107,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -156,7 +156,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.301412+00:00", + "inferred_at": "2026-01-09T19:50:53.839346+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_STEVEN-HAM.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_STEVEN-HAM.json index b8f50aa03b..192497c22d 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_STEVEN-HAM.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_STEVEN-HAM.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/steven-ham-12810a71_20251214T112910Z.json" ], - "modified_at": "2026-01-09T19:18:16.690554+00:00", + "modified_at": "2026-01-09T19:51:21.517184+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "steven-ham-12810a71", @@ -149,7 +149,7 @@ "primary_rationale": "1974 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1974 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:16.686883+00:00", + "inferred_at": "2026-01-09T19:51:21.513547+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_URSULA-LENTING.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_URSULA-LENTING.json index 3581e71e6d..29c76703bd 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_URSULA-LENTING.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_URSULA-LENTING.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ursula-lenting-45b21281_20251214T112310Z.json" ], - "modified_at": "2026-01-09T19:18:14.822048+00:00", + "modified_at": "2026-01-09T19:51:03.245893+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ursula-lenting-45b21281", @@ -131,7 +131,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.815718+00:00", + "inferred_at": "2026-01-09T19:51:03.235671+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_VALENTINA-BRANKOVIC.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_VALENTINA-BRANKOVIC.json index 6f74bd8629..2ba28046ea 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_VALENTINA-BRANKOVIC.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_VALENTINA-BRANKOVIC.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/valentina-brankovic-a4b23821_20251214T103956Z.json" ], - "modified_at": "2026-01-09T19:18:15.682097+00:00", + "modified_at": "2026-01-09T19:51:13.398750+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "valentina-brankovic-a4b23821", @@ -148,7 +148,7 @@ "primary_rationale": "1972 is in 197X, but range extends into 196X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1972 spans decades 196X/197X", - "inferred_at": "2026-01-09T19:18:15.682061+00:00", + "inferred_at": "2026-01-09T19:51:13.398641+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_VESNA-ALEKSANDROVIC.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_VESNA-ALEKSANDROVIC.json index bcb1fd87bd..37cd3248ee 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_VESNA-ALEKSANDROVIC.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_VESNA-ALEKSANDROVIC.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vesna-aleksandrovic-60376b23_20251214T103801Z.json" ], - "modified_at": "2026-01-09T19:18:12.992502+00:00", + "modified_at": "2026-01-09T19:50:50.267530+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vesna-aleksandrovic-60376b23", @@ -134,7 +134,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.992484+00:00", + "inferred_at": "2026-01-09T19:50:50.267476+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_VLADAN-TRIJIC.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_VLADAN-TRIJIC.json index a87e5ddc2a..31dc5c7198 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_VLADAN-TRIJIC.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_VLADAN-TRIJIC.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vladan-trijic-51555657_20251214T103826Z.json" ], - "modified_at": "2026-01-09T19:18:15.676286+00:00", + "modified_at": "2026-01-09T19:51:13.393675+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vladan-trijic-51555657", @@ -106,7 +106,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.676276+00:00", + "inferred_at": "2026-01-09T19:51:13.393645+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WIJNAND-MARCHAL.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WIJNAND-MARCHAL.json index be347650a9..7702976925 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WIJNAND-MARCHAL.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WIJNAND-MARCHAL.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wijnand-marchal-86781b5_20251214T103036Z.json" ], - "modified_at": "2026-01-09T19:18:17.574772+00:00", + "modified_at": "2026-01-09T19:51:28.434528+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wijnand-marchal-86781b5", @@ -149,7 +149,7 @@ "primary_rationale": "1979 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1979 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.567480+00:00", + "inferred_at": "2026-01-09T19:51:28.432745+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WIM-OTTEN.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WIM-OTTEN.json index 6173db3209..568900a131 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WIM-OTTEN.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WIM-OTTEN.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wim-otten-4a48569a_20251214T110552Z.json" ], - "modified_at": "2026-01-09T19:18:14.087383+00:00", + "modified_at": "2026-01-09T19:50:58.574612+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wim-otten-4a48569a", @@ -106,7 +106,7 @@ "primary_rationale": "1975 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1975 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.087374+00:00", + "inferred_at": "2026-01-09T19:50:58.574603+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WOUTER-VALENTIJN.json b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WOUTER-VALENTIJN.json index eb9a97db42..f67e505844 100644 --- a/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WOUTER-VALENTIJN.json +++ b/data/person/ID_XX-XX-XXX_197X_XX-XX-XXX_XXXX_WOUTER-VALENTIJN.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wouter-valentijn-257683132_20251214T104035Z.json" ], - "modified_at": "2026-01-09T19:18:15.455549+00:00", + "modified_at": "2026-01-09T19:50:48.497965+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wouter-valentijn-257683132", @@ -135,7 +135,7 @@ "primary_rationale": "1977 is in 197X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1977 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.453540+00:00", + "inferred_at": "2026-01-09T19:50:48.495817+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_BADRA-KARUNARATHNA.json b/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_BADRA-KARUNARATHNA.json new file mode 100644 index 0000000000..22ab2a59a3 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_BADRA-KARUNARATHNA.json @@ -0,0 +1,248 @@ +{ + "ppid": "ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_BADRA-KARUNARATHNA", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "198X", + "last_location": "AU-01-CAN", + "last_date": "XXXX", + "name_tokens": [ + "BADRA", + "KARUNARATHNA" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Badra Karunarathna", + "display_name": "Badra Karunarathna", + "name_romanized": null, + "name_tokens": [ + "BADRA", + "KARUNARATHNA" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "score": 0.82, + "heritage_types": [ + "L" + ], + "rationale": "HIGH VALUE: Senior Librarian at National Library of Australia - the nation's largest reference library. Over 25 years of library experience. Holds AM (Member of the Order of Australia) - prestigious national honor typically awarded for distinguished service. JP (Justice of the Peace). Degree in Library and Information Management from University of Canberra. NLA is Australia's primary documentary heritage institution under National Library Act 1960." + }, + "affiliations": [ + { + "custodian_name": "National Library of Australia", + "custodian_slug": "national-library-of-australia", + "role_title": "Senior Librarian", + "heritage_relevant": true, + "heritage_type": "L", + "current": true, + "subdivision": { + "type": "department", + "name": "Unknown - Reader Services likely", + "extraction_source": "inferred" + } + } + ], + "profile_data": { + "name": "Badra Karunarathna", + "linkedin_url": "https://www.linkedin.com/in/badra-karunarathna-am-jp-1b834646", + "headline": "Senior Librarian at National Library of Australia", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "55 connections • 57 followers", + "about": "Over 25 years of Library experience and 15 years of teaching and administration… Total Experience: 30 years and 1 month", + "experience": [], + "education": [ + { + "institution": "at Rippon Girls College - Galle" + }, + { + "degree": "Library and Information Management", + "institution": "University of Canberra", + "notes": "Found via ZoomInfo" + } + ], + "skills": [ + "teaching", + "administration" + ], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C5603AQG4OJlLq3suJQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1517427793881?e=2147483647&v=beta&t=xHxpTJprYM8e6rKW1cAeqEtIlxqmvdO764ih7YJoIkk", + "honors": { + "AM": "Member of the Order of Australia", + "JP": "Justice of the Peace" + } + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/badra-karunarathna-am-jp-1b834646_20251214T103852Z.json", + "observed_on": "2025-12-14T10:38:52.736886+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.527958+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/badra-karunarathna-am-jp-1b834646_20251214T103852Z.json" + ], + "modified_at": "2026-01-09T19:51:04.015024+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "badra-karunarathna-am-jp-1b834646", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BADRA-KARUNARATHNA", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BADRA-KARUNARATHNA", + "changed_at": "2026-01-09T19:41:10.920690+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BADRA-KARUNARATHNA", + "new_ppid": "ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_BADRA-KARUNARATHNA", + "changed_at": "2026-01-09T19:51:04.015022+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "edtf_meaning": "one of: 1960s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1973 is in 198X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 30 years" + }, + { + "step": 2, + "calculation": "2026 - 30 = 1996", + "result": "Estimated first job year: 1996", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1996 - 23 = 1973", + "result": "Estimated birth year: 1973", + "range": "1966-1980 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1966, + 1980 + ], + "output": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1973 spans decades 196X/198X", + "inferred_at": "2026-01-09T19:51:04.008951+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:04.015013+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CARMEL-MCINERNY.json b/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_CARMEL-MCINERNY.json similarity index 68% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CARMEL-MCINERNY.json rename to data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_CARMEL-MCINERNY.json index cda8f44029..cbb19b99ff 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CARMEL-MCINERNY.json +++ b/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_CARMEL-MCINERNY.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CARMEL-MCINERNY", + "ppid": "ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_CARMEL-MCINERNY", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "CARMEL", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Carmel McInerny", @@ -87,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carmel-mcinerny-a8b1824_20251214T103856Z.json" ], - "modified_at": "2026-01-09T19:18:14.250349+00:00", + "modified_at": "2026-01-09T19:50:58.973082+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carmel-mcinerny-a8b1824", @@ -100,6 +101,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CARMEL-MCINERNY", + "new_ppid": "ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_CARMEL-MCINERNY", + "changed_at": "2026-01-09T19:50:58.973079+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -114,7 +125,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +174,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.250336+00:00", + "inferred_at": "2026-01-09T19:50:58.964228+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:58.973059+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_GREGORY-DOWNTON.json b/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_GREGORY-DOWNTON.json new file mode 100644 index 0000000000..d37eb23f64 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_GREGORY-DOWNTON.json @@ -0,0 +1,170 @@ +{ + "ppid": "ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_GREGORY-DOWNTON", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "198X", + "last_location": "AU-01-CAN", + "last_date": "XXXX", + "name_tokens": [ + "GREGORY", + "DOWNTON" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Gregory J Downton", + "display_name": "Gregory J Downton", + "name_romanized": null, + "name_tokens": [ + "GREGORY", + "DOWNTON" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "A" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Gregory J Downton", + "linkedin_url": "https://www.linkedin.com/in/gregory-j-downton-30a657158", + "headline": "Audio Engineer/DigArchivist/Guitarist(+tech)/Drummer/Producer/Tech nerd", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "78 connections • 1 followers", + "about": "Total Experience: 23 years and 2 months", + "experience": [], + "education": [], + "skills": [ + "audio", + "restoration", + "mastering", + "production", + "outsourcing" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/gregory-j-downton-30a657158_20251214T103932Z.json", + "observed_on": "2025-12-14T10:39:32.039389+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.665224+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/gregory-j-downton-30a657158_20251214T103932Z.json" + ], + "modified_at": "2026-01-09T19:50:53.836683+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "gregory-j-downton-30a657158", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GREGORY-DOWNTON", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_GREGORY-DOWNTON", + "changed_at": "2026-01-09T19:41:10.624113+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_GREGORY-DOWNTON", + "new_ppid": "ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_GREGORY-DOWNTON", + "changed_at": "2026-01-09T19:47:59.476850+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1980 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 23 years" + }, + { + "step": 2, + "calculation": "2026 - 23 = 2003", + "result": "Estimated first job year: 2003", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2003 - 23 = 1980", + "result": "Estimated birth year: 1980", + "range": "1973-1987 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1973, + 1987 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:50:53.836673+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LONI-HOFFMANN.json b/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_LONI-HOFFMANN.json similarity index 73% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LONI-HOFFMANN.json rename to data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_LONI-HOFFMANN.json index 8a30c2de3b..63f3bb8f40 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LONI-HOFFMANN.json +++ b/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_LONI-HOFFMANN.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LONI-HOFFMANN", + "ppid": "ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_LONI-HOFFMANN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "LONI", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Loni Hoffmann", @@ -99,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/loni-hoffmann-623350aa_20251214T103908Z.json" ], - "modified_at": "2026-01-09T19:18:13.552316+00:00", + "modified_at": "2026-01-09T19:50:54.628899+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "loni-hoffmann-623350aa", @@ -112,6 +113,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LONI-HOFFMANN", + "new_ppid": "ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_LONI-HOFFMANN", + "changed_at": "2026-01-09T19:50:54.628896+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -126,7 +137,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +186,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.552295+00:00", + "inferred_at": "2026-01-09T19:50:54.608483+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:54.628883+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SNEZANA-MIHAJILOVIC.json b/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_SNEZANA-MIHAJILOVIC.json similarity index 67% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SNEZANA-MIHAJILOVIC.json rename to data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_SNEZANA-MIHAJILOVIC.json index 55069e5d29..9ed92ada51 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SNEZANA-MIHAJILOVIC.json +++ b/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_SNEZANA-MIHAJILOVIC.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SNEZANA-MIHAJILOVIC", + "ppid": "ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_SNEZANA-MIHAJILOVIC", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "SNEZANA", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Snezana Mihajilovic", @@ -81,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/snezana-mihajilovic-01b2b17_20251214T103901Z.json" ], - "modified_at": "2026-01-09T19:18:18.308671+00:00", + "modified_at": "2026-01-09T19:51:29.267542+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "snezana-mihajilovic-01b2b17", @@ -94,6 +95,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SNEZANA-MIHAJILOVIC", + "new_ppid": "ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_SNEZANA-MIHAJILOVIC", + "changed_at": "2026-01-09T19:51:29.267540+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -108,7 +119,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +168,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.308656+00:00", + "inferred_at": "2026-01-09T19:51:29.262702+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:29.267535+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIEKE-ATIKAH.json b/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_TIEKE-ATIKAH.json similarity index 68% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIEKE-ATIKAH.json rename to data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_TIEKE-ATIKAH.json index fa929ef55c..6d727dc374 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIEKE-ATIKAH.json +++ b/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_TIEKE-ATIKAH.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIEKE-ATIKAH", + "ppid": "ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_TIEKE-ATIKAH", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "TIEKE", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Tieke Atikah", @@ -89,7 +90,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tieke-atikah-a2076234_20251214T103910Z.json" ], - "modified_at": "2026-01-09T19:18:16.175278+00:00", + "modified_at": "2026-01-09T19:51:18.241490+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tieke-atikah-a2076234", @@ -102,6 +103,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIEKE-ATIKAH", + "new_ppid": "ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_TIEKE-ATIKAH", + "changed_at": "2026-01-09T19:51:18.241487+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -116,7 +127,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +176,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.175265+00:00", + "inferred_at": "2026-01-09T19:51:18.192779+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:18.241469+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_WAN-WONG.json b/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_WAN-WONG.json similarity index 70% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_WAN-WONG.json rename to data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_WAN-WONG.json index 193667b8d6..e0e90d1b80 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_WAN-WONG.json +++ b/data/person/ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_WAN-WONG.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_WAN-WONG", + "ppid": "ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_WAN-WONG", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "WAN", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Wan Wong", @@ -93,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wan-wong-86864466_20251214T103914Z.json" ], - "modified_at": "2026-01-09T19:18:17.562078+00:00", + "modified_at": "2026-01-09T19:51:28.414306+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wan-wong-86864466", @@ -106,6 +107,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_WAN-WONG", + "new_ppid": "ID_XX-XX-XXX_198X_AU-01-CAN_XXXX_WAN-WONG", + "changed_at": "2026-01-09T19:51:28.414304+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -120,7 +131,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +180,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.562057+00:00", + "inferred_at": "2026-01-09T19:51:28.407468+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:28.414297+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_BE-VL-BAS_XXXX_TOM-COBBAERT.json b/data/person/ID_XX-XX-XXX_198X_BE-VL-BAS_XXXX_TOM-COBBAERT.json similarity index 77% rename from data/person/ID_XX-XX-XXX_XXXX_BE-VL-BAS_XXXX_TOM-COBBAERT.json rename to data/person/ID_XX-XX-XXX_198X_BE-VL-BAS_XXXX_TOM-COBBAERT.json index 7f7f77e1a9..891c575a3f 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_BE-VL-BAS_XXXX_TOM-COBBAERT.json +++ b/data/person/ID_XX-XX-XXX_198X_BE-VL-BAS_XXXX_TOM-COBBAERT.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_BE-VL-BAS_XXXX_TOM-COBBAERT", + "ppid": "ID_XX-XX-XXX_198X_BE-VL-BAS_XXXX_TOM-COBBAERT", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "BE-VL-BAS", "last_date": "XXXX", "name_tokens": [ "TOM", "COBBAERT" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] }, "name": { "full_name": "Tom Cobbaert", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -213,63 +218,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tomcobbaert_20251214T104151Z.json" ], - "modified_at": "2026-01-09T17:43:08.690975+00:00", + "modified_at": "2026-01-09T19:51:13.527983+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tomcobbaert", - "inferred_current_settlement": { - "value": "Bassevelde", - "formatted": "BE-VL-BAS", - "country_code": "BE", - "region_code": "VL", - "settlement_code": "BAS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Bassevelde, Flemish Region, Belgium" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Bassevelde, Flemish Region, Belgium", - "result": { - "geonames_id": 2802596, - "geonames_name": "Bassevelde", - "admin1_code": "VLG", - "admin1_name": "Flanders", - "feature_code": "PPL", - "latitude": 51.23103, - "longitude": 3.67798 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "BE-VL-BAS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2802596, - "geonames_name": "Bassevelde", - "admin1_code": "VLG", - "admin1_name": "Flanders", - "feature_code": "PPL", - "latitude": 51.23103, - "longitude": 3.67798 - }, - "inferred_at": "2026-01-09T17:43:08.690969+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TOM-COBBAERT", @@ -279,6 +231,80 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_BE-VL-BAS_XXXX_TOM-COBBAERT", + "new_ppid": "ID_XX-XX-XXX_198X_BE-VL-BAS_XXXX_TOM-COBBAERT", + "changed_at": "2026-01-09T19:43:40.434029+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1980 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Archiefforum Nederland en Vlaanderen", + "title": "Volunteer Editor", + "date_range": "2003 - 2011" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2003 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2003 - 23 = 1980", + "result": "Estimated birth year: 1980", + "range": "1975-1985 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1975, + 1985 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:13.498949+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_YESHI-CHEN.json b/data/person/ID_XX-XX-XXX_198X_CN-14-CHI_XXXX_YESHI-CHEN.json similarity index 77% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_YESHI-CHEN.json rename to data/person/ID_XX-XX-XXX_198X_CN-14-CHI_XXXX_YESHI-CHEN.json index d63e643a99..4fb68f7cca 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_YESHI-CHEN.json +++ b/data/person/ID_XX-XX-XXX_198X_CN-14-CHI_XXXX_YESHI-CHEN.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_YESHI-CHEN", + "ppid": "ID_XX-XX-XXX_198X_CN-14-CHI_XXXX_YESHI-CHEN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "CN-14-CHI", "last_date": "XXXX", "name_tokens": [ "YESHI", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Yeshi Chen", @@ -122,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yeshi-chen-a9a1ba2a_20251214T103744Z.json" ], - "modified_at": "2026-01-09T19:18:13.073840+00:00", + "modified_at": "2026-01-09T19:51:34.110006+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yeshi-chen-a9a1ba2a", @@ -144,6 +145,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_YESHI-CHEN", + "new_ppid": "ID_XX-XX-XXX_198X_CN-14-CHI_XXXX_YESHI-CHEN", + "changed_at": "2026-01-09T19:51:34.109989+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -158,7 +169,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +218,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.073802+00:00", + "inferred_at": "2026-01-09T19:51:31.860987+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Chinang", + "formatted": "CN-14-CHI", + "country_code": "CN", + "region_code": "14", + "settlement_code": "CHI", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "China (CN)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "China (CN)", + "result": { + "geonames_id": 6547379, + "geonames_name": "Chinang", + "admin1_code": "14", + "admin1_name": "Tibet", + "feature_code": "PPL", + "latitude": 28.95446, + "longitude": 91.92801 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "CN-14-CHI" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 6547379, + "geonames_name": "Chinang", + "admin1_code": "14", + "admin1_name": "Tibet", + "feature_code": "PPL", + "latitude": 28.95446, + "longitude": 91.92801 + }, + "inferred_at": "2026-01-09T19:51:34.109918+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICHAL-FRANKL.json b/data/person/ID_XX-XX-XXX_198X_CZ-52-PRA_XXXX_MICHAL-FRANKL.json similarity index 89% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICHAL-FRANKL.json rename to data/person/ID_XX-XX-XXX_198X_CZ-52-PRA_XXXX_MICHAL-FRANKL.json index 9eeb636a3e..32dd103cd1 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICHAL-FRANKL.json +++ b/data/person/ID_XX-XX-XXX_198X_CZ-52-PRA_XXXX_MICHAL-FRANKL.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICHAL-FRANKL", + "ppid": "ID_XX-XX-XXX_198X_CZ-52-PRA_XXXX_MICHAL-FRANKL", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "CZ-52-PRA", "last_date": "XXXX", "name_tokens": [ "MICHAL", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Michal Frankl", @@ -104,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michalfrankl_20251214T113121Z.json" ], - "modified_at": "2026-01-09T19:18:12.102386+00:00", + "modified_at": "2026-01-09T19:51:17.899232+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michalfrankl", @@ -117,6 +118,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICHAL-FRANKL", + "new_ppid": "ID_XX-XX-XXX_198X_CZ-52-PRA_XXXX_MICHAL-FRANKL", + "changed_at": "2026-01-09T19:47:59.459018+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -131,7 +142,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +191,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.102350+00:00", + "inferred_at": "2026-01-09T19:51:17.899114+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_DE-07-RUH_XXXX_JOHAN-EVERS.json b/data/person/ID_XX-XX-XXX_198X_DE-07-RUH_XXXX_JOHAN-EVERS.json index 94aa6140bd..d5a9fcd1ce 100644 --- a/data/person/ID_XX-XX-XXX_198X_DE-07-RUH_XXXX_JOHAN-EVERS.json +++ b/data/person/ID_XX-XX-XXX_198X_DE-07-RUH_XXXX_JOHAN-EVERS.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/johan-evers-7821814a_20251214T110743Z.json" ], - "modified_at": "2026-01-09T19:18:15.512789+00:00", + "modified_at": "2026-01-09T19:51:11.272772+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "johan-evers-7821814a", @@ -108,7 +108,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.512783+00:00", + "inferred_at": "2026-01-09T19:51:11.272762+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HAVIZ-NUGROHO.json b/data/person/ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_HAVIZ-NUGROHO.json similarity index 71% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HAVIZ-NUGROHO.json rename to data/person/ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_HAVIZ-NUGROHO.json index f37f3ccfe9..e7c7666362 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HAVIZ-NUGROHO.json +++ b/data/person/ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_HAVIZ-NUGROHO.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HAVIZ-NUGROHO", + "ppid": "ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_HAVIZ-NUGROHO", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "HAVIZ", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Haviz M Nugroho", @@ -96,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/haviz-m-nugroho-36073138_20251214T112022Z.json" ], - "modified_at": "2026-01-09T19:18:16.545291+00:00", + "modified_at": "2026-01-09T19:51:07.153795+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "haviz-m-nugroho-36073138", @@ -118,6 +119,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HAVIZ-NUGROHO", + "new_ppid": "ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_HAVIZ-NUGROHO", + "changed_at": "2026-01-09T19:51:07.153793+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -132,7 +143,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +192,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.545261+00:00", + "inferred_at": "2026-01-09T19:51:07.044213+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:07.153777+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RADI-MANGGALA.json b/data/person/ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_RADI-MANGGALA.json similarity index 74% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RADI-MANGGALA.json rename to data/person/ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_RADI-MANGGALA.json index 51d809c340..bc5e74d81f 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RADI-MANGGALA.json +++ b/data/person/ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_RADI-MANGGALA.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RADI-MANGGALA", + "ppid": "ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_RADI-MANGGALA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "RADI", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Radi Manggala", @@ -122,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/radi-manggala-4429b647_20251214T111957Z.json" ], - "modified_at": "2026-01-09T19:18:17.407987+00:00", + "modified_at": "2026-01-09T19:51:27.903385+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "radi-manggala-4429b647", @@ -135,6 +136,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RADI-MANGGALA", + "new_ppid": "ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_RADI-MANGGALA", + "changed_at": "2026-01-09T19:51:27.903376+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -149,7 +160,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +209,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.407949+00:00", + "inferred_at": "2026-01-09T19:51:27.553464+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:27.903361+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENDI-RUSGIAN.json b/data/person/ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_RENDI-RUSGIAN.json similarity index 77% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENDI-RUSGIAN.json rename to data/person/ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_RENDI-RUSGIAN.json index b6bad90897..44c96c35f9 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENDI-RUSGIAN.json +++ b/data/person/ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_RENDI-RUSGIAN.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENDI-RUSGIAN", + "ppid": "ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_RENDI-RUSGIAN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "RENDI", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Rendi Rusgian", @@ -148,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rendi-rusgian-86844985_20251214T111930Z.json" ], - "modified_at": "2026-01-09T19:18:13.645923+00:00", + "modified_at": "2026-01-09T19:50:55.351035+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rendi-rusgian-86844985", @@ -161,6 +162,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENDI-RUSGIAN", + "new_ppid": "ID_XX-XX-XXX_198X_ID-04-JAK_XXXX_RENDI-RUSGIAN", + "changed_at": "2026-01-09T19:50:55.351030+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -175,7 +186,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -224,7 +235,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.645870+00:00", + "inferred_at": "2026-01-09T19:50:55.279337+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:55.350993+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUDY-SANTOSO.json b/data/person/ID_XX-XX-XXX_198X_ID-30-BAN_XXXX_RUDY-SANTOSO.json similarity index 69% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUDY-SANTOSO.json rename to data/person/ID_XX-XX-XXX_198X_ID-30-BAN_XXXX_RUDY-SANTOSO.json index 08589138a2..2a858e484b 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUDY-SANTOSO.json +++ b/data/person/ID_XX-XX-XXX_198X_ID-30-BAN_XXXX_RUDY-SANTOSO.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUDY-SANTOSO", + "ppid": "ID_XX-XX-XXX_198X_ID-30-BAN_XXXX_RUDY-SANTOSO", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "ID-30-BAN", "last_date": "XXXX", "name_tokens": [ "RUDY", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "197X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Rudy Santoso", @@ -80,7 +81,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rudy-santoso-bb609ab_20251214T103854Z.json" ], - "modified_at": "2026-01-09T19:18:15.551706+00:00", + "modified_at": "2026-01-09T19:51:12.091417+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rudy-santoso-bb609ab", @@ -93,6 +94,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUDY-SANTOSO", + "new_ppid": "ID_XX-XX-XXX_198X_ID-30-BAN_XXXX_RUDY-SANTOSO", + "changed_at": "2026-01-09T19:51:12.091414+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -107,7 +118,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -156,7 +167,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.551692+00:00", + "inferred_at": "2026-01-09T19:51:12.038754+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Bandung", + "formatted": "ID-30-BAN", + "country_code": "ID", + "region_code": "30", + "settlement_code": "BAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Bandung, West Java, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Bandung, West Java, Indonesia (ID)", + "result": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-30-BAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + }, + "inferred_at": "2026-01-09T19:51:12.091394+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DESSY-WIDOWATI.json b/data/person/ID_XX-XX-XXX_198X_ID-33-BAN_XXXX_DESSY-WIDOWATI.json similarity index 69% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DESSY-WIDOWATI.json rename to data/person/ID_XX-XX-XXX_198X_ID-33-BAN_XXXX_DESSY-WIDOWATI.json index 8b70fdee1d..2382ea5553 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DESSY-WIDOWATI.json +++ b/data/person/ID_XX-XX-XXX_198X_ID-33-BAN_XXXX_DESSY-WIDOWATI.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DESSY-WIDOWATI", + "ppid": "ID_XX-XX-XXX_198X_ID-33-BAN_XXXX_DESSY-WIDOWATI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "198X", - "last_location": "XX-XX-XXX", + "last_location": "ID-33-BAN", "last_date": "XXXX", "name_tokens": [ "DESSY", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Dessy Widowati", @@ -79,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dessy-widowati-09723177_20251214T112024Z.json" ], - "modified_at": "2026-01-09T19:18:16.087659+00:00", + "modified_at": "2026-01-09T19:51:17.368702+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dessy-widowati-09723177", @@ -92,6 +93,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DESSY-WIDOWATI", + "new_ppid": "ID_XX-XX-XXX_198X_ID-33-BAN_XXXX_DESSY-WIDOWATI", + "changed_at": "2026-01-09T19:51:17.368687+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -106,7 +117,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +166,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.087634+00:00", + "inferred_at": "2026-01-09T19:51:16.877857+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Banten", + "formatted": "ID-33-BAN", + "country_code": "ID", + "region_code": "33", + "settlement_code": "BAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Banten, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Banten, Indonesia (ID)", + "result": { + "geonames_id": 1650134, + "geonames_name": "Banten", + "admin1_code": "33", + "admin1_name": "Banten", + "feature_code": "PPL", + "latitude": -6.0307, + "longitude": 106.164 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-33-BAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1650134, + "geonames_name": "Banten", + "admin1_code": "33", + "admin1_name": "Banten", + "feature_code": "PPL", + "latitude": -6.0307, + "longitude": 106.164 + }, + "inferred_at": "2026-01-09T19:51:17.368619+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-DR-KOE_XXXX_RUURD-DONKELAAR.json b/data/person/ID_XX-XX-XXX_198X_NL-DR-KOE_XXXX_RUURD-DONKELAAR.json index 0398307b1c..7d0deadab8 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-DR-KOE_XXXX_RUURD-DONKELAAR.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-DR-KOE_XXXX_RUURD-DONKELAAR.json @@ -172,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ruurd-van-donkelaar-478b965_20251214T110759Z.json" ], - "modified_at": "2026-01-09T19:18:15.583238+00:00", + "modified_at": "2026-01-09T19:51:12.187748+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ruurd-van-donkelaar-478b965", @@ -200,7 +200,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -249,7 +249,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.583215+00:00", + "inferred_at": "2026-01-09T19:51:12.187687+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-DR-PEI_XXXX_ARMANDA-PIEPER.json b/data/person/ID_XX-XX-XXX_198X_NL-DR-PEI_XXXX_ARMANDA-PIEPER.json index b6cf1ffcac..15b5f4cdcf 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-DR-PEI_XXXX_ARMANDA-PIEPER.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-DR-PEI_XXXX_ARMANDA-PIEPER.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/armanda-pieper-5a854568_20251214T112332Z.json" ], - "modified_at": "2026-01-09T19:18:16.716473+00:00", + "modified_at": "2026-01-09T19:51:21.542765+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "armanda-pieper-5a854568", @@ -108,7 +108,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.716466+00:00", + "inferred_at": "2026-01-09T19:51:21.542759+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-FL-AS_XXXX_MARLEEN-HAAN.json b/data/person/ID_XX-XX-XXX_198X_NL-FL-AS_XXXX_MARLEEN-HAAN.json index 13d7e68098..75f8e6e505 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-FL-AS_XXXX_MARLEEN-HAAN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-FL-AS_XXXX_MARLEEN-HAAN.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marleen-de-haan-63905a92_20251214T113220Z.json" ], - "modified_at": "2026-01-09T19:18:12.984109+00:00", + "modified_at": "2026-01-09T19:50:50.141935+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marleen-de-haan-63905a92", @@ -108,7 +108,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.984102+00:00", + "inferred_at": "2026-01-09T19:50:50.141916+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-FL-AS_XXXX_MAUREEN-CHANNOO.json b/data/person/ID_XX-XX-XXX_198X_NL-FL-AS_XXXX_MAUREEN-CHANNOO.json similarity index 74% rename from data/person/ID_XX-XX-XXX_XXXX_NL-FL-AS_XXXX_MAUREEN-CHANNOO.json rename to data/person/ID_XX-XX-XXX_198X_NL-FL-AS_XXXX_MAUREEN-CHANNOO.json index 20ad4c95ee..af2e16b198 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-FL-AS_XXXX_MAUREEN-CHANNOO.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-FL-AS_XXXX_MAUREEN-CHANNOO.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-FL-AS_XXXX_MAUREEN-CHANNOO", + "ppid": "ID_XX-XX-XXX_198X_NL-FL-AS_XXXX_MAUREEN-CHANNOO", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "NL-FL-AS", "last_date": "XXXX", "name_tokens": [ "MAUREEN", "CHANNOO" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] }, "name": { "full_name": "Maureen Channoo", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -202,63 +207,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maureen-channoo-a88a349_20251212T230000Z.json" ], - "modified_at": "2026-01-09T17:42:59.000662+00:00", + "modified_at": "2026-01-09T19:51:11.806096+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maureen-channoo-a88a349", - "inferred_current_settlement": { - "value": "Almere Stad", - "formatted": "NL-FL-AS", - "country_code": "NL", - "region_code": "FL", - "settlement_code": "AS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Almere, Flevoland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Almere, Flevoland, Netherlands", - "result": { - "geonames_id": 2759879, - "geonames_name": "Almere Stad", - "admin1_code": "16", - "admin1_name": "Flevoland", - "feature_code": "PPL", - "latitude": 52.37025, - "longitude": 5.21413 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-FL-AS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759879, - "geonames_name": "Almere Stad", - "admin1_code": "16", - "admin1_name": "Flevoland", - "feature_code": "PPL", - "latitude": 52.37025, - "longitude": 5.21413 - }, - "inferred_at": "2026-01-09T17:42:59.000601+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MAUREEN-CHANNOO", @@ -268,6 +220,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-FL-AS_XXXX_MAUREEN-CHANNOO", + "new_ppid": "ID_XX-XX-XXX_198X_NL-FL-AS_XXXX_MAUREEN-CHANNOO", + "changed_at": "2026-01-09T19:43:41.041678+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1982 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "21 years and 11 months" + }, + { + "step": 2, + "calculation": "2026 - 21 = 2005", + "result": "Estimated first job year: 2005", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2005 - 23 = 1982", + "result": "Estimated birth year: 1982", + "range": "1975-1989 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1975, + 1989 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:11.806079+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_ALDERT-MAK.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_ALDERT-MAK.json index 0d3818317f..6a9d5ce2d4 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_ALDERT-MAK.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_ALDERT-MAK.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aldert-mak-79108223_20251214T110736Z.json" ], - "modified_at": "2026-01-09T19:18:18.457152+00:00", + "modified_at": "2026-01-09T19:51:29.328284+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aldert-mak-79108223", @@ -137,7 +137,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.457100+00:00", + "inferred_at": "2026-01-09T19:51:29.328231+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_EVELYNE-SMIT.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_EVELYNE-SMIT.json index 97585f31e5..233bea1053 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_EVELYNE-SMIT.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_EVELYNE-SMIT.json @@ -88,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/evelyne-smit-76aa5a45_20251214T110733Z.json" ], - "modified_at": "2026-01-09T19:18:13.033121+00:00", + "modified_at": "2026-01-09T19:50:50.618777+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "evelyne-smit-76aa5a45", @@ -110,7 +110,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -151,7 +151,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.033103+00:00", + "inferred_at": "2026-01-09T19:50:50.618752+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_LYA-GILS.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_LYA-GILS.json index 2806c0785f..e408e9cada 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_LYA-GILS.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_LYA-GILS.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lya-paap-van-gils-a3a4b888_20251214T103410Z.json" ], - "modified_at": "2026-01-09T19:18:15.179909+00:00", + "modified_at": "2026-01-09T19:51:06.997242+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lya-paap-van-gils-a3a4b888", @@ -113,7 +113,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.179901+00:00", + "inferred_at": "2026-01-09T19:51:06.997232+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_MARIJKE-ZWIERS.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_MARIJKE-ZWIERS.json index 527147ad45..92caf1f7ac 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_MARIJKE-ZWIERS.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-APE_XXXX_MARIJKE-ZWIERS.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marijke-zwiers-29a0a22a_20251214T110722Z.json" ], - "modified_at": "2026-01-09T19:18:18.232678+00:00", + "modified_at": "2026-01-09T19:51:29.230528+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marijke-zwiers-29a0a22a", @@ -120,7 +120,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.232642+00:00", + "inferred_at": "2026-01-09T19:51:29.230495+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-ARN_XXXX_DAAN-BRUIJN.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-ARN_XXXX_DAAN-BRUIJN.json index 3ec93b08fe..6209327a71 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-ARN_XXXX_DAAN-BRUIJN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-ARN_XXXX_DAAN-BRUIJN.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/daan-de-bruijn-18517721_20251214T110626Z.json" ], - "modified_at": "2026-01-09T19:18:14.770488+00:00", + "modified_at": "2026-01-09T19:51:04.057031+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "daan-de-bruijn-18517721", @@ -155,7 +155,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.770478+00:00", + "inferred_at": "2026-01-09T19:51:04.057020+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-ARN_XXXX_MARVIN-WILLEMSEN.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-ARN_XXXX_MARVIN-WILLEMSEN.json index 81c1bdc315..87bbee7a43 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-ARN_XXXX_MARVIN-WILLEMSEN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-ARN_XXXX_MARVIN-WILLEMSEN.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marvin-willemsen-424a05163_20251214T110700Z.json" ], - "modified_at": "2026-01-09T19:18:16.397591+00:00", + "modified_at": "2026-01-09T19:50:56.722052+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marvin-willemsen-424a05163", @@ -116,7 +116,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.397568+00:00", + "inferred_at": "2026-01-09T19:50:56.722006+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-ARN_XXXX_VOORBERGEN-DIA.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-ARN_XXXX_VOORBERGEN-DIA.json index 02dfe4c9c3..1594441b4d 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-ARN_XXXX_VOORBERGEN-DIA.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-ARN_XXXX_VOORBERGEN-DIA.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/voorbergen-dia-45b644130_20251214T110601Z.json" ], - "modified_at": "2026-01-09T19:18:15.374614+00:00", + "modified_at": "2026-01-09T19:51:08.623782+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "voorbergen-dia-45b644130", @@ -127,7 +127,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.374602+00:00", + "inferred_at": "2026-01-09T19:51:08.623753+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-CUL_XXXX_DJOKE-DAM.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-CUL_XXXX_DJOKE-DAM.json index 787e8b77e3..0300215fb0 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-CUL_XXXX_DJOKE-DAM.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-CUL_XXXX_DJOKE-DAM.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/djoke-dam-9321a1139_20251214T113323Z.json" ], - "modified_at": "2026-01-09T19:18:14.644678+00:00", + "modified_at": "2026-01-09T19:51:03.217087+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "djoke-dam-9321a1139", @@ -109,7 +109,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.644669+00:00", + "inferred_at": "2026-01-09T19:51:03.217074+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-DOE_XXXX_WENDY-KLAVER.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-DOE_XXXX_WENDY-KLAVER.json index 567502b9d5..76473e1113 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-DOE_XXXX_WENDY-KLAVER.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-DOE_XXXX_WENDY-KLAVER.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wendy-klaver-376887150_20251214T113111Z.json" ], - "modified_at": "2026-01-09T19:18:15.214654+00:00", + "modified_at": "2026-01-09T19:51:07.018629+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wendy-klaver-376887150", @@ -113,7 +113,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.214646+00:00", + "inferred_at": "2026-01-09T19:51:07.018620+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-DUI_XXXX_BERT-SMITS.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-DUI_XXXX_BERT-SMITS.json index 8c8f8cfd7d..ce8be2c394 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-DUI_XXXX_BERT-SMITS.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-DUI_XXXX_BERT-SMITS.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bert-smits-0057b886_20251214T110607Z.json" ], - "modified_at": "2026-01-09T19:18:15.947724+00:00", + "modified_at": "2026-01-09T19:51:15.189971+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bert-smits-0057b886", @@ -119,7 +119,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.947710+00:00", + "inferred_at": "2026-01-09T19:51:15.189941+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-EIB_XXXX_DIRKJAN-HEINEN.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-EIB_XXXX_DIRKJAN-HEINEN.json index a397580e00..e367252092 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-EIB_XXXX_DIRKJAN-HEINEN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-EIB_XXXX_DIRKJAN-HEINEN.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dirkjanheinen_20251214T104018Z.json" ], - "modified_at": "2026-01-09T19:18:17.878454+00:00", + "modified_at": "2026-01-09T19:51:28.835132+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dirkjanheinen", @@ -147,7 +147,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.878393+00:00", + "inferred_at": "2026-01-09T19:51:28.835014+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-VEL_XXXX_MARIAN-WISSENBURG.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-VEL_XXXX_MARIAN-WISSENBURG.json similarity index 52% rename from data/person/ID_XX-XX-XXX_XXXX_NL-GE-VEL_XXXX_MARIAN-WISSENBURG.json rename to data/person/ID_XX-XX-XXX_198X_NL-GE-VEL_XXXX_MARIAN-WISSENBURG.json index ea68570366..d771714b60 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-VEL_XXXX_MARIAN-WISSENBURG.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-VEL_XXXX_MARIAN-WISSENBURG.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-GE-VEL_XXXX_MARIAN-WISSENBURG", + "ppid": "ID_XX-XX-XXX_198X_NL-GE-VEL_XXXX_MARIAN-WISSENBURG", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "NL-GE-VEL", "last_date": "XXXX", "name_tokens": [ "MARIAN", "WISSENBURG" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] }, "name": { "full_name": "Marian Wissenburg", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -77,63 +82,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marian-wissenburg-436091126_20251214T110708Z.json" ], - "modified_at": "2026-01-09T17:42:54.647710+00:00", + "modified_at": "2026-01-09T19:50:56.565247+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marian-wissenburg-436091126", - "inferred_current_settlement": { - "value": "Velp", - "formatted": "NL-GE-VEL", - "country_code": "NL", - "region_code": "GE", - "settlement_code": "VEL", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Velp, North Brabant, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Velp, North Brabant, Netherlands (NL)", - "result": { - "geonames_id": 2745677, - "geonames_name": "Velp", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPL", - "latitude": 51.995, - "longitude": 5.97361 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-GE-VEL" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2745677, - "geonames_name": "Velp", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPL", - "latitude": 51.995, - "longitude": 5.97361 - }, - "inferred_at": "2026-01-09T17:42:54.647703+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARIAN-WISSENBURG", @@ -143,6 +95,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-VEL_XXXX_MARIAN-WISSENBURG", + "new_ppid": "ID_XX-XX-XXX_198X_NL-GE-VEL_XXXX_MARIAN-WISSENBURG", + "changed_at": "2026-01-09T19:41:09.737301+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1981 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 22 years" + }, + { + "step": 2, + "calculation": "2026 - 22 = 2004", + "result": "Estimated first job year: 2004", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2004 - 23 = 1981", + "result": "Estimated birth year: 1981", + "range": "1974-1988 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1974, + 1988 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:50:56.565236+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-WAG_XXXX_MARJOLEIN-SANDERMAN.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-WAG_XXXX_MARJOLEIN-SANDERMAN.json index 98413e61aa..5485b69bc1 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-WAG_XXXX_MARJOLEIN-SANDERMAN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-WAG_XXXX_MARJOLEIN-SANDERMAN.json @@ -213,7 +213,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjolein-sanderman-59263419_20251214T112443Z.json" ], - "modified_at": "2026-01-09T19:18:16.300605+00:00", + "modified_at": "2026-01-09T19:50:56.855616+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjolein-sanderman-59263419", @@ -250,7 +250,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -299,7 +299,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.300543+00:00", + "inferred_at": "2026-01-09T19:50:56.855512+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-WES_XXXX_FRED-SPARREBOOM.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-WES_XXXX_FRED-SPARREBOOM.json index 484db3618a..501051c94b 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-WES_XXXX_FRED-SPARREBOOM.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-WES_XXXX_FRED-SPARREBOOM.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fred-sparreboom-355a91112_20251214T110739Z.json" ], - "modified_at": "2026-01-09T19:18:13.419381+00:00", + "modified_at": "2026-01-09T19:50:55.406037+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fred-sparreboom-355a91112", @@ -168,7 +168,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.419324+00:00", + "inferred_at": "2026-01-09T19:50:55.405878+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GE-ZEV_XXXX_BRAM-BOERBOOM.json b/data/person/ID_XX-XX-XXX_198X_NL-GE-ZEV_XXXX_BRAM-BOERBOOM.json index 5f1f797538..3a978513db 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GE-ZEV_XXXX_BRAM-BOERBOOM.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GE-ZEV_XXXX_BRAM-BOERBOOM.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bram-boerboom-95537614_20251214T110534Z.json" ], - "modified_at": "2026-01-09T19:18:16.790279+00:00", + "modified_at": "2026-01-09T19:51:22.027800+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bram-boerboom-95537614", @@ -144,7 +144,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.790265+00:00", + "inferred_at": "2026-01-09T19:51:22.027752+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-GR-ZUI_XXXX_PETRA-TOGTEMA.json b/data/person/ID_XX-XX-XXX_198X_NL-GR-ZUI_XXXX_PETRA-TOGTEMA.json index bf5e868d25..fb2df43c85 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-GR-ZUI_XXXX_PETRA-TOGTEMA.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-GR-ZUI_XXXX_PETRA-TOGTEMA.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/petra-togtema-73962914_20251214T112212Z.json" ], - "modified_at": "2026-01-09T19:18:17.308572+00:00", + "modified_at": "2026-01-09T19:51:25.513375+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "petra-togtema-73962914", @@ -113,7 +113,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.308558+00:00", + "inferred_at": "2026-01-09T19:51:25.513365+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-BRE_XXXX_MIRJAM-STRAATMAN.json b/data/person/ID_XX-XX-XXX_198X_NL-NB-BRE_XXXX_MIRJAM-STRAATMAN.json similarity index 64% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NB-BRE_XXXX_MIRJAM-STRAATMAN.json rename to data/person/ID_XX-XX-XXX_198X_NL-NB-BRE_XXXX_MIRJAM-STRAATMAN.json index eaf7ed306e..16b8234fd7 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-BRE_XXXX_MIRJAM-STRAATMAN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NB-BRE_XXXX_MIRJAM-STRAATMAN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NB-BRE_XXXX_MIRJAM-STRAATMAN", + "ppid": "ID_XX-XX-XXX_198X_NL-NB-BRE_XXXX_MIRJAM-STRAATMAN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "NL-NB-BRE", "last_date": "XXXX", "name_tokens": [ "MIRJAM", "STRAATMAN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] }, "name": { "full_name": "Mirjam Straatman", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -126,63 +131,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mirjam-straatman-68230935_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:42:54.148007+00:00", + "modified_at": "2026-01-09T19:50:58.649899+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mirjam-straatman-68230935", - "inferred_current_settlement": { - "value": "Breda", - "formatted": "NL-NB-BRE", - "country_code": "NL", - "region_code": "NB", - "settlement_code": "BRE", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Breda, North Brabant, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Breda, North Brabant, Netherlands", - "result": { - "geonames_id": 2758401, - "geonames_name": "Breda", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.58656, - "longitude": 4.77596 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NB-BRE" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2758401, - "geonames_name": "Breda", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.58656, - "longitude": 4.77596 - }, - "inferred_at": "2026-01-09T17:42:54.148001+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIRJAM-STRAATMAN", @@ -192,6 +144,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NB-BRE_XXXX_MIRJAM-STRAATMAN", + "new_ppid": "ID_XX-XX-XXX_198X_NL-NB-BRE_XXXX_MIRJAM-STRAATMAN", + "changed_at": "2026-01-09T19:43:42.467891+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1987 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "16 years and 4 months" + }, + { + "step": 2, + "calculation": "2026 - 16 = 2010", + "result": "Estimated first job year: 2010", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2010 - 23 = 1987", + "result": "Estimated birth year: 1987", + "range": "1980-1994 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1980, + 1994 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:58.649887+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_CHRISTIAN-BREKEL.json b/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_CHRISTIAN-BREKEL.json index 880dc4278f..c4653fdae7 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_CHRISTIAN-BREKEL.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_CHRISTIAN-BREKEL.json @@ -136,7 +136,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/christianvandenbrekel_20251212T180000Z.json" ], - "modified_at": "2026-01-09T19:18:12.966093+00:00", + "modified_at": "2026-01-09T19:51:08.569031+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "christianvandenbrekel", @@ -172,7 +172,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.966049+00:00", + "inferred_at": "2026-01-09T19:51:08.568952+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_JUAN-PEREIRA.json b/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_JUAN-PEREIRA.json index 2be7bcaeb2..89507dac6a 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_JUAN-PEREIRA.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_JUAN-PEREIRA.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/juan-guedes-pereira-39364624_20251214T110925Z.json" ], - "modified_at": "2026-01-09T19:18:14.969752+00:00", + "modified_at": "2026-01-09T19:51:06.336608+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "juan-guedes-pereira-39364624", @@ -189,7 +189,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.969735+00:00", + "inferred_at": "2026-01-09T19:51:06.336585+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_MAARTEN-OOSTERHOUT.json b/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_MAARTEN-OOSTERHOUT.json index 7cd67f4e81..647e284f6e 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_MAARTEN-OOSTERHOUT.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_MAARTEN-OOSTERHOUT.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maarten-van-oosterhout-5a95638_20251214T110931Z.json" ], - "modified_at": "2026-01-09T19:18:16.841022+00:00", + "modified_at": "2026-01-09T19:51:22.268591+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maarten-van-oosterhout-5a95638", @@ -120,7 +120,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.841013+00:00", + "inferred_at": "2026-01-09T19:51:22.268582+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_SINATRA-KHO.json b/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_SINATRA-KHO.json similarity index 50% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_SINATRA-KHO.json rename to data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_SINATRA-KHO.json index 3d8b078f8b..17a8e8e2f5 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_SINATRA-KHO.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_SINATRA-KHO.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_SINATRA-KHO", + "ppid": "ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_SINATRA-KHO", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "NL-NB-EIN", "last_date": "XXXX", "name_tokens": [ "SINATRA", "KHO" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] }, "name": { "full_name": "Sinatra Kho", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -71,63 +76,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sinatrakho_20251214T111141Z.json" ], - "modified_at": "2026-01-09T17:43:00.053062+00:00", + "modified_at": "2026-01-09T19:50:56.775414+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sinatrakho", - "inferred_current_settlement": { - "value": "Eindhoven", - "formatted": "NL-NB-EIN", - "country_code": "NL", - "region_code": "NB", - "settlement_code": "EIN", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Eindhoven, North Brabant, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Eindhoven, North Brabant, Netherlands (NL)", - "result": { - "geonames_id": 2756253, - "geonames_name": "Eindhoven", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.44083, - "longitude": 5.47778 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NB-EIN" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2756253, - "geonames_name": "Eindhoven", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.44083, - "longitude": 5.47778 - }, - "inferred_at": "2026-01-09T17:43:00.053056+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SINATRA-KHO", @@ -137,6 +89,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_SINATRA-KHO", + "new_ppid": "ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_SINATRA-KHO", + "changed_at": "2026-01-09T19:41:09.513392+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1987 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 16 years" + }, + { + "step": 2, + "calculation": "2026 - 16 = 2010", + "result": "Estimated first job year: 2010", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2010 - 23 = 1987", + "result": "Estimated birth year: 1987", + "range": "1980-1994 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1980, + 1994 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:56.775404+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_VICTORIA-VORONINA.json b/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_VICTORIA-VORONINA.json index 510ba76719..fdc9c7be66 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_VICTORIA-VORONINA.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NB-EIN_XXXX_VICTORIA-VORONINA.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/victoria-voronina-aa884521_20251214T111225Z.json" ], - "modified_at": "2026-01-09T19:18:14.738477+00:00", + "modified_at": "2026-01-09T19:51:03.977811+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "victoria-voronina-aa884521", @@ -110,7 +110,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +159,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.738471+00:00", + "inferred_at": "2026-01-09T19:51:03.977803+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_HAROLD-MIERLO.json b/data/person/ID_XX-XX-XXX_198X_NL-NB-TIL_XXXX_HAROLD-MIERLO.json similarity index 50% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_HAROLD-MIERLO.json rename to data/person/ID_XX-XX-XXX_198X_NL-NB-TIL_XXXX_HAROLD-MIERLO.json index ef92a92248..0167599538 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_HAROLD-MIERLO.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NB-TIL_XXXX_HAROLD-MIERLO.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_HAROLD-MIERLO", + "ppid": "ID_XX-XX-XXX_198X_NL-NB-TIL_XXXX_HAROLD-MIERLO", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "NL-NB-TIL", "last_date": "XXXX", "name_tokens": [ "HAROLD", "MIERLO" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ] }, "name": { "full_name": "Harold van Mierlo", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -71,63 +76,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harold-van-mierlo-1b0bb83_20251214T111109Z.json" ], - "modified_at": "2026-01-09T17:43:03.910409+00:00", + "modified_at": "2026-01-09T19:50:49.612378+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harold-van-mierlo-1b0bb83", - "inferred_current_settlement": { - "value": "Tilburg", - "formatted": "NL-NB-TIL", - "country_code": "NL", - "region_code": "NB", - "settlement_code": "TIL", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Tilburg, North Brabant, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Tilburg, North Brabant, Netherlands (NL)", - "result": { - "geonames_id": 2746301, - "geonames_name": "Tilburg", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.55551, - "longitude": 5.0913 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NB-TIL" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2746301, - "geonames_name": "Tilburg", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.55551, - "longitude": 5.0913 - }, - "inferred_at": "2026-01-09T17:43:03.910403+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HAROLD-MIERLO", @@ -137,6 +89,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_HAROLD-MIERLO", + "new_ppid": "ID_XX-XX-XXX_198X_NL-NB-TIL_XXXX_HAROLD-MIERLO", + "changed_at": "2026-01-09T19:41:10.133615+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "edtf_meaning": "one of: 1960s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1973 is in 198X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 30 years" + }, + { + "step": 2, + "calculation": "2026 - 30 = 1996", + "result": "Estimated first job year: 1996", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1996 - 23 = 1973", + "result": "Estimated birth year: 1973", + "range": "1966-1980 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1966, + 1980 + ], + "output": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1973 spans decades 196X/198X", + "inferred_at": "2026-01-09T19:50:49.612371+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_BARBARA-WITEK.json b/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_BARBARA-WITEK.json index 3c1bbc621d..0fc391a7fc 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_BARBARA-WITEK.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_BARBARA-WITEK.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/barbara-witek-06532118_20251214T110915Z.json" ], - "modified_at": "2026-01-09T19:18:16.117768+00:00", + "modified_at": "2026-01-09T19:51:17.563372+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "barbara-witek-06532118", @@ -156,7 +156,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.117751+00:00", + "inferred_at": "2026-01-09T19:51:17.563332+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_EDWIN-WEELE.json b/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_EDWIN-WEELE.json index 58b5d4e03f..a53776e3ad 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_EDWIN-WEELE.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_EDWIN-WEELE.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/edwin-ter-weele-09b2b368_20251214T111207Z.json" ], - "modified_at": "2026-01-09T19:18:14.689754+00:00", + "modified_at": "2026-01-09T19:51:22.358400+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "edwin-ter-weele-09b2b368", @@ -142,7 +142,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.687822+00:00", + "inferred_at": "2026-01-09T19:51:22.356662+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_SOFIA-CORZOGARCIA.json b/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_SOFIA-CORZOGARCIA.json index 9a391ed030..ab6d40615c 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_SOFIA-CORZOGARCIA.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NB-VEL_XXXX_SOFIA-CORZOGARCIA.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sofia-c-corzo-garcia-456977219_20251214T111237Z.json" ], - "modified_at": "2026-01-09T19:18:14.002300+00:00", + "modified_at": "2026-01-09T19:51:17.892596+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sofia-c-corzo-garcia-456977219", @@ -147,7 +147,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.000394+00:00", + "inferred_at": "2026-01-09T19:51:17.885316+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ANDREA-MELGERS.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ANDREA-MELGERS.json index 37ba1f2b5e..aff105cf6c 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ANDREA-MELGERS.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ANDREA-MELGERS.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/andrea-melgers-2b329694_20251214T110213Z.json" ], - "modified_at": "2026-01-09T19:18:15.821905+00:00", + "modified_at": "2026-01-09T19:51:14.448696+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "andrea-melgers-2b329694", @@ -108,7 +108,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.821897+00:00", + "inferred_at": "2026-01-09T19:51:14.448687+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ANNA-KREKELER.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ANNA-KREKELER.json index f69991b7eb..904748e900 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ANNA-KREKELER.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ANNA-KREKELER.json @@ -97,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-krekeler-60baaaa_20251214T111518Z.json" ], - "modified_at": "2026-01-09T19:18:14.921364+00:00", + "modified_at": "2026-01-09T19:51:05.518056+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anna-krekeler-60baaaa", @@ -125,7 +125,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.921356+00:00", + "inferred_at": "2026-01-09T19:51:05.518040+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_BERT-OFFERMAN.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_BERT-OFFERMAN.json index fdfa9d3a77..45ee761f3c 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_BERT-OFFERMAN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_BERT-OFFERMAN.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bertofferman_20251214T111838Z.json" ], - "modified_at": "2026-01-09T19:18:15.704305+00:00", + "modified_at": "2026-01-09T19:50:58.961711+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bertofferman", @@ -153,7 +153,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -202,7 +202,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.704277+00:00", + "inferred_at": "2026-01-09T19:50:58.961620+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_CAROLINE-EVERS.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_CAROLINE-EVERS.json index a14562e8f4..48975476c9 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_CAROLINE-EVERS.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_CAROLINE-EVERS.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/caroline-evers-a65439a8_20251214T111627Z.json" ], - "modified_at": "2026-01-09T19:18:17.839999+00:00", + "modified_at": "2026-01-09T19:51:28.791690+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "caroline-evers-a65439a8", @@ -132,7 +132,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.835943+00:00", + "inferred_at": "2026-01-09T19:51:28.784992+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_CINDY-WEELE.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_CINDY-WEELE.json index 853ed1a91e..ccf1cf3a97 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_CINDY-WEELE.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_CINDY-WEELE.json @@ -81,7 +81,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cindy-van-weele-93983573_20251214T111400Z.json" ], - "modified_at": "2026-01-09T19:18:11.983712+00:00", + "modified_at": "2026-01-09T19:50:47.372873+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cindy-van-weele-93983573", @@ -109,7 +109,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.983675+00:00", + "inferred_at": "2026-01-09T19:50:47.372837+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_DESMOND-HAAN.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_DESMOND-HAAN.json index b6f5b1df2a..0e42fa85d6 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_DESMOND-HAAN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_DESMOND-HAAN.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/desmonddehaan_20251214T112629Z.json" ], - "modified_at": "2026-01-09T19:18:13.753242+00:00", + "modified_at": "2026-01-09T19:50:56.088780+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "desmonddehaan", @@ -133,7 +133,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.753225+00:00", + "inferred_at": "2026-01-09T19:50:56.088737+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_EDWIN-BECKER.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_EDWIN-BECKER.json index b45ef5a6fc..60f229d997 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_EDWIN-BECKER.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_EDWIN-BECKER.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/edwin-becker-8a07048_20251214T110036Z.json" ], - "modified_at": "2026-01-09T19:18:15.063190+00:00", + "modified_at": "2026-01-09T19:51:06.666965+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "edwin-becker-8a07048", @@ -112,7 +112,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -161,7 +161,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.063183+00:00", + "inferred_at": "2026-01-09T19:51:06.666956+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_FENNA-BROUWER.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_FENNA-BROUWER.json index 57df6aa96e..cbc538a3d5 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_FENNA-BROUWER.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_FENNA-BROUWER.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fenna-brouwer-0a14697_20251214T113219Z.json" ], - "modified_at": "2026-01-09T19:18:14.627527+00:00", + "modified_at": "2026-01-09T19:51:03.096898+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fenna-brouwer-0a14697", @@ -112,7 +112,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -161,7 +161,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.627521+00:00", + "inferred_at": "2026-01-09T19:51:03.096887+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_GERT-WEHKAMP.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_GERT-WEHKAMP.json index 7956206df2..ceac69aa61 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_GERT-WEHKAMP.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_GERT-WEHKAMP.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gert-wehkamp-513a33b_20251214T110134Z.json" ], - "modified_at": "2026-01-09T19:18:12.929660+00:00", + "modified_at": "2026-01-09T19:50:49.138757+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gert-wehkamp-513a33b", @@ -113,7 +113,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.929650+00:00", + "inferred_at": "2026-01-09T19:50:49.138739+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_HAMID-BOUGHLALA.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_HAMID-BOUGHLALA.json index e7af0e7ef2..bcfb1ac5b2 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_HAMID-BOUGHLALA.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_HAMID-BOUGHLALA.json @@ -83,7 +83,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hamid-boughlala-a5292a173_20251214T110247Z.json" ], - "modified_at": "2026-01-09T19:18:15.314453+00:00", + "modified_at": "2026-01-09T19:51:08.526918+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hamid-boughlala-a5292a173", @@ -111,7 +111,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.312519+00:00", + "inferred_at": "2026-01-09T19:51:08.518720+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_HENNO-ZELIS.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_HENNO-ZELIS.json index 12f41c7fbe..e78cc62b6e 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_HENNO-ZELIS.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_HENNO-ZELIS.json @@ -181,7 +181,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/henno-zelis-84059225_20251214T102733Z.json" ], - "modified_at": "2026-01-09T19:18:16.118530+00:00", + "modified_at": "2026-01-09T19:51:17.564186+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "henno-zelis-84059225", @@ -209,7 +209,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.118520+00:00", + "inferred_at": "2026-01-09T19:51:17.564166+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_INGE-SCHAGEN.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_INGE-SCHAGEN.json index 43f61b8892..7b7798241e 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_INGE-SCHAGEN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_INGE-SCHAGEN.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/inge-schagen-6664a818_20251214T110119Z.json" ], - "modified_at": "2026-01-09T19:18:15.178489+00:00", + "modified_at": "2026-01-09T19:51:06.995856+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "inge-schagen-6664a818", @@ -139,7 +139,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.178442+00:00", + "inferred_at": "2026-01-09T19:51:06.995774+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_KATHRIN-PILZ.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_KATHRIN-PILZ.json index a82ff73e05..e86404a269 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_KATHRIN-PILZ.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_KATHRIN-PILZ.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/kathrin-pilz-aa881a74_20251214T110033Z.json" ], - "modified_at": "2026-01-09T19:18:13.523402+00:00", + "modified_at": "2026-01-09T19:50:54.567427+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "kathrin-pilz-aa881a74", @@ -159,7 +159,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -208,7 +208,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.513510+00:00", + "inferred_at": "2026-01-09T19:50:54.557176+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_LEILA-SAUVAGE.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_LEILA-SAUVAGE.json index 7fd463f754..a2c8d0136e 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_LEILA-SAUVAGE.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_LEILA-SAUVAGE.json @@ -265,7 +265,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/leila-sauvage_20251214T111443Z.json" ], - "modified_at": "2026-01-09T19:18:17.079676+00:00", + "modified_at": "2026-01-09T19:51:23.683854+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "leila-sauvage", @@ -287,7 +287,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -328,7 +328,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.079292+00:00", + "inferred_at": "2026-01-09T19:51:23.683306+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_M-KLIJNHUISMAN.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_M-KLIJNHUISMAN.json new file mode 100644 index 0000000000..8e0c380184 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_M-KLIJNHUISMAN.json @@ -0,0 +1,166 @@ +{ + "ppid": "ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_M-KLIJNHUISMAN", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "198X", + "last_location": "NL-NH-AMS", + "last_date": "XXXX", + "name_tokens": [ + "M", + "KLIJNHUISMAN" + ], + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] + }, + "name": { + "full_name": "M. Klijn-Huisman", + "display_name": "M. Klijn-Huisman", + "name_romanized": null, + "name_tokens": [ + "M", + "KLIJNHUISMAN" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "A" + ], + "rationale": "Identified as heritage staff at Regionaal Archief Alkmaar" + }, + "affiliations": [], + "profile_data": { + "name": "M. Klijn-Huisman", + "linkedin_url": "https://www.linkedin.com/in/m-klijn-huisman-b796394a", + "headline": "management assistent bij Reg. Archief Alkmaar", + "location": "Amsterdam, North Holland, Netherlands (NL)", + "connections": "28 connections • 28 followers", + "about": "Total Experience: 22 years and 10 months", + "experience": [], + "education": [], + "skills": [ + "management" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/m-klijn-huisman-b796394a_20251214T113152Z.json", + "observed_on": "2025-12-14T11:31:52.507716+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.622646+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/m-klijn-huisman-b796394a_20251214T113152Z.json" + ], + "modified_at": "2026-01-09T19:51:28.917532+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "m-klijn-huisman-b796394a", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_M-KLIJNHUISMAN", + "new_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_M-KLIJNHUISMAN", + "changed_at": "2026-01-09T17:42:55.355184+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_M-KLIJNHUISMAN", + "new_ppid": "ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_M-KLIJNHUISMAN", + "changed_at": "2026-01-09T19:41:12.192261+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1981 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 22 years" + }, + { + "step": 2, + "calculation": "2026 - 22 = 2004", + "result": "Estimated first job year: 2004", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2004 - 23 = 1981", + "result": "Estimated birth year: 1981", + "range": "1974-1988 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1974, + 1988 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:28.917527+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MARGOT-SCHINKEL.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MARGOT-SCHINKEL.json similarity index 52% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MARGOT-SCHINKEL.json rename to data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MARGOT-SCHINKEL.json index a77a092a2a..e92b2a9c92 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MARGOT-SCHINKEL.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MARGOT-SCHINKEL.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MARGOT-SCHINKEL", + "ppid": "ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MARGOT-SCHINKEL", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "MARGOT", "SCHINKEL" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ] }, "name": { "full_name": "margot van schinkel", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -71,63 +76,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/margot-van-schinkel-446b8218_20251214T111533Z.json" ], - "modified_at": "2026-01-09T17:43:06.899089+00:00", + "modified_at": "2026-01-09T19:50:53.995639+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "margot-van-schinkel-446b8218", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands (NL)", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:06.899084+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARGOT-SCHINKEL", @@ -137,6 +89,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MARGOT-SCHINKEL", + "new_ppid": "ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MARGOT-SCHINKEL", + "changed_at": "2026-01-09T19:41:11.073942+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "edtf_meaning": "one of: 1960s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1973 is in 198X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 30 years" + }, + { + "step": 2, + "calculation": "2026 - 30 = 1996", + "result": "Estimated first job year: 1996", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1996 - 23 = 1973", + "result": "Estimated birth year: 1973", + "range": "1966-1980 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1966, + 1980 + ], + "output": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1973 spans decades 196X/198X", + "inferred_at": "2026-01-09T19:50:53.995627+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MARIA-PATER.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MARIA-PATER.json index 435d80ffe8..12cf5984b6 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MARIA-PATER.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MARIA-PATER.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maria-pater-79b15922_20251214T110206Z.json" ], - "modified_at": "2026-01-09T19:18:12.987017+00:00", + "modified_at": "2026-01-09T19:50:50.214487+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maria-pater-79b15922", @@ -112,7 +112,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -161,7 +161,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.987011+00:00", + "inferred_at": "2026-01-09T19:50:50.214476+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MARIA-SMIT.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MARIA-SMIT.json index 214b2106d4..88a01a4d8f 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MARIA-SMIT.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MARIA-SMIT.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maria-smit-a9246314_20251214T111738Z.json" ], - "modified_at": "2026-01-09T19:18:15.618125+00:00", + "modified_at": "2026-01-09T19:51:12.714805+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maria-smit-a9246314", @@ -146,7 +146,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.616224+00:00", + "inferred_at": "2026-01-09T19:51:12.710994+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MICHIEL-OMTZIGT.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MICHIEL-OMTZIGT.json index fb54328345..cb3db03cd0 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MICHIEL-OMTZIGT.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_MICHIEL-OMTZIGT.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michielomtzigt_20251214T111500Z.json" ], - "modified_at": "2026-01-09T19:18:16.656371+00:00", + "modified_at": "2026-01-09T19:51:21.356222+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michielomtzigt", @@ -128,7 +128,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.656361+00:00", + "inferred_at": "2026-01-09T19:51:21.356213+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_NAOMI-MARTES.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_NAOMI-MARTES.json index 96ae89155e..e6f05a8fe5 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_NAOMI-MARTES.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_NAOMI-MARTES.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/naomi-martes-34a563b0_20251214T110233Z.json" ], - "modified_at": "2026-01-09T19:18:14.992113+00:00", + "modified_at": "2026-01-09T19:51:06.503542+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "naomi-martes-34a563b0", @@ -121,7 +121,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.992102+00:00", + "inferred_at": "2026-01-09T19:51:06.503509+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_NOUSCHKA-HOMMES.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_NOUSCHKA-HOMMES.json index 6d9385aeee..7f4eb74ef2 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_NOUSCHKA-HOMMES.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_NOUSCHKA-HOMMES.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nouschka-hommes-6061771a1_20251214T110154Z.json" ], - "modified_at": "2026-01-09T19:18:15.997565+00:00", + "modified_at": "2026-01-09T19:51:15.725274+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nouschka-hommes-6061771a1", @@ -129,7 +129,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.997549+00:00", + "inferred_at": "2026-01-09T19:51:15.725246+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_PETRA-DORENSTOUTER.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_PETRA-DORENSTOUTER.json index 63cd4c6407..fcdc964c03 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_PETRA-DORENSTOUTER.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_PETRA-DORENSTOUTER.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/petra-dorenstouter-72431212_20251214T110132Z.json" ], - "modified_at": "2026-01-09T19:18:16.540011+00:00", + "modified_at": "2026-01-09T19:51:18.599562+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "petra-dorenstouter-72431212", @@ -126,7 +126,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.540000+00:00", + "inferred_at": "2026-01-09T19:51:18.599546+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_PIET-EVERDINK.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_PIET-EVERDINK.json index 7e592e7996..ac267df241 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_PIET-EVERDINK.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_PIET-EVERDINK.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/piet-van-everdink-28b33859_20251214T110236Z.json" ], - "modified_at": "2026-01-09T19:18:12.567566+00:00", + "modified_at": "2026-01-09T19:50:48.507716+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "piet-van-everdink-28b33859", @@ -108,7 +108,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.567552+00:00", + "inferred_at": "2026-01-09T19:50:48.507707+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_PIM-JONG.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_PIM-JONG.json index 4052bacacc..a535e79c50 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_PIM-JONG.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_PIM-JONG.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pim-de-jong-4369b162_20251214T110317Z.json" ], - "modified_at": "2026-01-09T19:18:15.371307+00:00", + "modified_at": "2026-01-09T19:51:08.620385+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pim-de-jong-4369b162", @@ -137,7 +137,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.369330+00:00", + "inferred_at": "2026-01-09T19:51:08.616883+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_R-HUYSMANS.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_R-HUYSMANS.json index be9f2668f0..c353bac69a 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_R-HUYSMANS.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_R-HUYSMANS.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/r-huysmans-a2b437a1_20251214T110232Z.json" ], - "modified_at": "2026-01-09T19:18:14.002954+00:00", + "modified_at": "2026-01-09T19:50:57.998277+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "r-huysmans-a2b437a1", @@ -108,7 +108,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.002948+00:00", + "inferred_at": "2026-01-09T19:50:57.998268+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ROB-HOVEMANN.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ROB-HOVEMANN.json similarity index 60% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ROB-HOVEMANN.json rename to data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ROB-HOVEMANN.json index 0d1a96884c..200f60d5ff 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ROB-HOVEMANN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ROB-HOVEMANN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ROB-HOVEMANN", + "ppid": "ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ROB-HOVEMANN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "ROB", "HOVEMANN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ] }, "name": { "full_name": "Rob Hovemann", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -107,63 +112,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rob-hovemann-5252a069_20251213T020000Z.json" ], - "modified_at": "2026-01-09T18:58:13.432922+00:00", + "modified_at": "2026-01-09T19:51:06.657893+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rob-hovemann-5252a069", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T18:58:13.432905+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROB-HOVEMANN", @@ -173,6 +125,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_ROB-HOVEMANN", + "new_ppid": "ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ROB-HOVEMANN", + "changed_at": "2026-01-09T19:43:41.151935+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "edtf_meaning": "one of: 1960s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1976 is in 198X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "27 years and 10 months" + }, + { + "step": 2, + "calculation": "2026 - 27 = 1999", + "result": "Estimated first job year: 1999", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1999 - 23 = 1976", + "result": "Estimated birth year: 1976", + "range": "1969-1983 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1969, + 1983 + ], + "output": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1976 spans decades 196X/198X", + "inferred_at": "2026-01-09T19:51:06.657887+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ROBERT-RITTER.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ROBERT-RITTER.json index aa54c0d76e..068828b214 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ROBERT-RITTER.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_ROBERT-RITTER.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robert-ritter-2b84022b_20251214T110030Z.json" ], - "modified_at": "2026-01-09T19:18:12.855541+00:00", + "modified_at": "2026-01-09T19:50:49.078140+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robert-ritter-2b84022b", @@ -165,7 +165,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.855503+00:00", + "inferred_at": "2026-01-09T19:50:49.078093+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_RON-VALKEN.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_RON-VALKEN.json similarity index 62% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_RON-VALKEN.json rename to data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_RON-VALKEN.json index 694f2a3112..d981358607 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_RON-VALKEN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_RON-VALKEN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_RON-VALKEN", + "ppid": "ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_RON-VALKEN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "RON", "VALKEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ] }, "name": { "full_name": "Ron Valken", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -120,63 +125,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ron-valken-902558ba_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:43:08.445440+00:00", + "modified_at": "2026-01-09T19:51:05.544378+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ron-valken-902558ba", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:08.445434+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RON-VALKEN", @@ -186,6 +138,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_RON-VALKEN", + "new_ppid": "ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_RON-VALKEN", + "changed_at": "2026-01-09T19:43:39.277486+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "edtf_meaning": "one of: 1960s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1975 is in 198X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "28 years and 11 months" + }, + { + "step": 2, + "calculation": "2026 - 28 = 1998", + "result": "Estimated first job year: 1998", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1998 - 23 = 1975", + "result": "Estimated birth year: 1975", + "range": "1968-1982 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1968, + 1982 + ], + "output": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1975 spans decades 196X/198X", + "inferred_at": "2026-01-09T19:51:05.544327+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_STAESKE-REBERS.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_STAESKE-REBERS.json index 5ce22cd2a1..d9c2dc50d0 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_STAESKE-REBERS.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_STAESKE-REBERS.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/staeskerebers_20251214T111624Z.json" ], - "modified_at": "2026-01-09T19:18:16.002384+00:00", + "modified_at": "2026-01-09T19:51:15.730890+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "staeskerebers", @@ -114,7 +114,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +163,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.002377+00:00", + "inferred_at": "2026-01-09T19:51:15.730881+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_SUSAN-HOENDERDAAL.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_SUSAN-HOENDERDAAL.json index c0922ffd54..ef0a5a1b98 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_SUSAN-HOENDERDAAL.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_SUSAN-HOENDERDAAL.json @@ -198,7 +198,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/susan-van-t-hoenderdaal-6712776b_20251214T102726Z.json" ], - "modified_at": "2026-01-09T19:18:16.865321+00:00", + "modified_at": "2026-01-09T19:51:22.328130+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "susan-van-t-hoenderdaal-6712776b", @@ -226,7 +226,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -275,7 +275,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.861130+00:00", + "inferred_at": "2026-01-09T19:51:22.326289+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_TEIO-MEEDENDORP.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_TEIO-MEEDENDORP.json index eb16d3fcbd..c737943d90 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_TEIO-MEEDENDORP.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_TEIO-MEEDENDORP.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/teio-meedendorp-634442a_20251214T110059Z.json" ], - "modified_at": "2026-01-09T19:18:17.633887+00:00", + "modified_at": "2026-01-09T19:51:28.538919+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "teio-meedendorp-634442a", @@ -111,7 +111,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.633877+00:00", + "inferred_at": "2026-01-09T19:51:28.538913+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_TESS-GRAAFLAND.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_TESS-GRAAFLAND.json index d09f92fd40..db550f7c56 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_TESS-GRAAFLAND.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_TESS-GRAAFLAND.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tess-graafland-3174355a_20251214T111808Z.json" ], - "modified_at": "2026-01-09T19:18:14.638967+00:00", + "modified_at": "2026-01-09T19:51:03.210942+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tess-graafland-3174355a", @@ -151,7 +151,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.638908+00:00", + "inferred_at": "2026-01-09T19:51:03.210807+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_TESSA-BOSMA.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_TESSA-BOSMA.json index 8a8f1ab38f..a1779b3cac 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_TESSA-BOSMA.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_TESSA-BOSMA.json @@ -193,7 +193,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tessa-bosma-62b14391_20251214T110120Z.json" ], - "modified_at": "2026-01-09T19:18:16.033771+00:00", + "modified_at": "2026-01-09T19:50:46.678714+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tessa-bosma-62b14391", @@ -224,7 +224,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -265,7 +265,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.030012+00:00", + "inferred_at": "2026-01-09T19:50:46.674652+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_WILLIAM-SOUTHWORTH.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_WILLIAM-SOUTHWORTH.json index 460beacacb..0f43817603 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_WILLIAM-SOUTHWORTH.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_WILLIAM-SOUTHWORTH.json @@ -88,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/william-southworth-a89a7554_20251214T111448Z.json" ], - "modified_at": "2026-01-09T19:18:17.191814+00:00", + "modified_at": "2026-01-09T19:51:24.477898+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "william-southworth-a89a7554", @@ -116,7 +116,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.191804+00:00", + "inferred_at": "2026-01-09T19:51:24.477889+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_YASAR-KUNDUZ.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_YASAR-KUNDUZ.json index 9a517f9c7f..23aaca430a 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_YASAR-KUNDUZ.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_YASAR-KUNDUZ.json @@ -139,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yasar-kunduz-21b46a2b_20251214T112946Z.json" ], - "modified_at": "2026-01-09T19:18:14.773046+00:00", + "modified_at": "2026-01-09T19:51:04.061347+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yasar-kunduz-21b46a2b", @@ -167,7 +167,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -216,7 +216,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.773030+00:00", + "inferred_at": "2026-01-09T19:51:04.061327+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-ZAA_XXXX_MARINKE-KRUIDENBERG.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-ZAA_XXXX_MARINKE-KRUIDENBERG.json index 38ac3a8820..e4bee9b1bd 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-ZAA_XXXX_MARINKE-KRUIDENBERG.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-ZAA_XXXX_MARINKE-KRUIDENBERG.json @@ -94,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marinke-kruidenberg-226a9736_20251214T111308Z.json" ], - "modified_at": "2026-01-09T19:18:15.167642+00:00", + "modified_at": "2026-01-09T19:51:06.973401+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marinke-kruidenberg-226a9736", @@ -122,7 +122,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -171,7 +171,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.165488+00:00", + "inferred_at": "2026-01-09T19:51:06.971041+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-NH-ZAA_XXXX_NATALIA-WEENER.json b/data/person/ID_XX-XX-XXX_198X_NL-NH-ZAA_XXXX_NATALIA-WEENER.json index 5b638268ca..7920f4f545 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-NH-ZAA_XXXX_NATALIA-WEENER.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-NH-ZAA_XXXX_NATALIA-WEENER.json @@ -90,7 +90,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/natalia-weener-676b7360_20251214T110241Z.json" ], - "modified_at": "2026-01-09T19:18:17.059696+00:00", + "modified_at": "2026-01-09T19:51:23.201224+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "natalia-weener-676b7360", @@ -112,7 +112,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -153,7 +153,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.055724+00:00", + "inferred_at": "2026-01-09T19:51:23.199358+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FANNY-VERWOERDT.json b/data/person/ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_FANNY-VERWOERDT.json similarity index 87% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FANNY-VERWOERDT.json rename to data/person/ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_FANNY-VERWOERDT.json index 9bbb855a5b..4d4a8fb7af 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FANNY-VERWOERDT.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_FANNY-VERWOERDT.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FANNY-VERWOERDT", + "ppid": "ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_FANNY-VERWOERDT", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "NL-UT-UTR", "last_date": "XXXX", "name_tokens": [ "FANNY", "VERWOERDT" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] }, "name": { "full_name": "Fanny Verwoerdt", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -328,73 +333,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fanny-verwoerdt-7b27a113_20251213T020000Z.json" ], - "modified_at": "2026-01-09T18:58:12.922428+00:00", + "modified_at": "2026-01-09T19:51:28.833424+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fanny-verwoerdt-7b27a113", - "inferred_current_settlement": { - "value": "Utrecht", - "formatted": "NL-UT-UTR", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "UTR", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Vrijwilliger at Stichting De Kindertelefoon" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "Stichting De Kindertelefoon", - "title": "Vrijwilliger", - "location": "Utrecht, Nederland" - } - }, - { - "step": 3, - "geocoding": "GeoNames resolution", - "query": "Utrecht, Nederland", - "result": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - } - }, - { - "step": 4, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-UTR" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - }, - "inferred_at": "2026-01-09T18:58:12.922413+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FANNY-VERWOERDT", @@ -404,6 +346,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_FANNY-VERWOERDT", + "new_ppid": "ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_FANNY-VERWOERDT", + "changed_at": "2026-01-09T19:43:40.017083+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1982 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "21 years and 5 months" + }, + { + "step": 2, + "calculation": "2026 - 21 = 2005", + "result": "Estimated first job year: 2005", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2005 - 23 = 1982", + "result": "Estimated birth year: 1982", + "range": "1975-1989 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1975, + 1989 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:28.833413+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_LINDA-SENDEN.json b/data/person/ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_LINDA-SENDEN.json index 5ac9e11401..a931fe2250 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_LINDA-SENDEN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_LINDA-SENDEN.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/linda-senden-6145557_20251214T103331Z.json" ], - "modified_at": "2026-01-09T19:18:16.222281+00:00", + "modified_at": "2026-01-09T19:51:18.318427+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "linda-senden-6145557", @@ -113,7 +113,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.222271+00:00", + "inferred_at": "2026-01-09T19:51:18.318403+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MICHELLE-WAL.json b/data/person/ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_MICHELLE-WAL.json similarity index 63% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MICHELLE-WAL.json rename to data/person/ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_MICHELLE-WAL.json index 04be16af3d..6656559e8f 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MICHELLE-WAL.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_MICHELLE-WAL.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MICHELLE-WAL", + "ppid": "ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_MICHELLE-WAL", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "NL-UT-UTR", "last_date": "XXXX", "name_tokens": [ "MICHELLE", "WAL" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ] }, "name": { "full_name": "Michelle Van der Wal", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -113,73 +118,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michelle-van-der-wal-a4b198168_20251212T230000Z.json" ], - "modified_at": "2026-01-09T18:58:12.828472+00:00", + "modified_at": "2026-01-09T19:50:47.116504+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michelle-van-der-wal-a4b198168", - "inferred_current_settlement": { - "value": "Utrecht", - "formatted": "NL-UT-UTR", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "UTR", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Randstad, Netherlands" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "Inspectie van het Onderwijs", - "title": "Strategisch Inspecteur", - "location": "Utrecht, Nederland" - } - }, - { - "step": 3, - "geocoding": "GeoNames resolution", - "query": "Utrecht, Nederland", - "result": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - } - }, - { - "step": 4, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-UTR" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - }, - "inferred_at": "2026-01-09T18:58:12.828456+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MICHELLE-WAL", @@ -189,6 +131,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MICHELLE-WAL", + "new_ppid": "ID_XX-XX-XXX_198X_NL-UT-UTR_XXXX_MICHELLE-WAL", + "changed_at": "2026-01-09T19:41:08.603748+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "edtf_meaning": "one of: 1960s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1975 is in 198X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 28 years" + }, + { + "step": 2, + "calculation": "2026 - 28 = 1998", + "result": "Estimated first job year: 1998", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1998 - 23 = 1975", + "result": "Estimated birth year: 1975", + "range": "1968-1982 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1968, + 1982 + ], + "output": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1975 spans decades 196X/198X", + "inferred_at": "2026-01-09T19:50:47.116489+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-DEL_XXXX_DERK-POORTVLIET.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-DEL_XXXX_DERK-POORTVLIET.json index 427632ebde..5738b5246c 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-DEL_XXXX_DERK-POORTVLIET.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-DEL_XXXX_DERK-POORTVLIET.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/derk-poortvliet_20251214T112713Z.json" ], - "modified_at": "2026-01-09T19:18:13.543498+00:00", + "modified_at": "2026-01-09T19:50:54.597940+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "derk-poortvliet", @@ -153,7 +153,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.539820+00:00", + "inferred_at": "2026-01-09T19:50:54.590498+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-DEL_XXXX_MONIQUE-GEMERT.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-DEL_XXXX_MONIQUE-GEMERT.json index ea8aa55d2f..564d04bccb 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-DEL_XXXX_MONIQUE-GEMERT.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-DEL_XXXX_MONIQUE-GEMERT.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/monique-van-gemert-0343509b_20251214T113232Z.json" ], - "modified_at": "2026-01-09T19:18:15.056015+00:00", + "modified_at": "2026-01-09T19:51:06.655002+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "monique-van-gemert-0343509b", @@ -171,7 +171,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.052343+00:00", + "inferred_at": "2026-01-09T19:51:06.651070+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-DOR_XXXX_ANNE-BOELSMA.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-DOR_XXXX_ANNE-BOELSMA.json index 30cce6a9bf..9b1700dfda 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-DOR_XXXX_ANNE-BOELSMA.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-DOR_XXXX_ANNE-BOELSMA.json @@ -90,7 +90,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-boelsma-0175b731_20251214T112154Z.json" ], - "modified_at": "2026-01-09T19:18:14.142257+00:00", + "modified_at": "2026-01-09T19:50:58.712239+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-boelsma-0175b731", @@ -118,7 +118,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.137623+00:00", + "inferred_at": "2026-01-09T19:50:58.706711+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-ROE_XXXX_YVONNE-FAAS.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-ROE_XXXX_YVONNE-FAAS.json index a91b603920..f53378aeb1 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-ROE_XXXX_YVONNE-FAAS.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-ROE_XXXX_YVONNE-FAAS.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yvonne-faas-09305a169_20251214T113027Z.json" ], - "modified_at": "2026-01-09T19:18:14.012889+00:00", + "modified_at": "2026-01-09T19:50:58.089885+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yvonne-faas-09305a169", @@ -113,7 +113,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.012882+00:00", + "inferred_at": "2026-01-09T19:50:58.089868+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_AGNES-SMEETS.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_AGNES-SMEETS.json index f55630ae58..ca232dc1c5 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_AGNES-SMEETS.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_AGNES-SMEETS.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/agnes-smeets-1b66b52b_20251214T112243Z.json" ], - "modified_at": "2026-01-09T19:18:13.088630+00:00", + "modified_at": "2026-01-09T19:50:51.070992+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "agnes-smeets-1b66b52b", @@ -132,7 +132,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.088601+00:00", + "inferred_at": "2026-01-09T19:50:51.070921+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ANNEMARIE-DEKKER.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ANNEMARIE-DEKKER.json index 8118772f51..88ba401793 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ANNEMARIE-DEKKER.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ANNEMARIE-DEKKER.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annemarie-dekker-025477132_20251214T113414Z.json" ], - "modified_at": "2026-01-09T19:18:14.077685+00:00", + "modified_at": "2026-01-09T19:50:58.569113+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annemarie-dekker-025477132", @@ -109,7 +109,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.077677+00:00", + "inferred_at": "2026-01-09T19:50:58.569103+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ARDA-SCHOLTE.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ARDA-SCHOLTE.json index 2113725c90..0a77bfa3ab 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ARDA-SCHOLTE.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ARDA-SCHOLTE.json @@ -148,7 +148,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arda-scholte-9a5a8249_20251214T112420Z.json" ], - "modified_at": "2026-01-09T19:18:14.703624+00:00", + "modified_at": "2026-01-09T19:51:03.382168+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arda-scholte-9a5a8249", @@ -176,7 +176,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.703609+00:00", + "inferred_at": "2026-01-09T19:51:03.382135+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_BAS-RUE.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_BAS-RUE.json index 8a48efc67e..fc534811d0 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_BAS-RUE.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_BAS-RUE.json @@ -122,7 +122,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/basderue_20251214T102755Z.json" ], - "modified_at": "2026-01-09T19:18:11.504344+00:00", + "modified_at": "2026-01-09T19:50:47.026464+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "basderue", @@ -150,7 +150,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.502221+00:00", + "inferred_at": "2026-01-09T19:50:47.023588+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_BEP-W.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_BEP-W.json index bce66fb84d..926c9e7835 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_BEP-W.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_BEP-W.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bepweber_20251214T113002Z.json" ], - "modified_at": "2026-01-09T19:18:16.543207+00:00", + "modified_at": "2026-01-09T19:51:18.603649+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bepweber", @@ -143,7 +143,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.541201+00:00", + "inferred_at": "2026-01-09T19:51:18.600887+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_CAMILLA-VEERMAN.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_CAMILLA-VEERMAN.json index aca21dbc57..55a7c1827f 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_CAMILLA-VEERMAN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_CAMILLA-VEERMAN.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/camilla-veerman-45541539_20251214T103246Z.json" ], - "modified_at": "2026-01-09T19:18:18.890323+00:00", + "modified_at": "2026-01-09T19:51:29.495493+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "camilla-veerman-45541539", @@ -131,7 +131,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.890299+00:00", + "inferred_at": "2026-01-09T19:51:29.495441+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_CORNELIA-KOKOT.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_CORNELIA-KOKOT.json index 22b8921763..8cffc52927 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_CORNELIA-KOKOT.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_CORNELIA-KOKOT.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cornelia-kokot-811a86120_20251214T103201Z.json" ], - "modified_at": "2026-01-09T19:18:16.430600+00:00", + "modified_at": "2026-01-09T19:51:18.480828+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cornelia-kokot-811a86120", @@ -129,7 +129,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.421870+00:00", + "inferred_at": "2026-01-09T19:51:18.473061+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_DRS-NEVE.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_DRS-NEVE.json index 052900638b..7a65eb91d4 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_DRS-NEVE.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_DRS-NEVE.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/drs-roel-r-g-de-neve-a1383a199_20251214T113126Z.json" ], - "modified_at": "2026-01-09T19:18:17.440114+00:00", + "modified_at": "2026-01-09T19:51:28.097409+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "drs-roel-r-g-de-neve-a1383a199", @@ -131,7 +131,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.436161+00:00", + "inferred_at": "2026-01-09T19:51:28.093459+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ELLA-MOURIK.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ELLA-MOURIK.json index 1302b37bb5..8db6cf3210 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ELLA-MOURIK.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ELLA-MOURIK.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ella-van-mourik-75084522_20251214T113011Z.json" ], - "modified_at": "2026-01-09T19:18:12.112191+00:00", + "modified_at": "2026-01-09T19:50:47.447338+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ella-van-mourik-75084522", @@ -112,7 +112,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -161,7 +161,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.112181+00:00", + "inferred_at": "2026-01-09T19:50:47.447327+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_FEMKE-COEVERT.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_FEMKE-COEVERT.json index eaec4a08d2..ad849dbc60 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_FEMKE-COEVERT.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_FEMKE-COEVERT.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/femke-coevert-85045171_20251214T111616Z.json" ], - "modified_at": "2026-01-09T19:18:13.603476+00:00", + "modified_at": "2026-01-09T19:50:55.137305+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "femke-coevert-85045171", @@ -148,7 +148,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.603458+00:00", + "inferred_at": "2026-01-09T19:50:55.137227+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GABRIELLE-JANSEN.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GABRIELLE-JANSEN.json index 46d3d56a7c..303e57871f 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GABRIELLE-JANSEN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_GABRIELLE-JANSEN.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gabrielle-jansen-508a07b8_20251214T102907Z.json" ], - "modified_at": "2026-01-09T19:18:14.701901+00:00", + "modified_at": "2026-01-09T19:51:03.377765+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gabrielle-jansen-508a07b8", @@ -120,7 +120,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.701894+00:00", + "inferred_at": "2026-01-09T19:51:03.377755+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_INGRID-COLERIDGE.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_INGRID-COLERIDGE.json new file mode 100644 index 0000000000..2946dcde64 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_INGRID-COLERIDGE.json @@ -0,0 +1,164 @@ +{ + "ppid": "ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_INGRID-COLERIDGE", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "198X", + "last_location": "NL-ZH-TH", + "last_date": "XXXX", + "name_tokens": [ + "INGRID", + "COLERIDGE" + ], + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] + }, + "name": { + "full_name": "Ingrid Coleridge", + "display_name": "Ingrid Coleridge", + "name_romanized": null, + "name_tokens": [ + "INGRID", + "COLERIDGE" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at Ministerie van Buitenlandse Zaken" + }, + "affiliations": [], + "profile_data": { + "name": "Ingrid Coleridge", + "linkedin_url": "https://www.linkedin.com/in/ingrid-coleridge-53a61240", + "headline": "Financial Advisor at Ministry of Foreign Affairs, Netherlands", + "location": "The Hague, South Holland, Netherlands (NL)", + "connections": "79 connections • 77 followers", + "about": "Total Experience: 16 years and 3 months", + "experience": [], + "education": [], + "skills": [], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/ingrid-coleridge-53a61240_20251214T103155Z.json", + "observed_on": "2025-12-14T10:31:55.025599+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.531007+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/ingrid-coleridge-53a61240_20251214T103155Z.json" + ], + "modified_at": "2026-01-09T19:51:08.353231+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "ingrid-coleridge-53a61240", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INGRID-COLERIDGE", + "new_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_INGRID-COLERIDGE", + "changed_at": "2026-01-09T17:43:01.745436+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_INGRID-COLERIDGE", + "new_ppid": "ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_INGRID-COLERIDGE", + "changed_at": "2026-01-09T19:41:08.288765+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1987 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 16 years" + }, + { + "step": 2, + "calculation": "2026 - 16 = 2010", + "result": "Estimated first job year: 2010", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2010 - 23 = 1987", + "result": "Estimated birth year: 1987", + "range": "1980-1994 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1980, + 1994 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:08.353224+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_JANNEKE-WEEGEN.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JANNEKE-WEEGEN.json similarity index 66% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_JANNEKE-WEEGEN.json rename to data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JANNEKE-WEEGEN.json index d2ab950f5c..47e8b41597 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_JANNEKE-WEEGEN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JANNEKE-WEEGEN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_JANNEKE-WEEGEN", + "ppid": "ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JANNEKE-WEEGEN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "JANNEKE", "WEEGEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] }, "name": { "full_name": "Janneke van der Weegen", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -127,63 +132,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/janneke-van-der-weegen-67903b50_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:42:54.338583+00:00", + "modified_at": "2026-01-09T19:50:48.494968+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "janneke-van-der-weegen-67903b50", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, South Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, South Holland, Netherlands", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:42:54.338573+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JANNEKE-WEEGEN", @@ -193,6 +145,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_JANNEKE-WEEGEN", + "new_ppid": "ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JANNEKE-WEEGEN", + "changed_at": "2026-01-09T19:43:39.507151+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1982 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "21 years and 11 months" + }, + { + "step": 2, + "calculation": "2026 - 21 = 2005", + "result": "Estimated first job year: 2005", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2005 - 23 = 1982", + "result": "Estimated birth year: 1982", + "range": "1975-1989 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1975, + 1989 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:50:48.494961+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JEANNETTE-HOEK.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JEANNETTE-HOEK.json index 25003be11e..5101a66b34 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JEANNETTE-HOEK.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_JEANNETTE-HOEK.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jeannette-van-der-hoek-09404391_20251214T112742Z.json" ], - "modified_at": "2026-01-09T19:18:14.828774+00:00", + "modified_at": "2026-01-09T19:51:04.570187+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jeannette-van-der-hoek-09404391", @@ -127,7 +127,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.826692+00:00", + "inferred_at": "2026-01-09T19:51:04.568252+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_KOOS-DIJKSTRA.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_KOOS-DIJKSTRA.json index 91c3108be4..8d10862c92 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_KOOS-DIJKSTRA.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_KOOS-DIJKSTRA.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/koos-dijkstra-1909183_20251214T103235Z.json" ], - "modified_at": "2026-01-09T19:18:15.098255+00:00", + "modified_at": "2026-01-09T19:51:06.730433+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "koos-dijkstra-1909183", @@ -114,7 +114,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +163,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.098247+00:00", + "inferred_at": "2026-01-09T19:51:06.730425+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_LENIE-VUURE.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_LENIE-VUURE.json index e6476398c1..a485a583d0 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_LENIE-VUURE.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_LENIE-VUURE.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lenie-van-vuure-a8164221_20251214T103311Z.json" ], - "modified_at": "2026-01-09T19:18:17.338371+00:00", + "modified_at": "2026-01-09T19:51:26.292562+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lenie-van-vuure-a8164221", @@ -114,7 +114,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +163,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.338361+00:00", + "inferred_at": "2026-01-09T19:51:26.292551+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_LIEDEWIJ-LAMERS.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_LIEDEWIJ-LAMERS.json index 6fd0e0e26f..0bf6f5f25a 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_LIEDEWIJ-LAMERS.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_LIEDEWIJ-LAMERS.json @@ -196,7 +196,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/liedewijlamers_20251214T113331Z.json" ], - "modified_at": "2026-01-09T19:18:12.530765+00:00", + "modified_at": "2026-01-09T19:50:48.501337+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "liedewijlamers", @@ -224,7 +224,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -273,7 +273,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.528588+00:00", + "inferred_at": "2026-01-09T19:50:48.499257+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ROGIER-ZAVAROS.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ROGIER-ZAVAROS.json index 7ee143450d..3119db5d9c 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ROGIER-ZAVAROS.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ROGIER-ZAVAROS.json @@ -83,7 +83,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rogier-zavaros-2aa10730_20251214T113423Z.json" ], - "modified_at": "2026-01-09T19:18:13.367298+00:00", + "modified_at": "2026-01-09T19:50:53.938765+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rogier-zavaros-2aa10730", @@ -111,7 +111,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.367287+00:00", + "inferred_at": "2026-01-09T19:50:53.938731+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ROSEMARIJN-HOEFTE.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ROSEMARIJN-HOEFTE.json index 5bfd8e263d..a7a850b40e 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ROSEMARIJN-HOEFTE.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_ROSEMARIJN-HOEFTE.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rosemarijn-hoefte-6a3a7a16_20251214T103728Z.json" ], - "modified_at": "2026-01-09T19:18:13.421060+00:00", + "modified_at": "2026-01-09T19:50:54.118140+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rosemarijn-hoefte-6a3a7a16", @@ -110,7 +110,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +159,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.421054+00:00", + "inferred_at": "2026-01-09T19:50:54.118130+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_SASKIA-RAMJAN.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_SASKIA-RAMJAN.json index 0879624c04..daa0dfa59a 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_SASKIA-RAMJAN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_SASKIA-RAMJAN.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/saskia-ramjan-3a512715a_20251214T112706Z.json" ], - "modified_at": "2026-01-09T19:18:13.538175+00:00", + "modified_at": "2026-01-09T19:50:54.584063+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "saskia-ramjan-3a512715a", @@ -129,7 +129,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.536147+00:00", + "inferred_at": "2026-01-09T19:50:54.581904+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_STEFAN-WLADIMIROFF.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_STEFAN-WLADIMIROFF.json index c5013b2009..d1d8af0ecd 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_STEFAN-WLADIMIROFF.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_STEFAN-WLADIMIROFF.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stefan-wladimiroff-672576a_20251214T110310Z.json" ], - "modified_at": "2026-01-09T19:18:15.111288+00:00", + "modified_at": "2026-01-09T19:51:13.296514+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stefan-wladimiroff-672576a", @@ -129,7 +129,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.111226+00:00", + "inferred_at": "2026-01-09T19:51:13.296380+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_TERRY-PANGKEY.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_TERRY-PANGKEY.json index 1600fd1f5a..5b4ae6522d 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_TERRY-PANGKEY.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_TERRY-PANGKEY.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/terry-pangkey-7566352a_20251214T103149Z.json" ], - "modified_at": "2026-01-09T19:18:16.197123+00:00", + "modified_at": "2026-01-09T19:51:18.289462+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "terry-pangkey-7566352a", @@ -121,7 +121,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.197115+00:00", + "inferred_at": "2026-01-09T19:51:18.289454+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_TJEERD-VEENSTRA.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_TJEERD-VEENSTRA.json index 1867261049..75671ceabb 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_TJEERD-VEENSTRA.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_TJEERD-VEENSTRA.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tjeerd-veenstra-4abb2976_20251214T103336Z.json" ], - "modified_at": "2026-01-09T19:18:13.956467+00:00", + "modified_at": "2026-01-09T19:50:56.892074+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tjeerd-veenstra-4abb2976", @@ -149,7 +149,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -198,7 +198,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.954577+00:00", + "inferred_at": "2026-01-09T19:50:56.883650+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_VALENTIJN-GILISSEN.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_VALENTIJN-GILISSEN.json index cb9cebdad9..a6f82098d1 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_VALENTIJN-GILISSEN.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_VALENTIJN-GILISSEN.json @@ -88,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/valentijn-gilissen-41190b15_20251214T110452Z.json" ], - "modified_at": "2026-01-09T19:18:13.078501+00:00", + "modified_at": "2026-01-09T19:50:51.051846+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "valentijn-gilissen-41190b15", @@ -116,7 +116,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.078493+00:00", + "inferred_at": "2026-01-09T19:50:51.051832+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_WIEKE-HOLLAND.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_WIEKE-HOLLAND.json index 7da3507abf..5a927d9f3f 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_WIEKE-HOLLAND.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_WIEKE-HOLLAND.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wieke-holland-1a10555_20251214T103130Z.json" ], - "modified_at": "2026-01-09T19:18:15.363789+00:00", + "modified_at": "2026-01-09T19:51:08.606458+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wieke-holland-1a10555", @@ -163,7 +163,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.345605+00:00", + "inferred_at": "2026-01-09T19:51:08.598071+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_WILCO-JONGE.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_WILCO-JONGE.json index be1ba07e41..93668e7221 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_WILCO-JONGE.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-TH_XXXX_WILCO-JONGE.json @@ -94,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wilco-de-jonge-2182789_20251214T112434Z.json" ], - "modified_at": "2026-01-09T19:18:13.406324+00:00", + "modified_at": "2026-01-09T19:50:54.092600+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wilco-de-jonge-2182789", @@ -122,7 +122,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -171,7 +171,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.406316+00:00", + "inferred_at": "2026-01-09T19:50:54.092588+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_NL-ZH-WAD_XXXX_DEEM-STAM.json b/data/person/ID_XX-XX-XXX_198X_NL-ZH-WAD_XXXX_DEEM-STAM.json index 9d3800ee6f..ffc72953a6 100644 --- a/data/person/ID_XX-XX-XXX_198X_NL-ZH-WAD_XXXX_DEEM-STAM.json +++ b/data/person/ID_XX-XX-XXX_198X_NL-ZH-WAD_XXXX_DEEM-STAM.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/deemstam_20251214T113256Z.json" ], - "modified_at": "2026-01-09T19:18:13.451094+00:00", + "modified_at": "2026-01-09T19:50:54.335288+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "deemstam", @@ -123,7 +123,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.451054+00:00", + "inferred_at": "2026-01-09T19:50:54.335212+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-FREELAND.json b/data/person/ID_XX-XX-XXX_198X_US-MO-SL_XXXX_CHRIS-FREELAND.json similarity index 57% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-FREELAND.json rename to data/person/ID_XX-XX-XXX_198X_US-MO-SL_XXXX_CHRIS-FREELAND.json index a666a549e7..a831302a81 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-FREELAND.json +++ b/data/person/ID_XX-XX-XXX_198X_US-MO-SL_XXXX_CHRIS-FREELAND.json @@ -1,16 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-FREELAND", + "ppid": "ID_XX-XX-XXX_198X_US-MO-SL_XXXX_CHRIS-FREELAND", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "first_date": "198X", + "last_location": "US-MO-SL", "last_date": "XXXX", "name_tokens": [ "CHRIS", "FREELAND" - ] + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Chris Freeland", @@ -24,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -182,7 +188,148 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chrisfreeland_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:28.384674+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "chrisfreeland" + "linkedin_slug": "chrisfreeland", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-FREELAND", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHRIS-FREELAND", + "changed_at": "2026-01-09T19:43:42.763417+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHRIS-FREELAND", + "new_ppid": "ID_XX-XX-XXX_198X_US-MO-SL_XXXX_CHRIS-FREELAND", + "changed_at": "2026-01-09T19:51:28.384671+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1980 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Missouri Botanical Garden", + "title": "Application Development Manager", + "date_range": "2003 - 2009" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2003 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2003 - 23 = 1980", + "result": "Estimated birth year: 1980", + "range": "1975-1985 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1975, + 1985 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:28.206254+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "St. Louis", + "formatted": "US-MO-SL", + "country_code": "US", + "region_code": "MO", + "settlement_code": "SL", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "St. Louis, Missouri, United States (bicoastal STL/FL)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "St. Louis, Missouri, United States (bicoastal STL/FL)", + "result": { + "geonames_id": 4407066, + "geonames_name": "St. Louis", + "admin1_code": "MO", + "admin1_name": "Missouri", + "feature_code": "PPLA2", + "latitude": 38.62727, + "longitude": -90.19789 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-MO-SL" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 4407066, + "geonames_name": "St. Louis", + "admin1_code": "MO", + "admin1_name": "Missouri", + "feature_code": "PPLA2", + "latitude": 38.62727, + "longitude": -90.19789 + }, + "inferred_at": "2026-01-09T19:51:28.384659+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ATLAS-MCLAMB.json b/data/person/ID_XX-XX-XXX_198X_US-NC-DUR_XXXX_ATLAS-MCLAMB.json similarity index 50% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ATLAS-MCLAMB.json rename to data/person/ID_XX-XX-XXX_198X_US-NC-DUR_XXXX_ATLAS-MCLAMB.json index fcd1db4cb9..16df96e53f 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ATLAS-MCLAMB.json +++ b/data/person/ID_XX-XX-XXX_198X_US-NC-DUR_XXXX_ATLAS-MCLAMB.json @@ -1,16 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ATLAS-MCLAMB", + "ppid": "ID_XX-XX-XXX_198X_US-NC-DUR_XXXX_ATLAS-MCLAMB", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "first_date": "198X", + "last_location": "US-NC-DUR", "last_date": "XXXX", "name_tokens": [ "ATLAS", "MCLAMB" - ] + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Atlas McLamb", @@ -24,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -145,7 +151,148 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/atlasdmclamb3trey_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:07.857572+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "atlasdmclamb3trey" + "linkedin_slug": "atlasdmclamb3trey", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ATLAS-MCLAMB", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ATLAS-MCLAMB", + "changed_at": "2026-01-09T19:43:41.402287+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ATLAS-MCLAMB", + "new_ppid": "ID_XX-XX-XXX_198X_US-NC-DUR_XXXX_ATLAS-MCLAMB", + "changed_at": "2026-01-09T19:51:07.857569+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1989 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Internet Archive", + "title": "Digital Archivist", + "date_range": "2012-01" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2012 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2012 - 23 = 1989", + "result": "Estimated birth year: 1989", + "range": "1984-1994 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1984, + 1994 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:07.662776+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Durham", + "formatted": "US-NC-DUR", + "country_code": "US", + "region_code": "NC", + "settlement_code": "DUR", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Durham, NC / Raleigh, North Carolina, United States" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Durham, NC / Raleigh, North Carolina, United States", + "result": { + "geonames_id": 4464368, + "geonames_name": "Durham", + "admin1_code": "NC", + "admin1_name": "North Carolina", + "feature_code": "PPLA2", + "latitude": 35.99403, + "longitude": -78.89862 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-NC-DUR" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 4464368, + "geonames_name": "Durham", + "admin1_code": "NC", + "admin1_name": "North Carolina", + "feature_code": "PPLA2", + "latitude": 35.99403, + "longitude": -78.89862 + }, + "inferred_at": "2026-01-09T19:51:07.857544+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ABEER-BEHBEHANI.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ABEER-BEHBEHANI.json new file mode 100644 index 0000000000..4d7cc5b963 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ABEER-BEHBEHANI.json @@ -0,0 +1,162 @@ +{ + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ABEER-BEHBEHANI", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "198X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ABEER", + "BEHBEHANI" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] + }, + "name": { + "full_name": "Abeer Behbehani", + "display_name": "Abeer Behbehani", + "name_romanized": null, + "name_tokens": [ + "ABEER", + "BEHBEHANI" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Abeer Behbehani", + "linkedin_url": "https://www.linkedin.com/in/abeer-behbehani-59413a52", + "headline": "Head of IT Dept. at Kuwait National Library", + "location": "Kuwait (KW)", + "connections": "31 connections • 37 followers", + "about": "Total Experience: 21 years and 10 months", + "experience": [], + "education": [ + { + "degree": "Master's degree, Library and Information Science", + "institution": "Kuwait University" + }, + { + "degree": "Bachelor's degree, Computer Science", + "institution": "Kuwait University" + } + ], + "skills": [], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C5103AQHjmI8mch6PWQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1516564980619?e=2147483647&v=beta&t=62YKV_Tk1dW7DACdP_YUfk9FUCeCCaQESwVyXF6flnE" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/abeer-behbehani-59413a52_20251214T103804Z.json", + "observed_on": "2025-12-14T10:38:04.496203+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.517657+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/abeer-behbehani-59413a52_20251214T103804Z.json" + ], + "modified_at": "2026-01-09T19:51:11.048631+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "abeer-behbehani-59413a52", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ABEER-BEHBEHANI", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ABEER-BEHBEHANI", + "changed_at": "2026-01-09T19:41:08.432509+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1982 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 21 years" + }, + { + "step": 2, + "calculation": "2026 - 21 = 2005", + "result": "Estimated first job year: 2005", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2005 - 23 = 1982", + "result": "Estimated birth year: 1982", + "range": "1975-1989 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1975, + 1989 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:11.048605+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANJA-OSKAMP.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANJA-OSKAMP.json similarity index 61% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANJA-OSKAMP.json rename to data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANJA-OSKAMP.json index 682ce9e14a..65f1c5add7 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANJA-OSKAMP.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANJA-OSKAMP.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANJA-OSKAMP", + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANJA-OSKAMP", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "ANJA", "OSKAMP" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -134,7 +139,85 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anjaoskamp_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:17.467713+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "anjaoskamp" + "linkedin_slug": "anjaoskamp", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANJA-OSKAMP", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANJA-OSKAMP", + "changed_at": "2026-01-09T19:43:41.418905+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1989 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Open University of the Netherlands (Open Universiteit)", + "title": "Rector Magnificus", + "date_range": "2012 - 2019-01-01" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2012 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2012 - 23 = 1989", + "result": "Estimated birth year: 1989", + "range": "1984-1994 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1984, + 1994 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:17.460467+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNET-PASVEER.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNET-PASVEER.json index d72d8d4e56..c77391dc0b 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNET-PASVEER.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNET-PASVEER.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annetpasveer_20251214T112440Z.json" ], - "modified_at": "2026-01-09T19:18:14.832864+00:00", + "modified_at": "2026-01-09T19:51:04.573095+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annetpasveer", @@ -113,7 +113,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.830974+00:00", + "inferred_at": "2026-01-09T19:51:04.571154+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNETTE-GAALMAN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNETTE-GAALMAN.json index b26ad4e4cf..c9a1cc948a 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNETTE-GAALMAN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ANNETTE-GAALMAN.json @@ -149,7 +149,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annette-gaalman-21797aa_20251212T200000Z.json" ], - "modified_at": "2026-01-09T19:18:16.099127+00:00", + "modified_at": "2026-01-09T19:51:17.459050+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annette-gaalman-21797aa", @@ -176,7 +176,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -225,7 +225,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.091431+00:00", + "inferred_at": "2026-01-09T19:51:17.450766+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_APAS-ZWART.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_APAS-ZWART.json index a834f640c2..885779b8b2 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_APAS-ZWART.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_APAS-ZWART.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/apas-zwart-19648010b_20251214T111425Z.json" ], - "modified_at": "2026-01-09T19:18:13.041762+00:00", + "modified_at": "2026-01-09T19:50:50.799380+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "apas-zwart-19648010b", @@ -123,7 +123,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.036417+00:00", + "inferred_at": "2026-01-09T19:50:50.789306+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARCO-AMBTMAN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARCO-AMBTMAN.json index 1895f160d1..c9aa4cab5e 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARCO-AMBTMAN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARCO-AMBTMAN.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arco-den-ambtman-1450684_20251214T112158Z.json" ], - "modified_at": "2026-01-09T19:18:13.662202+00:00", + "modified_at": "2026-01-09T19:50:55.402851+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arco-den-ambtman-1450684", @@ -148,7 +148,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.660373+00:00", + "inferred_at": "2026-01-09T19:50:55.398729+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARIAN-KRUIF.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARIAN-KRUIF.json index 7809bd3d2e..82342972b5 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARIAN-KRUIF.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARIAN-KRUIF.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arian-de-kruif-50b8a964_20251214T110342Z.json" ], - "modified_at": "2026-01-09T19:18:15.304169+00:00", + "modified_at": "2026-01-09T19:51:08.435783+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arian-de-kruif-50b8a964", @@ -146,7 +146,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -195,7 +195,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.302163+00:00", + "inferred_at": "2026-01-09T19:51:08.433714+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARIE-WALLERT.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARIE-WALLERT.json index fdf29a2300..fc44c5ccec 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARIE-WALLERT.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARIE-WALLERT.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arie-wallert-a533b516_20251214T111800Z.json" ], - "modified_at": "2026-01-09T19:18:14.637393+00:00", + "modified_at": "2026-01-09T19:51:03.209553+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arie-wallert-a533b516", @@ -114,7 +114,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +163,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.635441+00:00", + "inferred_at": "2026-01-09T19:51:03.207517+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARJAN-VOSKUILEN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARJAN-VOSKUILEN.json similarity index 68% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARJAN-VOSKUILEN.json rename to data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARJAN-VOSKUILEN.json index 000f327fbb..ff23b3e43e 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARJAN-VOSKUILEN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARJAN-VOSKUILEN.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARJAN-VOSKUILEN", + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARJAN-VOSKUILEN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "ARJAN", "VOSKUILEN" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -168,7 +173,85 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arjan-van-voskuilen-44591989_20251213T020000Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:03.569839+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "arjan-van-voskuilen-44591989" + "linkedin_slug": "arjan-van-voskuilen-44591989", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARJAN-VOSKUILEN", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARJAN-VOSKUILEN", + "changed_at": "2026-01-09T19:43:42.732150+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1980 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Rientjes Mavo", + "title": "Docent Wiskunde Vmbo-tl", + "date_range": "Aug 2003 - Jul 2004" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2003 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2003 - 23 = 1980", + "result": "Estimated birth year: 1980", + "range": "1975-1985 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1975, + 1985 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:03.565784+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARTHUR-APONN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARTHUR-APONN.json similarity index 53% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARTHUR-APONN.json rename to data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARTHUR-APONN.json index 7193b9be8d..aa06af2f32 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARTHUR-APONN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARTHUR-APONN.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARTHUR-APONN", + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARTHUR-APONN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "ARTHUR", "APONN" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -70,7 +75,82 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arthur-aponn0-94875024_20251214T112335Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:22.340610+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "arthur-aponn0-94875024" + "linkedin_slug": "arthur-aponn0-94875024", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARTHUR-APONN", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ARTHUR-APONN", + "changed_at": "2026-01-09T19:41:12.576273+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1980 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 23 years" + }, + { + "step": 2, + "calculation": "2026 - 23 = 2003", + "result": "Estimated first job year: 2003", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2003 - 23 = 1980", + "result": "Estimated birth year: 1980", + "range": "1973-1987 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1973, + 1987 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:22.338697+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AURELIA-MIRCESCU.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AURELIA-MIRCESCU.json index 12d37d4eb5..e8386c9888 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AURELIA-MIRCESCU.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_AURELIA-MIRCESCU.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aurelia-mircescu-6b7b3425_20251214T103920Z.json" ], - "modified_at": "2026-01-09T19:18:16.049130+00:00", + "modified_at": "2026-01-09T19:51:16.852990+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aurelia-mircescu-6b7b3425", @@ -109,7 +109,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.049118+00:00", + "inferred_at": "2026-01-09T19:51:16.852949+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BILJANA-DJORDJEVIC.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BILJANA-DJORDJEVIC.json index 5496bff42f..46c92c2adb 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BILJANA-DJORDJEVIC.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BILJANA-DJORDJEVIC.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/biljana-djordjevic-75300131_20251214T103904Z.json" ], - "modified_at": "2026-01-09T19:18:16.784696+00:00", + "modified_at": "2026-01-09T19:51:21.364142+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "biljana-djordjevic-75300131", @@ -115,7 +115,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.784666+00:00", + "inferred_at": "2026-01-09T19:51:21.364087+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BJORN-JONG.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BJORN-JONG.json index 1d68236b3b..42e74fc973 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BJORN-JONG.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BJORN-JONG.json @@ -97,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bjorn-de-jong-4156861a_20251212T200000Z.json" ], - "modified_at": "2026-01-09T19:18:14.650288+00:00", + "modified_at": "2026-01-09T19:51:03.222365+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bjorn-de-jong-4156861a", @@ -118,7 +118,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +159,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.646541+00:00", + "inferred_at": "2026-01-09T19:51:03.218518+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BORIANA-HADZIYSKA.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BORIANA-HADZIYSKA.json index 4c730db2b9..16d693d332 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BORIANA-HADZIYSKA.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BORIANA-HADZIYSKA.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/boriana-hadziyska-244124b5_20251214T103841Z.json" ], - "modified_at": "2026-01-09T19:18:14.839554+00:00", + "modified_at": "2026-01-09T19:51:04.953687+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "boriana-hadziyska-244124b5", @@ -106,7 +106,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.839527+00:00", + "inferred_at": "2026-01-09T19:51:04.811376+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BRIAN-BOTTINGA.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BRIAN-BOTTINGA.json index 20447aaf49..af6b30c74f 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BRIAN-BOTTINGA.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_BRIAN-BOTTINGA.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/brian-bottinga-5756b217a_20251214T111403Z.json" ], - "modified_at": "2026-01-09T19:18:13.502219+00:00", + "modified_at": "2026-01-09T19:50:54.545742+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "brian-bottinga-5756b217a", @@ -119,7 +119,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.500075+00:00", + "inferred_at": "2026-01-09T19:50:54.543733+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CAITLIN-OLSON.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CAITLIN-OLSON.json similarity index 67% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CAITLIN-OLSON.json rename to data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CAITLIN-OLSON.json index a0f3b77f5f..b3c16d62b3 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CAITLIN-OLSON.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CAITLIN-OLSON.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CAITLIN-OLSON", + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CAITLIN-OLSON", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "CAITLIN", "OLSON" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -163,7 +168,85 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/caitlinpatriciaolson_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:50.902711+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "caitlinpatriciaolson" + "linkedin_slug": "caitlinpatriciaolson", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CAITLIN-OLSON", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CAITLIN-OLSON", + "changed_at": "2026-01-09T19:43:39.989622+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1989 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "San Francisco Magazine", + "title": "Editorial Assistant", + "date_range": "2012-10 - 2013-05" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2012 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2012 - 23 = 1989", + "result": "Estimated birth year: 1989", + "range": "1984-1994 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1984, + 1994 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:50.850859+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CAROL-PENGEL.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CAROL-PENGEL.json index dec863470f..86d87893dc 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CAROL-PENGEL.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CAROL-PENGEL.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carol-pengel-53b23212_20251214T112115Z.json" ], - "modified_at": "2026-01-09T19:18:11.229464+00:00", + "modified_at": "2026-01-09T19:50:46.691321+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carol-pengel-53b23212", @@ -131,7 +131,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:11.222178+00:00", + "inferred_at": "2026-01-09T19:50:46.689390+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CAROLIEN-BOENDER.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CAROLIEN-BOENDER.json index 05e4d2cf7c..22f336e5a8 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CAROLIEN-BOENDER.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CAROLIEN-BOENDER.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carolien-boender-89489891_20251214T110404Z.json" ], - "modified_at": "2026-01-09T19:18:16.694777+00:00", + "modified_at": "2026-01-09T19:51:21.520867+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carolien-boender-89489891", @@ -141,7 +141,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.692839+00:00", + "inferred_at": "2026-01-09T19:51:21.518939+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHANTAL-HARTMAN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHANTAL-HARTMAN.json similarity index 63% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHANTAL-HARTMAN.json rename to data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHANTAL-HARTMAN.json index 58d702790e..ea45d5f5dd 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHANTAL-HARTMAN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHANTAL-HARTMAN.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHANTAL-HARTMAN", + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHANTAL-HARTMAN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "CHANTAL", "HARTMAN" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -161,7 +166,85 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chantalhartman_20251213T020000Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:22.264043+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "chantalhartman" + "linkedin_slug": "chantalhartman", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHANTAL-HARTMAN", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHANTAL-HARTMAN", + "changed_at": "2026-01-09T19:43:39.352017+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1984 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Golden Tulip Apollo Amsterdam", + "title": "Front Office Agent", + "date_range": "Jul 2007 - May 2009" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2007 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2007 - 23 = 1984", + "result": "Estimated birth year: 1984", + "range": "1979-1989 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1979, + 1989 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:22.261182+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHRIS-ZIELSTRA.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHRIS-ZIELSTRA.json new file mode 100644 index 0000000000..9ff77c3c97 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHRIS-ZIELSTRA.json @@ -0,0 +1,160 @@ +{ + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHRIS-ZIELSTRA", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "198X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "CHRIS", + "ZIELSTRA" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] + }, + "name": { + "full_name": "Chris Zielstra", + "display_name": "Chris Zielstra", + "name_romanized": null, + "name_tokens": [ + "CHRIS", + "ZIELSTRA" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at Dienst Uitvoering Onderwijs (Ministerie van OCW)" + }, + "affiliations": [], + "profile_data": { + "name": "Chris Zielstra", + "linkedin_url": "https://www.linkedin.com/in/chris-zielstra-1b464421", + "headline": "Procesbeheerder EOS at Dienst Uitvoering Onderwijs (Ministerie van OCW)", + "location": "Greater Groningen Area (NL)", + "connections": "153 connections • 151 followers", + "about": "Total Experience: 14 years and 7 months", + "experience": [ + { + "title": "Software Engineer", + "company": "Dienst Uitvoering Onderwijs (DUO)" + } + ], + "education": [], + "skills": [ + "software" + ], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C4D03AQF5RQ1Widqadg/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1516945609990?e=2147483647&v=beta&t=j0TxeNrDA5tdYOQANXgmDjVJm2jDKUteWb3z9ES760E" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/chris-zielstra-1b464421_20251214T112334Z.json", + "observed_on": "2025-12-14T11:23:34.599191+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.555925+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/chris-zielstra-1b464421_20251214T112334Z.json" + ], + "modified_at": "2026-01-09T19:50:47.032843+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "chris-zielstra-1b464421", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-ZIELSTRA", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CHRIS-ZIELSTRA", + "changed_at": "2026-01-09T19:41:08.111102+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1989 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 14 years" + }, + { + "step": 2, + "calculation": "2026 - 14 = 2012", + "result": "Estimated first job year: 2012", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2012 - 23 = 1989", + "result": "Estimated birth year: 1989", + "range": "1982-1996 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1982, + 1996 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:47.030300+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CONNY-MERKESTEIN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CONNY-MERKESTEIN.json index 409a7c1665..488b6c166f 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CONNY-MERKESTEIN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_CONNY-MERKESTEIN.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/conny-merkestein-68483681_20251214T112338Z.json" ], - "modified_at": "2026-01-09T19:18:15.656110+00:00", + "modified_at": "2026-01-09T19:51:13.283283+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "conny-merkestein-68483681", @@ -106,7 +106,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.654115+00:00", + "inferred_at": "2026-01-09T19:51:13.278939+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DEBBIE-COX.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DEBBIE-COX.json new file mode 100644 index 0000000000..039430aa86 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DEBBIE-COX.json @@ -0,0 +1,158 @@ +{ + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DEBBIE-COX", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "198X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "DEBBIE", + "COX" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ] + }, + "name": { + "full_name": "Debbie Cox", + "display_name": "Debbie Cox", + "name_romanized": null, + "name_tokens": [ + "DEBBIE", + "COX" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "M" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Debbie Cox", + "linkedin_url": "https://www.linkedin.com/in/debbie-cox-3306aa138", + "headline": "Coordinator", + "location": "Coombs, Australian Capital Territory, Australia (AU)", + "connections": "68 connections • 68 followers", + "about": "Total Experience: 28 years and 2 months", + "experience": [], + "education": [ + { + "degree": "Bachelor's degree, Library and Information Science", + "institution": "University of Canberra" + } + ], + "skills": [], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/debbie-cox-3306aa138_20251214T103823Z.json", + "observed_on": "2025-12-14T10:38:23.371322+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.558083+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/debbie-cox-3306aa138_20251214T103823Z.json" + ], + "modified_at": "2026-01-09T19:51:22.552852+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "debbie-cox-3306aa138", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DEBBIE-COX", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DEBBIE-COX", + "changed_at": "2026-01-09T19:41:12.207782+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "edtf_meaning": "one of: 1960s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1975 is in 198X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 28 years" + }, + { + "step": 2, + "calculation": "2026 - 28 = 1998", + "result": "Estimated first job year: 1998", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1998 - 23 = 1975", + "result": "Estimated birth year: 1975", + "range": "1968-1982 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1968, + 1982 + ], + "output": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1975 spans decades 196X/198X", + "inferred_at": "2026-01-09T19:51:22.517560+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DINI-MARISKA.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DINI-MARISKA.json index 99c4213021..8b686209a4 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DINI-MARISKA.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_DINI-MARISKA.json @@ -94,7 +94,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dini-mariska-1261b5207_20251214T111941Z.json" ], - "modified_at": "2026-01-09T19:18:13.091278+00:00", + "modified_at": "2026-01-09T19:51:02.478692+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dini-mariska-1261b5207", @@ -130,7 +130,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.091211+00:00", + "inferred_at": "2026-01-09T19:51:02.150161+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_EEF-VEGT.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_EEF-VEGT.json index 32b9d75605..8a83a57b4f 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_EEF-VEGT.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_EEF-VEGT.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eef-vegt-796a8232_20251214T112330Z.json" ], - "modified_at": "2026-01-09T19:18:16.142326+00:00", + "modified_at": "2026-01-09T19:51:17.604499+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eef-vegt-796a8232", @@ -111,7 +111,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.138345+00:00", + "inferred_at": "2026-01-09T19:51:17.599097+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ELSA-BITRI.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ELSA-BITRI.json index 94ee62bb98..a1bedea033 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ELSA-BITRI.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ELSA-BITRI.json @@ -96,7 +96,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elsa-bitri-79025119b_20251214T103752Z.json" ], - "modified_at": "2026-01-09T19:18:11.365328+00:00", + "modified_at": "2026-01-09T19:51:22.511341+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elsa-bitri-79025119b", @@ -132,7 +132,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -181,7 +181,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.365266+00:00", + "inferred_at": "2026-01-09T19:51:22.511214+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FLORIN-NISTOR.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FLORIN-NISTOR.json index 94ae841f9d..464765b4ee 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FLORIN-NISTOR.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_FLORIN-NISTOR.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/florin-nistor-52205536_20251214T103925Z.json" ], - "modified_at": "2026-01-09T19:18:15.450558+00:00", + "modified_at": "2026-01-09T19:51:10.878046+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "florin-nistor-52205536", @@ -107,7 +107,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -156,7 +156,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.450543+00:00", + "inferred_at": "2026-01-09T19:51:10.877998+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_GERARD-BUKKEMS.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_GERARD-BUKKEMS.json index c61175f8fd..6d1d024804 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_GERARD-BUKKEMS.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_GERARD-BUKKEMS.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerard-bukkems-07a5b315_20251214T112727Z.json" ], - "modified_at": "2026-01-09T19:18:13.982590+00:00", + "modified_at": "2026-01-09T19:50:57.683621+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerard-bukkems-07a5b315", @@ -133,7 +133,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.980636+00:00", + "inferred_at": "2026-01-09T19:50:57.680727+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_GERARD-POEL.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_GERARD-POEL.json index 84cdb41de7..fe0c62f380 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_GERARD-POEL.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_GERARD-POEL.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerard-van-der-poel-11b20570_20251214T112227Z.json" ], - "modified_at": "2026-01-09T19:18:14.257912+00:00", + "modified_at": "2026-01-09T19:50:59.323450+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerard-van-der-poel-11b20570", @@ -107,7 +107,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -156,7 +156,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.255993+00:00", + "inferred_at": "2026-01-09T19:50:59.315925+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_GREGORY-RICHARDSON.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_GREGORY-RICHARDSON.json index ee1eb9e8c8..c82fbb126b 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_GREGORY-RICHARDSON.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_GREGORY-RICHARDSON.json @@ -133,7 +133,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gregory-richardson-ph-d-73060614_20251214T103742Z.json" ], - "modified_at": "2026-01-09T19:18:18.925243+00:00", + "modified_at": "2026-01-09T19:51:29.502724+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gregory-richardson-ph-d-73060614", @@ -160,7 +160,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -209,7 +209,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:18.925208+00:00", + "inferred_at": "2026-01-09T19:51:29.502623+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HERLINA-HERLINA.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HASAN-KUMAS.json similarity index 57% rename from data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HERLINA-HERLINA.json rename to data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HASAN-KUMAS.json index fa17c2b553..e656ef2943 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HERLINA-HERLINA.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HASAN-KUMAS.json @@ -1,5 +1,5 @@ { - "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HERLINA-HERLINA", + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HASAN-KUMAS", "ppid_type": "ID", "ppid_components": { "type": "ID", @@ -8,8 +8,8 @@ "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ - "HERLINA", - "HERLINA" + "HASAN", + "KUMAS" ], "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ @@ -17,12 +17,12 @@ ] }, "name": { - "full_name": "Herlina herlina", - "display_name": "Herlina herlina", + "full_name": "Hasan Kumas", + "display_name": "Hasan Kumas", "name_romanized": null, "name_tokens": [ - "HERLINA", - "HERLINA" + "HASAN", + "KUMAS" ], "source": "linkedin_profile" }, @@ -35,45 +35,61 @@ "heritage_relevance": { "is_heritage_relevant": true, "heritage_types": [ - "O" + "E" ], - "rationale": "Identified as heritage staff at Ministry of Tourism of the Republic of Indonesia" + "rationale": "Education sector professional at government education inspectorate" }, "affiliations": [], "profile_data": { - "name": "Herlina herlina", - "linkedin_url": "https://www.linkedin.com/in/herlina-herlina-b48510a9", - "headline": "Staff for Nature Tourism Development at Ministry of Tourism of the Republic of Indonesia", - "location": "Greater Melbourne Area (AU)", - "connections": "66 connections • 67 followers", - "about": "Total Experience: 16 years and 10 months", + "name": "Hasan Kumas", + "linkedin_url": "https://www.linkedin.com/in/hasan-kumas-0714ab173", + "headline": "Afdelingshoofd Inspectie van het Onderwijs", + "location": "Arnhem-Nijmegen Region", + "connections": "500 connections • 1,121 followers", + "about": null, "experience": [ { - "title": "Staff For The Deputy Assistant For Natural And Man-Made Tourist Destination Development", - "company": "Ministry of Tourism of the Republic of Indonesia (Current)", - "date_range": "Jan 2011 - Present • 14 years and 10 months", - "location": "Jakarta, Indonesia" + "title": "Afdelingshoofd", + "company": "Inspectie van het Onderwijs", + "dates": "Oct 2023 - Present" }, { - "title": "Staff For Sub-Directorate Of Nature And And Cultural Tourism Development", - "company": "Ministry of Tourism of the Republic of Indonesia (Current)", - "date_range": "Jan 2011 - Present • 14 years and 10 months", - "location": "Jakarta, Indonesia" + "title": "Gemeenteraadslid Arnhem", + "company": "VVD", + "dates": "Mar 2022 - Present" + }, + { + "title": "Voorzitter GMR", + "company": "Flores Onderwijs", + "dates": "Sep 2021 - Oct 2023" + }, + { + "title": "Teamleider", + "company": "Scholengemeenschap Marianum", + "dates": "Nov 2020 - Oct 2023" + }, + { + "title": "Teacher Leader", + "company": "Scholengemeenschap Marianum", + "dates": "Apr 2018 - Nov 2020" + }, + { + "title": "Docent Economie", + "company": "Scholengemeenschap Marianum", + "dates": "Feb 2011 - Nov 2020" } ], "education": [], - "skills": [ - "tourism" - ], + "skills": [], "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C4E03AQGRFuTPNBeoTA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1517537027552?e=2147483647&v=beta&t=XTnCmCCVJWFDt95r2HYSm8HXhfCBQXEG35xWx6IEo9k" + "profile_image_url": "https://media.licdn.com/dms/image/v2/C4D03AQEpTuG-B_MBTg/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1647713427433" }, "web_claims": [], "source_observations": [ { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/herlina-herlina-b48510a9_20251214T112035Z.json", - "observed_on": "2025-12-14T11:20:35.632545+00:00", - "extraction_agent": "claude-sonnet-4-20250514" + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/hasan-kumas-0714ab173_20251212T220000Z.json", + "observed_on": "2025-12-12T22:00:00Z", + "extraction_agent": "claude-opus-4.5" } ], "enrichment_metadata": { @@ -83,20 +99,20 @@ } }, "provenance": { - "created_at": "2026-01-09T17:29:48.519140+00:00", + "created_at": "2026-01-09T17:29:48.567730+00:00", "created_by": "generate_ppids.py", "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/herlina-herlina-b48510a9_20251214T112035Z.json" + "/Users/kempersc/apps/glam/data/custodian/person/entity/hasan-kumas-0714ab173_20251212T220000Z.json" ], - "modified_at": "2026-01-09T19:18:13.095066+00:00", + "modified_at": "2026-01-09T19:51:22.951740+00:00", "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "herlina-herlina-b48510a9", + "linkedin_slug": "hasan-kumas-0714ab173", "ppid_history": [ { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HERLINA-HERLINA", - "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HERLINA-HERLINA", - "changed_at": "2026-01-09T17:43:03.500348+00:00", + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HASAN-KUMAS", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HASAN-KUMAS", + "changed_at": "2026-01-09T19:43:42.016793+00:00", "reason": "observation_based_inference", "inferred_fields": [ "inferred_birth_decade" @@ -115,16 +131,16 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, "observation": "First job record found (no education data)", "source_field": "profile_data.experience", "source_value": { - "company": "Ministry of Tourism of the Republic of Indonesia (Current)", - "title": "Staff For The Deputy Assistant For Natural And Man-Made Tourist Destination Development", - "date_range": "Jan 2011 - Present • 14 years and 10 months" + "company": "Scholengemeenschap Marianum", + "title": "Docent Economie", + "date_range": "Feb 2011 - Nov 2020" } }, { @@ -164,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.095047+00:00", + "inferred_at": "2026-01-09T19:51:22.951704+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HUSNA-HUSNABUDPAR.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HUSNA-HUSNABUDPAR.json index f03f255124..dba74e145f 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HUSNA-HUSNABUDPAR.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HUSNA-HUSNABUDPAR.json @@ -83,17 +83,28 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/husna-husnabudpar-98a4a832_20251214T111954Z.json" ], - "modified_at": "2026-01-09T19:18:13.230709+00:00", + "modified_at": "2026-01-09T19:50:48.226712+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "husna-husnabudpar-98a4a832", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HUSNA-HUSNABUDPAR", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HUSNA-HUSNABUDPAR", + "changed_at": "2026-01-09T19:18:13.230707+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], "inferred_birth_decade": { "value": "198X", "edtf": "198X", "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -134,19 +145,8 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.230681+00:00", + "inferred_at": "2026-01-09T19:50:47.508103+00:00", "inferred_by": "enrich_ppids.py" } - }, - "ppid_history": [ - { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HUSNA-HUSNABUDPAR", - "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_HUSNA-HUSNABUDPAR", - "changed_at": "2026-01-09T19:18:13.230707+00:00", - "reason": "observation_based_inference", - "inferred_fields": [ - "inferred_birth_decade" - ] - } - ] + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_IRINA-LYNDEN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_IRINA-LYNDEN.json index 3f9cdd8490..9efd8e2a47 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_IRINA-LYNDEN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_IRINA-LYNDEN.json @@ -81,7 +81,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/irina-lynden-24854b6_20251214T103845Z.json" ], - "modified_at": "2026-01-09T19:18:15.051774+00:00", + "modified_at": "2026-01-09T19:51:06.650628+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "irina-lynden-24854b6", @@ -108,7 +108,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.051763+00:00", + "inferred_at": "2026-01-09T19:51:06.650602+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JOLEIN-KREGTEN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JOLEIN-KREGTEN.json index 3cd8c7042d..a7557f862f 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JOLEIN-KREGTEN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JOLEIN-KREGTEN.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jolein-van-kregten-261b0018_20251214T110301Z.json" ], - "modified_at": "2026-01-09T19:18:14.315225+00:00", + "modified_at": "2026-01-09T19:51:00.363731+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jolein-van-kregten-261b0018", @@ -106,7 +106,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.313330+00:00", + "inferred_at": "2026-01-09T19:51:00.361329+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JUDI-MESMAN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JUDI-MESMAN.json index 4856a486e2..4bff1a4550 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JUDI-MESMAN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_JUDI-MESMAN.json @@ -138,7 +138,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/judi-mesman-64279b140_20251214T112454Z.json" ], - "modified_at": "2026-01-09T19:18:16.452287+00:00", + "modified_at": "2026-01-09T19:51:18.512448+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "judi-mesman-64279b140", @@ -165,7 +165,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.450219+00:00", + "inferred_at": "2026-01-09T19:51:18.510000+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LEO-LANSBERGEN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LEO-LANSBERGEN.json index ed98d41603..f4d2856f60 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LEO-LANSBERGEN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LEO-LANSBERGEN.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/leo-lansbergen-7ab16940_20251214T112249Z.json" ], - "modified_at": "2026-01-09T19:18:17.181670+00:00", + "modified_at": "2026-01-09T19:51:24.476046+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "leo-lansbergen-7ab16940", @@ -113,7 +113,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.179690+00:00", + "inferred_at": "2026-01-09T19:51:24.472316+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LIESBETH-LAGEVEEN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LIESBETH-LAGEVEEN.json index 1733b76bdf..63a199cb1f 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LIESBETH-LAGEVEEN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LIESBETH-LAGEVEEN.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/liesbeth-lageveen-62012b26_20251214T112114Z.json" ], - "modified_at": "2026-01-09T19:18:16.168196+00:00", + "modified_at": "2026-01-09T19:51:17.897910+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "liesbeth-lageveen-62012b26", @@ -109,7 +109,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.165473+00:00", + "inferred_at": "2026-01-09T19:51:17.894965+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LJUBICA-LJUBISIC.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LJUBICA-LJUBISIC.json index f47428ff97..cc6ad1ff3d 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LJUBICA-LJUBISIC.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LJUBICA-LJUBISIC.json @@ -97,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ljubica-ljubisic-34792a20_20251214T103811Z.json" ], - "modified_at": "2026-01-09T19:18:13.721100+00:00", + "modified_at": "2026-01-09T19:50:55.991117+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ljubica-ljubisic-34792a20", @@ -124,7 +124,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.721088+00:00", + "inferred_at": "2026-01-09T19:50:55.991043+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LORAINE-BROKELMAN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LORAINE-BROKELMAN.json similarity index 69% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LORAINE-BROKELMAN.json rename to data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LORAINE-BROKELMAN.json index 2c6312136a..3e19805be8 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LORAINE-BROKELMAN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LORAINE-BROKELMAN.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LORAINE-BROKELMAN", + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LORAINE-BROKELMAN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "LORAINE", "BROKELMAN" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -210,7 +215,82 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/loraine-brokelman-317a47116_20251213T020000Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:00.081499+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "loraine-brokelman-317a47116" + "linkedin_slug": "loraine-brokelman-317a47116", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LORAINE-BROKELMAN", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LORAINE-BROKELMAN", + "changed_at": "2026-01-09T19:43:40.208497+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1989 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "14 years and 3 months" + }, + { + "step": 2, + "calculation": "2026 - 14 = 2012", + "result": "Estimated first job year: 2012", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2012 - 23 = 1989", + "result": "Estimated birth year: 1989", + "range": "1982-1996 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1982, + 1996 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:00.077921+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LUDWIG-ROEMER.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LUDWIG-ROEMER.json index 8a435d802e..f8f42ccbfb 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LUDWIG-ROEMER.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_LUDWIG-ROEMER.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ludwig-roemer-a52bb425a_20251214T113037Z.json" ], - "modified_at": "2026-01-09T19:18:11.461768+00:00", + "modified_at": "2026-01-09T19:50:46.966977+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ludwig-roemer-a52bb425a", @@ -111,7 +111,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:11.461750+00:00", + "inferred_at": "2026-01-09T19:50:46.966907+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARGA-THIJM.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARGA-THIJM.json new file mode 100644 index 0000000000..7b41f2d852 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARGA-THIJM.json @@ -0,0 +1,155 @@ +{ + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARGA-THIJM", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "198X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "MARGA", + "THIJM" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "196X" + ] + }, + "name": { + "full_name": "marga thijm", + "display_name": "marga thijm", + "name_romanized": null, + "name_tokens": [ + "MARGA", + "THIJM" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "M" + ], + "rationale": "Identified as heritage staff at Van Gogh Museum" + }, + "affiliations": [], + "profile_data": { + "name": "marga thijm", + "linkedin_url": "https://www.linkedin.com/in/marga-thijm-20237340", + "headline": "", + "location": "Netherlands (NL)", + "connections": "92 connections • 1 followers", + "about": "Pensionada Total Experience: 29 years and 2 months", + "experience": [], + "education": [], + "skills": [ + "security" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/marga-thijm-20237340_20251214T110318Z.json", + "observed_on": "2025-12-14T11:03:18.236849+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.622594+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/marga-thijm-20237340_20251214T110318Z.json" + ], + "modified_at": "2026-01-09T19:50:47.493635+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "marga-thijm-20237340", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARGA-THIJM", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARGA-THIJM", + "changed_at": "2026-01-09T19:41:08.447211+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "edtf_meaning": "one of: 1960s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1974 is in 198X, but range extends into 196X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 29 years" + }, + { + "step": 2, + "calculation": "2026 - 29 = 1997", + "result": "Estimated first job year: 1997", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "1997 - 23 = 1974", + "result": "Estimated birth year: 1974", + "range": "1967-1981 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1967, + 1981 + ], + "output": [ + "196X", + "198X" + ], + "edtf": "[196X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1974 spans decades 196X/198X", + "inferred_at": "2026-01-09T19:50:47.491647+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARINUS-POSTMA.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARINUS-POSTMA.json index 4fc857d10c..440af3453b 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARINUS-POSTMA.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARINUS-POSTMA.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marinus-postma-20322165_20251214T112227Z.json" ], - "modified_at": "2026-01-09T19:18:14.925401+00:00", + "modified_at": "2026-01-09T19:51:05.532209+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marinus-postma-20322165", @@ -106,7 +106,7 @@ "primary_rationale": "1984 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:14.923469+00:00", + "inferred_at": "2026-01-09T19:51:05.523618+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARJAN-FABER.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARJAN-FABER.json index eda9ffa7c7..4dec60c7fc 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARJAN-FABER.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MARJAN-FABER.json @@ -167,7 +167,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjan-faber-72362b58_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:13.143688+00:00", + "modified_at": "2026-01-09T19:50:52.793332+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjan-faber-72362b58", @@ -194,7 +194,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -243,7 +243,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.141871+00:00", + "inferred_at": "2026-01-09T19:50:52.788802+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICHEL-REIJNS.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICHEL-REIJNS.json index 663436cb93..0b705e38ae 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICHEL-REIJNS.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICHEL-REIJNS.json @@ -129,7 +129,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michel-reijns-6483a5b1_20251214T102924Z.json" ], - "modified_at": "2026-01-09T19:18:14.919683+00:00", + "modified_at": "2026-01-09T19:51:05.514588+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michel-reijns-6483a5b1", @@ -156,7 +156,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -205,7 +205,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.915067+00:00", + "inferred_at": "2026-01-09T19:51:05.505833+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MICKEY-VALKENBURGWARINGA.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICKEY-VALKENBURGWARINGA.json similarity index 67% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MICKEY-VALKENBURGWARINGA.json rename to data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICKEY-VALKENBURGWARINGA.json index ed1f59906b..63bd3b7b0b 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MICKEY-VALKENBURGWARINGA.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICKEY-VALKENBURGWARINGA.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MICKEY-VALKENBURGWARINGA", + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICKEY-VALKENBURGWARINGA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "MICKEY", "VALKENBURGWARINGA" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -166,7 +171,85 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mickeywaringa_20251213T020000Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:22.967511+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "mickeywaringa" + "linkedin_slug": "mickeywaringa", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MICKEY-VALKENBURGWARINGA", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MICKEY-VALKENBURGWARINGA", + "changed_at": "2026-01-09T19:43:42.549067+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1984 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Julianaschool Kwartellaan", + "title": "Leerkracht En Intern Begeleider", + "date_range": "Jan 2007 - Sep 2012" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2007 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2007 - 23 = 1984", + "result": "Estimated birth year: 1984", + "range": "1979-1989 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1979, + 1989 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1984 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:22.962109+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MIRCESCU-AURELIA.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MIRCESCU-AURELIA.json new file mode 100644 index 0000000000..fc54d77a3c --- /dev/null +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MIRCESCU-AURELIA.json @@ -0,0 +1,155 @@ +{ + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MIRCESCU-AURELIA", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "198X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "MIRCESCU", + "AURELIA" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] + }, + "name": { + "full_name": "Mircescu Aurelia", + "display_name": "Mircescu Aurelia", + "name_romanized": null, + "name_tokens": [ + "MIRCESCU", + "AURELIA" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Mircescu Aurelia", + "linkedin_url": "https://www.linkedin.com/in/mircescu-aurelia-41755112a", + "headline": "Head of Cataloguing and Indexing Department at National Library of Romania", + "location": "Romania (RO)", + "connections": "31 connections • 30 followers", + "about": "Total Experience: 16 years and 10 months", + "experience": [], + "education": [], + "skills": [ + "indexing" + ], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C5603AQGr5tiQMlfHjQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1600949028806?e=2147483647&v=beta&t=U5FOk7dLYY9m-AsSpXYJSLktDjZMjLNkxDUJeVc8gYI" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/mircescu-aurelia-41755112a_20251214T103852Z.json", + "observed_on": "2025-12-14T10:38:52.022913+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.545011+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/mircescu-aurelia-41755112a_20251214T103852Z.json" + ], + "modified_at": "2026-01-09T19:51:22.930885+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "mircescu-aurelia-41755112a", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIRCESCU-AURELIA", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MIRCESCU-AURELIA", + "changed_at": "2026-01-09T19:41:09.558940+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1987 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 16 years" + }, + { + "step": 2, + "calculation": "2026 - 16 = 2010", + "result": "Estimated first job year: 2010", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2010 - 23 = 1987", + "result": "Estimated birth year: 1987", + "range": "1980-1994 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1980, + 1994 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:22.930864+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MISA-STOJANOVIC.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MISA-STOJANOVIC.json index 66183c0255..ada606bac0 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MISA-STOJANOVIC.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MISA-STOJANOVIC.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/misa-stojanovic-aa5a2622_20251214T103837Z.json" ], - "modified_at": "2026-01-09T19:18:17.169798+00:00", + "modified_at": "2026-01-09T19:51:24.455186+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "misa-stojanovic-aa5a2622", @@ -118,7 +118,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.169782+00:00", + "inferred_at": "2026-01-09T19:51:24.455154+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MOSTAFA-TABATABAEI.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MOSTAFA-TABATABAEI.json index cda6855c12..96357d09e2 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MOSTAFA-TABATABAEI.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_MOSTAFA-TABATABAEI.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mostafa-tabatabaei-99a660a0_20251214T104010Z.json" ], - "modified_at": "2026-01-09T19:18:15.529462+00:00", + "modified_at": "2026-01-09T19:51:11.841363+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mostafa-tabatabaei-99a660a0", @@ -131,7 +131,7 @@ "primary_rationale": "1985 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1985 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.529447+00:00", + "inferred_at": "2026-01-09T19:51:11.841320+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NAJAFGHOLINEJAD-AZAM.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NAJAFGHOLINEJAD-AZAM.json index 2d4885c28b..f11df946a6 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NAJAFGHOLINEJAD-AZAM.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NAJAFGHOLINEJAD-AZAM.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/najafgholinejad-azam-a254ba8b_20251214T103937Z.json" ], - "modified_at": "2026-01-09T19:18:13.985240+00:00", + "modified_at": "2026-01-09T19:50:58.746761+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "najafgholinejad-azam-a254ba8b", @@ -148,7 +148,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.985194+00:00", + "inferred_at": "2026-01-09T19:50:58.746511+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NERSES-HAYRAPETYAN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NERSES-HAYRAPETYAN.json index ba13e9ced2..f747200963 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NERSES-HAYRAPETYAN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NERSES-HAYRAPETYAN.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nerses-hayrapetyan-79b70015_20251214T103814Z.json" ], - "modified_at": "2026-01-09T19:18:12.592146+00:00", + "modified_at": "2026-01-09T19:50:48.516960+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nerses-hayrapetyan-79b70015", @@ -139,7 +139,7 @@ "primary_rationale": "1980 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1980 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.592121+00:00", + "inferred_at": "2026-01-09T19:50:48.516747+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NICOLIEN-NANKMAN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NICOLIEN-NANKMAN.json index a107993e40..b36ab9b745 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NICOLIEN-NANKMAN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NICOLIEN-NANKMAN.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicolien-nankman-977a5996_20251214T112222Z.json" ], - "modified_at": "2026-01-09T19:18:15.091116+00:00", + "modified_at": "2026-01-09T19:51:06.728001+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicolien-nankman-977a5996", @@ -126,7 +126,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:15.082318+00:00", + "inferred_at": "2026-01-09T19:51:06.721385+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NIGEL-MOOLEN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NIGEL-MOOLEN.json index 05606ffd63..e219508bd4 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NIGEL-MOOLEN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NIGEL-MOOLEN.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nigel-van-der-moolen-304872173_20251214T111827Z.json" ], - "modified_at": "2026-01-09T19:18:14.725467+00:00", + "modified_at": "2026-01-09T19:51:03.576556+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nigel-van-der-moolen-304872173", @@ -106,7 +106,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.723528+00:00", + "inferred_at": "2026-01-09T19:51:03.574661+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PAULINA-BAKKER.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PAULINA-BAKKER.json index 55acbcceef..5435ac8e32 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PAULINA-BAKKER.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PAULINA-BAKKER.json @@ -89,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/paulina-bakker-4766a989_20251214T112313Z.json" ], - "modified_at": "2026-01-09T19:18:12.762278+00:00", + "modified_at": "2026-01-09T19:50:48.812912+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "paulina-bakker-4766a989", @@ -116,7 +116,7 @@ "primary_rationale": "1986 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1986 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.760030+00:00", + "inferred_at": "2026-01-09T19:50:48.807501+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PETER-BLENKEN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PETER-BLENKEN.json index 70fb0df575..c180e2eb93 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PETER-BLENKEN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PETER-BLENKEN.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/peter-richtering-blenken-0656b735_20251214T102857Z.json" ], - "modified_at": "2026-01-09T19:18:12.619003+00:00", + "modified_at": "2026-01-09T19:50:48.637971+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "peter-richtering-blenken-0656b735", @@ -133,7 +133,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:12.614470+00:00", + "inferred_at": "2026-01-09T19:50:48.633888+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PIETER-DREU.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PIETER-DREU.json index 95e54c9074..9b7677d17b 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PIETER-DREU.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PIETER-DREU.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pieter-de-dreu-b124504b_20251214T112104Z.json" ], - "modified_at": "2026-01-09T19:18:13.575704+00:00", + "modified_at": "2026-01-09T19:50:55.103391+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pieter-de-dreu-b124504b", @@ -107,7 +107,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -156,7 +156,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.573440+00:00", + "inferred_at": "2026-01-09T19:50:55.100197+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PRIYA-LAIGSINGH.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PRIYA-LAIGSINGH.json index ce86c92c4a..5e76008343 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PRIYA-LAIGSINGH.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_PRIYA-LAIGSINGH.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/priya-laigsingh-5381a6302_20251214T113038Z.json" ], - "modified_at": "2026-01-09T19:18:16.651968+00:00", + "modified_at": "2026-01-09T19:51:21.305964+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "priya-laigsingh-5381a6302", @@ -127,7 +127,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.641737+00:00", + "inferred_at": "2026-01-09T19:51:21.295350+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENS-TOP.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENS-TOP.json index 9974b66085..c12857c9fa 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENS-TOP.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RENS-TOP.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rens-top-95b28b1a_20251214T113344Z.json" ], - "modified_at": "2026-01-09T19:18:13.258633+00:00", + "modified_at": "2026-01-09T19:50:53.711937+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rens-top-95b28b1a", @@ -106,7 +106,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.256635+00:00", + "inferred_at": "2026-01-09T19:50:53.709992+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROEL-HORSTINK.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROEL-HORSTINK.json similarity index 56% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROEL-HORSTINK.json rename to data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROEL-HORSTINK.json index 99270aa325..a5b8778c85 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROEL-HORSTINK.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROEL-HORSTINK.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROEL-HORSTINK", + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROEL-HORSTINK", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "ROEL", "HORSTINK" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -127,7 +132,85 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roel-horstink-11ab4510_20251213T020000Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:06.640504+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "roel-horstink-11ab4510" + "linkedin_slug": "roel-horstink-11ab4510", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROEL-HORSTINK", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROEL-HORSTINK", + "changed_at": "2026-01-09T19:43:42.809039+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "edtf_meaning": "one of: 1970s or 1980s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1983 is in 198X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "KPN Telecom", + "title": "Medewerker Contract Management", + "date_range": "Jan 2006 - Apr 2007" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2006 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2006 - 23 = 1983", + "result": "Estimated birth year: 1983", + "range": "1978-1988 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1978, + 1988 + ], + "output": [ + "197X", + "198X" + ], + "edtf": "[197X,198X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", + "inferred_at": "2026-01-09T19:51:06.638559+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROEL-WILLEMS.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROEL-WILLEMS.json index c3981c61d9..9b4dafc75d 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROEL-WILLEMS.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROEL-WILLEMS.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rcwillems_20251212T180000Z.json" ], - "modified_at": "2026-01-09T19:18:13.909822+00:00", + "modified_at": "2026-01-09T19:50:56.787050+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rcwillems", @@ -145,7 +145,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.907817+00:00", + "inferred_at": "2026-01-09T19:50:56.785077+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROY-BEIJER.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROY-BEIJER.json index ffc2bcb38b..90e4b38dff 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROY-BEIJER.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ROY-BEIJER.json @@ -117,7 +117,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roy-beijer-a79995171_20251214T112401Z.json" ], - "modified_at": "2026-01-09T19:18:13.347939+00:00", + "modified_at": "2026-01-09T19:50:53.899804+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "roy-beijer-a79995171", @@ -138,7 +138,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.336475+00:00", + "inferred_at": "2026-01-09T19:50:53.893858+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RUUD-LANGE.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUUD-LANGE.json similarity index 54% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RUUD-LANGE.json rename to data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUUD-LANGE.json index 955082b434..6def9cd1db 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RUUD-LANGE.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUUD-LANGE.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RUUD-LANGE", + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUUD-LANGE", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "RUUD", "LANGE" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -104,7 +109,82 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ruud-de-lange-83501626_20251212T180000Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:04.971719+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "ruud-de-lange-83501626" + "linkedin_slug": "ruud-de-lange-83501626", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RUUD-LANGE", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_RUUD-LANGE", + "changed_at": "2026-01-09T19:43:39.473902+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1989 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "14 years and 10 months" + }, + { + "step": 2, + "calculation": "2026 - 14 = 2012", + "result": "Estimated first job year: 2012", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2012 - 23 = 1989", + "result": "Estimated birth year: 1989", + "range": "1982-1996 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1982, + 1996 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:04.962611+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SEDIGHEH-KHANI.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SEDIGHEH-KHANI.json index ccfa336cfb..524f06da80 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SEDIGHEH-KHANI.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SEDIGHEH-KHANI.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sedigheh-khani-7879b34a_20251214T103817Z.json" ], - "modified_at": "2026-01-09T19:18:13.402846+00:00", + "modified_at": "2026-01-09T19:50:54.088630+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sedigheh-khani-7879b34a", @@ -135,7 +135,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.402798+00:00", + "inferred_at": "2026-01-09T19:50:54.088465+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SIMONA-TUDOR.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SIMONA-TUDOR.json index ddae49c192..82f205459d 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SIMONA-TUDOR.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SIMONA-TUDOR.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tudorsimona_20251214T103903Z.json" ], - "modified_at": "2026-01-09T19:18:16.833734+00:00", + "modified_at": "2026-01-09T19:51:22.260502+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tudorsimona", @@ -148,7 +148,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.833690+00:00", + "inferred_at": "2026-01-09T19:51:22.260399+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SUZI-VARGA.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SUZI-VARGA.json new file mode 100644 index 0000000000..44e0553b6d --- /dev/null +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SUZI-VARGA.json @@ -0,0 +1,162 @@ +{ + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SUZI-VARGA", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "198X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "SUZI", + "VARGA" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] + }, + "name": { + "full_name": "Suzi Varga", + "display_name": "Suzi Varga", + "name_romanized": null, + "name_tokens": [ + "SUZI", + "VARGA" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "M" + ], + "rationale": "Identified as heritage staff at Nederlands Openluchtmuseum" + }, + "affiliations": [], + "profile_data": { + "name": "Suzi Varga", + "linkedin_url": "https://www.linkedin.com/in/suzi-varga-0141218", + "headline": "Drs. at Nederlands Openluchtmuseum", + "location": "Netherlands (NL)", + "connections": "239 connections • 243 followers", + "about": "Total Experience: 16 years", + "experience": [ + { + "title": "Drs.", + "company": "Nederlands Openluchtmuseum" + } + ], + "education": [ + { + "institution": "Utrecht University" + } + ], + "skills": [], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/suzi-varga-0141218_20251214T110706Z.json", + "observed_on": "2025-12-14T11:07:06.068669+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.539507+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/suzi-varga-0141218_20251214T110706Z.json" + ], + "modified_at": "2026-01-09T19:51:18.402548+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "suzi-varga-0141218", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUZI-VARGA", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SUZI-VARGA", + "changed_at": "2026-01-09T19:41:12.090523+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1987 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 16 years" + }, + { + "step": 2, + "calculation": "2026 - 16 = 2010", + "result": "Estimated first job year: 2010", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2010 - 23 = 1987", + "result": "Estimated birth year: 1987", + "range": "1980-1994 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1980, + 1994 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:18.400654+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SVEN-BONTJE.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SVEN-BONTJE.json similarity index 66% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SVEN-BONTJE.json rename to data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SVEN-BONTJE.json index ff41d75832..87c6c70550 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SVEN-BONTJE.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SVEN-BONTJE.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SVEN-BONTJE", + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SVEN-BONTJE", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "SVEN", "BONTJE" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -156,7 +161,82 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/svenbontje_20251213T020000Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:06.590248+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "svenbontje" + "linkedin_slug": "svenbontje", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SVEN-BONTJE", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_SVEN-BONTJE", + "changed_at": "2026-01-09T19:41:10.111233+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1987 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 16 years" + }, + { + "step": 2, + "calculation": "2026 - 16 = 2010", + "result": "Estimated first job year: 2010", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2010 - 23 = 1987", + "result": "Estimated birth year: 1987", + "range": "1980-1994 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1980, + 1994 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:06.590214+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TAUFIQ-RODHY.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TAUFIQ-RODHY.json index db9f5e87f3..26f693ef81 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TAUFIQ-RODHY.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TAUFIQ-RODHY.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/taufiq-rodhy-a1132430_20251214T111959Z.json" ], - "modified_at": "2026-01-09T19:18:17.089281+00:00", + "modified_at": "2026-01-09T19:51:23.900459+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "taufiq-rodhy-a1132430", @@ -106,7 +106,7 @@ "primary_rationale": "1981 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1981 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:17.089169+00:00", + "inferred_at": "2026-01-09T19:51:23.859489+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TESSA-VELZEN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TESSA-VELZEN.json index 226f01b67a..fe9ac2cddc 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TESSA-VELZEN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TESSA-VELZEN.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tessa-van-wickevoort-crommelin-van-velzen-23668016b_20251214T112833Z.json" ], - "modified_at": "2026-01-09T19:18:13.829465+00:00", + "modified_at": "2026-01-09T19:50:56.657400+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tessa-van-wickevoort-crommelin-van-velzen-23668016b", @@ -106,7 +106,7 @@ "primary_rationale": "1982 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1982 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:13.827635+00:00", + "inferred_at": "2026-01-09T19:50:56.654973+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIGRAN-ZARGARYAN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIGRAN-ZARGARYAN.json index 70452e1e6a..9294851d35 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIGRAN-ZARGARYAN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIGRAN-ZARGARYAN.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tigran-zargaryan-39a6b37_20251214T103758Z.json" ], - "modified_at": "2026-01-09T19:18:15.231945+00:00", + "modified_at": "2026-01-09T19:51:07.268561+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tigran-zargaryan-39a6b37", @@ -109,7 +109,7 @@ "primary_rationale": "1988 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.231934+00:00", + "inferred_at": "2026-01-09T19:51:07.268498+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIM-HARTMAN.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIM-HARTMAN.json index 8cbb82d074..9e6f8e6de7 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIM-HARTMAN.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIM-HARTMAN.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tim-hartman-30a45387_20251214T110741Z.json" ], - "modified_at": "2026-01-09T19:18:16.209537+00:00", + "modified_at": "2026-01-09T19:51:18.305001+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tim-hartman-30a45387", @@ -106,7 +106,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.209529+00:00", + "inferred_at": "2026-01-09T19:51:18.304984+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIM-VERBERK.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIM-VERBERK.json index 8be1856342..016a2e6b7d 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIM-VERBERK.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_TIM-VERBERK.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tim-verberk-02256987_20251214T112054Z.json" ], - "modified_at": "2026-01-09T19:18:13.979639+00:00", + "modified_at": "2026-01-09T19:50:57.679892+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tim-verberk-02256987", @@ -106,7 +106,7 @@ "primary_rationale": "1987 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1987 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.977639+00:00", + "inferred_at": "2026-01-09T19:50:57.668389+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_VESNA-INJAC.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_VESNA-INJAC.json index 37dff989bf..eba0edb8bc 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_VESNA-INJAC.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_VESNA-INJAC.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vesna-injac-07b2749_20251214T103749Z.json" ], - "modified_at": "2026-01-09T19:18:11.596777+00:00", + "modified_at": "2026-01-09T19:50:47.208708+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vesna-injac-07b2749", @@ -110,7 +110,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -159,7 +159,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.596735+00:00", + "inferred_at": "2026-01-09T19:50:47.208649+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ZALM-INGRID.json b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ZALM-INGRID.json index 6e31545543..61b1fb94b6 100644 --- a/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ZALM-INGRID.json +++ b/data/person/ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_ZALM-INGRID.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/zalm-ingrid-9a119328_20251214T103343Z.json" ], - "modified_at": "2026-01-09T19:18:13.745233+00:00", + "modified_at": "2026-01-09T19:50:56.066976+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "zalm-ingrid-9a119328", @@ -120,7 +120,7 @@ "primary_rationale": "1989 is in 198X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1989 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.722860+00:00", + "inferred_at": "2026-01-09T19:50:56.041274+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GUY-HANSEN.json b/data/person/ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_GUY-HANSEN.json similarity index 67% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GUY-HANSEN.json rename to data/person/ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_GUY-HANSEN.json index d6161d0e5a..3e4fbfb5fc 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GUY-HANSEN.json +++ b/data/person/ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_GUY-HANSEN.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GUY-HANSEN", + "ppid": "ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_GUY-HANSEN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "GUY", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Guy Hansen", @@ -81,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/guy-hansen-9694a1117_20251214T103922Z.json" ], - "modified_at": "2026-01-09T19:18:13.052181+00:00", + "modified_at": "2026-01-09T19:50:50.847715+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "guy-hansen-9694a1117", @@ -94,6 +95,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GUY-HANSEN", + "new_ppid": "ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_GUY-HANSEN", + "changed_at": "2026-01-09T19:50:50.847712+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -108,7 +119,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +168,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.052170+00:00", + "inferred_at": "2026-01-09T19:50:50.832985+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:50.847696+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_JEMMA-POSCH.json b/data/person/ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_JEMMA-POSCH.json new file mode 100644 index 0000000000..194ce8069b --- /dev/null +++ b/data/person/ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_JEMMA-POSCH.json @@ -0,0 +1,222 @@ +{ + "ppid": "ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_JEMMA-POSCH", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "199X", + "last_location": "AU-01-CAN", + "last_date": "XXXX", + "name_tokens": [ + "JEMMA", + "POSCH" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Jemma Posch", + "display_name": "Jemma Posch", + "name_romanized": null, + "name_tokens": [ + "JEMMA", + "POSCH" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Jemma Posch", + "linkedin_url": "https://www.linkedin.com/in/jemma-posch-28a8547a", + "headline": "Image Content Coordinator at National Library of Australia", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "89 connections • 90 followers", + "about": "Total Experience: 11 years and 10 months", + "experience": [], + "education": [ + { + "degree": "Bachelor's Degree, Art History and Curatorship, Honours (1st class)", + "institution": "The Australian National University" + } + ], + "skills": [], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C5603AQEiq4-bgi6fiA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1552339676355?e=2147483647&v=beta&t=0BgKv7H5DqfaUmuL07OF6VfSI8uE9Q9PpiAdVtETVjs" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/jemma-posch-28a8547a_20251214T103918Z.json", + "observed_on": "2025-12-14T10:39:18.753630+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.531789+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/jemma-posch-28a8547a_20251214T103918Z.json" + ], + "modified_at": "2026-01-09T19:51:11.067834+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "jemma-posch-28a8547a", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JEMMA-POSCH", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JEMMA-POSCH", + "changed_at": "2026-01-09T19:41:08.852322+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JEMMA-POSCH", + "new_ppid": "ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_JEMMA-POSCH", + "changed_at": "2026-01-09T19:51:11.067832+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1992 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 11 years" + }, + { + "step": 2, + "calculation": "2026 - 11 = 2015", + "result": "Estimated first job year: 2015", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2015 - 23 = 1992", + "result": "Estimated birth year: 1992", + "range": "1985-1999 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1985, + 1999 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:11.061647+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:11.067822+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NICOLE-SCHWIRTLICH.json b/data/person/ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_NICOLE-SCHWIRTLICH.json similarity index 77% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NICOLE-SCHWIRTLICH.json rename to data/person/ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_NICOLE-SCHWIRTLICH.json index 80ce4e18f8..6debb6d1ea 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NICOLE-SCHWIRTLICH.json +++ b/data/person/ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_NICOLE-SCHWIRTLICH.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NICOLE-SCHWIRTLICH", + "ppid": "ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_NICOLE-SCHWIRTLICH", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "NICOLE", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Nicole Schwirtlich", @@ -138,7 +139,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nicoleschwirtlich_20251214T103849Z.json" ], - "modified_at": "2026-01-09T19:18:18.387657+00:00", + "modified_at": "2026-01-09T19:51:29.305719+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nicoleschwirtlich", @@ -151,6 +152,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NICOLE-SCHWIRTLICH", + "new_ppid": "ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_NICOLE-SCHWIRTLICH", + "changed_at": "2026-01-09T19:51:29.305717+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -165,7 +176,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +225,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.387452+00:00", + "inferred_at": "2026-01-09T19:51:29.300781+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:29.305711+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_PHILLIP-HALLIDAY.json b/data/person/ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_PHILLIP-HALLIDAY.json new file mode 100644 index 0000000000..ece9e46515 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_PHILLIP-HALLIDAY.json @@ -0,0 +1,190 @@ +{ + "ppid": "ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_PHILLIP-HALLIDAY", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "199X", + "last_location": "AU-01-CAN", + "last_date": "XXXX", + "name_tokens": [ + "PHILLIP", + "HALLIDAY" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Phillip Halliday", + "display_name": "Phillip Halliday", + "name_romanized": null, + "name_tokens": [ + "PHILLIP", + "HALLIDAY" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "D" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Phillip Halliday", + "linkedin_url": "https://www.linkedin.com/in/testinginaustralia", + "headline": "Test Manager / Lead Test Analyst / Automation Tester / Release Manager / Quality Assurance professional", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "", + "about": "Sorry, I am not seeking a new role for myself until Jan 2022 - unless it is irresistible. A software testing professional with over 10 years’ experience in the IT industry. I have worked on the development of web applications, web pages, COTS and APIs within government environments. I have a proven track record of developing new business solutions and motivating teams to consistently exceed targets. I’ve recently completed the introduction of technical efficiencies that resulted in improved security and accessibility of the Library’s web applications. I 'm in the process of introducing a complete E2E UI automation testing solution for the National Library of Australia using a hybrid of linear and module frameworks and will soon be seeking a new professional challenge. Total Experience: 5 years and 3 months", + "experience": [], + "education": [], + "skills": [ + "software", + "testing", + "apis", + "government", + "security", + "accessibility", + "ui", + "automation", + "projects", + "iso", + "agile", + "validation", + "management", + "collaboration", + "components", + "reports", + "analysis", + "workflow", + "planning", + "legal", + "software testing", + "web applications", + "acceptance testing", + "test management", + "user acceptance testing" + ], + "languages": [], + "profile_image_url": "" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/testinginaustralia_20251214T104006Z.json", + "observed_on": "2025-12-14T10:40:06.793583+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.517146+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/testinginaustralia_20251214T104006Z.json" + ], + "modified_at": "2026-01-09T19:51:04.020099+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "testinginaustralia", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PHILLIP-HALLIDAY", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PHILLIP-HALLIDAY", + "changed_at": "2026-01-09T19:41:10.555639+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PHILLIP-HALLIDAY", + "new_ppid": "ID_XX-XX-XXX_199X_AU-01-CAN_XXXX_PHILLIP-HALLIDAY", + "changed_at": "2026-01-09T19:47:58.674328+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1998 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 5 years" + }, + { + "step": 2, + "calculation": "2026 - 5 = 2021", + "result": "Estimated first job year: 2021", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2021 - 23 = 1998", + "result": "Estimated birth year: 1998", + "range": "1991-2005 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1991, + 2005 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:04.020093+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GIANG-PHAM.json b/data/person/ID_XX-XX-XXX_199X_AU-05-AP_XXXX_GIANG-PHAM.json similarity index 90% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GIANG-PHAM.json rename to data/person/ID_XX-XX-XXX_199X_AU-05-AP_XXXX_GIANG-PHAM.json index 317cfdfb88..ac096d3337 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GIANG-PHAM.json +++ b/data/person/ID_XX-XX-XXX_199X_AU-05-AP_XXXX_GIANG-PHAM.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GIANG-PHAM", + "ppid": "ID_XX-XX-XXX_199X_AU-05-AP_XXXX_GIANG-PHAM", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-05-AP", "last_date": "XXXX", "name_tokens": [ "GIANG", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Giang Pham", @@ -117,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/giang-pham-473b161ba_20251214T103830Z.json" ], - "modified_at": "2026-01-09T19:18:12.084154+00:00", + "modified_at": "2026-01-09T19:51:06.587524+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "giang-pham-473b161ba", @@ -130,6 +131,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_GIANG-PHAM", + "new_ppid": "ID_XX-XX-XXX_199X_AU-05-AP_XXXX_GIANG-PHAM", + "changed_at": "2026-01-09T19:47:59.421928+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -144,7 +155,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.084124+00:00", + "inferred_at": "2026-01-09T19:51:06.587511+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NINO-DIVITO.json b/data/person/ID_XX-XX-XXX_199X_AU-05-AP_XXXX_NINO-DIVITO.json similarity index 68% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NINO-DIVITO.json rename to data/person/ID_XX-XX-XXX_199X_AU-05-AP_XXXX_NINO-DIVITO.json index 774302c1a8..2bc7db5738 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NINO-DIVITO.json +++ b/data/person/ID_XX-XX-XXX_199X_AU-05-AP_XXXX_NINO-DIVITO.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NINO-DIVITO", + "ppid": "ID_XX-XX-XXX_199X_AU-05-AP_XXXX_NINO-DIVITO", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "AU-05-AP", "last_date": "XXXX", "name_tokens": [ "NINO", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Nino Divito", @@ -82,7 +83,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nino-divito-02546b145_20251214T103951Z.json" ], - "modified_at": "2026-01-09T19:18:16.538239+00:00", + "modified_at": "2026-01-09T19:51:18.583670+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nino-divito-02546b145", @@ -95,6 +96,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NINO-DIVITO", + "new_ppid": "ID_XX-XX-XXX_199X_AU-05-AP_XXXX_NINO-DIVITO", + "changed_at": "2026-01-09T19:51:18.583667+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -109,7 +120,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +169,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.538221+00:00", + "inferred_at": "2026-01-09T19:51:18.573380+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Australia Plains", + "formatted": "AU-05-AP", + "country_code": "AU", + "region_code": "05", + "settlement_code": "AP", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Australia (AU)", + "result": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-05-AP" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + }, + "inferred_at": "2026-01-09T19:51:18.583657+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ARYA-ANINDITA.json b/data/person/ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_ARYA-ANINDITA.json similarity index 72% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ARYA-ANINDITA.json rename to data/person/ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_ARYA-ANINDITA.json index 5dda7e3ea1..bd3b9c37b0 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ARYA-ANINDITA.json +++ b/data/person/ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_ARYA-ANINDITA.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ARYA-ANINDITA", + "ppid": "ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_ARYA-ANINDITA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ARYA", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade", "first_date_alternatives": [ "200X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Arya Galih Anindita", @@ -117,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arya-galih-anindita-40963456_20251214T112009Z.json" ], - "modified_at": "2026-01-09T19:18:16.149355+00:00", + "modified_at": "2026-01-09T19:51:17.853159+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arya-galih-anindita-40963456", @@ -130,6 +131,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ARYA-ANINDITA", + "new_ppid": "ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_ARYA-ANINDITA", + "changed_at": "2026-01-09T19:51:17.853129+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -138,7 +149,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +190,60 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.149319+00:00", + "inferred_at": "2026-01-09T19:51:17.609613+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:17.853003+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FARISAH-SHADRINA.json b/data/person/ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_FARISAH-SHADRINA.json similarity index 74% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FARISAH-SHADRINA.json rename to data/person/ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_FARISAH-SHADRINA.json index afd06c2fe1..75b6106e94 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FARISAH-SHADRINA.json +++ b/data/person/ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_FARISAH-SHADRINA.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FARISAH-SHADRINA", + "ppid": "ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_FARISAH-SHADRINA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "FARISAH", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Farisah N. Shadrina", @@ -110,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/farisah-n-shadrina-99690376_20251214T111947Z.json" ], - "modified_at": "2026-01-09T19:18:14.777480+00:00", + "modified_at": "2026-01-09T19:51:04.515311+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "farisah-n-shadrina-99690376", @@ -123,6 +124,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FARISAH-SHADRINA", + "new_ppid": "ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_FARISAH-SHADRINA", + "changed_at": "2026-01-09T19:51:04.515301+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -137,7 +148,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +197,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.777459+00:00", + "inferred_at": "2026-01-09T19:51:04.064611+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:04.515207+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KRISHNI-HANDAYANI.json b/data/person/ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_KRISHNI-HANDAYANI.json similarity index 89% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KRISHNI-HANDAYANI.json rename to data/person/ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_KRISHNI-HANDAYANI.json index 5a13c0e66d..eea714764e 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KRISHNI-HANDAYANI.json +++ b/data/person/ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_KRISHNI-HANDAYANI.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KRISHNI-HANDAYANI", + "ppid": "ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_KRISHNI-HANDAYANI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "KRISHNI", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "200X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Krishni Handayani", @@ -97,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/krishni-handayani-ab264841_20251214T111925Z.json" ], - "modified_at": "2026-01-09T19:18:18.459654+00:00", + "modified_at": "2026-01-09T19:51:29.504720+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "krishni-handayani-ab264841", @@ -119,6 +120,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_KRISHNI-HANDAYANI", + "new_ppid": "ID_XX-XX-XXX_199X_ID-04-JAK_XXXX_KRISHNI-HANDAYANI", + "changed_at": "2026-01-09T19:47:59.361959+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -133,7 +144,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.459432+00:00", + "inferred_at": "2026-01-09T19:51:29.504627+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BULAN-ASTUTI.json b/data/person/ID_XX-XX-XXX_199X_ID-33-BAN_XXXX_BULAN-ASTUTI.json similarity index 68% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BULAN-ASTUTI.json rename to data/person/ID_XX-XX-XXX_199X_ID-33-BAN_XXXX_BULAN-ASTUTI.json index 2ee38446ad..8c78dc0637 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BULAN-ASTUTI.json +++ b/data/person/ID_XX-XX-XXX_199X_ID-33-BAN_XXXX_BULAN-ASTUTI.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BULAN-ASTUTI", + "ppid": "ID_XX-XX-XXX_199X_ID-33-BAN_XXXX_BULAN-ASTUTI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-33-BAN", "last_date": "XXXX", "name_tokens": [ "BULAN", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "bulan nadia tri astuti", @@ -79,10 +80,31 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bulan-nadia-tri-astuti-240978bb_20251214T112031Z.json" ], - "modified_at": "2026-01-09T19:18:17.805802+00:00", + "modified_at": "2026-01-09T19:51:08.418314+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bulan-nadia-tri-astuti-240978bb", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BULAN-ASTUTI", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BULAN-ASTUTI", + "changed_at": "2026-01-09T19:18:17.805800+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BULAN-ASTUTI", + "new_ppid": "ID_XX-XX-XXX_199X_ID-33-BAN_XXXX_BULAN-ASTUTI", + "changed_at": "2026-01-09T19:51:08.418311+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], "inferred_birth_decade": { "values": [ "198X", @@ -95,7 +117,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -144,19 +166,61 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.805771+00:00", + "inferred_at": "2026-01-09T19:51:08.367121+00:00", "inferred_by": "enrich_ppids.py" } }, - "ppid_history": [ - { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BULAN-ASTUTI", - "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BULAN-ASTUTI", - "changed_at": "2026-01-09T19:18:17.805800+00:00", - "reason": "observation_based_inference", - "inferred_fields": [ - "inferred_birth_decade" - ] + "inferred_current_settlement": { + "value": "Banten", + "formatted": "ID-33-BAN", + "country_code": "ID", + "region_code": "33", + "settlement_code": "BAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Banten, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Banten, Indonesia (ID)", + "result": { + "geonames_id": 1650134, + "geonames_name": "Banten", + "admin1_code": "33", + "admin1_name": "Banten", + "feature_code": "PPL", + "latitude": -6.0307, + "longitude": 106.164 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-33-BAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1650134, + "geonames_name": "Banten", + "admin1_code": "33", + "admin1_name": "Banten", + "feature_code": "PPL", + "latitude": -6.0307, + "longitude": 106.164 + }, + "inferred_at": "2026-01-09T19:51:08.418292+00:00", + "inferred_by": "enrich_ppids.py" } - ] + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DIAH-HASANAH.json b/data/person/ID_XX-XX-XXX_199X_ID-33-TAN_XXXX_DIAH-HASANAH.json similarity index 70% rename from data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DIAH-HASANAH.json rename to data/person/ID_XX-XX-XXX_199X_ID-33-TAN_XXXX_DIAH-HASANAH.json index 5faea7537d..0b5104dd2a 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DIAH-HASANAH.json +++ b/data/person/ID_XX-XX-XXX_199X_ID-33-TAN_XXXX_DIAH-HASANAH.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DIAH-HASANAH", + "ppid": "ID_XX-XX-XXX_199X_ID-33-TAN_XXXX_DIAH-HASANAH", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "199X", - "last_location": "XX-XX-XXX", + "last_location": "ID-33-TAN", "last_date": "XXXX", "name_tokens": [ "DIAH", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "198X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Diah Uswatun Hasanah", @@ -86,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/diah-uswatun-hasanah-08ab12203_20251214T112007Z.json" ], - "modified_at": "2026-01-09T19:18:12.748729+00:00", + "modified_at": "2026-01-09T19:50:48.802690+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "diah-uswatun-hasanah-08ab12203", @@ -99,6 +100,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DIAH-HASANAH", + "new_ppid": "ID_XX-XX-XXX_199X_ID-33-TAN_XXXX_DIAH-HASANAH", + "changed_at": "2026-01-09T19:50:48.802688+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -113,7 +124,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +173,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.748711+00:00", + "inferred_at": "2026-01-09T19:50:48.730910+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Tangerang", + "formatted": "ID-33-TAN", + "country_code": "ID", + "region_code": "33", + "settlement_code": "TAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Tangerang, Banten, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Tangerang, Banten, Indonesia (ID)", + "result": { + "geonames_id": 1625084, + "geonames_name": "Tangerang", + "admin1_code": "33", + "admin1_name": "Banten", + "feature_code": "PPL", + "latitude": -6.17806, + "longitude": 106.63 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-33-TAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1625084, + "geonames_name": "Tangerang", + "admin1_code": "33", + "admin1_name": "Banten", + "feature_code": "PPL", + "latitude": -6.17806, + "longitude": 106.63 + }, + "inferred_at": "2026-01-09T19:50:48.802672+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-FL-LEL_XXXX_SERGIO-HOOGVLIETS.json b/data/person/ID_XX-XX-XXX_199X_NL-FL-LEL_XXXX_SERGIO-HOOGVLIETS.json index ca5ee7bedc..f71a4e6948 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-FL-LEL_XXXX_SERGIO-HOOGVLIETS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-FL-LEL_XXXX_SERGIO-HOOGVLIETS.json @@ -180,7 +180,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sergio-hoogvliets-89823897_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:14.949305+00:00", + "modified_at": "2026-01-09T19:51:05.594923+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sergio-hoogvliets-89823897", @@ -210,7 +210,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -251,7 +251,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.949292+00:00", + "inferred_at": "2026-01-09T19:51:05.594869+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-FL-SWI_XXXX_LIDY-KUTSCHRUITER.json b/data/person/ID_XX-XX-XXX_199X_NL-FL-SWI_XXXX_LIDY-KUTSCHRUITER.json similarity index 73% rename from data/person/ID_XX-XX-XXX_XXXX_NL-FL-SWI_XXXX_LIDY-KUTSCHRUITER.json rename to data/person/ID_XX-XX-XXX_199X_NL-FL-SWI_XXXX_LIDY-KUTSCHRUITER.json index be983938cb..c43a6c4b5a 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-FL-SWI_XXXX_LIDY-KUTSCHRUITER.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-FL-SWI_XXXX_LIDY-KUTSCHRUITER.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-FL-SWI_XXXX_LIDY-KUTSCHRUITER", + "ppid": "ID_XX-XX-XXX_199X_NL-FL-SWI_XXXX_LIDY-KUTSCHRUITER", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-FL-SWI", "last_date": "XXXX", "name_tokens": [ "LIDY", "KUTSCHRUITER" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Lidy Kutschruiter", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -172,64 +177,11 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lidy-kutschruiter-33934b107_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:43:08.148857+00:00", + "modified_at": "2026-01-09T19:51:22.351300+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lidy-kutschruiter-33934b107", "ppid_collision_suffix": "lidy_kutschruiter_33934b107", - "inferred_current_settlement": { - "value": "Swifterbant", - "formatted": "NL-FL-SWI", - "country_code": "NL", - "region_code": "FL", - "settlement_code": "SWI", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Swifterbant, Flevoland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Swifterbant, Flevoland, Netherlands", - "result": { - "geonames_id": 2746540, - "geonames_name": "Swifterbant", - "admin1_code": "16", - "admin1_name": "Flevoland", - "feature_code": "PPL", - "latitude": 52.56833, - "longitude": 5.64306 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-FL-SWI" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2746540, - "geonames_name": "Swifterbant", - "admin1_code": "16", - "admin1_name": "Flevoland", - "feature_code": "PPL", - "latitude": 52.56833, - "longitude": 5.64306 - }, - "inferred_at": "2026-01-09T17:43:08.148851+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LIDY-KUTSCHRUITER-lidy_kutschruiter_33934b107", @@ -239,6 +191,80 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-FL-SWI_XXXX_LIDY-KUTSCHRUITER", + "new_ppid": "ID_XX-XX-XXX_199X_NL-FL-SWI_XXXX_LIDY-KUTSCHRUITER", + "changed_at": "2026-01-09T19:43:37.930574+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1994 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "NGV Flevoland (Nederlandse Genealogische Vereniging)", + "title": "Penningmeester (Treasurer)", + "date_range": "2017" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2017 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2017 - 23 = 1994", + "result": "Estimated birth year: 1994", + "range": "1989-1999 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1989, + 1999 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:22.349608+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-FR-LEE_XXXX_SIEBOLD-HEMPENIUS.json b/data/person/ID_XX-XX-XXX_199X_NL-FR-LEE_XXXX_SIEBOLD-HEMPENIUS.json index 57c042f947..e88838b319 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-FR-LEE_XXXX_SIEBOLD-HEMPENIUS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-FR-LEE_XXXX_SIEBOLD-HEMPENIUS.json @@ -89,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/siebold-hempenius-963363114_20251214T113136Z.json" ], - "modified_at": "2026-01-09T19:18:11.844789+00:00", + "modified_at": "2026-01-09T19:50:47.328818+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "siebold-hempenius-963363114", @@ -117,7 +117,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -166,7 +166,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:11.844705+00:00", + "inferred_at": "2026-01-09T19:50:47.328781+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GE-APE_XXXX_ANNE-BECKERS.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-APE_XXXX_ANNE-BECKERS.json index acd1dc7256..9b5c77920b 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-GE-APE_XXXX_ANNE-BECKERS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-APE_XXXX_ANNE-BECKERS.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-beckers-23407118_20251214T113104Z.json" ], - "modified_at": "2026-01-09T19:18:15.903356+00:00", + "modified_at": "2026-01-09T19:51:28.161498+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-beckers-23407118", @@ -165,7 +165,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -214,7 +214,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.899508+00:00", + "inferred_at": "2026-01-09T19:51:28.157829+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_ELLES-DIJKEN.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_ELLES-DIJKEN.json similarity index 53% rename from data/person/ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_ELLES-DIJKEN.json rename to data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_ELLES-DIJKEN.json index 984a271c55..03bc13c79c 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_ELLES-DIJKEN.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_ELLES-DIJKEN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_ELLES-DIJKEN", + "ppid": "ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_ELLES-DIJKEN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-GE-ARN", "last_date": "XXXX", "name_tokens": [ "ELLES", "DIJKEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ] }, "name": { "full_name": "Elles van Dijken", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -83,63 +88,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elles-van-dijken-966465214_20251214T110649Z.json" ], - "modified_at": "2026-01-09T17:43:06.260832+00:00", + "modified_at": "2026-01-09T19:51:00.022468+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elles-van-dijken-966465214", - "inferred_current_settlement": { - "value": "Arnhem", - "formatted": "NL-GE-ARN", - "country_code": "NL", - "region_code": "GE", - "settlement_code": "ARN", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Arnhem, Gelderland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Arnhem, Gelderland, Netherlands (NL)", - "result": { - "geonames_id": 2759661, - "geonames_name": "Arnhem", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPLA", - "latitude": 51.98, - "longitude": 5.91111 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-GE-ARN" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759661, - "geonames_name": "Arnhem", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPLA", - "latitude": 51.98, - "longitude": 5.91111 - }, - "inferred_at": "2026-01-09T17:43:06.260824+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ELLES-DIJKEN", @@ -149,6 +101,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_ELLES-DIJKEN", + "new_ppid": "ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_ELLES-DIJKEN", + "changed_at": "2026-01-09T19:41:09.098454+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1999 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 4 years" + }, + { + "step": 2, + "calculation": "2026 - 4 = 2022", + "result": "Estimated first job year: 2022", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2022 - 23 = 1999", + "result": "Estimated birth year: 1999", + "range": "1992-2006 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1992, + 2006 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:00.022460+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_GUUS-GEURTS.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_GUUS-GEURTS.json index e0f98b7819..37fdfa46a2 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_GUUS-GEURTS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_GUUS-GEURTS.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/guus-geurts-149948158_20251214T110717Z.json" ], - "modified_at": "2026-01-09T19:18:16.435476+00:00", + "modified_at": "2026-01-09T19:51:18.485640+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "guus-geurts-149948158", @@ -109,7 +109,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.435466+00:00", + "inferred_at": "2026-01-09T19:51:18.485633+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_MARLOUS-AKKER.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_MARLOUS-AKKER.json index b673446dc1..a7b5286fda 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_MARLOUS-AKKER.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_MARLOUS-AKKER.json @@ -100,7 +100,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marlous-van-den-akker-811b1716_20251214T110747Z.json" ], - "modified_at": "2026-01-09T19:18:15.163505+00:00", + "modified_at": "2026-01-09T19:51:06.960957+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marlous-van-den-akker-811b1716", @@ -128,7 +128,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.163497+00:00", + "inferred_at": "2026-01-09T19:51:06.960846+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_YVONNE-LAGERWEIJ.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_YVONNE-LAGERWEIJ.json index 748960c6d0..69c3820dbd 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_YVONNE-LAGERWEIJ.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-ARN_XXXX_YVONNE-LAGERWEIJ.json @@ -162,7 +162,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yvonne-lagerweij-273282ab_20251214T110545Z.json" ], - "modified_at": "2026-01-09T19:18:14.932357+00:00", + "modified_at": "2026-01-09T19:51:29.285566+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yvonne-lagerweij-273282ab", @@ -199,7 +199,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -248,7 +248,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.929089+00:00", + "inferred_at": "2026-01-09T19:51:29.283495+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GE-BEU_XXXX_HARRIE-GELSING.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-BEU_XXXX_HARRIE-GELSING.json index 2a1d10dd7f..40a71412bc 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-GE-BEU_XXXX_HARRIE-GELSING.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-BEU_XXXX_HARRIE-GELSING.json @@ -77,7 +77,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harrie-gelsing-448937158_20251214T110707Z.json" ], - "modified_at": "2026-01-09T19:18:15.154255+00:00", + "modified_at": "2026-01-09T19:50:47.344993+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harrie-gelsing-448937158", @@ -107,7 +107,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -148,7 +148,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.154236+00:00", + "inferred_at": "2026-01-09T19:50:47.344522+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-ELB_XXXX_LISANNE-HUISMAN.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-ELB_XXXX_LISANNE-HUISMAN.json similarity index 79% rename from data/person/ID_XX-XX-XXX_XXXX_NL-GE-ELB_XXXX_LISANNE-HUISMAN.json rename to data/person/ID_XX-XX-XXX_199X_NL-GE-ELB_XXXX_LISANNE-HUISMAN.json index 5ea9664c45..a9365f8a6e 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-ELB_XXXX_LISANNE-HUISMAN.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-ELB_XXXX_LISANNE-HUISMAN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-GE-ELB_XXXX_LISANNE-HUISMAN", + "ppid": "ID_XX-XX-XXX_199X_NL-GE-ELB_XXXX_LISANNE-HUISMAN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-GE-ELB", "last_date": "XXXX", "name_tokens": [ "LISANNE", "HUISMAN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ] }, "name": { "full_name": "Lisanne Huisman", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -242,63 +247,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lisanne-huisman-5176621b5_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:43:06.664491+00:00", + "modified_at": "2026-01-09T19:50:47.442238+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lisanne-huisman-5176621b5", - "inferred_current_settlement": { - "value": "Elburg", - "formatted": "NL-GE-ELB", - "country_code": "NL", - "region_code": "GE", - "settlement_code": "ELB", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Elburg, Gelderland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Elburg, Gelderland, Netherlands", - "result": { - "geonames_id": 2756232, - "geonames_name": "Elburg", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPL", - "latitude": 52.4475, - "longitude": 5.84306 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-GE-ELB" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2756232, - "geonames_name": "Elburg", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPL", - "latitude": 52.4475, - "longitude": 5.84306 - }, - "inferred_at": "2026-01-09T17:43:06.664485+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LISANNE-HUISMAN", @@ -308,6 +260,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-ELB_XXXX_LISANNE-HUISMAN", + "new_ppid": "ID_XX-XX-XXX_199X_NL-GE-ELB_XXXX_LISANNE-HUISMAN", + "changed_at": "2026-01-09T19:43:41.201748+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1997 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "6 years and 9 months" + }, + { + "step": 2, + "calculation": "2026 - 6 = 2020", + "result": "Estimated first job year: 2020", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2020 - 23 = 1997", + "result": "Estimated birth year: 1997", + "range": "1990-2004 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1990, + 2004 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:47.442223+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GE-HUI_XXXX_DIAN-TOERING.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-HUI_XXXX_DIAN-TOERING.json index 413d7f5d3b..8b155d2cac 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-GE-HUI_XXXX_DIAN-TOERING.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-HUI_XXXX_DIAN-TOERING.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dian-toering-048825224_20251214T110630Z.json" ], - "modified_at": "2026-01-09T19:18:16.976568+00:00", + "modified_at": "2026-01-09T19:51:22.927026+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dian-toering-048825224", @@ -123,7 +123,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.976533+00:00", + "inferred_at": "2026-01-09T19:51:22.927015+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GE-LEN_XXXX_PETRA-WILMER.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-LEN_XXXX_PETRA-WILMER.json index ca2f6983fa..61961448b4 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-GE-LEN_XXXX_PETRA-WILMER.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-LEN_XXXX_PETRA-WILMER.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/petra-wilmer-27ba9aa3_20251214T110701Z.json" ], - "modified_at": "2026-01-09T19:18:16.557358+00:00", + "modified_at": "2026-01-09T19:51:18.735825+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "petra-wilmer-27ba9aa3", @@ -126,7 +126,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.557344+00:00", + "inferred_at": "2026-01-09T19:51:18.735787+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GE-NIJ_XXXX_JOEP-LANGE.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-NIJ_XXXX_JOEP-LANGE.json index 0c70a58d8a..4e2ec9f4a1 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-GE-NIJ_XXXX_JOEP-LANGE.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-NIJ_XXXX_JOEP-LANGE.json @@ -195,7 +195,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joep-lange-a4875814b_20251214T110734Z.json" ], - "modified_at": "2026-01-09T19:18:15.268374+00:00", + "modified_at": "2026-01-09T19:51:07.866628+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joep-lange-a4875814b", @@ -223,7 +223,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -272,7 +272,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.264598+00:00", + "inferred_at": "2026-01-09T19:51:07.860410+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GE-NIJ_XXXX_MAURITS-RAVESTEYN.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-NIJ_XXXX_MAURITS-RAVESTEYN.json index 34a0ce3fd5..169bb397d5 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-GE-NIJ_XXXX_MAURITS-RAVESTEYN.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-NIJ_XXXX_MAURITS-RAVESTEYN.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maurits-van-ravesteyn-709517ab_20251214T110622Z.json" ], - "modified_at": "2026-01-09T19:18:15.041307+00:00", + "modified_at": "2026-01-09T19:51:06.641900+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maurits-van-ravesteyn-709517ab", @@ -113,7 +113,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.041299+00:00", + "inferred_at": "2026-01-09T19:51:06.641878+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_WOUTER-GASTER.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-NIJ_XXXX_WOUTER-GASTER.json similarity index 75% rename from data/person/ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_WOUTER-GASTER.json rename to data/person/ID_XX-XX-XXX_199X_NL-GE-NIJ_XXXX_WOUTER-GASTER.json index 10bec67b2a..e0eb5669fa 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_WOUTER-GASTER.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-NIJ_XXXX_WOUTER-GASTER.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_WOUTER-GASTER", + "ppid": "ID_XX-XX-XXX_199X_NL-GE-NIJ_XXXX_WOUTER-GASTER", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-GE-NIJ", "last_date": "XXXX", "name_tokens": [ "WOUTER", "GASTER" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Wouter Gaster", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -171,63 +176,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/woutergaster_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:43:05.972575+00:00", + "modified_at": "2026-01-09T19:50:50.616350+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "woutergaster", - "inferred_current_settlement": { - "value": "Nijmegen", - "formatted": "NL-GE-NIJ", - "country_code": "NL", - "region_code": "GE", - "settlement_code": "NIJ", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Nijmegen, Gelderland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Nijmegen, Gelderland, Netherlands", - "result": { - "geonames_id": 2750053, - "geonames_name": "Nijmegen", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPL", - "latitude": 51.8425, - "longitude": 5.85278 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-GE-NIJ" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2750053, - "geonames_name": "Nijmegen", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPL", - "latitude": 51.8425, - "longitude": 5.85278 - }, - "inferred_at": "2026-01-09T17:43:05.972570+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_WOUTER-GASTER", @@ -237,6 +189,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_WOUTER-GASTER", + "new_ppid": "ID_XX-XX-XXX_199X_NL-GE-NIJ_XXXX_WOUTER-GASTER", + "changed_at": "2026-01-09T19:43:38.574417+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1990 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "13 years and 7 months" + }, + { + "step": 2, + "calculation": "2026 - 13 = 2013", + "result": "Estimated first job year: 2013", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2013 - 23 = 1990", + "result": "Estimated birth year: 1990", + "range": "1983-1997 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1983, + 1997 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:50.616342+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GE-TIE_XXXX_TANJA-KUSTERS.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-TIE_XXXX_TANJA-KUSTERS.json index 127fc61029..50a9ebfc11 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-GE-TIE_XXXX_TANJA-KUSTERS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-TIE_XXXX_TANJA-KUSTERS.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tanja-kusters-04589a203_20251214T110339Z.json" ], - "modified_at": "2026-01-09T19:18:14.294568+00:00", + "modified_at": "2026-01-09T19:51:00.065867+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tanja-kusters-04589a203", @@ -109,7 +109,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.294558+00:00", + "inferred_at": "2026-01-09T19:51:00.065852+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GE-VEL_XXXX_SANDRA-SACHS.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-VEL_XXXX_SANDRA-SACHS.json index 368dc2bc50..5eebda6e1a 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-GE-VEL_XXXX_SANDRA-SACHS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-VEL_XXXX_SANDRA-SACHS.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sandra-sachs-4a00b694_20251214T110717Z.json" ], - "modified_at": "2026-01-09T19:18:15.552233+00:00", + "modified_at": "2026-01-09T19:51:12.094482+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sandra-sachs-4a00b694", @@ -108,7 +108,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.552225+00:00", + "inferred_at": "2026-01-09T19:51:12.094446+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GE-WAG_XXXX_NANNE-GROOT.json b/data/person/ID_XX-XX-XXX_199X_NL-GE-WAG_XXXX_NANNE-GROOT.json new file mode 100644 index 0000000000..b4455cb422 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_199X_NL-GE-WAG_XXXX_NANNE-GROOT.json @@ -0,0 +1,166 @@ +{ + "ppid": "ID_XX-XX-XXX_199X_NL-GE-WAG_XXXX_NANNE-GROOT", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "199X", + "last_location": "NL-GE-WAG", + "last_date": "XXXX", + "name_tokens": [ + "NANNE", + "GROOT" + ], + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] + }, + "name": { + "full_name": "Nanne Groot", + "display_name": "Nanne Groot", + "name_romanized": null, + "name_tokens": [ + "NANNE", + "GROOT" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "R" + ], + "rationale": "Identified as heritage staff at ISRIC - World Soil Information" + }, + "affiliations": [], + "profile_data": { + "name": "Nanne Groot", + "linkedin_url": "https://www.linkedin.com/in/nanne-groot-a017731a", + "headline": "Senior Projectmanager Building & Development at Wageningen University and Research Centre", + "location": "Wageningen, Gelderland, Netherlands (NL)", + "connections": "27 connections • 29 followers", + "about": "Total Experience: 17 years and 10 months", + "experience": [], + "education": [], + "skills": [ + "renovation" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/nanne-groot-a017731a_20251214T104210Z.json", + "observed_on": "2025-12-14T10:42:10.768868+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.541149+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/nanne-groot-a017731a_20251214T104210Z.json" + ], + "modified_at": "2026-01-09T19:50:53.877814+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "nanne-groot-a017731a", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANNE-GROOT", + "new_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-WAG_XXXX_NANNE-GROOT", + "changed_at": "2026-01-09T17:43:06.731065+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-WAG_XXXX_NANNE-GROOT", + "new_ppid": "ID_XX-XX-XXX_199X_NL-GE-WAG_XXXX_NANNE-GROOT", + "changed_at": "2026-01-09T19:41:10.503956+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "edtf_meaning": "one of: 1970s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1986 is in 199X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 17 years" + }, + { + "step": 2, + "calculation": "2026 - 17 = 2009", + "result": "Estimated first job year: 2009", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2009 - 23 = 1986", + "result": "Estimated birth year: 1986", + "range": "1979-1993 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1979, + 1993 + ], + "output": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1986 spans decades 197X/199X", + "inferred_at": "2026-01-09T19:50:53.877805+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GR-GRO_XXXX_ELLEN-VISSER.json b/data/person/ID_XX-XX-XXX_199X_NL-GR-GRO_XXXX_ELLEN-VISSER.json index d84518eefc..214ee9c2a3 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-GR-GRO_XXXX_ELLEN-VISSER.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GR-GRO_XXXX_ELLEN-VISSER.json @@ -81,7 +81,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ellen-visser-342351ab_20251214T112333Z.json" ], - "modified_at": "2026-01-09T19:18:13.014719+00:00", + "modified_at": "2026-01-09T19:50:50.587364+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ellen-visser-342351ab", @@ -109,7 +109,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.014704+00:00", + "inferred_at": "2026-01-09T19:50:50.587135+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-GR-GRO_XXXX_TIM-KONINGSBRUGGE.json b/data/person/ID_XX-XX-XXX_199X_NL-GR-GRO_XXXX_TIM-KONINGSBRUGGE.json index df616887a4..f4d91f655f 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-GR-GRO_XXXX_TIM-KONINGSBRUGGE.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-GR-GRO_XXXX_TIM-KONINGSBRUGGE.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tim-van-koningsbrugge-3a62ba224_20251214T112737Z.json" ], - "modified_at": "2026-01-09T19:18:14.641396+00:00", + "modified_at": "2026-01-09T19:51:03.213546+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tim-van-koningsbrugge-3a62ba224", @@ -119,7 +119,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.639457+00:00", + "inferred_at": "2026-01-09T19:51:03.211503+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_LUUK-GODTSCHALK.json b/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_LUUK-GODTSCHALK.json index ab2f7d3ab8..e4eb980137 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_LUUK-GODTSCHALK.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_LUUK-GODTSCHALK.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/luuk-godtschalk_20251214T112650Z.json" ], - "modified_at": "2026-01-09T19:18:18.894869+00:00", + "modified_at": "2026-01-09T19:51:29.496742+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "luuk-godtschalk", @@ -142,7 +142,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -191,7 +191,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.894857+00:00", + "inferred_at": "2026-01-09T19:51:29.496677+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_MAHMOUD-MAHGOUB.json b/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_MAHMOUD-MAHGOUB.json index d2f0fee8a9..52be5e9d1f 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_MAHMOUD-MAHGOUB.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_MAHMOUD-MAHGOUB.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mahmoudmahgoub92_20251214T111059Z.json" ], - "modified_at": "2026-01-09T19:18:15.748490+00:00", + "modified_at": "2026-01-09T19:51:10.849317+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mahmoudmahgoub92", @@ -158,7 +158,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +207,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.746483+00:00", + "inferred_at": "2026-01-09T19:51:10.847263+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_MALOU-HARMELEN.json b/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_MALOU-HARMELEN.json new file mode 100644 index 0000000000..13f3c5474c --- /dev/null +++ b/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_MALOU-HARMELEN.json @@ -0,0 +1,164 @@ +{ + "ppid": "ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_MALOU-HARMELEN", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "199X", + "last_location": "NL-NB-EIN", + "last_date": "XXXX", + "name_tokens": [ + "MALOU", + "HARMELEN" + ], + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ] + }, + "name": { + "full_name": "Malou van Harmelen", + "display_name": "Malou van Harmelen", + "name_romanized": null, + "name_tokens": [ + "MALOU", + "HARMELEN" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "D" + ], + "rationale": "Identified as heritage staff at ASML" + }, + "affiliations": [], + "profile_data": { + "name": "Malou van Harmelen", + "linkedin_url": "https://www.linkedin.com/in/maloumaris", + "headline": "Functional engineer at ASML", + "location": "Eindhoven, North Brabant, Netherlands (NL)", + "connections": "296 connections • 297 followers", + "about": "Total Experience: 6 years and 2 months", + "experience": [], + "education": [], + "skills": [], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/maloumaris_20251214T110832Z.json", + "observed_on": "2025-12-14T11:08:32.858359+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.547713+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/maloumaris_20251214T110832Z.json" + ], + "modified_at": "2026-01-09T19:51:18.385017+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "maloumaris", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MALOU-HARMELEN", + "new_ppid": "ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_MALOU-HARMELEN", + "changed_at": "2026-01-09T17:42:55.996767+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_MALOU-HARMELEN", + "new_ppid": "ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_MALOU-HARMELEN", + "changed_at": "2026-01-09T19:41:08.894303+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1997 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 6 years" + }, + { + "step": 2, + "calculation": "2026 - 6 = 2020", + "result": "Estimated first job year: 2020", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2020 - 23 = 1997", + "result": "Estimated birth year: 1997", + "range": "1990-2004 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1990, + 2004 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:18.385009+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_PRADEEP-PARTHIBAN.json b/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_PRADEEP-PARTHIBAN.json index 0d21ef9333..a76130deca 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_PRADEEP-PARTHIBAN.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_PRADEEP-PARTHIBAN.json @@ -143,7 +143,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pradeep-parthiban-7929ab78_20251214T111227Z.json" ], - "modified_at": "2026-01-09T19:18:16.232638+00:00", + "modified_at": "2026-01-09T19:51:18.324252+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pradeep-parthiban-7929ab78", @@ -171,7 +171,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -220,7 +220,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.227776+00:00", + "inferred_at": "2026-01-09T19:51:18.322094+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_RUBEN-KOLFSCHOTEN.json b/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_RUBEN-KOLFSCHOTEN.json similarity index 52% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_RUBEN-KOLFSCHOTEN.json rename to data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_RUBEN-KOLFSCHOTEN.json index 50d3489617..6db33b399e 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_RUBEN-KOLFSCHOTEN.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_RUBEN-KOLFSCHOTEN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_RUBEN-KOLFSCHOTEN", + "ppid": "ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_RUBEN-KOLFSCHOTEN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-NB-EIN", "last_date": "XXXX", "name_tokens": [ "RUBEN", "KOLFSCHOTEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ] }, "name": { "full_name": "Ruben Kolfschoten", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -81,63 +86,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rubenkolfschoten_20251214T110910Z.json" ], - "modified_at": "2026-01-09T17:42:57.231783+00:00", + "modified_at": "2026-01-09T19:51:28.582629+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rubenkolfschoten", - "inferred_current_settlement": { - "value": "Eindhoven", - "formatted": "NL-NB-EIN", - "country_code": "NL", - "region_code": "NB", - "settlement_code": "EIN", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Eindhoven, North Brabant, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Eindhoven, North Brabant, Netherlands (NL)", - "result": { - "geonames_id": 2756253, - "geonames_name": "Eindhoven", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.44083, - "longitude": 5.47778 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NB-EIN" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2756253, - "geonames_name": "Eindhoven", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.44083, - "longitude": 5.47778 - }, - "inferred_at": "2026-01-09T17:42:57.231778+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RUBEN-KOLFSCHOTEN", @@ -147,6 +99,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_RUBEN-KOLFSCHOTEN", + "new_ppid": "ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_RUBEN-KOLFSCHOTEN", + "changed_at": "2026-01-09T19:41:09.119015+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1999 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 4 years" + }, + { + "step": 2, + "calculation": "2026 - 4 = 2022", + "result": "Estimated first job year: 2022", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2022 - 23 = 1999", + "result": "Estimated birth year: 1999", + "range": "1992-2006 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1992, + 2006 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:28.582623+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_TIANRAN-LIU.json b/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_TIANRAN-LIU.json index 55e7da0ad0..4b0bee8cf4 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_TIANRAN-LIU.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NB-EIN_XXXX_TIANRAN-LIU.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tianran-liu-573318115_20251214T111244Z.json" ], - "modified_at": "2026-01-09T19:18:14.698107+00:00", + "modified_at": "2026-01-09T19:51:03.370527+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tianran-liu-573318115", @@ -130,7 +130,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.698099+00:00", + "inferred_at": "2026-01-09T19:51:03.370517+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NB-TIL_XXXX_P-PHAM.json b/data/person/ID_XX-XX-XXX_199X_NL-NB-TIL_XXXX_P-PHAM.json index 500c6b7ed7..9cb84298cc 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NB-TIL_XXXX_P-PHAM.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NB-TIL_XXXX_P-PHAM.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/p-le-pham-56a5858a_20251214T112640Z.json" ], - "modified_at": "2026-01-09T19:18:14.904502+00:00", + "modified_at": "2026-01-09T19:51:05.482928+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "p-le-pham-56a5858a", @@ -189,7 +189,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -238,7 +238,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.904455+00:00", + "inferred_at": "2026-01-09T19:51:05.482122+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-ALK_XXXX_ROSANNA-CUENCA.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-ALK_XXXX_ROSANNA-CUENCA.json index 18483b822f..6750d28b5f 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-ALK_XXXX_ROSANNA-CUENCA.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-ALK_XXXX_ROSANNA-CUENCA.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rosanna-cavero-cuenca-a24630101_20251214T113151Z.json" ], - "modified_at": "2026-01-09T19:18:18.229527+00:00", + "modified_at": "2026-01-09T19:51:29.229821+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rosanna-cavero-cuenca-a24630101", @@ -121,7 +121,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.223414+00:00", + "inferred_at": "2026-01-09T19:51:29.224153+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_ANNEMIEKE-ROMIJN.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_ANNEMIEKE-ROMIJN.json index fab8dca6ee..dd471ace35 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_ANNEMIEKE-ROMIJN.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_ANNEMIEKE-ROMIJN.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annemieke-romijn-883059204_20251214T111722Z.json" ], - "modified_at": "2026-01-09T19:18:15.718188+00:00", + "modified_at": "2026-01-09T19:51:13.535430+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annemieke-romijn-883059204", @@ -108,7 +108,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.718182+00:00", + "inferred_at": "2026-01-09T19:51:13.535421+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_BO-BOJOH.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_BO-BOJOH.json index fc8c10352d..7ece8b8a19 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_BO-BOJOH.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_BO-BOJOH.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bo-bojoh-8815b353_20251214T111836Z.json" ], - "modified_at": "2026-01-09T19:18:14.739574+00:00", + "modified_at": "2026-01-09T19:51:03.978592+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bo-bojoh-8815b353", @@ -114,7 +114,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +163,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.739563+00:00", + "inferred_at": "2026-01-09T19:51:03.978565+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CAROLA-WIJK.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CAROLA-WIJK.json similarity index 62% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CAROLA-WIJK.json rename to data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CAROLA-WIJK.json index 089a67b837..1255bdd740 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CAROLA-WIJK.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CAROLA-WIJK.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CAROLA-WIJK", + "ppid": "ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CAROLA-WIJK", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "CAROLA", "WIJK" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] }, "name": { "full_name": "Carola van Wijk", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -84,63 +89,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/carolawijk_20251214T111515Z.json" ], - "modified_at": "2026-01-09T17:42:54.333796+00:00", + "modified_at": "2026-01-09T19:51:12.109807+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "carolawijk", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands (NL)", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:54.333768+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CAROLA-WIJK", @@ -150,6 +102,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CAROLA-WIJK", + "new_ppid": "ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CAROLA-WIJK", + "changed_at": "2026-01-09T19:41:08.902128+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "edtf_meaning": "one of: 1970s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1985 is in 199X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 18 years" + }, + { + "step": 2, + "calculation": "2026 - 18 = 2008", + "result": "Estimated first job year: 2008", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2008 - 23 = 1985", + "result": "Estimated birth year: 1985", + "range": "1978-1992 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1978, + 1992 + ], + "output": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1985 spans decades 197X/199X", + "inferred_at": "2026-01-09T19:51:12.109797+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CASPER-HUIS.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CASPER-HUIS.json index 03fafb13d9..7690e19105 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CASPER-HUIS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CASPER-HUIS.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/casper-huis-ab8452179_20251214T110300Z.json" ], - "modified_at": "2026-01-09T19:18:14.130048+00:00", + "modified_at": "2026-01-09T19:50:58.670239+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "casper-huis-ab8452179", @@ -115,7 +115,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.130034+00:00", + "inferred_at": "2026-01-09T19:50:58.670209+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CATHERINE-WOLFS.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CATHERINE-WOLFS.json similarity index 64% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CATHERINE-WOLFS.json rename to data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CATHERINE-WOLFS.json index af80259abe..2534ef01d8 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CATHERINE-WOLFS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CATHERINE-WOLFS.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CATHERINE-WOLFS", + "ppid": "ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CATHERINE-WOLFS", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "CATHERINE", "WOLFS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Catherine Wolfs", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -117,63 +122,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/catherinewolfs_20251214T115050Z.json" ], - "modified_at": "2026-01-09T17:42:57.737808+00:00", + "modified_at": "2026-01-09T19:51:06.969832+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "catherinewolfs", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:57.737802+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CATHERINE-WOLFS", @@ -183,6 +135,80 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_CATHERINE-WOLFS", + "new_ppid": "ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CATHERINE-WOLFS", + "changed_at": "2026-01-09T19:43:38.511032+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1991 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Modemuze", + "title": "Contributor / Author", + "date_range": "2014" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2014 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2014 - 23 = 1991", + "result": "Estimated birth year: 1991", + "range": "1986-1996 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1986, + 1996 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:06.963291+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CLAIRE-BROOIMANS.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CLAIRE-BROOIMANS.json index 75f091a790..1ee045c8ba 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CLAIRE-BROOIMANS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_CLAIRE-BROOIMANS.json @@ -89,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/claire-brooimans-b610a8201_20251214T103308Z.json" ], - "modified_at": "2026-01-09T19:18:14.111988+00:00", + "modified_at": "2026-01-09T19:50:58.608509+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "claire-brooimans-b610a8201", @@ -117,7 +117,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -166,7 +166,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.110002+00:00", + "inferred_at": "2026-01-09T19:50:58.604254+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_EDITH-SCHREURS.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_EDITH-SCHREURS.json index 42f2d92cb3..1f8d5fcd34 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_EDITH-SCHREURS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_EDITH-SCHREURS.json @@ -88,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/edithschreurs_20251214T110017Z.json" ], - "modified_at": "2026-01-09T19:18:16.500343+00:00", + "modified_at": "2026-01-09T19:51:18.547146+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "edithschreurs", @@ -116,7 +116,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.500334+00:00", + "inferred_at": "2026-01-09T19:51:18.547137+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_EVA-LAMMERS.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_EVA-LAMMERS.json index 2ced03cc95..debd952204 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_EVA-LAMMERS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_EVA-LAMMERS.json @@ -151,7 +151,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eva-lammers-6aaa7b6b_20251214T112717Z.json" ], - "modified_at": "2026-01-09T19:18:18.272644+00:00", + "modified_at": "2026-01-09T19:51:29.252765+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eva-lammers-6aaa7b6b", @@ -179,7 +179,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -228,7 +228,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:18.257323+00:00", + "inferred_at": "2026-01-09T19:51:29.243494+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_FREDERIEKE-MELSEN.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_FREDERIEKE-MELSEN.json index 3197d66ac3..f297414a22 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_FREDERIEKE-MELSEN.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_FREDERIEKE-MELSEN.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frederieke-melsen-b7062142_20251214T110039Z.json" ], - "modified_at": "2026-01-09T19:18:12.942974+00:00", + "modified_at": "2026-01-09T19:50:49.144595+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frederieke-melsen-b7062142", @@ -108,7 +108,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.942950+00:00", + "inferred_at": "2026-01-09T19:50:49.144585+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_INFOBALIE-RIJKSMUSEUM.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_INFOBALIE-RIJKSMUSEUM.json index fcce281ca8..c33619eeb8 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_INFOBALIE-RIJKSMUSEUM.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_INFOBALIE-RIJKSMUSEUM.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/infobalie-rijksmuseum-b8429b98_20251214T111910Z.json" ], - "modified_at": "2026-01-09T19:18:13.693213+00:00", + "modified_at": "2026-01-09T19:50:55.451400+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "infobalie-rijksmuseum-b8429b98", @@ -108,7 +108,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.693206+00:00", + "inferred_at": "2026-01-09T19:50:55.451390+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_JELTE-REINDERS.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_JELTE-REINDERS.json index b75e09f8cc..d82f5ac4ac 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_JELTE-REINDERS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_JELTE-REINDERS.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jelte-reinders-61880076_20251214T111555Z.json" ], - "modified_at": "2026-01-09T19:18:13.669252+00:00", + "modified_at": "2026-01-09T19:50:55.410360+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jelte-reinders-61880076", @@ -141,7 +141,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.669200+00:00", + "inferred_at": "2026-01-09T19:50:55.410250+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MICHELLE-HEEMEIJER.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MICHELLE-HEEMEIJER.json index 19dd8ea825..c03e5126eb 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MICHELLE-HEEMEIJER.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MICHELLE-HEEMEIJER.json @@ -90,7 +90,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michelleheemeijer_20251214T111501Z.json" ], - "modified_at": "2026-01-09T19:18:14.131340+00:00", + "modified_at": "2026-01-09T19:50:58.672063+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michelleheemeijer", @@ -118,7 +118,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.131201+00:00", + "inferred_at": "2026-01-09T19:50:58.672036+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MYRA-KRAMER.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MYRA-KRAMER.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MYRA-KRAMER.json rename to data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MYRA-KRAMER.json index ad0ad92334..c49a571dce 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MYRA-KRAMER.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MYRA-KRAMER.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MYRA-KRAMER", + "ppid": "ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MYRA-KRAMER", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "MYRA", "KRAMER" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ] }, "name": { "full_name": "Myra Kramer", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -76,63 +81,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/myrakramer_20251214T111837Z.json" ], - "modified_at": "2026-01-09T17:43:05.200189+00:00", + "modified_at": "2026-01-09T19:50:58.942333+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "myrakramer", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands (NL)", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:05.200183+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MYRA-KRAMER", @@ -142,6 +94,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MYRA-KRAMER", + "new_ppid": "ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_MYRA-KRAMER", + "changed_at": "2026-01-09T19:41:12.193887+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1999 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 4 years" + }, + { + "step": 2, + "calculation": "2026 - 4 = 2022", + "result": "Estimated first job year: 2022", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2022 - 23 = 1999", + "result": "Estimated birth year: 1999", + "range": "1992-2006 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1992, + 2006 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:58.942322+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_PAUL-POST.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_PAUL-POST.json new file mode 100644 index 0000000000..3c0fd77f29 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_PAUL-POST.json @@ -0,0 +1,164 @@ +{ + "ppid": "ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_PAUL-POST", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "199X", + "last_location": "NL-NH-AMS", + "last_date": "XXXX", + "name_tokens": [ + "PAUL", + "POST" + ], + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] + }, + "name": { + "full_name": "Paul Post", + "display_name": "Paul Post", + "name_romanized": null, + "name_tokens": [ + "PAUL", + "POST" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "A" + ], + "rationale": "Identified as heritage staff at Regionaal Archief Alkmaar" + }, + "affiliations": [], + "profile_data": { + "name": "Paul Post", + "linkedin_url": "https://www.linkedin.com/in/paul-post-30a25224", + "headline": "Directeur at Regionaal Archief Alkmaar", + "location": "Amsterdam, North Holland, Netherlands (NL)", + "connections": "500 connections • 10 followers", + "about": "Total Experience: 18 years and 9 months", + "experience": [], + "education": [], + "skills": [], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/paul-post-30a25224_20251214T113140Z.json", + "observed_on": "2025-12-14T11:31:40.290122+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.681145+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/paul-post-30a25224_20251214T113140Z.json" + ], + "modified_at": "2026-01-09T19:51:02.479853+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "paul-post-30a25224", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PAUL-POST", + "new_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_PAUL-POST", + "changed_at": "2026-01-09T17:43:07.777343+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_PAUL-POST", + "new_ppid": "ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_PAUL-POST", + "changed_at": "2026-01-09T19:41:10.208697+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "edtf_meaning": "one of: 1970s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1985 is in 199X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 18 years" + }, + { + "step": 2, + "calculation": "2026 - 18 = 2008", + "result": "Estimated first job year: 2008", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2008 - 23 = 1985", + "result": "Estimated birth year: 1985", + "range": "1978-1992 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1978, + 1992 + ], + "output": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1985 spans decades 197X/199X", + "inferred_at": "2026-01-09T19:51:02.479840+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_PIETER-WOLF.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_PIETER-WOLF.json index 329ab2e223..db2c9dd6fe 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_PIETER-WOLF.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_PIETER-WOLF.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pieter-de-wolf-667845187_20251214T110217Z.json" ], - "modified_at": "2026-01-09T19:18:13.114810+00:00", + "modified_at": "2026-01-09T19:50:51.604167+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pieter-de-wolf-667845187", @@ -120,7 +120,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.114800+00:00", + "inferred_at": "2026-01-09T19:50:51.604153+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_RUUD-HOGERWERF.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_RUUD-HOGERWERF.json index ae32ed828c..1fd4aa0dff 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_RUUD-HOGERWERF.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_RUUD-HOGERWERF.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ruud-hogerwerf-b583313b_20251214T110027Z.json" ], - "modified_at": "2026-01-09T19:18:12.994551+00:00", + "modified_at": "2026-01-09T19:50:50.269106+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ruud-hogerwerf-b583313b", @@ -109,7 +109,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.994544+00:00", + "inferred_at": "2026-01-09T19:50:50.269097+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_SJOUKJE-ALPHEN.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_SJOUKJE-ALPHEN.json index 670c004f08..498ace0973 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_SJOUKJE-ALPHEN.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_SJOUKJE-ALPHEN.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sjoukje-van-alphen-8868a0168_20251214T110116Z.json" ], - "modified_at": "2026-01-09T19:18:13.609064+00:00", + "modified_at": "2026-01-09T19:50:55.158965+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sjoukje-van-alphen-8868a0168", @@ -139,7 +139,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.607110+00:00", + "inferred_at": "2026-01-09T19:50:55.152381+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_YASHA-HOLTUIN.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_YASHA-HOLTUIN.json index 6cebf7e567..371740aafc 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_YASHA-HOLTUIN.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-AMS_XXXX_YASHA-HOLTUIN.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yasha-holtuin-032654171_20251214T112626Z.json" ], - "modified_at": "2026-01-09T19:18:16.832902+00:00", + "modified_at": "2026-01-09T19:51:22.070031+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yasha-holtuin-032654171", @@ -137,7 +137,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.832892+00:00", + "inferred_at": "2026-01-09T19:51:22.070022+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-BUS_XXXX_HAYAT-M.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-BUS_XXXX_HAYAT-M.json index 2375e0a1c2..c2e627db1e 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-BUS_XXXX_HAYAT-M.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-BUS_XXXX_HAYAT-M.json @@ -140,7 +140,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hayat-m-719a43144_20251214T103212Z.json" ], - "modified_at": "2026-01-09T19:18:16.046358+00:00", + "modified_at": "2026-01-09T19:51:16.744679+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hayat-m-719a43144", @@ -162,7 +162,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -203,7 +203,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.043530+00:00", + "inferred_at": "2026-01-09T19:51:16.742390+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-DGO_XXXX_NELLEMIEKE-REUS.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-DGO_XXXX_NELLEMIEKE-REUS.json index c930e8d5a6..314f06e9ec 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-DGO_XXXX_NELLEMIEKE-REUS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-DGO_XXXX_NELLEMIEKE-REUS.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nellemieke-reus-58b71614a_20251214T111735Z.json" ], - "modified_at": "2026-01-09T19:18:14.747843+00:00", + "modified_at": "2026-01-09T19:51:04.023611+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nellemieke-reus-58b71614a", @@ -123,7 +123,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.747831+00:00", + "inferred_at": "2026-01-09T19:51:04.023571+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-LOO_XXXX_ARIE-PAPPOT.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-LOO_XXXX_ARIE-PAPPOT.json index f203f4f496..3a90542cd4 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-LOO_XXXX_ARIE-PAPPOT.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-LOO_XXXX_ARIE-PAPPOT.json @@ -97,7 +97,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arie-pappot-39639716_20251214T111440Z.json" ], - "modified_at": "2026-01-09T19:18:16.195276+00:00", + "modified_at": "2026-01-09T19:51:18.287972+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arie-pappot-39639716", @@ -125,7 +125,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.193348+00:00", + "inferred_at": "2026-01-09T19:51:18.283696+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-UIT_XXXX_PATRICE-HESHOF.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-UIT_XXXX_PATRICE-HESHOF.json index 6ae4a8a6c7..e6170cf5a7 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-UIT_XXXX_PATRICE-HESHOF.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-UIT_XXXX_PATRICE-HESHOF.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/patrice-heshof-2a184384_20251214T112053Z.json" ], - "modified_at": "2026-01-09T19:18:17.006019+00:00", + "modified_at": "2026-01-09T19:51:22.959172+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "patrice-heshof-2a184384", @@ -126,7 +126,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.004068+00:00", + "inferred_at": "2026-01-09T19:51:22.957069+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-ZAA_XXXX_RENATE-SUNLOUW.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-ZAA_XXXX_RENATE-SUNLOUW.json index 14d87f7809..e2633b33b4 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-ZAA_XXXX_RENATE-SUNLOUW.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-ZAA_XXXX_RENATE-SUNLOUW.json @@ -212,7 +212,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/renatesunlouw_20251214T113156Z.json" ], - "modified_at": "2026-01-09T19:18:13.651525+00:00", + "modified_at": "2026-01-09T19:51:22.050411+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "renatesunlouw", @@ -243,7 +243,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -284,7 +284,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.651454+00:00", + "inferred_at": "2026-01-09T19:51:22.050211+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-NH-ZAA_XXXX_ROXANNE-BOSCH.json b/data/person/ID_XX-XX-XXX_199X_NL-NH-ZAA_XXXX_ROXANNE-BOSCH.json index be8bb4cf96..e08f402cce 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-NH-ZAA_XXXX_ROXANNE-BOSCH.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-NH-ZAA_XXXX_ROXANNE-BOSCH.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roxannevandenbosch_20251214T110156Z.json" ], - "modified_at": "2026-01-09T19:18:14.938640+00:00", + "modified_at": "2026-01-09T19:51:05.558637+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "roxannevandenbosch", @@ -113,7 +113,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.938632+00:00", + "inferred_at": "2026-01-09T19:51:05.558529+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-OV-ZWO_XXXX_ESMA-NICOLAI.json b/data/person/ID_XX-XX-XXX_199X_NL-OV-ZWO_XXXX_ESMA-NICOLAI.json index 78091a96f6..82c8c0cbae 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-OV-ZWO_XXXX_ESMA-NICOLAI.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-OV-ZWO_XXXX_ESMA-NICOLAI.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/esma-nicolai-64816b242_20251214T113305Z.json" ], - "modified_at": "2026-01-09T19:18:14.681616+00:00", + "modified_at": "2026-01-09T19:51:03.355941+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "esma-nicolai-64816b242", @@ -113,7 +113,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.679102+00:00", + "inferred_at": "2026-01-09T19:51:03.353905+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-NIE_XXXX_MIRJAM-BERG.json b/data/person/ID_XX-XX-XXX_199X_NL-UT-NIE_XXXX_MIRJAM-BERG.json similarity index 61% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-NIE_XXXX_MIRJAM-BERG.json rename to data/person/ID_XX-XX-XXX_199X_NL-UT-NIE_XXXX_MIRJAM-BERG.json index 5d7bfcdb48..5347eaa597 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-NIE_XXXX_MIRJAM-BERG.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-UT-NIE_XXXX_MIRJAM-BERG.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-NIE_XXXX_MIRJAM-BERG", + "ppid": "ID_XX-XX-XXX_199X_NL-UT-NIE_XXXX_MIRJAM-BERG", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-UT-NIE", "last_date": "XXXX", "name_tokens": [ "MIRJAM", "BERG" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] }, "name": { "full_name": "Mirjam Thoen-van den Berg", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -101,63 +106,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mirjam-thoen-van-den-berg-6b17193b_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:43:03.796066+00:00", + "modified_at": "2026-01-09T19:51:21.349885+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mirjam-thoen-van-den-berg-6b17193b", - "inferred_current_settlement": { - "value": "Nieuwegein", - "formatted": "NL-UT-NIE", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "NIE", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Nieuwegein, Utrecht, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Nieuwegein, Utrecht, Netherlands", - "result": { - "geonames_id": 2750325, - "geonames_name": "Nieuwegein", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPL", - "latitude": 52.02917, - "longitude": 5.08056 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-NIE" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2750325, - "geonames_name": "Nieuwegein", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPL", - "latitude": 52.02917, - "longitude": 5.08056 - }, - "inferred_at": "2026-01-09T17:43:03.796060+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIRJAM-BERG", @@ -167,6 +119,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-NIE_XXXX_MIRJAM-BERG", + "new_ppid": "ID_XX-XX-XXX_199X_NL-UT-NIE_XXXX_MIRJAM-BERG", + "changed_at": "2026-01-09T19:43:39.834907+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "edtf_meaning": "one of: 1970s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1985 is in 199X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "18 years and 6 months" + }, + { + "step": 2, + "calculation": "2026 - 18 = 2008", + "result": "Estimated first job year: 2008", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2008 - 23 = 1985", + "result": "Estimated birth year: 1985", + "range": "1978-1992 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1978, + 1992 + ], + "output": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1985 spans decades 197X/199X", + "inferred_at": "2026-01-09T19:51:21.349873+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_HANIFE-CESUR.json b/data/person/ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_HANIFE-CESUR.json index 9acb79bc27..ccf9fd8016 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_HANIFE-CESUR.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_HANIFE-CESUR.json @@ -76,7 +76,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hanife-cesur-729206264_20251214T112258Z.json" ], - "modified_at": "2026-01-09T19:18:15.739370+00:00", + "modified_at": "2026-01-09T19:51:18.464455+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hanife-cesur-729206264", @@ -106,7 +106,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -147,7 +147,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.739359+00:00", + "inferred_at": "2026-01-09T19:51:18.464412+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARIEKE-WENTINK.json b/data/person/ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_MARIEKE-WENTINK.json similarity index 60% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARIEKE-WENTINK.json rename to data/person/ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_MARIEKE-WENTINK.json index 7c686071b6..28a4a636b8 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARIEKE-WENTINK.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_MARIEKE-WENTINK.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARIEKE-WENTINK", + "ppid": "ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_MARIEKE-WENTINK", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-UT-UTR", "last_date": "XXXX", "name_tokens": [ "MARIEKE", "WENTINK" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] }, "name": { "full_name": "Marieke Wentink", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -105,73 +110,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marieke-wentink-0a347b26_20251212T230400Z.json" ], - "modified_at": "2026-01-09T18:58:13.600489+00:00", + "modified_at": "2026-01-09T19:51:08.364653+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marieke-wentink-0a347b26", - "inferred_current_settlement": { - "value": "Utrecht", - "formatted": "NL-UT-UTR", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "UTR", - "confidence": "medium", - "inference_provenance": { - "method": "current_job_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Arnhem-Nijmegen Region, Netherlands" - }, - { - "step": 2, - "observation": "Current job with location found", - "source_field": "profile_data.experience", - "source_value": { - "company": "The Dutch Inspectorate of Education", - "title": "Inspecteur Mbo", - "location": "Utrecht Area, Netherlands" - } - }, - { - "step": 3, - "geocoding": "GeoNames resolution", - "query": "Utrecht Area, Netherlands", - "result": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - } - }, - { - "step": 4, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-UTR" - } - ], - "assumptions": [ - "Current job location represents residence area", - "Person works near where they live" - ], - "geonames_data": { - "geonames_id": 2745912, - "geonames_name": "Utrecht", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPLA", - "latitude": 52.09083, - "longitude": 5.12222 - }, - "inferred_at": "2026-01-09T18:58:13.600471+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARIEKE-WENTINK", @@ -181,6 +123,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-UTR_XXXX_MARIEKE-WENTINK", + "new_ppid": "ID_XX-XX-XXX_199X_NL-UT-UTR_XXXX_MARIEKE-WENTINK", + "changed_at": "2026-01-09T19:41:08.650234+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "edtf_meaning": "one of: 1970s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1986 is in 199X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 17 years" + }, + { + "step": 2, + "calculation": "2026 - 17 = 2009", + "result": "Estimated first job year: 2009", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2009 - 23 = 1986", + "result": "Estimated birth year: 1986", + "range": "1979-1993 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1979, + 1993 + ], + "output": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1986 spans decades 197X/199X", + "inferred_at": "2026-01-09T19:51:08.364645+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-WBD_XXXX_JOKE-PUTTEN.json b/data/person/ID_XX-XX-XXX_199X_NL-UT-WBD_XXXX_JOKE-PUTTEN.json similarity index 61% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-WBD_XXXX_JOKE-PUTTEN.json rename to data/person/ID_XX-XX-XXX_199X_NL-UT-WBD_XXXX_JOKE-PUTTEN.json index 002ed1d5fe..a8b914bcd7 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-WBD_XXXX_JOKE-PUTTEN.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-UT-WBD_XXXX_JOKE-PUTTEN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-WBD_XXXX_JOKE-PUTTEN", + "ppid": "ID_XX-XX-XXX_199X_NL-UT-WBD_XXXX_JOKE-PUTTEN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-UT-WBD", "last_date": "XXXX", "name_tokens": [ "JOKE", "PUTTEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ] }, "name": { "full_name": "Joke Van Putten", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -100,64 +105,11 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joke-van-putten-64048b238_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:43:04.318749+00:00", + "modified_at": "2026-01-09T19:50:50.584180+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joke-van-putten-64048b238", "ppid_collision_suffix": "joke_van_putten_64048b238", - "inferred_current_settlement": { - "value": "Wijk bij Duurstede", - "formatted": "NL-UT-WBD", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "WBD", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Wijk bij Duurstede, Utrecht, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Wijk bij Duurstede, Utrecht, Netherlands", - "result": { - "geonames_id": 2744483, - "geonames_name": "Wijk bij Duurstede", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPL", - "latitude": 51.97417, - "longitude": 5.34167 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-WBD" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2744483, - "geonames_name": "Wijk bij Duurstede", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPL", - "latitude": 51.97417, - "longitude": 5.34167 - }, - "inferred_at": "2026-01-09T17:43:04.318745+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JOKE-PUTTEN-joke_van_putten_64048b238", @@ -167,6 +119,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-WBD_XXXX_JOKE-PUTTEN", + "new_ppid": "ID_XX-XX-XXX_199X_NL-UT-WBD_XXXX_JOKE-PUTTEN", + "changed_at": "2026-01-09T19:43:41.558848+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1997 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "6 years and 10 months" + }, + { + "step": 2, + "calculation": "2026 - 6 = 2020", + "result": "Estimated first job year: 2020", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2020 - 23 = 1997", + "result": "Estimated birth year: 1997", + "range": "1990-2004 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1990, + 2004 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:50.584170+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-ZEI_XXXX_ROCHELLE-GOUDEAU.json b/data/person/ID_XX-XX-XXX_199X_NL-UT-ZEI_XXXX_ROCHELLE-GOUDEAU.json similarity index 74% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-ZEI_XXXX_ROCHELLE-GOUDEAU.json rename to data/person/ID_XX-XX-XXX_199X_NL-UT-ZEI_XXXX_ROCHELLE-GOUDEAU.json index 55b57a9827..9b42542c23 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-ZEI_XXXX_ROCHELLE-GOUDEAU.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-UT-ZEI_XXXX_ROCHELLE-GOUDEAU.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-ZEI_XXXX_ROCHELLE-GOUDEAU", + "ppid": "ID_XX-XX-XXX_199X_NL-UT-ZEI_XXXX_ROCHELLE-GOUDEAU", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-UT-ZEI", "last_date": "XXXX", "name_tokens": [ "ROCHELLE", "GOUDEAU" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] }, "name": { "full_name": "Rochelle Goudeau", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -173,63 +178,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rochellegoudeau_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:43:00.030701+00:00", + "modified_at": "2026-01-09T19:51:06.719284+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rochellegoudeau", - "inferred_current_settlement": { - "value": "Zeist", - "formatted": "NL-UT-ZEI", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "ZEI", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Zeist, Utrecht, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Zeist, Utrecht, Netherlands", - "result": { - "geonames_id": 2743977, - "geonames_name": "Zeist", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPL", - "latitude": 52.09, - "longitude": 5.23333 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-ZEI" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2743977, - "geonames_name": "Zeist", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPL", - "latitude": 52.09, - "longitude": 5.23333 - }, - "inferred_at": "2026-01-09T17:43:00.030694+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROCHELLE-GOUDEAU", @@ -239,6 +191,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-ZEI_XXXX_ROCHELLE-GOUDEAU", + "new_ppid": "ID_XX-XX-XXX_199X_NL-UT-ZEI_XXXX_ROCHELLE-GOUDEAU", + "changed_at": "2026-01-09T19:43:38.026018+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "edtf_meaning": "one of: 1970s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1984 is in 199X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "19 years and 1 month" + }, + { + "step": 2, + "calculation": "2026 - 19 = 2007", + "result": "Estimated first job year: 2007", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2007 - 23 = 1984", + "result": "Estimated birth year: 1984", + "range": "1977-1991 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1977, + 1991 + ], + "output": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1984 spans decades 197X/199X", + "inferred_at": "2026-01-09T19:51:06.719271+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-AAD_XXXX_ILSE-KONING.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-AAD_XXXX_ILSE-KONING.json index e244a6bdbb..ffe3bad34a 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-AAD_XXXX_ILSE-KONING.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-AAD_XXXX_ILSE-KONING.json @@ -107,7 +107,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ilse-de-koning-70674610b_20251214T103154Z.json" ], - "modified_at": "2026-01-09T19:18:16.627382+00:00", + "modified_at": "2026-01-09T19:51:21.105953+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ilse-de-koning-70674610b", @@ -135,7 +135,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.625449+00:00", + "inferred_at": "2026-01-09T19:51:21.092641+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-DEL_XXXX_LINDA-HEEMSKERK.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-DEL_XXXX_LINDA-HEEMSKERK.json index 0ab91770f4..e5023844c7 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-DEL_XXXX_LINDA-HEEMSKERK.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-DEL_XXXX_LINDA-HEEMSKERK.json @@ -125,7 +125,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/linda-heemskerk-58172911_20251214T104059Z.json" ], - "modified_at": "2026-01-09T19:18:13.616788+00:00", + "modified_at": "2026-01-09T19:51:06.989053+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "linda-heemskerk-58172911", @@ -156,7 +156,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.616750+00:00", + "inferred_at": "2026-01-09T19:51:06.988988+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-DEL_XXXX_VICTOR-K.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-DEL_XXXX_VICTOR-K.json similarity index 50% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-DEL_XXXX_VICTOR-K.json rename to data/person/ID_XX-XX-XXX_199X_NL-ZH-DEL_XXXX_VICTOR-K.json index 1a03be6d62..fae3c5a3e4 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-DEL_XXXX_VICTOR-K.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-DEL_XXXX_VICTOR-K.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-DEL_XXXX_VICTOR-K", + "ppid": "ID_XX-XX-XXX_199X_NL-ZH-DEL_XXXX_VICTOR-K", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-ZH-DEL", "last_date": "XXXX", "name_tokens": [ "VICTOR", "K" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ] }, "name": { "full_name": "Victor K.", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -78,63 +83,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/victorklos_20251214T112613Z.json" ], - "modified_at": "2026-01-09T17:43:04.488811+00:00", + "modified_at": "2026-01-09T19:51:23.187218+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "victorklos", - "inferred_current_settlement": { - "value": "Delft", - "formatted": "NL-ZH-DEL", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "DEL", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Delft, South Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Delft, South Holland, Netherlands (NL)", - "result": { - "geonames_id": 2757345, - "geonames_name": "Delft", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPL", - "latitude": 52.00667, - "longitude": 4.35556 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-DEL" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2757345, - "geonames_name": "Delft", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPL", - "latitude": 52.00667, - "longitude": 4.35556 - }, - "inferred_at": "2026-01-09T17:43:04.488805+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VICTOR-K", @@ -144,6 +96,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-DEL_XXXX_VICTOR-K", + "new_ppid": "ID_XX-XX-XXX_199X_NL-ZH-DEL_XXXX_VICTOR-K", + "changed_at": "2026-01-09T19:41:10.183450+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1997 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 6 years" + }, + { + "step": 2, + "calculation": "2026 - 6 = 2020", + "result": "Estimated first job year: 2020", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2020 - 23 = 1997", + "result": "Estimated birth year: 1997", + "range": "1990-2004 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1990, + 2004 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:23.187210+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-LEI_XXXX_DIA-KOTERISMEIJERS.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-LEI_XXXX_DIA-KOTERISMEIJERS.json index 0e5dc9ec45..18451c12a5 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-LEI_XXXX_DIA-KOTERISMEIJERS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-LEI_XXXX_DIA-KOTERISMEIJERS.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dia-koteris-meijers-963a1210a_20251214T111825Z.json" ], - "modified_at": "2026-01-09T19:18:13.708858+00:00", + "modified_at": "2026-01-09T19:50:55.887993+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "dia-koteris-meijers-963a1210a", @@ -108,7 +108,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.708851+00:00", + "inferred_at": "2026-01-09T19:50:55.887981+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-ROT_XXXX_LAYBOW-KUO.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-ROT_XXXX_LAYBOW-KUO.json index caf38000a5..da42771c7a 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-ROT_XXXX_LAYBOW-KUO.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-ROT_XXXX_LAYBOW-KUO.json @@ -108,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laybow-chan-hung-kuo-a8b07696_20251214T111106Z.json" ], - "modified_at": "2026-01-09T19:18:16.931002+00:00", + "modified_at": "2026-01-09T19:51:22.789602+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laybow-chan-hung-kuo-a8b07696", @@ -136,7 +136,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -185,7 +185,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.930989+00:00", + "inferred_at": "2026-01-09T19:51:22.789588+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-SAS_XXXX_MAUD-HARTEVELT.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-SAS_XXXX_MAUD-HARTEVELT.json index a47ee6d996..3f35f59ff4 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-SAS_XXXX_MAUD-HARTEVELT.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-SAS_XXXX_MAUD-HARTEVELT.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maud-hartevelt-7188a0182_20251214T110352Z.json" ], - "modified_at": "2026-01-09T19:18:15.168657+00:00", + "modified_at": "2026-01-09T19:51:03.358139+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maud-hartevelt-7188a0182", @@ -168,7 +168,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.168599+00:00", + "inferred_at": "2026-01-09T19:51:03.358048+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_AARTIE-KEDARKRISHNASING.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_AARTIE-KEDARKRISHNASING.json index 54f8a939f7..cc59c7e144 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_AARTIE-KEDARKRISHNASING.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_AARTIE-KEDARKRISHNASING.json @@ -83,7 +83,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aartie-kedar-krishnasing-8390033b_20251214T112302Z.json" ], - "modified_at": "2026-01-09T19:18:15.310609+00:00", + "modified_at": "2026-01-09T19:51:08.508760+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aartie-kedar-krishnasing-8390033b", @@ -111,7 +111,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.310601+00:00", + "inferred_at": "2026-01-09T19:51:08.508730+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_AMINE-MORABIT.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_AMINE-MORABIT.json index 2f1b617f16..78c2b158a0 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_AMINE-MORABIT.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_AMINE-MORABIT.json @@ -115,7 +115,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amine-el-morabit-980998189_20251214T102917Z.json" ], - "modified_at": "2026-01-09T19:18:16.612220+00:00", + "modified_at": "2026-01-09T19:51:20.841342+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "amine-el-morabit-980998189", @@ -137,7 +137,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.612178+00:00", + "inferred_at": "2026-01-09T19:51:20.841264+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_ANNABELL-THODE.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_ANNABELL-THODE.json index edd5ed9960..9cdf0d6602 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_ANNABELL-THODE.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_ANNABELL-THODE.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annabell-thode-a08033177_20251214T103251Z.json" ], - "modified_at": "2026-01-09T19:18:15.653556+00:00", + "modified_at": "2026-01-09T19:51:13.278417+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "annabell-thode-a08033177", @@ -126,7 +126,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -175,7 +175,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.653547+00:00", + "inferred_at": "2026-01-09T19:51:13.278402+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_ARJAN-WESTSTRATE.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_ARJAN-WESTSTRATE.json index a8b2ba0c5b..f54e94bf60 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_ARJAN-WESTSTRATE.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_ARJAN-WESTSTRATE.json @@ -112,7 +112,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arjanweststrate_20251214T113306Z.json" ], - "modified_at": "2026-01-09T19:18:16.866813+00:00", + "modified_at": "2026-01-09T19:51:28.859033+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arjanweststrate", @@ -143,7 +143,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.866785+00:00", + "inferred_at": "2026-01-09T19:51:28.858986+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_BERHAN-TESFAYE.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_BERHAN-TESFAYE.json index 5006517d5b..92a299e91b 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_BERHAN-TESFAYE.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_BERHAN-TESFAYE.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/berhan-tesfaye-5991887a_20251214T104102Z.json" ], - "modified_at": "2026-01-09T19:18:17.787496+00:00", + "modified_at": "2026-01-09T19:51:28.575761+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "berhan-tesfaye-5991887a", @@ -144,7 +144,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.787420+00:00", + "inferred_at": "2026-01-09T19:51:28.575656+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_COEN-GEEST.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_COEN-GEEST.json index a08cb9aa20..3a230d3bfe 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_COEN-GEEST.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_COEN-GEEST.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/coen-van-der-geest-37488141_20251214T113411Z.json" ], - "modified_at": "2026-01-09T19:18:14.304261+00:00", + "modified_at": "2026-01-09T19:50:48.894933+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "coen-van-der-geest-37488141", @@ -135,7 +135,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +184,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.304233+00:00", + "inferred_at": "2026-01-09T19:50:48.894869+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_DIEGO-DINDAJAL.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_DIEGO-DINDAJAL.json index 768454b18e..7de2ac50ba 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_DIEGO-DINDAJAL.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_DIEGO-DINDAJAL.json @@ -116,7 +116,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/diego-dindajal-98482480_20251214T112702Z.json" ], - "modified_at": "2026-01-09T19:18:17.936481+00:00", + "modified_at": "2026-01-09T19:51:28.856396+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "diego-dindajal-98482480", @@ -144,7 +144,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -193,7 +193,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.924603+00:00", + "inferred_at": "2026-01-09T19:51:28.848997+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_DOUWE-BEULEN.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_DOUWE-BEULEN.json index 84c034f2f5..34ada2d965 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_DOUWE-BEULEN.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_DOUWE-BEULEN.json @@ -150,7 +150,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/douwe-beulen-335873a4_20251214T103310Z.json" ], - "modified_at": "2026-01-09T19:18:13.276866+00:00", + "modified_at": "2026-01-09T19:50:53.731937+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "douwe-beulen-335873a4", @@ -172,7 +172,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -213,7 +213,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.276828+00:00", + "inferred_at": "2026-01-09T19:50:53.731859+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_FINN-LEDEN.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_FINN-LEDEN.json similarity index 60% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_FINN-LEDEN.json rename to data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_FINN-LEDEN.json index 90a2f99bae..17b0934b01 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_FINN-LEDEN.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_FINN-LEDEN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_FINN-LEDEN", + "ppid": "ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_FINN-LEDEN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "FINN", "LEDEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ] }, "name": { "full_name": "Finn van der Leden", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -90,63 +95,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/finn-van-der-leden-9a1322182_20251214T103735Z.json" ], - "modified_at": "2026-01-09T17:43:00.077006+00:00", + "modified_at": "2026-01-09T19:51:18.489937+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "finn-van-der-leden-9a1322182", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, South Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, South Holland, Netherlands (NL)", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:43:00.076994+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FINN-LEDEN", @@ -156,6 +108,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_FINN-LEDEN", + "new_ppid": "ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_FINN-LEDEN", + "changed_at": "2026-01-09T19:41:11.638164+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1997 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 6 years" + }, + { + "step": 2, + "calculation": "2026 - 6 = 2020", + "result": "Estimated first job year: 2020", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2020 - 23 = 1997", + "result": "Estimated birth year: 1997", + "range": "1990-2004 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1990, + 2004 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:18.489932+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_FLORENCE-LIMBURG.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_FLORENCE-LIMBURG.json index 1263203fdd..eb003db5be 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_FLORENCE-LIMBURG.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_FLORENCE-LIMBURG.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/florencelimburg_20251214T112408Z.json" ], - "modified_at": "2026-01-09T19:18:17.428240+00:00", + "modified_at": "2026-01-09T19:51:28.006081+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "florencelimburg", @@ -108,7 +108,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.428227+00:00", + "inferred_at": "2026-01-09T19:51:28.006075+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_GAITRIE-BADLOE.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_GAITRIE-BADLOE.json index 7f135f3f20..33fd274364 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_GAITRIE-BADLOE.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_GAITRIE-BADLOE.json @@ -137,7 +137,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gaitriebadloe_20251214T112216Z.json" ], - "modified_at": "2026-01-09T19:18:13.193492+00:00", + "modified_at": "2026-01-09T19:51:22.322568+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gaitriebadloe", @@ -174,7 +174,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -223,7 +223,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.189813+00:00", + "inferred_at": "2026-01-09T19:51:22.318814+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_GINO-HOOGSTRATEN.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_GINO-HOOGSTRATEN.json index d66343129c..2b6920c13e 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_GINO-HOOGSTRATEN.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_GINO-HOOGSTRATEN.json @@ -89,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gino-van-hoogstraten-979922264_20251214T112728Z.json" ], - "modified_at": "2026-01-09T19:18:15.435721+00:00", + "modified_at": "2026-01-09T19:51:10.857393+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gino-van-hoogstraten-979922264", @@ -111,7 +111,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -152,7 +152,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.435701+00:00", + "inferred_at": "2026-01-09T19:51:10.857353+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_HAROLD-ZEE.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_HAROLD-ZEE.json index 565f506096..5946ec864b 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_HAROLD-ZEE.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_HAROLD-ZEE.json @@ -89,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/harold-zee-208b37125_20251214T103227Z.json" ], - "modified_at": "2026-01-09T19:18:14.010643+00:00", + "modified_at": "2026-01-09T19:50:58.069730+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "harold-zee-208b37125", @@ -117,7 +117,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -166,7 +166,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.010626+00:00", + "inferred_at": "2026-01-09T19:50:58.069627+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_JOOP-BLEIJSWIJK.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_JOOP-BLEIJSWIJK.json similarity index 53% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_JOOP-BLEIJSWIJK.json rename to data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_JOOP-BLEIJSWIJK.json index 7faab0b36a..e61c11ac20 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_JOOP-BLEIJSWIJK.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_JOOP-BLEIJSWIJK.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_JOOP-BLEIJSWIJK", + "ppid": "ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_JOOP-BLEIJSWIJK", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "JOOP", "BLEIJSWIJK" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] }, "name": { "full_name": "Joop van Bleijswijk", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -78,63 +83,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/joop-van-bleijswijk-06a63343_20251214T103107Z.json" ], - "modified_at": "2026-01-09T17:42:56.977414+00:00", + "modified_at": "2026-01-09T19:50:52.973280+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "joop-van-bleijswijk-06a63343", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, South Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, South Holland, Netherlands (NL)", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:42:56.977405+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JOOP-BLEIJSWIJK", @@ -144,6 +96,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_JOOP-BLEIJSWIJK", + "new_ppid": "ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_JOOP-BLEIJSWIJK", + "changed_at": "2026-01-09T19:41:11.063714+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "edtf_meaning": "one of: 1970s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1984 is in 199X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 19 years" + }, + { + "step": 2, + "calculation": "2026 - 19 = 2007", + "result": "Estimated first job year: 2007", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2007 - 23 = 1984", + "result": "Estimated birth year: 1984", + "range": "1977-1991 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1977, + 1991 + ], + "output": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1984 spans decades 197X/199X", + "inferred_at": "2026-01-09T19:50:52.973272+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_LAURA-MORISON.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_LAURA-MORISON.json index 118b43ca41..60385c4c7c 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_LAURA-MORISON.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_LAURA-MORISON.json @@ -87,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/laura-morison-2264a0108_20251214T112909Z.json" ], - "modified_at": "2026-01-09T19:18:16.262843+00:00", + "modified_at": "2026-01-09T19:51:18.348107+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "laura-morison-2264a0108", @@ -115,7 +115,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.262775+00:00", + "inferred_at": "2026-01-09T19:51:18.348096+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_LEO-TIMMERS.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_LEO-TIMMERS.json index 4a678e8e63..de9de0bc96 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_LEO-TIMMERS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_LEO-TIMMERS.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/timmersleo_20251214T112501Z.json" ], - "modified_at": "2026-01-09T19:18:15.059640+00:00", + "modified_at": "2026-01-09T19:51:06.656052+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "timmersleo", @@ -139,7 +139,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -188,7 +188,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.059615+00:00", + "inferred_at": "2026-01-09T19:51:06.655997+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MADAN-MOTI.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MADAN-MOTI.json index 9beda2d903..349090e178 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MADAN-MOTI.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MADAN-MOTI.json @@ -111,7 +111,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/madan-moti-b121a1122_20251214T113326Z.json" ], - "modified_at": "2026-01-09T19:18:16.206729+00:00", + "modified_at": "2026-01-09T19:51:29.212736+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "madan-moti-b121a1122", @@ -142,7 +142,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -183,7 +183,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.206701+00:00", + "inferred_at": "2026-01-09T19:51:29.212670+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MARLOES-LIGTVOET.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MARLOES-LIGTVOET.json index d7387b6a78..fe87d8d396 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MARLOES-LIGTVOET.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MARLOES-LIGTVOET.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marloes-ligtvoet-b0777235_20251214T113338Z.json" ], - "modified_at": "2026-01-09T19:18:16.741090+00:00", + "modified_at": "2026-01-09T19:51:29.488802+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marloes-ligtvoet-b0777235", @@ -163,7 +163,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.741062+00:00", + "inferred_at": "2026-01-09T19:51:29.488747+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MICHAEL-KUIK.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MICHAEL-KUIK.json index ec581e4ceb..08cfcca79b 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MICHAEL-KUIK.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MICHAEL-KUIK.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michaelvankuik_20251214T103248Z.json" ], - "modified_at": "2026-01-09T19:18:13.616003+00:00", + "modified_at": "2026-01-09T19:50:55.177436+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michaelvankuik", @@ -120,7 +120,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -169,7 +169,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.612241+00:00", + "inferred_at": "2026-01-09T19:50:55.172703+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MIRANDA-KNOESTER.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MIRANDA-KNOESTER.json index c4b71af919..e575e1c750 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MIRANDA-KNOESTER.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_MIRANDA-KNOESTER.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/miranda-knoester-54741b6b_20251214T112144Z.json" ], - "modified_at": "2026-01-09T19:18:17.103318+00:00", + "modified_at": "2026-01-09T19:51:29.003475+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "miranda-knoester-54741b6b", @@ -132,7 +132,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -173,7 +173,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.103281+00:00", + "inferred_at": "2026-01-09T19:51:29.003413+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_PATRICIA-VANE.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_PATRICIA-VANE.json index 6d9a19e084..9377a6e017 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_PATRICIA-VANE.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_PATRICIA-VANE.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/patricia-belloque-vane-445a92162_20251214T113009Z.json" ], - "modified_at": "2026-01-09T19:18:15.726558+00:00", + "modified_at": "2026-01-09T19:51:13.544958+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "patricia-belloque-vane-445a92162", @@ -121,7 +121,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.720996+00:00", + "inferred_at": "2026-01-09T19:51:13.538880+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_PATRYCJA-BIK.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_PATRYCJA-BIK.json index a0e9b790f0..9d5ab33259 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_PATRYCJA-BIK.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_PATRYCJA-BIK.json @@ -119,7 +119,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/patrycja-bik-81194b15b_20251214T112706Z.json" ], - "modified_at": "2026-01-09T19:18:15.294532+00:00", + "modified_at": "2026-01-09T19:51:08.423143+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "patrycja-bik-81194b15b", @@ -147,7 +147,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -196,7 +196,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.294522+00:00", + "inferred_at": "2026-01-09T19:51:08.423124+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_RAYMOND-POETERAY.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_RAYMOND-POETERAY.json index 708218b769..92ec4629a5 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_RAYMOND-POETERAY.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-TH_XXXX_RAYMOND-POETERAY.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/raymond-poeteray-1990853_20251214T103240Z.json" ], - "modified_at": "2026-01-09T19:18:13.355865+00:00", + "modified_at": "2026-01-09T19:51:07.270520+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "raymond-poeteray-1990853", @@ -136,7 +136,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.355825+00:00", + "inferred_at": "2026-01-09T19:51:07.270384+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_NL-ZH-ZOE_XXXX_LETSCH-MARIANNE.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-ZOE_XXXX_LETSCH-MARIANNE.json index 7cfedf94db..75d402cc08 100644 --- a/data/person/ID_XX-XX-XXX_199X_NL-ZH-ZOE_XXXX_LETSCH-MARIANNE.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-ZOE_XXXX_LETSCH-MARIANNE.json @@ -89,7 +89,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/letsch-marianne-b0283675_20251214T112340Z.json" ], - "modified_at": "2026-01-09T19:18:17.453793+00:00", + "modified_at": "2026-01-09T19:51:28.151831+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "letsch-marianne-b0283675", @@ -117,7 +117,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -166,7 +166,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:17.451611+00:00", + "inferred_at": "2026-01-09T19:51:28.149857+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-ZWI_XXXX_ARIEJAN-PRINS.json b/data/person/ID_XX-XX-XXX_199X_NL-ZH-ZWI_XXXX_ARIEJAN-PRINS.json similarity index 54% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-ZWI_XXXX_ARIEJAN-PRINS.json rename to data/person/ID_XX-XX-XXX_199X_NL-ZH-ZWI_XXXX_ARIEJAN-PRINS.json index c64293edf2..def8ad7e47 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-ZWI_XXXX_ARIEJAN-PRINS.json +++ b/data/person/ID_XX-XX-XXX_199X_NL-ZH-ZWI_XXXX_ARIEJAN-PRINS.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-ZWI_XXXX_ARIEJAN-PRINS", + "ppid": "ID_XX-XX-XXX_199X_NL-ZH-ZWI_XXXX_ARIEJAN-PRINS", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "NL-ZH-ZWI", "last_date": "XXXX", "name_tokens": [ "ARIEJAN", "PRINS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ] }, "name": { "full_name": "Arie-Jan Prins", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -69,63 +74,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arie-jan-prins-829948102_20251214T110355Z.json" ], - "modified_at": "2026-01-09T17:43:02.802541+00:00", + "modified_at": "2026-01-09T19:51:12.118914+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "arie-jan-prins-829948102", - "inferred_current_settlement": { - "value": "Zwijndrecht", - "formatted": "NL-ZH-ZWI", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "ZWI", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Zwijndrecht, South Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Zwijndrecht, South Holland, Netherlands (NL)", - "result": { - "geonames_id": 2743493, - "geonames_name": "Zwijndrecht", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPL", - "latitude": 51.8175, - "longitude": 4.63333 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-ZWI" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2743493, - "geonames_name": "Zwijndrecht", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPL", - "latitude": 51.8175, - "longitude": 4.63333 - }, - "inferred_at": "2026-01-09T17:43:02.802535+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARIEJAN-PRINS", @@ -135,6 +87,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-ZWI_XXXX_ARIEJAN-PRINS", + "new_ppid": "ID_XX-XX-XXX_199X_NL-ZH-ZWI_XXXX_ARIEJAN-PRINS", + "changed_at": "2026-01-09T19:41:11.043250+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1998 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 5 years" + }, + { + "step": 2, + "calculation": "2026 - 5 = 2021", + "result": "Estimated first job year: 2021", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2021 - 23 = 1998", + "result": "Estimated birth year: 1998", + "range": "1991-2005 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1991, + 2005 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:12.118907+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_AGUSTIN-RAHAYU.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_AGUSTIN-RAHAYU.json index 736cf671a1..50757e7ddd 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_AGUSTIN-RAHAYU.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_AGUSTIN-RAHAYU.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/agustin-rahayu_20251214T111923Z.json" ], - "modified_at": "2026-01-09T19:18:12.982389+00:00", + "modified_at": "2026-01-09T19:50:50.104045+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "agustin-rahayu", @@ -162,7 +162,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.982344+00:00", + "inferred_at": "2026-01-09T19:50:49.624643+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANNA-CHULYAN.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANNA-CHULYAN.json index 2f5ea8f9ff..08f87fb887 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANNA-CHULYAN.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ANNA-CHULYAN.json @@ -82,7 +82,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-chulyan-4940a6124_20251214T103746Z.json" ], - "modified_at": "2026-01-09T19:18:17.781018+00:00", + "modified_at": "2026-01-09T19:51:28.573174+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anna-chulyan-4940a6124", @@ -109,7 +109,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.781006+00:00", + "inferred_at": "2026-01-09T19:51:28.573150+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ATIEKRATNA-WIRATRI.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ATIEKRATNA-WIRATRI.json index 79ddcc67af..9af162b642 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ATIEKRATNA-WIRATRI.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ATIEKRATNA-WIRATRI.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/atiekratna-wiratri-2a93a368_20251214T112012Z.json" ], - "modified_at": "2026-01-09T19:18:13.717589+00:00", + "modified_at": "2026-01-09T19:50:55.978521+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "atiekratna-wiratri-2a93a368", @@ -129,7 +129,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.717569+00:00", + "inferred_at": "2026-01-09T19:50:55.897451+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEJNA-YILDIZ.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEJNA-YILDIZ.json index c473ab17ed..5600108170 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEJNA-YILDIZ.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_BEJNA-YILDIZ.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bejna-yildiz-12764863_20251214T102854Z.json" ], - "modified_at": "2026-01-09T19:18:15.581433+00:00", + "modified_at": "2026-01-09T19:51:12.185933+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "bejna-yildiz-12764863", @@ -106,7 +106,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.579503+00:00", + "inferred_at": "2026-01-09T19:51:12.183950+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CATARINA-DITTSCHLAG.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CATARINA-DITTSCHLAG.json index c71e8e9af6..a9dbf9dbf6 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CATARINA-DITTSCHLAG.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CATARINA-DITTSCHLAG.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/catarina-dittschlag-31951920_20251212T200000Z.json" ], - "modified_at": "2026-01-09T19:18:16.112082+00:00", + "modified_at": "2026-01-09T19:51:17.557438+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "catarina-dittschlag-31951920", @@ -118,7 +118,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.112070+00:00", + "inferred_at": "2026-01-09T19:51:17.480256+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CINDRA-YULIANI.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CINDRA-YULIANI.json index 268d0334e9..f7438c5cff 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CINDRA-YULIANI.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CINDRA-YULIANI.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/cindra-yuliani-202610138_20251214T112004Z.json" ], - "modified_at": "2026-01-09T19:18:13.439065+00:00", + "modified_at": "2026-01-09T19:50:54.311835+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "cindra-yuliani-202610138", @@ -107,7 +107,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -156,7 +156,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.439052+00:00", + "inferred_at": "2026-01-09T19:50:54.199725+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CORRIE-PERDOK.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CORRIE-PERDOK.json new file mode 100644 index 0000000000..e3bfbdd6c9 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CORRIE-PERDOK.json @@ -0,0 +1,155 @@ +{ + "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CORRIE-PERDOK", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "199X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "CORRIE", + "PERDOK" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] + }, + "name": { + "full_name": "Corrie Perdok", + "display_name": "Corrie Perdok", + "name_romanized": null, + "name_tokens": [ + "CORRIE", + "PERDOK" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at Dienst Uitvoering Onderwijs (Ministerie van OCW)" + }, + "affiliations": [], + "profile_data": { + "name": "Corrie Perdok", + "linkedin_url": "https://www.linkedin.com/in/corrie-perdok-95a343186", + "headline": "Software Test Engineer at Dienst Uitvoering Onderwijs (Ministerie van OCW)", + "location": "Greater Groningen Area (NL)", + "connections": "36 connections • 37 followers", + "about": "Total Experience: 20 years and 1 month", + "experience": [], + "education": [], + "skills": [ + "software" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/corrie-perdok-95a343186_20251214T112201Z.json", + "observed_on": "2025-12-14T11:22:01.740635+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.628837+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/corrie-perdok-95a343186_20251214T112201Z.json" + ], + "modified_at": "2026-01-09T19:50:48.643807+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "corrie-perdok-95a343186", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CORRIE-PERDOK", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_CORRIE-PERDOK", + "changed_at": "2026-01-09T19:41:08.569118+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "edtf_meaning": "one of: 1970s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1983 is in 199X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 20 years" + }, + { + "step": 2, + "calculation": "2026 - 20 = 2006", + "result": "Estimated first job year: 2006", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2006 - 23 = 1983", + "result": "Estimated birth year: 1983", + "range": "1976-1990 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1976, + 1990 + ], + "output": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1983 spans decades 197X/199X", + "inferred_at": "2026-01-09T19:50:48.640952+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DAGMAR-BERBEN.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DAGMAR-BERBEN.json similarity index 52% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DAGMAR-BERBEN.json rename to data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DAGMAR-BERBEN.json index 242c4723f6..6497e47879 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DAGMAR-BERBEN.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DAGMAR-BERBEN.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DAGMAR-BERBEN", + "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DAGMAR-BERBEN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "DAGMAR", "BERBEN" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -103,7 +108,82 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/dagmar-berben-61832726_20251213T020000Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:58.630866+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "dagmar-berben-61832726" + "linkedin_slug": "dagmar-berben-61832726", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DAGMAR-BERBEN", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DAGMAR-BERBEN", + "changed_at": "2026-01-09T19:43:39.856237+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "edtf_meaning": "one of: 1970s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1983 is in 199X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "20 years and 4 months" + }, + { + "step": 2, + "calculation": "2026 - 20 = 2006", + "result": "Estimated first job year: 2006", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2006 - 23 = 1983", + "result": "Estimated birth year: 1983", + "range": "1976-1990 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1976, + 1990 + ], + "output": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1983 spans decades 197X/199X", + "inferred_at": "2026-01-09T19:50:58.622638+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DON-KARDONO.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DON-KARDONO.json index d5566056e9..a9db987313 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DON-KARDONO.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_DON-KARDONO.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/don-kardono-9a041918b_20251214T112007Z.json" ], - "modified_at": "2026-01-09T19:18:12.747678+00:00", + "modified_at": "2026-01-09T19:50:48.730295+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "don-kardono-9a041918b", @@ -106,7 +106,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.747657+00:00", + "inferred_at": "2026-01-09T19:50:48.675203+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELISABETH-WIESSNER.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELISABETH-WIESSNER.json index b15f2bcdab..b79fef56d7 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELISABETH-WIESSNER.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ELISABETH-WIESSNER.json @@ -165,7 +165,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/elisabeth-wiessner-57a57a1b_20251212T200000Z.json" ], - "modified_at": "2026-01-09T19:18:14.374506+00:00", + "modified_at": "2026-01-09T19:51:01.725515+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "elisabeth-wiessner-57a57a1b", @@ -192,7 +192,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -241,7 +241,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.368767+00:00", + "inferred_at": "2026-01-09T19:51:01.712614+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FANDY-ADRIANA.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FANDY-ADRIANA.json index 2c1ef1f43b..dc40e90d90 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FANDY-ADRIANA.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FANDY-ADRIANA.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fandy-agraha-adriana-9a420b10b_20251214T112034Z.json" ], - "modified_at": "2026-01-09T19:18:12.986614+00:00", + "modified_at": "2026-01-09T19:50:50.213084+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fandy-agraha-adriana-9a420b10b", @@ -133,7 +133,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.986592+00:00", + "inferred_at": "2026-01-09T19:50:50.146208+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FEMKE-S.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FEMKE-S.json similarity index 69% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FEMKE-S.json rename to data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FEMKE-S.json index db56a5efe5..361ec0c471 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FEMKE-S.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FEMKE-S.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FEMKE-S", + "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FEMKE-S", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "FEMKE", "S" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -192,7 +197,82 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/femkestoutjesdijk_20251213T020000Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:22.058679+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "femkestoutjesdijk" + "linkedin_slug": "femkestoutjesdijk", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FEMKE-S", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FEMKE-S", + "changed_at": "2026-01-09T19:41:11.789748+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1990 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 13 years" + }, + { + "step": 2, + "calculation": "2026 - 13 = 2013", + "result": "Estimated first job year: 2013", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2013 - 23 = 1990", + "result": "Estimated birth year: 1990", + "range": "1983-1997 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1983, + 1997 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:22.056706+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FOUKJE-BROER.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FOUKJE-BROER.json index b7e8074b64..4161d6e348 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FOUKJE-BROER.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FOUKJE-BROER.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/foukje-broer-957a1227_20251214T110731Z.json" ], - "modified_at": "2026-01-09T19:18:13.069418+00:00", + "modified_at": "2026-01-09T19:50:50.960776+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "foukje-broer-957a1227", @@ -131,7 +131,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -180,7 +180,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.069399+00:00", + "inferred_at": "2026-01-09T19:50:50.960681+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FRANK-PEETERS.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FRANK-PEETERS.json new file mode 100644 index 0000000000..4bfffdc0ab --- /dev/null +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FRANK-PEETERS.json @@ -0,0 +1,155 @@ +{ + "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FRANK-PEETERS", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "199X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "FRANK", + "PEETERS" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] + }, + "name": { + "full_name": "Frank Peeters", + "display_name": "Frank Peeters", + "name_romanized": null, + "name_tokens": [ + "FRANK", + "PEETERS" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at KB nationale bibliotheek" + }, + "affiliations": [], + "profile_data": { + "name": "Frank Peeters", + "linkedin_url": "https://www.linkedin.com/in/frank-peeters-49b195a", + "headline": "Royal Library", + "location": "The Randstad, Netherlands (NL)", + "connections": "43 connections • 43 followers", + "about": "neerlandicus; studie Nederlands UvA Total Experience: 19 years and 10 months", + "experience": [], + "education": [], + "skills": [ + "nederlands" + ], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C5603AQEapvdBPeaegA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1517683308067?e=2147483647&v=beta&t=1-GUBeZbFnvuOoYWGkrbXVgF3jtsELqEfSi1xmzsans" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/frank-peeters-49b195a_20251214T113420Z.json", + "observed_on": "2025-12-14T11:34:20.955608+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.624389+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/frank-peeters-49b195a_20251214T113420Z.json" + ], + "modified_at": "2026-01-09T19:51:08.615946+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "frank-peeters-49b195a", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FRANK-PEETERS", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FRANK-PEETERS", + "changed_at": "2026-01-09T19:41:10.871277+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "edtf_meaning": "one of: 1970s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1984 is in 199X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 19 years" + }, + { + "step": 2, + "calculation": "2026 - 19 = 2007", + "result": "Estimated first job year: 2007", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2007 - 23 = 1984", + "result": "Estimated birth year: 1984", + "range": "1977-1991 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1977, + 1991 + ], + "output": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1984 spans decades 197X/199X", + "inferred_at": "2026-01-09T19:51:08.613524+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FRANKA-SALOMONS.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FRANKA-SALOMONS.json index ba73b3addb..1311fcb592 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FRANKA-SALOMONS.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FRANKA-SALOMONS.json @@ -126,7 +126,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/franka-salomons-41998924_20251214T113054Z.json" ], - "modified_at": "2026-01-09T19:18:14.960848+00:00", + "modified_at": "2026-01-09T19:50:58.350820+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "franka-salomons-41998924", @@ -162,7 +162,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -211,7 +211,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.960817+00:00", + "inferred_at": "2026-01-09T19:50:58.350727+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FRITS-BOUMA.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FRITS-BOUMA.json index 4d9e8e5b57..0a76d8ddd9 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FRITS-BOUMA.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_FRITS-BOUMA.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frits-bouma-8ab06b2a_20251214T112112Z.json" ], - "modified_at": "2026-01-09T19:18:14.902170+00:00", + "modified_at": "2026-01-09T19:51:05.479914+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frits-bouma-8ab06b2a", @@ -112,7 +112,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -161,7 +161,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.900332+00:00", + "inferred_at": "2026-01-09T19:51:05.474572+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HOORIEH-SAEIDI.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HOORIEH-SAEIDI.json new file mode 100644 index 0000000000..4e5a3c2f33 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HOORIEH-SAEIDI.json @@ -0,0 +1,160 @@ +{ + "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HOORIEH-SAEIDI", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "199X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "HOORIEH", + "SAEIDI" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ] + }, + "name": { + "full_name": "Hoorieh Saeidi", + "display_name": "Hoorieh Saeidi", + "name_romanized": null, + "name_tokens": [ + "HOORIEH", + "SAEIDI" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Hoorieh Saeidi", + "linkedin_url": "https://www.linkedin.com/in/hooriehsaeidi", + "headline": "The member of science board at National Library of Iran", + "location": "Iran (IR)", + "connections": "55 connections • 55 followers", + "about": "Total Experience: 5 years", + "experience": [ + { + "title": "The Member Of Science Board", + "company": "National Library of Iran (Current)" + } + ], + "education": [], + "skills": [ + "science" + ], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C5103AQHidZz-HwUGFQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1516836476916?e=2147483647&v=beta&t=q1JqPXMCZE7G90A7x7L90i00wOKBN8F3DQYDUJoNETM" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/hooriehsaeidi_20251214T103832Z.json", + "observed_on": "2025-12-14T10:38:32.546675+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.509236+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/hooriehsaeidi_20251214T103832Z.json" + ], + "modified_at": "2026-01-09T19:51:19.886592+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "hooriehsaeidi", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HOORIEH-SAEIDI", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HOORIEH-SAEIDI", + "changed_at": "2026-01-09T19:41:09.221489+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1998 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 5 years" + }, + { + "step": 2, + "calculation": "2026 - 5 = 2021", + "result": "Estimated first job year: 2021", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2021 - 23 = 1998", + "result": "Estimated birth year: 1998", + "range": "1991-2005 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1991, + 2005 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:19.886491+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HUGO-PONTES.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HUGO-PONTES.json index add0e2a0b7..f107bc1f90 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HUGO-PONTES.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_HUGO-PONTES.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hugo-pontes-15066218b_20251214T111147Z.json" ], - "modified_at": "2026-01-09T19:18:14.307795+00:00", + "modified_at": "2026-01-09T19:51:00.103373+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hugo-pontes-15066218b", @@ -148,7 +148,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.305837+00:00", + "inferred_at": "2026-01-09T19:51:00.100798+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ILONA-DOMANSKA.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ILONA-DOMANSKA.json index 34578b58e7..eecb191088 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ILONA-DOMANSKA.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ILONA-DOMANSKA.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ilona-domanska-48932462_20251214T103222Z.json" ], - "modified_at": "2026-01-09T19:18:13.253478+00:00", + "modified_at": "2026-01-09T19:50:53.706790+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ilona-domanska-48932462", @@ -107,7 +107,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -156,7 +156,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.247875+00:00", + "inferred_at": "2026-01-09T19:50:53.700989+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JAN-HOND.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JAN-HOND.json new file mode 100644 index 0000000000..e9a6d07d08 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JAN-HOND.json @@ -0,0 +1,174 @@ +{ + "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JAN-HOND", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "199X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "JAN", + "HOND" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] + }, + "name": { + "full_name": "jan de hond", + "display_name": "jan de hond", + "name_romanized": null, + "name_tokens": [ + "JAN", + "HOND" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "M" + ], + "rationale": "Identified as heritage staff at Rijksmuseum" + }, + "affiliations": [], + "profile_data": { + "name": "jan de hond", + "linkedin_url": "https://www.linkedin.com/in/jandehond", + "headline": "conservator geschiedenis Rijksmuseum", + "location": "", + "connections": "500 connections • 812 followers", + "about": "Total Experience: 18 years and 11 months", + "experience": [], + "education": [], + "skills": [], + "languages": [ + { + "language": "Nederlands", + "proficiency": "Native or bilingual proficiency" + }, + { + "language": "English", + "proficiency": "Professional working proficiency" + }, + { + "language": "French", + "proficiency": "Limited working proficiency" + }, + { + "language": "German", + "proficiency": "Limited working proficiency" + }, + { + "language": "Italian", + "proficiency": "Elementary proficiency" + } + ], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C4D03AQG5-xnljY3XGA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1561129338600?e=2147483647&v=beta&t=YMIfMAl7I0m7CNcDOqo_-Rqqt4OVmYS4qAysJJz9yyU" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/jandehond_20251214T111447Z.json", + "observed_on": "2025-12-14T11:14:47.463343+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.640158+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/jandehond_20251214T111447Z.json" + ], + "modified_at": "2026-01-09T19:51:21.777299+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "jandehond", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAN-HOND", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JAN-HOND", + "changed_at": "2026-01-09T19:41:10.387796+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "edtf_meaning": "one of: 1970s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1985 is in 199X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 18 years" + }, + { + "step": 2, + "calculation": "2026 - 18 = 2008", + "result": "Estimated first job year: 2008", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2008 - 23 = 1985", + "result": "Estimated birth year: 1985", + "range": "1978-1992 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1978, + 1992 + ], + "output": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1985 spans decades 197X/199X", + "inferred_at": "2026-01-09T19:51:21.777286+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JORGE-RODRIGUES.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JORGE-RODRIGUES.json index 81b829761f..10a3a00cd7 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JORGE-RODRIGUES.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JORGE-RODRIGUES.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jorge-de-brito-rodrigues-881b711bb_20251214T112733Z.json" ], - "modified_at": "2026-01-09T19:18:16.034357+00:00", + "modified_at": "2026-01-09T19:51:16.723345+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jorge-de-brito-rodrigues-881b711bb", @@ -128,7 +128,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.034348+00:00", + "inferred_at": "2026-01-09T19:51:16.723334+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JULES-SNEPPEN.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JULES-SNEPPEN.json index 667e37c48a..cc10d0f1d6 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JULES-SNEPPEN.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_JULES-SNEPPEN.json @@ -123,7 +123,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jules-van-der-sneppen-13791252_20251214T102840Z.json" ], - "modified_at": "2026-01-09T19:18:13.847759+00:00", + "modified_at": "2026-01-09T19:50:56.705068+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jules-van-der-sneppen-13791252", @@ -150,7 +150,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -199,7 +199,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.845919+00:00", + "inferred_at": "2026-01-09T19:50:56.700437+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LOTTE-DIGGELEN.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LOTTE-DIGGELEN.json index d9fcec3460..c470da66e8 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LOTTE-DIGGELEN.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LOTTE-DIGGELEN.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lotte-van-diggelen-59b29764_20251214T111635Z.json" ], - "modified_at": "2026-01-09T19:18:13.621279+00:00", + "modified_at": "2026-01-09T19:50:55.198713+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lotte-van-diggelen-59b29764", @@ -122,7 +122,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -171,7 +171,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.618568+00:00", + "inferred_at": "2026-01-09T19:50:55.196611+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LOUISE-RAHARDJO.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LOUISE-RAHARDJO.json index 3d5228f0aa..f6ab0ab571 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LOUISE-RAHARDJO.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LOUISE-RAHARDJO.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/louiserahardjo86_20251214T115050Z.json" ], - "modified_at": "2026-01-09T19:18:17.527720+00:00", + "modified_at": "2026-01-09T19:51:28.394646+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "louiserahardjo86", @@ -129,7 +129,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.519733+00:00", + "inferred_at": "2026-01-09T19:51:28.392906+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LUKAS-ELEUWARIN.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LUKAS-ELEUWARIN.json index 485d902412..fa6f95b166 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LUKAS-ELEUWARIN.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_LUKAS-ELEUWARIN.json @@ -141,7 +141,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lukas-eleuwarin-652056190_20251214T110750Z.json" ], - "modified_at": "2026-01-09T19:18:15.177130+00:00", + "modified_at": "2026-01-09T19:51:06.994671+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lukas-eleuwarin-652056190", @@ -168,7 +168,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -217,7 +217,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.177115+00:00", + "inferred_at": "2026-01-09T19:51:06.994631+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARC-MEURS.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARC-MEURS.json index e0a30bed92..b6bda27990 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARC-MEURS.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARC-MEURS.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marcmeurs_20251214T112253Z.json" ], - "modified_at": "2026-01-09T19:18:14.880082+00:00", + "modified_at": "2026-01-09T19:51:05.302977+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marcmeurs", @@ -111,7 +111,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.878031+00:00", + "inferred_at": "2026-01-09T19:51:05.293429+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARIS-LEEUWEN.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARIS-LEEUWEN.json index 3251ceaf97..c908b0f590 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARIS-LEEUWEN.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARIS-LEEUWEN.json @@ -205,7 +205,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maris-van-leeuwen-b69b70166_20251214T111417Z.json" ], - "modified_at": "2026-01-09T19:18:13.772059+00:00", + "modified_at": "2026-01-09T19:50:56.461249+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maris-van-leeuwen-b69b70166", @@ -226,7 +226,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -267,7 +267,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.771925+00:00", + "inferred_at": "2026-01-09T19:50:56.460987+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARTIJN-ELDIK.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARTIJN-ELDIK.json index 29c7c0553b..f5abc4c021 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARTIJN-ELDIK.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MARTIJN-ELDIK.json @@ -88,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/martijn-van-eldik-09512674_20251214T110631Z.json" ], - "modified_at": "2026-01-09T19:18:14.999973+00:00", + "modified_at": "2026-01-09T19:51:06.578315+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "martijn-van-eldik-09512674", @@ -115,7 +115,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.998064+00:00", + "inferred_at": "2026-01-09T19:51:06.576362+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MICHELLE-BOENDER.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MICHELLE-BOENDER.json index e272bc0c7b..836288611e 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MICHELLE-BOENDER.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MICHELLE-BOENDER.json @@ -102,7 +102,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/michelle-boender-168a62ab_20251214T103000Z.json" ], - "modified_at": "2026-01-09T19:18:16.160284+00:00", + "modified_at": "2026-01-09T19:51:17.882295+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "michelle-boender-168a62ab", @@ -129,7 +129,7 @@ "primary_rationale": "1993 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -178,7 +178,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1993 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.155721+00:00", + "inferred_at": "2026-01-09T19:51:17.857921+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIHAIL-VALOV.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIHAIL-VALOV.json index b74c4800c0..1cb2654271 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIHAIL-VALOV.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MIHAIL-VALOV.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mihail-valov-107514138_20251214T103911Z.json" ], - "modified_at": "2026-01-09T19:18:15.631116+00:00", + "modified_at": "2026-01-09T19:51:21.821584+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mihail-valov-107514138", @@ -125,7 +125,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -166,7 +166,7 @@ "Entry age for education/first job: 22 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.631077+00:00", + "inferred_at": "2026-01-09T19:51:21.821467+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MINA-SINGH.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MINA-SINGH.json index 34598a5ace..ec4a77610a 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MINA-SINGH.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MINA-SINGH.json @@ -88,7 +88,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mina-singh-8923029b_20251214T112341Z.json" ], - "modified_at": "2026-01-09T19:18:15.418038+00:00", + "modified_at": "2026-01-09T19:51:10.608195+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mina-singh-8923029b", @@ -115,7 +115,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.418025+00:00", + "inferred_at": "2026-01-09T19:51:10.608144+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MITCHELL-EGBERS.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MITCHELL-EGBERS.json index ed7b7fec78..dcb275916b 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MITCHELL-EGBERS.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_MITCHELL-EGBERS.json @@ -128,7 +128,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mitchell-egbers-419774139_20251214T110708Z.json" ], - "modified_at": "2026-01-09T19:18:12.030544+00:00", + "modified_at": "2026-01-09T19:50:47.423482+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mitchell-egbers-419774139", @@ -155,7 +155,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -204,7 +204,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:12.028362+00:00", + "inferred_at": "2026-01-09T19:50:47.420282+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NADHILA-FITRI.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NADHILA-FITRI.json index 0b65c8eb41..b3fd7f2abe 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NADHILA-FITRI.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NADHILA-FITRI.json @@ -86,7 +86,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nana-nadhila_20251214T111943Z.json" ], - "modified_at": "2026-01-09T19:18:15.282607+00:00", + "modified_at": "2026-01-09T19:51:08.349280+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nana-nadhila", @@ -113,7 +113,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.282593+00:00", + "inferred_at": "2026-01-09T19:51:07.898019+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NINA-RUNHAAR.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NINA-RUNHAAR.json index 2ccffff167..345fb4eb4f 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NINA-RUNHAAR.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NINA-RUNHAAR.json @@ -114,7 +114,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nina-runhaar-a56813184_20251214T110211Z.json" ], - "modified_at": "2026-01-09T19:18:16.900059+00:00", + "modified_at": "2026-01-09T19:51:22.348436+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nina-runhaar-a56813184", @@ -141,7 +141,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -190,7 +190,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.892926+00:00", + "inferred_at": "2026-01-09T19:51:22.341510+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NOURA-AKDI.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NOURA-AKDI.json similarity index 67% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NOURA-AKDI.json rename to data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NOURA-AKDI.json index 2cc935ae11..95c43acb67 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NOURA-AKDI.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NOURA-AKDI.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NOURA-AKDI", + "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NOURA-AKDI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "NOURA", "AKDI" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -163,7 +168,82 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/noura-akdi-19643b69_20251213T020000Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:58.003399+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "noura-akdi-19643b69" + "linkedin_slug": "noura-akdi-19643b69", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NOURA-AKDI", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_NOURA-AKDI", + "changed_at": "2026-01-09T19:41:11.263154+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1990 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 13 years" + }, + { + "step": 2, + "calculation": "2026 - 13 = 2013", + "result": "Estimated first job year: 2013", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2013 - 23 = 1990", + "result": "Estimated birth year: 1990", + "range": "1983-1997 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1983, + 1997 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:50:57.998809+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PAUL-NOPPERS.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PAUL-NOPPERS.json index 6eedcfde24..8e75cfedeb 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PAUL-NOPPERS.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PAUL-NOPPERS.json @@ -84,7 +84,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/noppers_20251214T112418Z.json" ], - "modified_at": "2026-01-09T19:18:17.254900+00:00", + "modified_at": "2026-01-09T19:51:25.483182+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "noppers", @@ -111,7 +111,7 @@ "primary_rationale": "1996 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +160,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1996 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.250486+00:00", + "inferred_at": "2026-01-09T19:51:25.481274+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PETER-HOOGEN.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PETER-HOOGEN.json index e0218d7ca7..3abc5752c0 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PETER-HOOGEN.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_PETER-HOOGEN.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/vandenhoogenpeter_20251214T110651Z.json" ], - "modified_at": "2026-01-09T19:18:15.686441+00:00", + "modified_at": "2026-01-09T19:51:13.440657+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "vandenhoogenpeter", @@ -106,7 +106,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.686434+00:00", + "inferred_at": "2026-01-09T19:51:13.440646+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_REMCO-DIJKSTRA.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_REMCO-DIJKSTRA.json index b83ae588e1..128b5f908c 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_REMCO-DIJKSTRA.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_REMCO-DIJKSTRA.json @@ -103,7 +103,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/remcodijkstra_20251214T110343Z.json" ], - "modified_at": "2026-01-09T19:18:13.393333+00:00", + "modified_at": "2026-01-09T19:50:54.013670+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "remcodijkstra", @@ -130,7 +130,7 @@ "primary_rationale": "1999 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -179,7 +179,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.391393+00:00", + "inferred_at": "2026-01-09T19:50:54.011347+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RENS-JANSSEN.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RENS-JANSSEN.json index fedfaba04b..a20dcac644 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RENS-JANSSEN.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RENS-JANSSEN.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rens-janssen-83773b97_20251214T111243Z.json" ], - "modified_at": "2026-01-09T19:18:14.658577+00:00", + "modified_at": "2026-01-09T19:51:03.234976+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rens-janssen-83773b97", @@ -122,7 +122,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -171,7 +171,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.658565+00:00", + "inferred_at": "2026-01-09T19:51:03.234947+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RIANNE-WETERING.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RIANNE-WETERING.json index e64e431071..f5345e4f5b 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RIANNE-WETERING.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RIANNE-WETERING.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rianne-van-de-wetering-6b7800a9_20251214T113210Z.json" ], - "modified_at": "2026-01-09T19:18:13.121574+00:00", + "modified_at": "2026-01-09T19:50:51.757042+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rianne-van-de-wetering-6b7800a9", @@ -119,7 +119,7 @@ "primary_rationale": "1991 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1991 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.117913+00:00", + "inferred_at": "2026-01-09T19:50:51.737829+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROBERT-HOMMERSOM.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROBERT-HOMMERSOM.json index b36c6647b6..1e22e2c966 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROBERT-HOMMERSOM.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROBERT-HOMMERSOM.json @@ -180,7 +180,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/robert-hommersom-3345b6172_20251214T104140Z.json" ], - "modified_at": "2026-01-09T19:18:13.713466+00:00", + "modified_at": "2026-01-09T19:50:55.892713+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "robert-hommersom-3345b6172", @@ -207,7 +207,7 @@ "primary_rationale": "1998 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -256,7 +256,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1998 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.711536+00:00", + "inferred_at": "2026-01-09T19:50:55.890682+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROBERT-WESTERHOF.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROBERT-WESTERHOF.json new file mode 100644 index 0000000000..4e1105c276 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROBERT-WESTERHOF.json @@ -0,0 +1,170 @@ +{ + "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROBERT-WESTERHOF", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "199X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ROBERT", + "WESTERHOF" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] + }, + "name": { + "full_name": "Robert Westerhof", + "display_name": "Robert Westerhof", + "name_romanized": null, + "name_tokens": [ + "ROBERT", + "WESTERHOF" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "E" + ], + "rationale": "Primary school teacher (leerkracht basisonderwijs) - education provider role" + }, + "affiliations": [], + "profile_data": { + "name": "Robert Westerhof", + "linkedin_url": "https://www.linkedin.com/in/robert-westerhof-8aa5117", + "headline": "Leerkracht bo/ ICT/ iCOACH / Digicoach /Natuurfotograaf", + "current_position": "Leerkracht En ICT'er at Basisschool de Meander", + "location": "Netherlands", + "connections": "195 connections", + "about": null, + "total_experience": "20 years and 7 months", + "experience": [ + { + "title": "Leerkracht En ICT'er", + "company": "Basisschool de Meander", + "duration": "Apr 2005 - Present", + "location": "Ootmarsum", + "description": "Department: Education • Level: Specialist" + } + ], + "education": [], + "certifications": [], + "skills": [ + "ict" + ], + "languages": [], + "publications": [], + "courses": [], + "awards": [], + "organizations": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/D5603AQHiBGsqVMqydQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1673364771606?e=2147483647&v=beta&t=ZS9-ZwVv3FeDUtBLVbyEhbNrMbRCukcel_rWB9A_owU" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/robert-westerhof-8aa5117_20251212T180000Z.json", + "observed_on": "2025-12-12T18:00:00Z", + "extraction_agent": "claude-opus-4.5" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.695027+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/robert-westerhof-8aa5117_20251212T180000Z.json" + ], + "modified_at": "2026-01-09T19:51:17.449212+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "robert-westerhof-8aa5117", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROBERT-WESTERHOF", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROBERT-WESTERHOF", + "changed_at": "2026-01-09T19:43:38.809123+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "edtf_meaning": "one of: 1970s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1983 is in 199X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "20 years and 7 months" + }, + { + "step": 2, + "calculation": "2026 - 20 = 2006", + "result": "Estimated first job year: 2006", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2006 - 23 = 1983", + "result": "Estimated birth year: 1983", + "range": "1976-1990 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1976, + 1990 + ], + "output": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1983 spans decades 197X/199X", + "inferred_at": "2026-01-09T19:51:17.446966+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RON-KOK.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RON-KOK.json index 6a7282f427..3de77a4442 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RON-KOK.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_RON-KOK.json @@ -130,7 +130,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ronkok1_20251214T111640Z.json" ], - "modified_at": "2026-01-09T19:18:12.583606+00:00", + "modified_at": "2026-01-09T19:50:48.515073+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ronkok1", @@ -151,7 +151,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -192,7 +192,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:12.581585+00:00", + "inferred_at": "2026-01-09T19:50:48.509669+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROY-RIJSBERGEN.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROY-RIJSBERGEN.json index 77cb265904..11077662c2 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROY-RIJSBERGEN.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_ROY-RIJSBERGEN.json @@ -118,7 +118,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/roy-van-rijsbergen-730649192_20251214T111659Z.json" ], - "modified_at": "2026-01-09T19:18:11.517684+00:00", + "modified_at": "2026-01-09T19:50:47.097951+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "roy-van-rijsbergen-730649192", @@ -145,7 +145,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -194,7 +194,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:11.515695+00:00", + "inferred_at": "2026-01-09T19:50:47.093503+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SHIVANI-MOHAN.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SHIVANI-MOHAN.json index ce20f887ab..67cd652576 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SHIVANI-MOHAN.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SHIVANI-MOHAN.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/shivani-mohan-3a137ab3_20251214T112643Z.json" ], - "modified_at": "2026-01-09T19:18:15.830030+00:00", + "modified_at": "2026-01-09T19:51:14.510325+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "shivani-mohan-3a137ab3", @@ -137,7 +137,7 @@ "primary_rationale": "1994 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1994 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:15.827697+00:00", + "inferred_at": "2026-01-09T19:51:14.508227+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_STEFANIE-KASDIRAN.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_STEFANIE-KASDIRAN.json index 443ec5b1bc..1fe09ec563 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_STEFANIE-KASDIRAN.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_STEFANIE-KASDIRAN.json @@ -113,7 +113,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/stefaniekasdiran_20251214T112322Z.json" ], - "modified_at": "2026-01-09T19:18:14.197194+00:00", + "modified_at": "2026-01-09T19:50:58.823936+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "stefaniekasdiran", @@ -140,7 +140,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -189,7 +189,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:14.189840+00:00", + "inferred_at": "2026-01-09T19:50:58.815577+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SUAD-BULLE.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SUAD-BULLE.json index 2d730a3ed2..62a4c1a47a 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SUAD-BULLE.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_SUAD-BULLE.json @@ -109,7 +109,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/suad-bulle-461b7a1ba_20251214T112739Z.json" ], - "modified_at": "2026-01-09T19:18:16.755694+00:00", + "modified_at": "2026-01-09T19:51:21.814754+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "suad-bulle-461b7a1ba", @@ -130,7 +130,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -171,7 +171,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:16.746639+00:00", + "inferred_at": "2026-01-09T19:51:21.808549+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TANITHA-GANGEL.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TANITHA-GANGEL.json similarity index 64% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TANITHA-GANGEL.json rename to data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TANITHA-GANGEL.json index 08fdde57b2..0d0385111a 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TANITHA-GANGEL.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TANITHA-GANGEL.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TANITHA-GANGEL", + "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TANITHA-GANGEL", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "199X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "TANITHA", "GANGEL" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -158,7 +163,82 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tanitha-gangel-982a8b80_20251214T102717Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:55.419583+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "tanitha-gangel-982a8b80" + "linkedin_slug": "tanitha-gangel-982a8b80", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TANITHA-GANGEL", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TANITHA-GANGEL", + "changed_at": "2026-01-09T19:41:11.565276+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1999 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 4 years" + }, + { + "step": 2, + "calculation": "2026 - 4 = 2022", + "result": "Estimated first job year: 2022", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2022 - 23 = 1999", + "result": "Estimated birth year: 1999", + "range": "1992-2006 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1992, + 2006 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1999 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:55.417621+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TARIEF-ALIHOESEN.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TARIEF-ALIHOESEN.json index e5ff727f7a..25d291d02e 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TARIEF-ALIHOESEN.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TARIEF-ALIHOESEN.json @@ -79,10 +79,21 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tarief-alihoesen-10b137143_20251214T113038Z.json" ], - "modified_at": "2026-01-09T19:18:14.582790+00:00", + "modified_at": "2026-01-09T19:51:28.198038+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tarief-alihoesen-10b137143", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TARIEF-ALIHOESEN", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TARIEF-ALIHOESEN", + "changed_at": "2026-01-09T19:18:14.582789+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], "inferred_birth_decade": { "values": [ "199X", @@ -95,7 +106,7 @@ "primary_rationale": "1997 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -144,19 +155,8 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.582764+00:00", + "inferred_at": "2026-01-09T19:51:28.197991+00:00", "inferred_by": "enrich_ppids.py" } - }, - "ppid_history": [ - { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TARIEF-ALIHOESEN", - "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TARIEF-ALIHOESEN", - "changed_at": "2026-01-09T19:18:14.582789+00:00", - "reason": "observation_based_inference", - "inferred_fields": [ - "inferred_birth_decade" - ] - } - ] + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TATJANA-TIMOTIJEVIC.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TATJANA-TIMOTIJEVIC.json index 0a65173f13..2f074e4145 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TATJANA-TIMOTIJEVIC.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_TATJANA-TIMOTIJEVIC.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tatjana-timotijevic-696ab821_20251214T103750Z.json" ], - "modified_at": "2026-01-09T19:18:13.371139+00:00", + "modified_at": "2026-01-09T19:50:53.944731+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tatjana-timotijevic-696ab821", @@ -128,7 +128,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.371102+00:00", + "inferred_at": "2026-01-09T19:50:53.944658+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VICTORINE-BANGERT.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VICTORINE-BANGERT.json index 117b401d54..a3c740354d 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VICTORINE-BANGERT.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VICTORINE-BANGERT.json @@ -90,7 +90,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/victorine-bangert-247478204_20251214T113315Z.json" ], - "modified_at": "2026-01-09T19:18:13.675586+00:00", + "modified_at": "2026-01-09T19:50:55.417104+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "victorine-bangert-247478204", @@ -117,7 +117,7 @@ "primary_rationale": "1990 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -166,7 +166,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1990 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:13.670256+00:00", + "inferred_at": "2026-01-09T19:50:55.411270+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VINCENT-KAMP.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VINCENT-KAMP.json new file mode 100644 index 0000000000..c67b8fe327 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VINCENT-KAMP.json @@ -0,0 +1,165 @@ +{ + "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VINCENT-KAMP", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "199X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "VINCENT", + "KAMP" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "200X" + ] + }, + "name": { + "full_name": "Vincent van der Kamp", + "display_name": "Vincent van der Kamp", + "name_romanized": null, + "name_tokens": [ + "VINCENT", + "KAMP" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "M" + ], + "rationale": "Identified as heritage staff at Nederlands Openluchtmuseum" + }, + "affiliations": [], + "profile_data": { + "name": "Vincent van der Kamp", + "linkedin_url": "https://www.linkedin.com/in/vvanderkamp", + "headline": "Grafisch Vormgever bij het Nederlands Openluchtmuseum", + "location": "", + "connections": "500 connections • 622 followers", + "about": "Specialisme: Adobe Creative Cloud Adobe Illustrator, Adobe Photoshop, Adobe Dimension, Adobe After Effects Adobe InDesign, Adobe Acrobat. Total Experience: 6 years and 5 months", + "experience": [], + "education": [], + "skills": [ + "adobe", + "creative", + "cloud", + "illustrator", + "photoshop", + "indesign", + "adobe illustrator", + "adobe photoshop", + "adobe indesign", + "adobe acrobat", + "adobe creative cloud" + ], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/D4E03AQFbR2O1KaMkRw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1723200618894?e=2147483647&v=beta&t=rf7i6VnVZ-vm1BTwIGh5nGGa0muImC9b9pFn2hWEmic" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/vvanderkamp_20251214T110624Z.json", + "observed_on": "2025-12-14T11:06:24.782471+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.645291+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/vvanderkamp_20251214T110624Z.json" + ], + "modified_at": "2026-01-09T19:50:56.650940+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "vvanderkamp", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VINCENT-KAMP", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VINCENT-KAMP", + "changed_at": "2026-01-09T19:41:08.708935+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1997 is in 199X, but range extends into 200X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 6 years" + }, + { + "step": 2, + "calculation": "2026 - 6 = 2020", + "result": "Estimated first job year: 2020", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2020 - 23 = 1997", + "result": "Estimated birth year: 1997", + "range": "1990-2004 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1990, + 2004 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1997 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:56.650925+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VIOLETTA-RIJTHOVEN.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VIOLETTA-RIJTHOVEN.json new file mode 100644 index 0000000000..1752d72af6 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VIOLETTA-RIJTHOVEN.json @@ -0,0 +1,153 @@ +{ + "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VIOLETTA-RIJTHOVEN", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "199X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "VIOLETTA", + "RIJTHOVEN" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "197X" + ] + }, + "name": { + "full_name": "Violetta Rijthoven", + "display_name": "Violetta Rijthoven", + "name_romanized": null, + "name_tokens": [ + "VIOLETTA", + "RIJTHOVEN" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at Dienst Uitvoering Onderwijs (Ministerie van OCW)" + }, + "affiliations": [], + "profile_data": { + "name": "Violetta Rijthoven", + "linkedin_url": "https://www.linkedin.com/in/violetta-rijthoven-53074765", + "headline": "Managementondersteuner bij het ministerie van OCW", + "location": "Netherlands (NL)", + "connections": "57 connections • 59 followers", + "about": "Total Experience: 18 years and 2 months", + "experience": [], + "education": [], + "skills": [], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/D4E03AQEWf49hKPH0eA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1711567602945?e=2147483647&v=beta&t=oWB4Xvktvx3kjpU4V0RijIgNczOF3Dm74eXkhbt6flM" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/violetta-rijthoven-53074765_20251214T112247Z.json", + "observed_on": "2025-12-14T11:22:47.798281+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.640882+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/violetta-rijthoven-53074765_20251214T112247Z.json" + ], + "modified_at": "2026-01-09T19:50:54.606754+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "violetta-rijthoven-53074765", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VIOLETTA-RIJTHOVEN", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_VIOLETTA-RIJTHOVEN", + "changed_at": "2026-01-09T19:41:12.149224+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "edtf_meaning": "one of: 1970s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1985 is in 199X, but range extends into 197X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 18 years" + }, + { + "step": 2, + "calculation": "2026 - 18 = 2008", + "result": "Estimated first job year: 2008", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2008 - 23 = 1985", + "result": "Estimated birth year: 1985", + "range": "1978-1992 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1978, + 1992 + ], + "output": [ + "197X", + "199X" + ], + "edtf": "[197X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1985 spans decades 197X/199X", + "inferred_at": "2026-01-09T19:50:54.604766+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_WILMA-SIGTERMANS.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_WILMA-SIGTERMANS.json new file mode 100644 index 0000000000..2f97e9bd02 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_WILMA-SIGTERMANS.json @@ -0,0 +1,153 @@ +{ + "ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_WILMA-SIGTERMANS", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "199X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "WILMA", + "SIGTERMANS" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] + }, + "name": { + "full_name": "Wilma Palstra - Sigtermans", + "display_name": "Wilma Palstra - Sigtermans", + "name_romanized": null, + "name_tokens": [ + "WILMA", + "SIGTERMANS" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at Dienst Uitvoering Onderwijs (Ministerie van OCW)" + }, + "affiliations": [], + "profile_data": { + "name": "Wilma Palstra - Sigtermans", + "linkedin_url": "https://www.linkedin.com/in/wilma-palstra-sigtermans-78b6a38b", + "headline": "Senior voorlichter bij het informatiecentrum Onderwijs bij Dienst Uitvoering Onderwijs (Ministerie van OCW)", + "location": "The Randstad, Netherlands (NL)", + "connections": "16 connections • 16 followers", + "about": "Total Experience: 11 years and 2 months", + "experience": [], + "education": [], + "skills": [], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C4E03AQEmECqbcQ9kwA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1517364973412?e=2147483647&v=beta&t=htEv8jcwJadyX5YBMeZcU5uI9JZdjlbikhS4Sc6A6nw" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/wilma-palstra-sigtermans-78b6a38b_20251214T112300Z.json", + "observed_on": "2025-12-14T11:23:00.977528+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.540014+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/wilma-palstra-sigtermans-78b6a38b_20251214T112300Z.json" + ], + "modified_at": "2026-01-09T19:51:21.790213+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "wilma-palstra-sigtermans-78b6a38b", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_WILMA-SIGTERMANS", + "new_ppid": "ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_WILMA-SIGTERMANS", + "changed_at": "2026-01-09T19:41:09.688461+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "199X", + "primary_rationale": "1992 is in 199X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 11 years" + }, + { + "step": 2, + "calculation": "2026 - 11 = 2015", + "result": "Estimated first job year: 2015", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2015 - 23 = 1992", + "result": "Estimated birth year: 1992", + "range": "1985-1999 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1985, + 1999 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:21.787820+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_YOUSRA-CHAABANE.json b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_YOUSRA-CHAABANE.json index 8599ee2838..4503df0bbd 100644 --- a/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_YOUSRA-CHAABANE.json +++ b/data/person/ID_XX-XX-XXX_199X_XX-XX-XXX_XXXX_YOUSRA-CHAABANE.json @@ -153,7 +153,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yousra-chaabane_20251214T103048Z.json" ], - "modified_at": "2026-01-09T19:18:16.088457+00:00", + "modified_at": "2026-01-09T19:51:17.443920+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yousra-chaabane", @@ -180,7 +180,7 @@ "primary_rationale": "1992 is in 199X, but range extends into 198X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -229,7 +229,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1992 spans decades 198X/199X", - "inferred_at": "2026-01-09T19:18:16.088433+00:00", + "inferred_at": "2026-01-09T19:51:17.370405+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_ISOBEL-JOHNSTONE.json b/data/person/ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_ISOBEL-JOHNSTONE.json new file mode 100644 index 0000000000..d1a1e787c9 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_ISOBEL-JOHNSTONE.json @@ -0,0 +1,220 @@ +{ + "ppid": "ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_ISOBEL-JOHNSTONE", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "200X", + "last_location": "AU-01-CAN", + "last_date": "XXXX", + "name_tokens": [ + "ISOBEL", + "JOHNSTONE" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Isobel Johnstone", + "display_name": "Isobel Johnstone", + "name_romanized": null, + "name_tokens": [ + "ISOBEL", + "JOHNSTONE" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "A" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Isobel Johnstone", + "linkedin_url": "https://www.linkedin.com/in/isobel-johnstone-50611a62", + "headline": "Program Manager, Archival Processing - Collection Management, National Library of Australia", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "43 connections • 44 followers", + "about": "Total Experience: 3 years", + "experience": [], + "education": [], + "skills": [ + "processing", + "management" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/isobel-johnstone-50611a62_20251214T103902Z.json", + "observed_on": "2025-12-14T10:39:02.685317+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.572859+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/isobel-johnstone-50611a62_20251214T103902Z.json" + ], + "modified_at": "2026-01-09T19:50:58.047400+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "isobel-johnstone-50611a62", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ISOBEL-JOHNSTONE", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ISOBEL-JOHNSTONE", + "changed_at": "2026-01-09T19:41:08.592318+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ISOBEL-JOHNSTONE", + "new_ppid": "ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_ISOBEL-JOHNSTONE", + "changed_at": "2026-01-09T19:50:58.047397+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2000 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 3 years" + }, + { + "step": 2, + "calculation": "2026 - 3 = 2023", + "result": "Estimated first job year: 2023", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2023 - 23 = 2000", + "result": "Estimated birth year: 2000", + "range": "1993-2007 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1993, + 2007 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:58.038431+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:58.047384+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARIUSZ-KALINOWSKI.json b/data/person/ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_MARIUSZ-KALINOWSKI.json similarity index 68% rename from data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARIUSZ-KALINOWSKI.json rename to data/person/ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_MARIUSZ-KALINOWSKI.json index fc4d2c2276..46dcc8c88b 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARIUSZ-KALINOWSKI.json +++ b/data/person/ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_MARIUSZ-KALINOWSKI.json @@ -1,11 +1,11 @@ { - "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARIUSZ-KALINOWSKI", + "ppid": "ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_MARIUSZ-KALINOWSKI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "200X", - "last_location": "XX-XX-XXX", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ "MARIUSZ", @@ -14,7 +14,8 @@ "first_date_source": "inferred_birth_decade.primary_value", "first_date_alternatives": [ "199X" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Mariusz Kalinowski", @@ -84,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mariusz-kalinowski-50b626120_20251214T103947Z.json" ], - "modified_at": "2026-01-09T19:18:18.075357+00:00", + "modified_at": "2026-01-09T19:51:28.915745+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mariusz-kalinowski-50b626120", @@ -97,6 +98,16 @@ "inferred_fields": [ "inferred_birth_decade" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARIUSZ-KALINOWSKI", + "new_ppid": "ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_MARIUSZ-KALINOWSKI", + "changed_at": "2026-01-09T19:51:28.915743+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } ], "inferred_birth_decade": { @@ -111,7 +122,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -160,7 +171,60 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.075341+00:00", + "inferred_at": "2026-01-09T19:51:28.910893+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:28.915738+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_SNEZANA-MIHAJLOVIC.json b/data/person/ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_SNEZANA-MIHAJLOVIC.json new file mode 100644 index 0000000000..7a64e88b28 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_SNEZANA-MIHAJLOVIC.json @@ -0,0 +1,224 @@ +{ + "ppid": "ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_SNEZANA-MIHAJLOVIC", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "200X", + "last_location": "AU-01-CAN", + "last_date": "XXXX", + "name_tokens": [ + "SNEZANA", + "MIHAJLOVIC" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Snezana Mihajlovic", + "display_name": "Snezana Mihajlovic", + "name_romanized": null, + "name_tokens": [ + "SNEZANA", + "MIHAJLOVIC" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Snezana Mihajlovic", + "linkedin_url": "https://www.linkedin.com/in/snezana-mihajlovic-04114141", + "headline": "Java Developer at National Library of Australia", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "52 connections • 55 followers", + "about": "Total Experience: 2 years", + "experience": [ + { + "title": "Java Developer", + "company": "National Library of Australia" + } + ], + "education": [], + "skills": [ + "java" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/snezana-mihajlovic-04114141_20251214T103826Z.json", + "observed_on": "2025-12-14T10:38:26.292847+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.641140+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/snezana-mihajlovic-04114141_20251214T103826Z.json" + ], + "modified_at": "2026-01-09T19:51:03.987617+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "snezana-mihajlovic-04114141", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SNEZANA-MIHAJLOVIC", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_SNEZANA-MIHAJLOVIC", + "changed_at": "2026-01-09T19:41:12.247914+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_SNEZANA-MIHAJLOVIC", + "new_ppid": "ID_XX-XX-XXX_200X_AU-01-CAN_XXXX_SNEZANA-MIHAJLOVIC", + "changed_at": "2026-01-09T19:51:03.987614+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2001 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 2 years" + }, + { + "step": 2, + "calculation": "2026 - 2 = 2024", + "result": "Estimated first job year: 2024", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2024 - 23 = 2001", + "result": "Estimated birth year: 2001", + "range": "1994-2008 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1994, + 2008 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:03.979198+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:03.987597+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_AU-05-AP_XXXX_JENNY-OSTINI.json b/data/person/ID_XX-XX-XXX_200X_AU-05-AP_XXXX_JENNY-OSTINI.json new file mode 100644 index 0000000000..732cb5bf63 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_200X_AU-05-AP_XXXX_JENNY-OSTINI.json @@ -0,0 +1,228 @@ +{ + "ppid": "ID_XX-XX-XXX_200X_AU-05-AP_XXXX_JENNY-OSTINI", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "200X", + "last_location": "AU-05-AP", + "last_date": "XXXX", + "name_tokens": [ + "JENNY", + "OSTINI" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Jenny Ostini", + "display_name": "Jenny Ostini", + "name_romanized": null, + "name_tokens": [ + "JENNY", + "OSTINI" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Jenny Ostini", + "linkedin_url": "https://www.linkedin.com/in/jennyostini", + "headline": "Leading thoughtful delivery of meaningful research, governance, policy and services for communities and government", + "location": "Australia (AU)", + "connections": "333 connections • 21 followers", + "about": "I try to understand complicated human experiences in contemporary workplaces. I support and grow gender equitable, safe workplaces where diversity of thought and experience are valued, supported and developed. I translate evidence to strategic policy; lining up the what, the “so what” and the how into achievable actions. I develop data collection methods and establish processes for evaluation and monitoring. I build transparent, practical and well-governed ways that help organisations understand and demonstrate what they are doing, why and how. Total Experience: 1 year and 10 months", + "experience": [], + "education": [ + { + "degree": "Doctor of Philosophy (PhD)", + "institution": "University of Minnesota-Twin Cities" + } + ], + "skills": [ + "safe", + "diversity", + "evaluation", + "director", + "data collection" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/jennyostini_20251214T103952Z.json", + "observed_on": "2025-12-14T10:39:52.624286+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.524206+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/jennyostini_20251214T103952Z.json" + ], + "modified_at": "2026-01-09T19:51:06.572356+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "jennyostini", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JENNY-OSTINI", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JENNY-OSTINI", + "changed_at": "2026-01-09T19:41:10.198626+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JENNY-OSTINI", + "new_ppid": "ID_XX-XX-XXX_200X_AU-05-AP_XXXX_JENNY-OSTINI", + "changed_at": "2026-01-09T19:51:06.572354+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2002 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 1 years" + }, + { + "step": 2, + "calculation": "2026 - 1 = 2025", + "result": "Estimated first job year: 2025", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2025 - 23 = 2002", + "result": "Estimated birth year: 2002", + "range": "1995-2009 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1995, + 2009 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:06.566767+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Australia Plains", + "formatted": "AU-05-AP", + "country_code": "AU", + "region_code": "05", + "settlement_code": "AP", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Australia (AU)", + "result": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-05-AP" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2077455, + "geonames_name": "Australia Plains", + "admin1_code": "05", + "admin1_name": "South Australia", + "feature_code": "PPL", + "latitude": -34.09703, + "longitude": 139.15616 + }, + "inferred_at": "2026-01-09T19:51:06.572339+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_ID-04-JAK_XXXX_ASTRI-PUSPITA.json b/data/person/ID_XX-XX-XXX_200X_ID-04-JAK_XXXX_ASTRI-PUSPITA.json new file mode 100644 index 0000000000..24493dd9f0 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_200X_ID-04-JAK_XXXX_ASTRI-PUSPITA.json @@ -0,0 +1,219 @@ +{ + "ppid": "ID_XX-XX-XXX_200X_ID-04-JAK_XXXX_ASTRI-PUSPITA", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "200X", + "last_location": "ID-04-JAK", + "last_date": "XXXX", + "name_tokens": [ + "ASTRI", + "PUSPITA" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Astri Puspita", + "display_name": "Astri Puspita", + "name_romanized": null, + "name_tokens": [ + "ASTRI", + "PUSPITA" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at Ministry of Tourism of the Republic of Indonesia" + }, + "affiliations": [], + "profile_data": { + "name": "Astri Puspita", + "linkedin_url": "https://www.linkedin.com/in/astri-puspita-129098101", + "headline": "Government Officer at Ministry of Tourism of the Republic of Indonesia", + "location": "Jakarta, Jakarta, Indonesia (ID)", + "connections": "80 connections • 82 followers", + "about": "Total Experience: 10 years and 6 months", + "experience": [], + "education": [], + "skills": [ + "government" + ], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C5603AQHaNPVo-XQALw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1517008335845?e=2147483647&v=beta&t=H4CXNu3lOH7qAsHx1JK6terBrsgsz7kz7fDs1Qgb4Us" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/astri-puspita-129098101_20251214T111952Z.json", + "observed_on": "2025-12-14T11:19:52.783594+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.558252+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/astri-puspita-129098101_20251214T111952Z.json" + ], + "modified_at": "2026-01-09T19:51:07.640865+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "astri-puspita-129098101", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ASTRI-PUSPITA", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ASTRI-PUSPITA", + "changed_at": "2026-01-09T19:41:10.949408+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ASTRI-PUSPITA", + "new_ppid": "ID_XX-XX-XXX_200X_ID-04-JAK_XXXX_ASTRI-PUSPITA", + "changed_at": "2026-01-09T19:51:07.640862+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1993 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 10 years" + }, + { + "step": 2, + "calculation": "2026 - 10 = 2016", + "result": "Estimated first job year: 2016", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2016 - 23 = 1993", + "result": "Estimated birth year: 1993", + "range": "1986-2000 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1986, + 2000 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1993 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:51:07.589077+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:07.640843+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_NL-FL-AS_XXXX_AAD-KASTELEIN.json b/data/person/ID_XX-XX-XXX_200X_NL-FL-AS_XXXX_AAD-KASTELEIN.json index 8a901c6b98..b61e5c86ef 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-FL-AS_XXXX_AAD-KASTELEIN.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-FL-AS_XXXX_AAD-KASTELEIN.json @@ -120,7 +120,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aad-kastelein-592001103_20251214T111818Z.json" ], - "modified_at": "2026-01-09T19:18:15.778898+00:00", + "modified_at": "2026-01-09T19:51:34.138274+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "aad-kastelein-592001103", @@ -157,7 +157,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -206,7 +206,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.778863+00:00", + "inferred_at": "2026-01-09T19:51:34.138169+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_FRED-VERSCHOOR.json b/data/person/ID_XX-XX-XXX_200X_NL-GE-ARN_XXXX_FRED-VERSCHOOR.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_FRED-VERSCHOOR.json rename to data/person/ID_XX-XX-XXX_200X_NL-GE-ARN_XXXX_FRED-VERSCHOOR.json index 08678bfd1d..5a887424c3 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_FRED-VERSCHOOR.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-GE-ARN_XXXX_FRED-VERSCHOOR.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_FRED-VERSCHOOR", + "ppid": "ID_XX-XX-XXX_200X_NL-GE-ARN_XXXX_FRED-VERSCHOOR", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-GE-ARN", "last_date": "XXXX", "name_tokens": [ "FRED", "VERSCHOOR" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] }, "name": { "full_name": "Fred Verschoor", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -76,63 +81,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/fred-verschoor-2ab40795_20251214T110659Z.json" ], - "modified_at": "2026-01-09T17:42:59.169505+00:00", + "modified_at": "2026-01-09T19:50:55.393666+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "fred-verschoor-2ab40795", - "inferred_current_settlement": { - "value": "Arnhem", - "formatted": "NL-GE-ARN", - "country_code": "NL", - "region_code": "GE", - "settlement_code": "ARN", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Arnhem, Gelderland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Arnhem, Gelderland, Netherlands (NL)", - "result": { - "geonames_id": 2759661, - "geonames_name": "Arnhem", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPLA", - "latitude": 51.98, - "longitude": 5.91111 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-GE-ARN" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759661, - "geonames_name": "Arnhem", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPLA", - "latitude": 51.98, - "longitude": 5.91111 - }, - "inferred_at": "2026-01-09T17:42:59.169498+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FRED-VERSCHOOR", @@ -142,6 +94,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_FRED-VERSCHOOR", + "new_ppid": "ID_XX-XX-XXX_200X_NL-GE-ARN_XXXX_FRED-VERSCHOOR", + "changed_at": "2026-01-09T19:41:08.641547+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2000 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 3 years" + }, + { + "step": 2, + "calculation": "2026 - 3 = 2023", + "result": "Estimated first job year: 2023", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2023 - 23 = 2000", + "result": "Estimated birth year: 2000", + "range": "1993-2007 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1993, + 2007 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:55.393660+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_GERARD-OENE.json b/data/person/ID_XX-XX-XXX_200X_NL-GE-ARN_XXXX_GERARD-OENE.json similarity index 58% rename from data/person/ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_GERARD-OENE.json rename to data/person/ID_XX-XX-XXX_200X_NL-GE-ARN_XXXX_GERARD-OENE.json index 2c24218a89..fb81b28075 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_GERARD-OENE.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-GE-ARN_XXXX_GERARD-OENE.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_GERARD-OENE", + "ppid": "ID_XX-XX-XXX_200X_NL-GE-ARN_XXXX_GERARD-OENE", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-GE-ARN", "last_date": "XXXX", "name_tokens": [ "GERARD", "OENE" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] }, "name": { "full_name": "Gerard C Flint van Oene", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -80,63 +85,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerardflint_20251214T110626Z.json" ], - "modified_at": "2026-01-09T17:42:59.780200+00:00", + "modified_at": "2026-01-09T19:51:04.019660+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerardflint", - "inferred_current_settlement": { - "value": "Arnhem", - "formatted": "NL-GE-ARN", - "country_code": "NL", - "region_code": "GE", - "settlement_code": "ARN", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Arnhem, Gelderland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Arnhem, Gelderland, Netherlands (NL)", - "result": { - "geonames_id": 2759661, - "geonames_name": "Arnhem", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPLA", - "latitude": 51.98, - "longitude": 5.91111 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-GE-ARN" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759661, - "geonames_name": "Arnhem", - "admin1_code": "03", - "admin1_name": "Gelderland", - "feature_code": "PPLA", - "latitude": 51.98, - "longitude": 5.91111 - }, - "inferred_at": "2026-01-09T17:42:59.780193+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERARD-OENE", @@ -146,6 +98,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-ARN_XXXX_GERARD-OENE", + "new_ppid": "ID_XX-XX-XXX_200X_NL-GE-ARN_XXXX_GERARD-OENE", + "changed_at": "2026-01-09T19:41:09.678711+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2001 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 2 years" + }, + { + "step": 2, + "calculation": "2026 - 2 = 2024", + "result": "Estimated first job year: 2024", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2024 - 23 = 2001", + "result": "Estimated birth year: 2001", + "range": "1994-2008 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1994, + 2008 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:04.019653+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_NL-GE-CUL_XXXX_KAREN-SALDEN.json b/data/person/ID_XX-XX-XXX_200X_NL-GE-CUL_XXXX_KAREN-SALDEN.json index 9526367066..03c0bb9a77 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-GE-CUL_XXXX_KAREN-SALDEN.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-GE-CUL_XXXX_KAREN-SALDEN.json @@ -135,7 +135,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/karen-salden-99443027_20251214T112147Z.json" ], - "modified_at": "2026-01-09T19:18:15.629004+00:00", + "modified_at": "2026-01-09T19:51:10.849930+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "karen-salden-99443027", @@ -172,7 +172,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -221,7 +221,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.628949+00:00", + "inferred_at": "2026-01-09T19:51:10.849796+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_NL-GE-CUL_XXXX_RUTH-WOLTERS.json b/data/person/ID_XX-XX-XXX_200X_NL-GE-CUL_XXXX_RUTH-WOLTERS.json index 5d1f9293fd..f5df0625f6 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-GE-CUL_XXXX_RUTH-WOLTERS.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-GE-CUL_XXXX_RUTH-WOLTERS.json @@ -93,7 +93,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ruthwolters_20251214T110430Z.json" ], - "modified_at": "2026-01-09T19:18:15.534964+00:00", + "modified_at": "2026-01-09T19:51:11.849513+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ruthwolters", @@ -121,7 +121,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -170,7 +170,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.534958+00:00", + "inferred_at": "2026-01-09T19:51:11.849502+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_NL-GE-NIJ_XXXX_MARTIN-BERGSMA.json b/data/person/ID_XX-XX-XXX_200X_NL-GE-NIJ_XXXX_MARTIN-BERGSMA.json new file mode 100644 index 0000000000..c190b5b58c --- /dev/null +++ b/data/person/ID_XX-XX-XXX_200X_NL-GE-NIJ_XXXX_MARTIN-BERGSMA.json @@ -0,0 +1,164 @@ +{ + "ppid": "ID_XX-XX-XXX_200X_NL-GE-NIJ_XXXX_MARTIN-BERGSMA", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "200X", + "last_location": "NL-GE-NIJ", + "last_date": "XXXX", + "name_tokens": [ + "MARTIN", + "BERGSMA" + ], + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] + }, + "name": { + "full_name": "Martin Bergsma", + "display_name": "Martin Bergsma", + "name_romanized": null, + "name_tokens": [ + "MARTIN", + "BERGSMA" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "E" + ], + "rationale": "Identified as heritage staff at CODA-Apeldoorn" + }, + "affiliations": [], + "profile_data": { + "name": "Martin Bergsma", + "linkedin_url": "https://www.linkedin.com/in/martinbergsma", + "headline": "Vakspecialist Educatie en Verhalenverteller", + "location": "Nijmegen, Gelderland, Netherlands (NL)", + "connections": "369 connections • 380 followers", + "about": "Total Experience: 3 years and 1 month", + "experience": [], + "education": [], + "skills": [], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/martinbergsma_20251214T103403Z.json", + "observed_on": "2025-12-14T10:34:03.890064+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.676822+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/martinbergsma_20251214T103403Z.json" + ], + "modified_at": "2026-01-09T19:51:08.611650+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "martinbergsma", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARTIN-BERGSMA", + "new_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_MARTIN-BERGSMA", + "changed_at": "2026-01-09T17:42:57.266227+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_MARTIN-BERGSMA", + "new_ppid": "ID_XX-XX-XXX_200X_NL-GE-NIJ_XXXX_MARTIN-BERGSMA", + "changed_at": "2026-01-09T19:41:12.281594+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2000 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 3 years" + }, + { + "step": 2, + "calculation": "2026 - 3 = 2023", + "result": "Estimated first job year: 2023", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2023 - 23 = 2000", + "result": "Estimated birth year: 2000", + "range": "1993-2007 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1993, + 2007 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:08.611643+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_NL-GR-WED_XXXX_MONIQUE-NICOLAIJ.json b/data/person/ID_XX-XX-XXX_200X_NL-GR-WED_XXXX_MONIQUE-NICOLAIJ.json index 4e01c261e0..090e6e23d1 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-GR-WED_XXXX_MONIQUE-NICOLAIJ.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-GR-WED_XXXX_MONIQUE-NICOLAIJ.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/monique-nicolaij-241b2013_20251214T110423Z.json" ], - "modified_at": "2026-01-09T19:18:15.528699+00:00", + "modified_at": "2026-01-09T19:51:28.532282+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "monique-nicolaij-241b2013", @@ -116,7 +116,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -165,7 +165,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.528679+00:00", + "inferred_at": "2026-01-09T19:51:28.532239+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-'S-_XXXX_MAARTEN-FOLKERS.json b/data/person/ID_XX-XX-XXX_200X_NL-NB-'S-_XXXX_MAARTEN-FOLKERS.json similarity index 64% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NB-'S-_XXXX_MAARTEN-FOLKERS.json rename to data/person/ID_XX-XX-XXX_200X_NL-NB-'S-_XXXX_MAARTEN-FOLKERS.json index 39c7b93f3e..dc89477190 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-'S-_XXXX_MAARTEN-FOLKERS.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NB-'S-_XXXX_MAARTEN-FOLKERS.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NB-'S-_XXXX_MAARTEN-FOLKERS", + "ppid": "ID_XX-XX-XXX_200X_NL-NB-'S-_XXXX_MAARTEN-FOLKERS", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-NB-'S-", "last_date": "XXXX", "name_tokens": [ "MAARTEN", "FOLKERS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Maarten Folkers", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -125,63 +130,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mfolkers_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:42:58.268333+00:00", + "modified_at": "2026-01-09T19:51:05.170165+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mfolkers", - "inferred_current_settlement": { - "value": "'s-Hertogenbosch", - "formatted": "NL-NB-'S-", - "country_code": "NL", - "region_code": "NB", - "settlement_code": "'S-", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "'s-Hertogenbosch, North Brabant, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "'s-Hertogenbosch, North Brabant, Netherlands", - "result": { - "geonames_id": 2747351, - "geonames_name": "'s-Hertogenbosch", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPLA", - "latitude": 51.69917, - "longitude": 5.30417 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NB-'S-" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747351, - "geonames_name": "'s-Hertogenbosch", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPLA", - "latitude": 51.69917, - "longitude": 5.30417 - }, - "inferred_at": "2026-01-09T17:42:58.268325+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MAARTEN-FOLKERS", @@ -191,6 +143,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NB-'S-_XXXX_MAARTEN-FOLKERS", + "new_ppid": "ID_XX-XX-XXX_200X_NL-NB-'S-_XXXX_MAARTEN-FOLKERS", + "changed_at": "2026-01-09T19:43:42.576161+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1994 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "9 years and 10 months" + }, + { + "step": 2, + "calculation": "2026 - 9 = 2017", + "result": "Estimated first job year: 2017", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2017 - 23 = 1994", + "result": "Estimated birth year: 1994", + "range": "1987-2001 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1987, + 2001 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1994 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:51:05.170137+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_NL-NB-EIN_XXXX_MAARTEN-B.json b/data/person/ID_XX-XX-XXX_200X_NL-NB-EIN_XXXX_MAARTEN-B.json index e5929902b5..efbc237633 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-NB-EIN_XXXX_MAARTEN-B.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NB-EIN_XXXX_MAARTEN-B.json @@ -95,7 +95,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/maarten-b-44840928_20251214T110803Z.json" ], - "modified_at": "2026-01-09T19:18:13.591860+00:00", + "modified_at": "2026-01-09T19:50:55.120434+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "maarten-b-44840928", @@ -123,7 +123,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -172,7 +172,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.591851+00:00", + "inferred_at": "2026-01-09T19:50:55.120420+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_JOHN-KIESEBRINK.json b/data/person/ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_JOHN-KIESEBRINK.json similarity index 52% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_JOHN-KIESEBRINK.json rename to data/person/ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_JOHN-KIESEBRINK.json index a78cf3911a..044f6e40b9 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_JOHN-KIESEBRINK.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_JOHN-KIESEBRINK.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_JOHN-KIESEBRINK", + "ppid": "ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_JOHN-KIESEBRINK", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-NB-TIL", "last_date": "XXXX", "name_tokens": [ "JOHN", "KIESEBRINK" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "John Kiesebrink", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -82,63 +87,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/johnkiesebrink_20251214T111159Z.json" ], - "modified_at": "2026-01-09T17:43:05.777308+00:00", + "modified_at": "2026-01-09T19:50:46.957949+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "johnkiesebrink", - "inferred_current_settlement": { - "value": "Tilburg", - "formatted": "NL-NB-TIL", - "country_code": "NL", - "region_code": "NB", - "settlement_code": "TIL", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Tilburg, North Brabant, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Tilburg, North Brabant, Netherlands (NL)", - "result": { - "geonames_id": 2746301, - "geonames_name": "Tilburg", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.55551, - "longitude": 5.0913 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NB-TIL" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2746301, - "geonames_name": "Tilburg", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.55551, - "longitude": 5.0913 - }, - "inferred_at": "2026-01-09T17:43:05.777301+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JOHN-KIESEBRINK", @@ -148,6 +100,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_JOHN-KIESEBRINK", + "new_ppid": "ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_JOHN-KIESEBRINK", + "changed_at": "2026-01-09T19:41:10.667052+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1995 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 8 years" + }, + { + "step": 2, + "calculation": "2026 - 8 = 2018", + "result": "Estimated first job year: 2018", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2018 - 23 = 1995", + "result": "Estimated birth year: 1995", + "range": "1988-2002 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1988, + 2002 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1995 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:50:46.957933+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_SJALINA-RA.json b/data/person/ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_SJALINA-RA.json similarity index 67% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_SJALINA-RA.json rename to data/person/ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_SJALINA-RA.json index 554f708e41..c66d72412a 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_SJALINA-RA.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_SJALINA-RA.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_SJALINA-RA", + "ppid": "ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_SJALINA-RA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-NB-TIL", "last_date": "XXXX", "name_tokens": [ "SJALINA", "RA" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Sjalina Hellemons-Meewisse RA", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -154,63 +159,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sjalina-hellemons-meewisse-ra-36205b25_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:42:59.970652+00:00", + "modified_at": "2026-01-09T19:50:46.719833+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sjalina-hellemons-meewisse-ra-36205b25", - "inferred_current_settlement": { - "value": "Tilburg", - "formatted": "NL-NB-TIL", - "country_code": "NL", - "region_code": "NB", - "settlement_code": "TIL", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Tilburg, North Brabant, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Tilburg, North Brabant, Netherlands", - "result": { - "geonames_id": 2746301, - "geonames_name": "Tilburg", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.55551, - "longitude": 5.0913 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NB-TIL" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2746301, - "geonames_name": "Tilburg", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.55551, - "longitude": 5.0913 - }, - "inferred_at": "2026-01-09T17:42:59.970646+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SJALINA-RA", @@ -220,6 +172,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_SJALINA-RA", + "new_ppid": "ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_SJALINA-RA", + "changed_at": "2026-01-09T19:43:43.108871+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1994 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "9 years and 1 month" + }, + { + "step": 2, + "calculation": "2026 - 9 = 2017", + "result": "Estimated first job year: 2017", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2017 - 23 = 1994", + "result": "Estimated birth year: 1994", + "range": "1987-2001 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1987, + 2001 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1994 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:50:46.719826+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_SOPHIE-HURK.json b/data/person/ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_SOPHIE-HURK.json similarity index 79% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_SOPHIE-HURK.json rename to data/person/ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_SOPHIE-HURK.json index c73779c49a..f0bb177843 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_SOPHIE-HURK.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_SOPHIE-HURK.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_SOPHIE-HURK", + "ppid": "ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_SOPHIE-HURK", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-NB-TIL", "last_date": "XXXX", "name_tokens": [ "SOPHIE", "HURK" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Sophie Anna van den Hurk", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -193,63 +198,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sophieannavandenhurk_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:42:57.141137+00:00", + "modified_at": "2026-01-09T19:50:46.701940+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sophieannavandenhurk", - "inferred_current_settlement": { - "value": "Tilburg", - "formatted": "NL-NB-TIL", - "country_code": "NL", - "region_code": "NB", - "settlement_code": "TIL", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Tilburg, North Brabant, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Tilburg, North Brabant, Netherlands", - "result": { - "geonames_id": 2746301, - "geonames_name": "Tilburg", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.55551, - "longitude": 5.0913 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NB-TIL" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2746301, - "geonames_name": "Tilburg", - "admin1_code": "06", - "admin1_name": "North Brabant", - "feature_code": "PPL", - "latitude": 51.55551, - "longitude": 5.0913 - }, - "inferred_at": "2026-01-09T17:42:57.141130+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SOPHIE-HURK", @@ -259,6 +211,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NB-TIL_XXXX_SOPHIE-HURK", + "new_ppid": "ID_XX-XX-XXX_200X_NL-NB-TIL_XXXX_SOPHIE-HURK", + "changed_at": "2026-01-09T19:43:38.675130+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1995 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "8 years and 9 months" + }, + { + "step": 2, + "calculation": "2026 - 8 = 2018", + "result": "Estimated first job year: 2018", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2018 - 23 = 1995", + "result": "Estimated birth year: 1995", + "range": "1988-2002 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1988, + 2002 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1995 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:50:46.701898+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_IRIS-LOUWERSHEIMER.json b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_IRIS-LOUWERSHEIMER.json index 27b6d40957..a5544c1614 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_IRIS-LOUWERSHEIMER.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_IRIS-LOUWERSHEIMER.json @@ -81,7 +81,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/iris-louwersheimer-1a662a153_20251214T111522Z.json" ], - "modified_at": "2026-01-09T19:18:14.383337+00:00", + "modified_at": "2026-01-09T19:51:01.730655+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "iris-louwersheimer-1a662a153", @@ -109,7 +109,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.383325+00:00", + "inferred_at": "2026-01-09T19:51:01.730628+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_JINMING-LYU.json b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_JINMING-LYU.json index de28919cc3..4757c7b51e 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_JINMING-LYU.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_JINMING-LYU.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jinminglyu_20251214T110059Z.json" ], - "modified_at": "2026-01-09T19:18:13.031249+00:00", + "modified_at": "2026-01-09T19:50:50.614582+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jinminglyu", @@ -119,7 +119,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -168,7 +168,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.031238+00:00", + "inferred_at": "2026-01-09T19:50:50.614550+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_LISANNE-LAAT.json b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_LISANNE-LAAT.json similarity index 53% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_LISANNE-LAAT.json rename to data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_LISANNE-LAAT.json index 815808345a..539ba4636c 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_LISANNE-LAAT.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_LISANNE-LAAT.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_LISANNE-LAAT", + "ppid": "ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_LISANNE-LAAT", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "LISANNE", "LAAT" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Lisanne de Laat", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -82,63 +87,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lisanne-de-laat-a058b8145_20251214T111607Z.json" ], - "modified_at": "2026-01-09T17:43:07.298928+00:00", + "modified_at": "2026-01-09T19:51:08.541086+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "lisanne-de-laat-a058b8145", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands (NL)", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:43:07.298922+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LISANNE-LAAT", @@ -148,6 +100,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_LISANNE-LAAT", + "new_ppid": "ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_LISANNE-LAAT", + "changed_at": "2026-01-09T19:41:10.811613+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1996 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 7 years" + }, + { + "step": 2, + "calculation": "2026 - 7 = 2019", + "result": "Estimated first job year: 2019", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2019 - 23 = 1996", + "result": "Estimated birth year: 1996", + "range": "1989-2003 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1989, + 2003 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1996 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:51:08.541078+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD.json b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD.json new file mode 100644 index 0000000000..5394c697c8 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD.json @@ -0,0 +1,166 @@ +{ + "ppid": "ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "200X", + "last_location": "NL-NH-AMS", + "last_date": "XXXX", + "name_tokens": [ + "MAARTJE", + "BOOGAARD" + ], + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] + }, + "name": { + "full_name": "Maartje Boogaard", + "display_name": "Maartje Boogaard", + "name_romanized": null, + "name_tokens": [ + "MAARTJE", + "BOOGAARD" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "M" + ], + "rationale": "Identified as heritage staff at Van Gogh Museum" + }, + "affiliations": [], + "profile_data": { + "name": "Maartje Boogaard", + "linkedin_url": "https://www.linkedin.com/in/maartje-boogaard-a7354218a", + "headline": "Personeelsplanner bij Van Gogh Museum", + "location": "Amsterdam, North Holland, Netherlands (NL)", + "connections": "81 connections • 82 followers", + "about": "Total Experience: 7 years and 5 months", + "experience": [], + "education": [], + "skills": [ + "retail" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/maartje-boogaard-a7354218a_20251214T110128Z.json", + "observed_on": "2025-12-14T11:01:28.764011+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.633797+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/maartje-boogaard-a7354218a_20251214T110128Z.json" + ], + "modified_at": "2026-01-09T19:51:26.688285+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "maartje-boogaard-a7354218a", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MAARTJE-BOOGAARD", + "new_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD", + "changed_at": "2026-01-09T17:43:02.373358+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD", + "new_ppid": "ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD", + "changed_at": "2026-01-09T19:41:10.701664+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1996 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 7 years" + }, + { + "step": 2, + "calculation": "2026 - 7 = 2019", + "result": "Estimated first job year: 2019", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2019 - 23 = 1996", + "result": "Estimated birth year: 1996", + "range": "1989-2003 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1989, + 2003 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1996 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:51:26.688276+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MANON-P.json b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MANON-P.json index 4967ef1e7f..afd6a182d3 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MANON-P.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MANON-P.json @@ -81,7 +81,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/manon-pesman_20251214T110016Z.json" ], - "modified_at": "2026-01-09T19:18:16.792900+00:00", + "modified_at": "2026-01-09T19:51:22.032980+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "manon-pesman", @@ -109,7 +109,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.792886+00:00", + "inferred_at": "2026-01-09T19:51:22.032954+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MARA-BOVIATSI.json b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MARA-BOVIATSI.json similarity index 63% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MARA-BOVIATSI.json rename to data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MARA-BOVIATSI.json index 03b45910b2..034f80a2e9 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MARA-BOVIATSI.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MARA-BOVIATSI.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MARA-BOVIATSI", + "ppid": "ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MARA-BOVIATSI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "MARA", "BOVIATSI" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] }, "name": { "full_name": "Mara Ledeboer Boviatsi", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -116,63 +121,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mara-ledeboer-boviatsi-45b23a248_20251214T111752Z.json" ], - "modified_at": "2026-01-09T17:42:58.881099+00:00", + "modified_at": "2026-01-09T19:51:28.566357+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mara-ledeboer-boviatsi-45b23a248", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands (NL)", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:58.881092+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARA-BOVIATSI", @@ -182,6 +134,80 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MARA-BOVIATSI", + "new_ppid": "ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MARA-BOVIATSI", + "changed_at": "2026-01-09T19:43:42.238950+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2001 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Zone2Source", + "title": "Cultural Analyst / Interviewer", + "date_range": "2024 - 2024" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2024 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2024 - 23 = 2001", + "result": "Estimated birth year: 2001", + "range": "1996-2006 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1996, + 2006 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:28.566330+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MARIELLE-TILBURG.json b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MARIELLE-TILBURG.json index c730562a38..948a85b274 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MARIELLE-TILBURG.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MARIELLE-TILBURG.json @@ -99,7 +99,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marielle-van-tilburg-52433b6_20251214T113343Z.json" ], - "modified_at": "2026-01-09T19:18:15.477525+00:00", + "modified_at": "2026-01-09T19:51:11.049784+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marielle-van-tilburg-52433b6", @@ -127,7 +127,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.477515+00:00", + "inferred_at": "2026-01-09T19:51:11.049761+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MELISSA-DAUGHERTY.json b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MELISSA-DAUGHERTY.json similarity index 50% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MELISSA-DAUGHERTY.json rename to data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MELISSA-DAUGHERTY.json index 557fb2127e..bbcda7e390 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MELISSA-DAUGHERTY.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MELISSA-DAUGHERTY.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MELISSA-DAUGHERTY", + "ppid": "ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MELISSA-DAUGHERTY", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "MELISSA", "DAUGHERTY" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] }, "name": { "full_name": "Melissa Daugherty", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -69,63 +74,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/melissa-daugherty-a5854642_20251214T111534Z.json" ], - "modified_at": "2026-01-09T17:42:57.857061+00:00", + "modified_at": "2026-01-09T19:50:54.103506+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "melissa-daugherty-a5854642", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands (NL)", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:57.857054+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MELISSA-DAUGHERTY", @@ -135,6 +87,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MELISSA-DAUGHERTY", + "new_ppid": "ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MELISSA-DAUGHERTY", + "changed_at": "2026-01-09T19:41:10.730471+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2001 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 2 years" + }, + { + "step": 2, + "calculation": "2026 - 2 = 2024", + "result": "Estimated first job year: 2024", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2024 - 23 = 2001", + "result": "Estimated birth year: 2001", + "range": "1994-2008 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1994, + 2008 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:54.103500+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MERLIJN-RIKKEN.json b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MERLIJN-RIKKEN.json similarity index 73% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MERLIJN-RIKKEN.json rename to data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MERLIJN-RIKKEN.json index fa1d4b3924..c36091671e 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MERLIJN-RIKKEN.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MERLIJN-RIKKEN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MERLIJN-RIKKEN", + "ppid": "ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MERLIJN-RIKKEN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-NH-AMS", "last_date": "XXXX", "name_tokens": [ "MERLIJN", "RIKKEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] }, "name": { "full_name": "Merlijn Rikken", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -133,63 +138,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/merlijn-rikken-74444a2b0_20251212T220000Z.json" ], - "modified_at": "2026-01-09T17:42:55.426717+00:00", + "modified_at": "2026-01-09T19:51:11.275252+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "merlijn-rikken-74444a2b0", - "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands", - "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 - }, - "inferred_at": "2026-01-09T17:42:55.426711+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MERLIJN-RIKKEN", @@ -199,6 +151,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MERLIJN-RIKKEN", + "new_ppid": "ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_MERLIJN-RIKKEN", + "changed_at": "2026-01-09T19:41:12.602053+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2002 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 1 years" + }, + { + "step": 2, + "calculation": "2026 - 1 = 2025", + "result": "Estimated first job year: 2025", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2025 - 23 = 2002", + "result": "Estimated birth year: 2002", + "range": "1995-2009 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1995, + 2009 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:11.275245+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_REBECCA-ZEINSTRA.json b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_REBECCA-ZEINSTRA.json index 9b79b40e79..c85295ad80 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_REBECCA-ZEINSTRA.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_REBECCA-ZEINSTRA.json @@ -105,7 +105,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rebecca-zeinstra-2b93308b_20251214T102902Z.json" ], - "modified_at": "2026-01-09T19:18:16.826071+00:00", + "modified_at": "2026-01-09T19:51:22.065151+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rebecca-zeinstra-2b93308b", @@ -133,7 +133,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.824173+00:00", + "inferred_at": "2026-01-09T19:51:22.063196+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_SARA-HALILOVIC.json b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_SARA-HALILOVIC.json index e174740216..9251604527 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_SARA-HALILOVIC.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_SARA-HALILOVIC.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sara-halilovic-76629b292_20251214T110303Z.json" ], - "modified_at": "2026-01-09T19:18:14.892165+00:00", + "modified_at": "2026-01-09T19:51:05.335247+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sara-halilovic-76629b292", @@ -108,7 +108,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.892157+00:00", + "inferred_at": "2026-01-09T19:51:05.335232+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_SEBASTIAAN-GUBBELS.json b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_SEBASTIAAN-GUBBELS.json index 7b6e7378a0..408ee377a5 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_SEBASTIAAN-GUBBELS.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_SEBASTIAAN-GUBBELS.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sebastiaan-gubbels-6a51362a9_20251214T111628Z.json" ], - "modified_at": "2026-01-09T19:18:14.675703+00:00", + "modified_at": "2026-01-09T19:51:29.003941+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sebastiaan-gubbels-6a51362a9", @@ -122,7 +122,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -163,7 +163,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:14.675655+00:00", + "inferred_at": "2026-01-09T19:51:29.003847+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_TESSA-SIJMONS.json b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_TESSA-SIJMONS.json index ff8be0d7af..9040816f5a 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_TESSA-SIJMONS.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NH-AMS_XXXX_TESSA-SIJMONS.json @@ -172,7 +172,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tessasijmons_20251214T111854Z.json" ], - "modified_at": "2026-01-09T19:18:17.108480+00:00", + "modified_at": "2026-01-09T19:51:23.905505+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "tessasijmons", @@ -194,7 +194,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -235,7 +235,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:17.106227+00:00", + "inferred_at": "2026-01-09T19:51:23.903481+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-HAA_XXXX_DORETH-OOSTERBAAN.json b/data/person/ID_XX-XX-XXX_200X_NL-NH-HAA_XXXX_DORETH-OOSTERBAAN.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-HAA_XXXX_DORETH-OOSTERBAAN.json rename to data/person/ID_XX-XX-XXX_200X_NL-NH-HAA_XXXX_DORETH-OOSTERBAAN.json index df89c33ad9..4f5150d272 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-HAA_XXXX_DORETH-OOSTERBAAN.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-NH-HAA_XXXX_DORETH-OOSTERBAAN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-HAA_XXXX_DORETH-OOSTERBAAN", + "ppid": "ID_XX-XX-XXX_200X_NL-NH-HAA_XXXX_DORETH-OOSTERBAAN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-NH-HAA", "last_date": "XXXX", "name_tokens": [ "DORETH", "OOSTERBAAN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] }, "name": { "full_name": "Doreth Oosterbaan", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -69,63 +74,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/doreth-oosterbaan_20251214T111708Z.json" ], - "modified_at": "2026-01-09T17:43:02.133540+00:00", + "modified_at": "2026-01-09T19:50:56.089515+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "doreth-oosterbaan", - "inferred_current_settlement": { - "value": "Haarlem", - "formatted": "NL-NH-HAA", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "HAA", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Haarlem, North Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Haarlem, North Holland, Netherlands (NL)", - "result": { - "geonames_id": 2755003, - "geonames_name": "Haarlem", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLA", - "latitude": 52.38084, - "longitude": 4.63683 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-NH-HAA" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2755003, - "geonames_name": "Haarlem", - "admin1_code": "07", - "admin1_name": "North Holland", - "feature_code": "PPLA", - "latitude": 52.38084, - "longitude": 4.63683 - }, - "inferred_at": "2026-01-09T17:43:02.133535+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DORETH-OOSTERBAAN", @@ -135,6 +87,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-HAA_XXXX_DORETH-OOSTERBAAN", + "new_ppid": "ID_XX-XX-XXX_200X_NL-NH-HAA_XXXX_DORETH-OOSTERBAAN", + "changed_at": "2026-01-09T19:41:12.178740+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2000 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 3 years" + }, + { + "step": 2, + "calculation": "2026 - 3 = 2023", + "result": "Estimated first job year: 2023", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2023 - 23 = 2000", + "result": "Estimated birth year: 2000", + "range": "1993-2007 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1993, + 2007 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:56.089507+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-OV-DEV_XXXX_WILCO-VELDWIJK.json b/data/person/ID_XX-XX-XXX_200X_NL-OV-DEV_XXXX_WILCO-VELDWIJK.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_NL-OV-DEV_XXXX_WILCO-VELDWIJK.json rename to data/person/ID_XX-XX-XXX_200X_NL-OV-DEV_XXXX_WILCO-VELDWIJK.json index 9211e2ea20..57dcb93456 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-OV-DEV_XXXX_WILCO-VELDWIJK.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-OV-DEV_XXXX_WILCO-VELDWIJK.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-OV-DEV_XXXX_WILCO-VELDWIJK", + "ppid": "ID_XX-XX-XXX_200X_NL-OV-DEV_XXXX_WILCO-VELDWIJK", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-OV-DEV", "last_date": "XXXX", "name_tokens": [ "WILCO", "VELDWIJK" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Wilco Veldwijk", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -76,63 +81,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/wilco-veldwijk-ba05a5133_20251214T103417Z.json" ], - "modified_at": "2026-01-09T17:43:05.197855+00:00", + "modified_at": "2026-01-09T19:51:00.021109+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "wilco-veldwijk-ba05a5133", - "inferred_current_settlement": { - "value": "Deventer", - "formatted": "NL-OV-DEV", - "country_code": "NL", - "region_code": "OV", - "settlement_code": "DEV", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Deventer, Overijssel, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Deventer, Overijssel, Netherlands (NL)", - "result": { - "geonames_id": 2756987, - "geonames_name": "Deventer", - "admin1_code": "15", - "admin1_name": "Overijssel", - "feature_code": "PPL", - "latitude": 52.255, - "longitude": 6.16389 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-OV-DEV" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2756987, - "geonames_name": "Deventer", - "admin1_code": "15", - "admin1_name": "Overijssel", - "feature_code": "PPL", - "latitude": 52.255, - "longitude": 6.16389 - }, - "inferred_at": "2026-01-09T17:43:05.197849+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_WILCO-VELDWIJK", @@ -142,6 +94,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-OV-DEV_XXXX_WILCO-VELDWIJK", + "new_ppid": "ID_XX-XX-XXX_200X_NL-OV-DEV_XXXX_WILCO-VELDWIJK", + "changed_at": "2026-01-09T19:41:09.024821+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1995 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 8 years" + }, + { + "step": 2, + "calculation": "2026 - 8 = 2018", + "result": "Estimated first job year: 2018", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2018 - 23 = 1995", + "result": "Estimated birth year: 1995", + "range": "1988-2002 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1988, + 2002 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1995 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:51:00.021097+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-OV-DEV_XXXX_YVONNE-TILBURG.json b/data/person/ID_XX-XX-XXX_200X_NL-OV-DEV_XXXX_YVONNE-TILBURG.json similarity index 55% rename from data/person/ID_XX-XX-XXX_XXXX_NL-OV-DEV_XXXX_YVONNE-TILBURG.json rename to data/person/ID_XX-XX-XXX_200X_NL-OV-DEV_XXXX_YVONNE-TILBURG.json index df4442d91b..7e9b9a1ad1 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-OV-DEV_XXXX_YVONNE-TILBURG.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-OV-DEV_XXXX_YVONNE-TILBURG.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-OV-DEV_XXXX_YVONNE-TILBURG", + "ppid": "ID_XX-XX-XXX_200X_NL-OV-DEV_XXXX_YVONNE-TILBURG", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-OV-DEV", "last_date": "XXXX", "name_tokens": [ "YVONNE", "TILBURG" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Yvonne van Tilburg", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -86,63 +91,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/yvonnevantilburg_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:43:00.219480+00:00", + "modified_at": "2026-01-09T19:51:28.917069+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "yvonnevantilburg", - "inferred_current_settlement": { - "value": "Deventer", - "formatted": "NL-OV-DEV", - "country_code": "NL", - "region_code": "OV", - "settlement_code": "DEV", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Deventer, Overijssel, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Deventer, Overijssel, Netherlands", - "result": { - "geonames_id": 2756987, - "geonames_name": "Deventer", - "admin1_code": "15", - "admin1_name": "Overijssel", - "feature_code": "PPL", - "latitude": 52.255, - "longitude": 6.16389 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-OV-DEV" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2756987, - "geonames_name": "Deventer", - "admin1_code": "15", - "admin1_name": "Overijssel", - "feature_code": "PPL", - "latitude": 52.255, - "longitude": 6.16389 - }, - "inferred_at": "2026-01-09T17:43:00.219474+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_YVONNE-TILBURG", @@ -152,6 +104,77 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-OV-DEV_XXXX_YVONNE-TILBURG", + "new_ppid": "ID_XX-XX-XXX_200X_NL-OV-DEV_XXXX_YVONNE-TILBURG", + "changed_at": "2026-01-09T19:43:40.748245+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1995 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "total_experience field found in profile_data", + "source_field": "profile_data.total_experience", + "source_value": "8 years and 8 months" + }, + { + "step": 2, + "calculation": "2026 - 8 = 2018", + "result": "Estimated first job year: 2018", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2018 - 23 = 1995", + "result": "Estimated birth year: 1995", + "range": "1988-2002 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1988, + 2002 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1995 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:51:28.917063+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_NL-OV-ZWO_XXXX_EVERLIEN-LEUSINK.json b/data/person/ID_XX-XX-XXX_200X_NL-OV-ZWO_XXXX_EVERLIEN-LEUSINK.json index 34d63f2617..79cc6e0e46 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-OV-ZWO_XXXX_EVERLIEN-LEUSINK.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-OV-ZWO_XXXX_EVERLIEN-LEUSINK.json @@ -161,7 +161,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/everlien-leusink-18071b3b_20251213T020000Z.json" ], - "modified_at": "2026-01-09T19:18:13.326561+00:00", + "modified_at": "2026-01-09T19:51:00.071426+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "everlien-leusink-18071b3b", @@ -191,7 +191,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -232,7 +232,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:13.326494+00:00", + "inferred_at": "2026-01-09T19:51:00.070450+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_NL-UT-HOU_XXXX_FRANK-HEINEN.json b/data/person/ID_XX-XX-XXX_200X_NL-UT-HOU_XXXX_FRANK-HEINEN.json index 4d1d70e979..5172778093 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-UT-HOU_XXXX_FRANK-HEINEN.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-UT-HOU_XXXX_FRANK-HEINEN.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/frank-heinen-41121048_20251214T113247Z.json" ], - "modified_at": "2026-01-09T19:18:17.017739+00:00", + "modified_at": "2026-01-09T19:51:22.969196+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "frank-heinen-41121048", @@ -113,7 +113,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -162,7 +162,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.017726+00:00", + "inferred_at": "2026-01-09T19:51:22.969177+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-WOE_XXXX_EUNICE-PELTKLEINJAN.json b/data/person/ID_XX-XX-XXX_200X_NL-UT-WOE_XXXX_EUNICE-PELTKLEINJAN.json similarity index 66% rename from data/person/ID_XX-XX-XXX_XXXX_NL-UT-WOE_XXXX_EUNICE-PELTKLEINJAN.json rename to data/person/ID_XX-XX-XXX_200X_NL-UT-WOE_XXXX_EUNICE-PELTKLEINJAN.json index 93fe13d922..802823d1fa 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-WOE_XXXX_EUNICE-PELTKLEINJAN.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-UT-WOE_XXXX_EUNICE-PELTKLEINJAN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-UT-WOE_XXXX_EUNICE-PELTKLEINJAN", + "ppid": "ID_XX-XX-XXX_200X_NL-UT-WOE_XXXX_EUNICE-PELTKLEINJAN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-UT-WOE", "last_date": "XXXX", "name_tokens": [ "EUNICE", "PELTKLEINJAN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Eunice van Pelt-KleinJan", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -136,63 +141,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/eunice-van-pelt-kleinjan_20251213T020000Z.json" ], - "modified_at": "2026-01-09T17:43:08.067750+00:00", + "modified_at": "2026-01-09T19:50:56.094010+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "eunice-van-pelt-kleinjan", - "inferred_current_settlement": { - "value": "Woerden", - "formatted": "NL-UT-WOE", - "country_code": "NL", - "region_code": "UT", - "settlement_code": "WOE", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Woerden, Utrecht, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Woerden, Utrecht, Netherlands", - "result": { - "geonames_id": 2744248, - "geonames_name": "Woerden", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPL", - "latitude": 52.085, - "longitude": 4.88333 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-UT-WOE" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2744248, - "geonames_name": "Woerden", - "admin1_code": "09", - "admin1_name": "Utrecht", - "feature_code": "PPL", - "latitude": 52.085, - "longitude": 4.88333 - }, - "inferred_at": "2026-01-09T17:43:08.067744+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EUNICE-PELTKLEINJAN", @@ -202,6 +154,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-UT-WOE_XXXX_EUNICE-PELTKLEINJAN", + "new_ppid": "ID_XX-XX-XXX_200X_NL-UT-WOE_XXXX_EUNICE-PELTKLEINJAN", + "changed_at": "2026-01-09T19:41:09.265309+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1993 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 10 years" + }, + { + "step": 2, + "calculation": "2026 - 10 = 2016", + "result": "Estimated first job year: 2016", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2016 - 23 = 1993", + "result": "Estimated birth year: 1993", + "range": "1986-2000 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1986, + 2000 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1993 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:50:56.094002+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_NL-ZH-ROT_XXXX_OUALID-TOGOU.json b/data/person/ID_XX-XX-XXX_200X_NL-ZH-ROT_XXXX_OUALID-TOGOU.json index 6ddd7b0040..8dafbc21be 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-ZH-ROT_XXXX_OUALID-TOGOU.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-ZH-ROT_XXXX_OUALID-TOGOU.json @@ -87,7 +87,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/oualid-togou-a64335272_20251214T112729Z.json" ], - "modified_at": "2026-01-09T19:18:14.038446+00:00", + "modified_at": "2026-01-09T19:50:58.536424+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "oualid-togou-a64335272", @@ -115,7 +115,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -164,7 +164,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.038439+00:00", + "inferred_at": "2026-01-09T19:50:58.536410+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_EMMEKE-HULSHOF.json b/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_EMMEKE-HULSHOF.json new file mode 100644 index 0000000000..709fc58bd0 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_EMMEKE-HULSHOF.json @@ -0,0 +1,166 @@ +{ + "ppid": "ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_EMMEKE-HULSHOF", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "200X", + "last_location": "NL-ZH-TH", + "last_date": "XXXX", + "name_tokens": [ + "EMMEKE", + "HULSHOF" + ], + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] + }, + "name": { + "full_name": "Emmeke Hulshof", + "display_name": "Emmeke Hulshof", + "name_romanized": null, + "name_tokens": [ + "EMMEKE", + "HULSHOF" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at ASML" + }, + "affiliations": [], + "profile_data": { + "name": "Emmeke Hulshof", + "linkedin_url": "https://www.linkedin.com/in/emmekehulshof", + "headline": "", + "location": "The Hague, South Holland, Netherlands (NL)", + "connections": "500 connections • 2,000 followers", + "about": "Total Experience: 2 years and 9 months", + "experience": [], + "education": [], + "skills": [ + "government" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/emmekehulshof_20251214T110911Z.json", + "observed_on": "2025-12-14T11:09:11.689012+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.672481+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/emmekehulshof_20251214T110911Z.json" + ], + "modified_at": "2026-01-09T19:51:29.001646+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "emmekehulshof", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EMMEKE-HULSHOF", + "new_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_EMMEKE-HULSHOF", + "changed_at": "2026-01-09T17:43:04.314069+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_EMMEKE-HULSHOF", + "new_ppid": "ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_EMMEKE-HULSHOF", + "changed_at": "2026-01-09T19:41:11.738072+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2001 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 2 years" + }, + { + "step": 2, + "calculation": "2026 - 2 = 2024", + "result": "Estimated first job year: 2024", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2024 - 23 = 2001", + "result": "Estimated birth year: 2001", + "range": "1994-2008 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1994, + 2008 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:29.001639+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_EVELYNE-SCHUURMANS.json b/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_EVELYNE-SCHUURMANS.json similarity index 52% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_EVELYNE-SCHUURMANS.json rename to data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_EVELYNE-SCHUURMANS.json index 417100ac6d..5a1793fce7 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_EVELYNE-SCHUURMANS.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_EVELYNE-SCHUURMANS.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_EVELYNE-SCHUURMANS", + "ppid": "ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_EVELYNE-SCHUURMANS", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "EVELYNE", "SCHUURMANS" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Evelyne Schuurmans", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -76,63 +81,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/evelyne-schuurmans-23010142_20251214T112654Z.json" ], - "modified_at": "2026-01-09T17:42:55.708642+00:00", + "modified_at": "2026-01-09T19:51:25.532201+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "evelyne-schuurmans-23010142", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, South Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, South Holland, Netherlands (NL)", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:42:55.708636+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EVELYNE-SCHUURMANS", @@ -142,6 +94,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_EVELYNE-SCHUURMANS", + "new_ppid": "ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_EVELYNE-SCHUURMANS", + "changed_at": "2026-01-09T19:41:09.458200+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1996 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 7 years" + }, + { + "step": 2, + "calculation": "2026 - 7 = 2019", + "result": "Estimated first job year: 2019", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2019 - 23 = 1996", + "result": "Estimated birth year: 1996", + "range": "1989-2003 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1989, + 2003 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1996 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:51:25.532197+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_GERRY-KLINKEN.json b/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_GERRY-KLINKEN.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_GERRY-KLINKEN.json rename to data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_GERRY-KLINKEN.json index 0431a5bd8b..1e108deb29 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_GERRY-KLINKEN.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_GERRY-KLINKEN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_GERRY-KLINKEN", + "ppid": "ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_GERRY-KLINKEN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "GERRY", "KLINKEN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] }, "name": { "full_name": "Gerry van Klinken", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -76,63 +81,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/gerry-van-klinken-39980028_20251214T103729Z.json" ], - "modified_at": "2026-01-09T17:43:08.555479+00:00", + "modified_at": "2026-01-09T19:51:29.288099+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "gerry-van-klinken-39980028", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, South Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, South Holland, Netherlands (NL)", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:43:08.555473+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERRY-KLINKEN", @@ -142,6 +94,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_GERRY-KLINKEN", + "new_ppid": "ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_GERRY-KLINKEN", + "changed_at": "2026-01-09T19:41:12.076668+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2000 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 3 years" + }, + { + "step": 2, + "calculation": "2026 - 3 = 2023", + "result": "Estimated first job year: 2023", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2023 - 23 = 2000", + "result": "Estimated birth year: 2000", + "range": "1993-2007 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1993, + 2007 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:29.288093+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_JORINDE-LAGENDIJK.json b/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_JORINDE-LAGENDIJK.json index 67c2371d09..1e5270e113 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_JORINDE-LAGENDIJK.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_JORINDE-LAGENDIJK.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jorinde-lagendijk-7024aa6b_20251214T103039Z.json" ], - "modified_at": "2026-01-09T19:18:17.872304+00:00", + "modified_at": "2026-01-09T19:51:28.834540+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "jorinde-lagendijk-7024aa6b", @@ -108,7 +108,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -157,7 +157,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.872295+00:00", + "inferred_at": "2026-01-09T19:51:28.834534+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_PIETER-BIERMA.json b/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_PIETER-BIERMA.json similarity index 50% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_PIETER-BIERMA.json rename to data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_PIETER-BIERMA.json index 220c931547..e9f066caaa 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_PIETER-BIERMA.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_PIETER-BIERMA.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_PIETER-BIERMA", + "ppid": "ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_PIETER-BIERMA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "PIETER", "BIERMA" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] }, "name": { "full_name": "Pieter Bierma", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -76,63 +81,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pieter-bierma-37331212_20251214T103346Z.json" ], - "modified_at": "2026-01-09T17:42:55.738278+00:00", + "modified_at": "2026-01-09T19:50:50.293685+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "pieter-bierma-37331212", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, South Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, South Holland, Netherlands (NL)", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:42:55.738268+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PIETER-BIERMA", @@ -142,6 +94,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_PIETER-BIERMA", + "new_ppid": "ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_PIETER-BIERMA", + "changed_at": "2026-01-09T19:41:08.293475+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2002 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 1 years" + }, + { + "step": 2, + "calculation": "2026 - 1 = 2025", + "result": "Estimated first job year: 2025", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2025 - 23 = 2002", + "result": "Estimated birth year: 2002", + "range": "1995-2009 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1995, + 2009 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:50.293674+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RACHEL-KOEHOORN.json b/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_RACHEL-KOEHOORN.json similarity index 78% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RACHEL-KOEHOORN.json rename to data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_RACHEL-KOEHOORN.json index 291e1ed08b..0225b75a8b 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RACHEL-KOEHOORN.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_RACHEL-KOEHOORN.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RACHEL-KOEHOORN", + "ppid": "ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_RACHEL-KOEHOORN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-ZH-TH", "last_date": "XXXX", "name_tokens": [ "RACHEL", "KOEHOORN" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] }, "name": { "full_name": "Rachel Koehoorn", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -195,63 +200,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/rachel-koehoorn_20251212T220000Z.json" ], - "modified_at": "2026-01-09T17:43:07.578477+00:00", + "modified_at": "2026-01-09T19:50:49.075112+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "rachel-koehoorn", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, South Holland, Netherlands" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, South Holland, Netherlands", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:43:07.578463+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RACHEL-KOEHOORN", @@ -261,6 +213,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_RACHEL-KOEHOORN", + "new_ppid": "ID_XX-XX-XXX_200X_NL-ZH-TH_XXXX_RACHEL-KOEHOORN", + "changed_at": "2026-01-09T19:41:10.239541+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1994 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 9 years" + }, + { + "step": 2, + "calculation": "2026 - 9 = 2017", + "result": "Estimated first job year: 2017", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2017 - 23 = 1994", + "result": "Estimated birth year: 1994", + "range": "1987-2001 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1987, + 2001 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1994 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:50:49.075101+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-ZOE_XXXX_HILDE-HAIGHTONONGERING.json b/data/person/ID_XX-XX-XXX_200X_NL-ZH-ZOE_XXXX_HILDE-HAIGHTONONGERING.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_NL-ZH-ZOE_XXXX_HILDE-HAIGHTONONGERING.json rename to data/person/ID_XX-XX-XXX_200X_NL-ZH-ZOE_XXXX_HILDE-HAIGHTONONGERING.json index a8ef916181..736fc6b3ff 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-ZOE_XXXX_HILDE-HAIGHTONONGERING.json +++ b/data/person/ID_XX-XX-XXX_200X_NL-ZH-ZOE_XXXX_HILDE-HAIGHTONONGERING.json @@ -1,17 +1,21 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-ZOE_XXXX_HILDE-HAIGHTONONGERING", + "ppid": "ID_XX-XX-XXX_200X_NL-ZH-ZOE_XXXX_HILDE-HAIGHTONONGERING", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "NL-ZH-ZOE", "last_date": "XXXX", "name_tokens": [ "HILDE", "HAIGHTONONGERING" ], - "last_location_source": "inferred_current_settlement" + "last_location_source": "inferred_current_settlement", + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] }, "name": { "full_name": "Hilde Haighton-Ongering", @@ -25,7 +29,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -72,63 +77,10 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/hilde-haighton-ongering-2391733_20251214T104043Z.json" ], - "modified_at": "2026-01-09T17:43:03.931955+00:00", + "modified_at": "2026-01-09T19:51:10.878368+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "hilde-haighton-ongering-2391733", - "inferred_current_settlement": { - "value": "Zoetermeer", - "formatted": "NL-ZH-ZOE", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "ZOE", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "Zoetermeer, South Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "Zoetermeer, South Holland, Netherlands (NL)", - "result": { - "geonames_id": 2743856, - "geonames_name": "Zoetermeer", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPL", - "latitude": 52.0575, - "longitude": 4.49306 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-ZOE" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2743856, - "geonames_name": "Zoetermeer", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPL", - "latitude": 52.0575, - "longitude": 4.49306 - }, - "inferred_at": "2026-01-09T17:43:03.931950+00:00", - "inferred_by": "enrich_ppids.py" - } - }, "ppid_history": [ { "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HILDE-HAIGHTONONGERING", @@ -138,6 +90,78 @@ "inferred_fields": [ "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-ZOE_XXXX_HILDE-HAIGHTONONGERING", + "new_ppid": "ID_XX-XX-XXX_200X_NL-ZH-ZOE_XXXX_HILDE-HAIGHTONONGERING", + "changed_at": "2026-01-09T19:41:09.116805+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_current_settlement" + ] } - ] + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2001 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 2 years" + }, + { + "step": 2, + "calculation": "2026 - 2 = 2024", + "result": "Estimated first job year: 2024", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2024 - 23 = 2001", + "result": "Estimated birth year: 2001", + "range": "1994-2008 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1994, + 2008 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:10.878360+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ABDAN-KABAN.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ABDAN-KABAN.json index 011e27cab0..543617dc94 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ABDAN-KABAN.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ABDAN-KABAN.json @@ -124,7 +124,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/abdan-kaban-102776229_20251214T111956Z.json" ], - "modified_at": "2026-01-09T19:18:14.357566+00:00", + "modified_at": "2026-01-09T19:51:01.589771+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "abdan-kaban-102776229", @@ -151,7 +151,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -200,7 +200,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.357546+00:00", + "inferred_at": "2026-01-09T19:51:00.928427+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ANNEMARIJKE-V.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ANNEMARIJKE-V.json index bd3cdc2ddd..dea3c8715e 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ANNEMARIJKE-V.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ANNEMARIJKE-V.json @@ -79,7 +79,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anne-marijke-v-3bb16b26_20251214T113304Z.json" ], - "modified_at": "2026-01-09T19:18:14.701559+00:00", + "modified_at": "2026-01-09T19:51:03.376690+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "anne-marijke-v-3bb16b26", @@ -106,7 +106,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -155,7 +155,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.699588+00:00", + "inferred_at": "2026-01-09T19:51:03.374596+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BAS-BEEKHUIS.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BAS-BEEKHUIS.json new file mode 100644 index 0000000000..312c94dcdb --- /dev/null +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BAS-BEEKHUIS.json @@ -0,0 +1,158 @@ +{ + "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BAS-BEEKHUIS", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "200X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "BAS", + "BEEKHUIS" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] + }, + "name": { + "full_name": "Bas Beekhuis", + "display_name": "Bas Beekhuis", + "name_romanized": null, + "name_tokens": [ + "BAS", + "BEEKHUIS" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "E" + ], + "rationale": "Identified as heritage staff at Nederlands Openluchtmuseum" + }, + "affiliations": [], + "profile_data": { + "name": "Bas Beekhuis", + "linkedin_url": "https://www.linkedin.com/in/bas-beekhuis-7bbb8329b", + "headline": "Eerste jaars student Facility management op de HAN.", + "location": "", + "connections": "47 connections • 50 followers", + "about": "Total Experience: 3 years and 1 month", + "experience": [], + "education": [ + { + "degree": "*, Facilities Planning and Management", + "institution": "HAN University of Applied Sciences" + } + ], + "skills": [], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/D4D03AQHrCTY4dO8JJA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1732214536352?e=2147483647&v=beta&t=xdg3EJdUSGxLdB2xX_E8yI0AR_LMy9e8PwnDZzs3qZM" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/bas-beekhuis-7bbb8329b_20251214T110649Z.json", + "observed_on": "2025-12-14T11:06:49.770185+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.687474+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/bas-beekhuis-7bbb8329b_20251214T110649Z.json" + ], + "modified_at": "2026-01-09T19:51:25.510327+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "bas-beekhuis-7bbb8329b", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAS-BEEKHUIS", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BAS-BEEKHUIS", + "changed_at": "2026-01-09T19:41:12.228432+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2000 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 3 years" + }, + { + "step": 2, + "calculation": "2026 - 3 = 2023", + "result": "Estimated first job year: 2023", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2023 - 23 = 2000", + "result": "Estimated birth year: 2000", + "range": "1993-2007 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1993, + 2007 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:25.510319+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BETUL-YILDIRIM.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BETUL-YILDIRIM.json index 12beb57597..3b10065c36 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BETUL-YILDIRIM.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_BETUL-YILDIRIM.json @@ -92,7 +92,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/betul-bagci_20251214T113302Z.json" ], - "modified_at": "2026-01-09T19:18:15.858439+00:00", + "modified_at": "2026-01-09T19:51:14.790834+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "betul-bagci", @@ -113,7 +113,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -154,7 +154,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.856542+00:00", + "inferred_at": "2026-01-09T19:51:14.783853+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHEN-MALUL.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_CHEN-MALUL.json similarity index 60% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHEN-MALUL.json rename to data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_CHEN-MALUL.json index 6d4d5a59a7..8db04748d8 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHEN-MALUL.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_CHEN-MALUL.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHEN-MALUL", + "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_CHEN-MALUL", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "CHEN", "MALUL" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -129,7 +134,85 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/chen-malul-421769105_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:03.920003+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "chen-malul-421769105" + "linkedin_slug": "chen-malul-421769105", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHEN-MALUL", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_CHEN-MALUL", + "changed_at": "2026-01-09T19:43:40.855680+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2001 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "National Library of Israel", + "title": "Writer and Editor", + "date_range": "2024" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2024 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2024 - 23 = 2001", + "result": "Estimated birth year: 2001", + "range": "1996-2006 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1996, + 2006 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:03.919934+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EFFI-NEUMANN.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_EFFI-NEUMANN.json similarity index 54% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EFFI-NEUMANN.json rename to data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_EFFI-NEUMANN.json index 7408f2d2ec..4c589f7fb9 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EFFI-NEUMANN.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_EFFI-NEUMANN.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EFFI-NEUMANN", + "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_EFFI-NEUMANN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "EFFI", "NEUMANN" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -107,7 +112,85 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/effi-neumann-39b7182b_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:16.740119+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "effi-neumann-39b7182b" + "linkedin_slug": "effi-neumann-39b7182b", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EFFI-NEUMANN", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_EFFI-NEUMANN", + "changed_at": "2026-01-09T19:43:41.159740+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2001 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Yad Vashem, the World Holocaust Remembrance Center", + "title": "Head of Digital", + "date_range": "2024" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2024 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2024 - 23 = 2001", + "result": "Estimated birth year: 2001", + "range": "1996-2006 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1996, + 2006 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:16.740067+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EKHTIAR-SYED.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_EKHTIAR-SYED.json similarity index 52% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EKHTIAR-SYED.json rename to data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_EKHTIAR-SYED.json index e9338c09a7..4440b5bd7e 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EKHTIAR-SYED.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_EKHTIAR-SYED.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EKHTIAR-SYED", + "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_EKHTIAR-SYED", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "EKHTIAR", "SYED" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -81,7 +86,82 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ekhtiar_20251214T110900Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:54.511581+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "ekhtiar" + "linkedin_slug": "ekhtiar", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EKHTIAR-SYED", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_EKHTIAR-SYED", + "changed_at": "2026-01-09T19:41:08.668679+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2001 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 2 years" + }, + { + "step": 2, + "calculation": "2026 - 2 = 2024", + "result": "Estimated first job year: 2024", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2024 - 23 = 2001", + "result": "Estimated birth year: 2001", + "range": "1994-2008 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1994, + 2008 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:54.508239+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ELLEN-FREEMAN.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ELLEN-FREEMAN.json index a212b5c6fe..d025a64eb8 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ELLEN-FREEMAN.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ELLEN-FREEMAN.json @@ -110,7 +110,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ellen-freeman-a15129214_20251214T110325Z.json" ], - "modified_at": "2026-01-09T19:18:15.061671+00:00", + "modified_at": "2026-01-09T19:51:06.665483+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ellen-freeman-a15129214", @@ -137,7 +137,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -186,7 +186,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.061624+00:00", + "inferred_at": "2026-01-09T19:51:06.658433+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ILSE-SEVERIJNEN.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ILSE-SEVERIJNEN.json new file mode 100644 index 0000000000..8290ffb65a --- /dev/null +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ILSE-SEVERIJNEN.json @@ -0,0 +1,155 @@ +{ + "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ILSE-SEVERIJNEN", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "200X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ILSE", + "SEVERIJNEN" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] + }, + "name": { + "full_name": "Ilse Severijnen", + "display_name": "Ilse Severijnen", + "name_romanized": null, + "name_tokens": [ + "ILSE", + "SEVERIJNEN" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "M" + ], + "rationale": "Identified as heritage staff at Rijksmuseum" + }, + "affiliations": [], + "profile_data": { + "name": "Ilse Severijnen", + "linkedin_url": "https://www.linkedin.com/in/ilse-severijnen", + "headline": "Development", + "location": "Netherlands (NL)", + "connections": "494 connections • 496 followers", + "about": "Total Experience: 7 years and 5 months", + "experience": [], + "education": [], + "skills": [ + "research" + ], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C5603AQEoUl2O94pJRg/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1580904956693?e=2147483647&v=beta&t=vDd7w5BrLRsEzJ6A0T-IlZha-atM7TwzBoDQkpSZcrA" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/ilse-severijnen_20251214T111335Z.json", + "observed_on": "2025-12-14T11:13:35.599277+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.626394+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/ilse-severijnen_20251214T111335Z.json" + ], + "modified_at": "2026-01-09T19:50:47.279879+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "ilse-severijnen", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ILSE-SEVERIJNEN", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ILSE-SEVERIJNEN", + "changed_at": "2026-01-09T19:41:10.785798+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1996 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 7 years" + }, + { + "step": 2, + "calculation": "2026 - 7 = 2019", + "result": "Estimated first job year: 2019", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2019 - 23 = 1996", + "result": "Estimated birth year: 1996", + "range": "1989-2003 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1989, + 2003 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1996 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:50:47.276434+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JOLANDE-T.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JOLANDE-T.json new file mode 100644 index 0000000000..e55bfbb09b --- /dev/null +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JOLANDE-T.json @@ -0,0 +1,155 @@ +{ + "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JOLANDE-T", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "200X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "JOLANDE", + "T" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] + }, + "name": { + "full_name": "Jolande T.", + "display_name": "Jolande T.", + "name_romanized": null, + "name_tokens": [ + "JOLANDE", + "T" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at Ministerie van Buitenlandse Zaken" + }, + "affiliations": [], + "profile_data": { + "name": "Jolande T.", + "linkedin_url": "https://www.linkedin.com/in/jolande-t-88093b84", + "headline": "Ministerie van Buitenlandse Zaken", + "location": "Netherlands (NL)", + "connections": "500 connections • 1,299 followers", + "about": "Total Experience: 1 year and 5 months", + "experience": [], + "education": [], + "skills": [ + "counterterrorism" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/jolande-t-88093b84_20251214T103233Z.json", + "observed_on": "2025-12-14T10:32:33.562930+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.541043+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/jolande-t-88093b84_20251214T103233Z.json" + ], + "modified_at": "2026-01-09T19:51:01.940558+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "jolande-t-88093b84", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JOLANDE-T", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JOLANDE-T", + "changed_at": "2026-01-09T19:41:08.809500+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2002 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 1 years" + }, + { + "step": 2, + "calculation": "2026 - 1 = 2025", + "result": "Estimated first job year: 2025", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2025 - 23 = 2002", + "result": "Estimated birth year: 2002", + "range": "1995-2009 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1995, + 2009 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:01.937947+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JULIA-CLER.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JULIA-CLER.json index 3d4231239e..a28265e985 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JULIA-CLER.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JULIA-CLER.json @@ -101,7 +101,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/julia-de-cler-a79609255_20251214T110646Z.json" ], - "modified_at": "2026-01-09T19:18:17.392403+00:00", + "modified_at": "2026-01-09T19:51:26.691011+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "julia-de-cler-a79609255", @@ -128,7 +128,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -177,7 +177,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:17.390486+00:00", + "inferred_at": "2026-01-09T19:51:26.689102+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JULIE-ROUSSEAU.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JULIE-ROUSSEAU.json index 95443d7db2..8d0b9925c3 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JULIE-ROUSSEAU.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_JULIE-ROUSSEAU.json @@ -131,7 +131,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/julie-rousseau-80b0399_20251212T200000Z.json" ], - "modified_at": "2026-01-09T19:18:13.000374+00:00", + "modified_at": "2026-01-09T19:50:50.275254+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "julie-rousseau-80b0399", @@ -158,7 +158,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -207,7 +207,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:12.994893+00:00", + "inferred_at": "2026-01-09T19:50:50.269508+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LIANNA-SARKISIAN.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_LIANNA-SARKISIAN.json similarity index 54% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LIANNA-SARKISIAN.json rename to data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_LIANNA-SARKISIAN.json index a80f6f3e00..a26ad05302 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LIANNA-SARKISIAN.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_LIANNA-SARKISIAN.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LIANNA-SARKISIAN", + "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_LIANNA-SARKISIAN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "LIANNA", "SARKISIAN" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -115,7 +120,85 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/lianna-sarkisian-14678a19a_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:07.027186+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "lianna-sarkisian-14678a19a" + "linkedin_slug": "lianna-sarkisian-14678a19a", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LIANNA-SARKISIAN", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_LIANNA-SARKISIAN", + "changed_at": "2026-01-09T19:43:43.006295+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2002 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "earliest_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "First job record found (no education data)", + "source_field": "profile_data.experience", + "source_value": { + "company": "Ministerie van Buitenlandse Zaken (Ministry of Foreign Affairs)", + "title": "Policy Advisor / New Role", + "date_range": "2025" + } + }, + { + "step": 2, + "extraction": "Start year extracted from date_range", + "extracted_value": 2025 + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±5 years)", + "rationale": "Assumes first job after typical university completion", + "confidence_impact": "Higher uncertainty; first job age varies ±5 years" + }, + { + "step": 4, + "calculation": "2025 - 23 = 2002", + "result": "Estimated birth year: 2002", + "range": "1997-2007 (accounting for ±5 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1997, + 2007 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±5)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:07.021476+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MAHBOUBEH-RABIEI.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MAHBOUBEH-RABIEI.json index 4df1923262..2bf54256bf 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MAHBOUBEH-RABIEI.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MAHBOUBEH-RABIEI.json @@ -91,7 +91,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mahboubeh-rabiei-9711b895_20251214T103909Z.json" ], - "modified_at": "2026-01-09T19:18:18.946518+00:00", + "modified_at": "2026-01-09T19:51:30.246964+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "mahboubeh-rabiei-9711b895", @@ -118,7 +118,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -167,7 +167,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:18.946500+00:00", + "inferred_at": "2026-01-09T19:51:30.246909+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARCO-HESSELINK.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARCO-HESSELINK.json new file mode 100644 index 0000000000..e41f174a20 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARCO-HESSELINK.json @@ -0,0 +1,155 @@ +{ + "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARCO-HESSELINK", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "200X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "MARCO", + "HESSELINK" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] + }, + "name": { + "full_name": "Marco Hesselink", + "display_name": "Marco Hesselink", + "name_romanized": null, + "name_tokens": [ + "MARCO", + "HESSELINK" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at Dienst Uitvoering Onderwijs (Ministerie van OCW)" + }, + "affiliations": [], + "profile_data": { + "name": "Marco Hesselink", + "linkedin_url": "https://www.linkedin.com/in/marco-hesselink-61a793186", + "headline": "technisch applicatie beheerder at Dienst Uitvoering Onderwijs (Ministerie van OCW)", + "location": "Greater Groningen Area (NL)", + "connections": "57 connections • 57 followers", + "about": "Total Experience: 9 years and 2 months", + "experience": [], + "education": [], + "skills": [ + "operations" + ], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C4E03AQFZUkHeAV4BzA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1612990253094?e=2147483647&v=beta&t=S64vKqVLSmaMBJuxgMSzIOioIHdNsRrW4rE1NC_5_eA" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/marco-hesselink-61a793186_20251214T112213Z.json", + "observed_on": "2025-12-14T11:22:13.994762+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.663438+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/marco-hesselink-61a793186_20251214T112213Z.json" + ], + "modified_at": "2026-01-09T19:51:18.571496+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "marco-hesselink-61a793186", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARCO-HESSELINK", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARCO-HESSELINK", + "changed_at": "2026-01-09T19:41:09.484379+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1994 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 9 years" + }, + { + "step": 2, + "calculation": "2026 - 9 = 2017", + "result": "Estimated first job year: 2017", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2017 - 23 = 1994", + "result": "Estimated birth year: 1994", + "range": "1987-2001 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1987, + 2001 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1994 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:51:18.568921+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARJAN-NANNINGA.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARJAN-NANNINGA.json index ed3ad99e09..204fda5c15 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARJAN-NANNINGA.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARJAN-NANNINGA.json @@ -104,7 +104,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjan-nanninga-39353254_20251214T110612Z.json" ], - "modified_at": "2026-01-09T19:18:15.385911+00:00", + "modified_at": "2026-01-09T19:51:14.959756+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "marjan-nanninga-39353254", @@ -135,7 +135,7 @@ "precision": "decade", "confidence": "low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -176,7 +176,7 @@ "Entry age for education/first job: 18 years (±3)", "Career records are complete in LinkedIn profile" ], - "inferred_at": "2026-01-09T19:18:15.385872+00:00", + "inferred_at": "2026-01-09T19:51:14.959616+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARJOLEIN-JEGERINGS.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARJOLEIN-JEGERINGS.json similarity index 50% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARJOLEIN-JEGERINGS.json rename to data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARJOLEIN-JEGERINGS.json index e835e96247..221300b3c5 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARJOLEIN-JEGERINGS.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARJOLEIN-JEGERINGS.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARJOLEIN-JEGERINGS", + "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARJOLEIN-JEGERINGS", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "MARJOLEIN", "JEGERINGS" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -86,7 +91,82 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/marjoleinjegerings_20251214T102802Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:55.427343+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "marjoleinjegerings" + "linkedin_slug": "marjoleinjegerings", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARJOLEIN-JEGERINGS", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARJOLEIN-JEGERINGS", + "changed_at": "2026-01-09T19:41:09.182487+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2002 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 1 years" + }, + { + "step": 2, + "calculation": "2026 - 1 = 2025", + "result": "Estimated first job year: 2025", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2025 - 23 = 2002", + "result": "Estimated birth year: 2002", + "range": "1995-2009 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1995, + 2009 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:50:55.425377+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARK-DWARSWAARD.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARK-DWARSWAARD.json similarity index 59% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARK-DWARSWAARD.json rename to data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARK-DWARSWAARD.json index 16d9761e3d..9ccbfac5c3 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARK-DWARSWAARD.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARK-DWARSWAARD.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARK-DWARSWAARD", + "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARK-DWARSWAARD", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "MARK", "DWARSWAARD" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -103,7 +108,82 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mark-dwarswaard-1b941b9_20251214T112353Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:18.452840+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "mark-dwarswaard-1b941b9" + "linkedin_slug": "mark-dwarswaard-1b941b9", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARK-DWARSWAARD", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MARK-DWARSWAARD", + "changed_at": "2026-01-09T19:41:09.534703+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2000 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 3 years" + }, + { + "step": 2, + "calculation": "2026 - 3 = 2023", + "result": "Estimated first job year: 2023", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2023 - 23 = 2000", + "result": "Estimated birth year: 2000", + "range": "1993-2007 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1993, + 2007 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:18.450801+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MAYA-T.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MAYA-T.json new file mode 100644 index 0000000000..c3ace843ed --- /dev/null +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MAYA-T.json @@ -0,0 +1,156 @@ +{ + "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MAYA-T", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "200X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "MAYA", + "T" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" + ] + }, + "name": { + "full_name": "Maya T.", + "display_name": "Maya T.", + "name_romanized": null, + "name_tokens": [ + "MAYA", + "T" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at Ministerie van Buitenlandse Zaken" + }, + "affiliations": [], + "profile_data": { + "name": "Maya T.", + "linkedin_url": "https://www.linkedin.com/in/maya-t-82868a118", + "headline": "Senior Policy Officer at Ministerie van Buitenlandse Zaken", + "location": "Netherlands (NL)", + "connections": "500 connections • 77 followers", + "about": "Total Experience: 2 years and 4 months", + "experience": [], + "education": [], + "skills": [ + "communications", + "research" + ], + "languages": [], + "profile_image_url": "https://media.licdn.com/dms/image/v2/D4E03AQGOt6mvwBAYSA/profile-displayphoto-shrink_200_200/B4EZjh.1fwGoAY-/0/1756138003097?e=2147483647&v=beta&t=fcgXd5ucq_abWf3AYugmzmM0YYWJpIJXhJYzIGFM5vI" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/maya-t-82868a118_20251214T103150Z.json", + "observed_on": "2025-12-14T10:31:50.088722+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.670609+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/maya-t-82868a118_20251214T103150Z.json" + ], + "modified_at": "2026-01-09T19:51:18.472372+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "maya-t-82868a118", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MAYA-T", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MAYA-T", + "changed_at": "2026-01-09T19:41:12.041443+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2001 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 2 years" + }, + { + "step": 2, + "calculation": "2026 - 2 = 2024", + "result": "Estimated first job year: 2024", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2024 - 23 = 2001", + "result": "Estimated birth year: 2001", + "range": "1994-2008 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1994, + 2008 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:18.470222+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MIEKE-VOS.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MIEKE-VOS.json new file mode 100644 index 0000000000..4fa47b011d --- /dev/null +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MIEKE-VOS.json @@ -0,0 +1,158 @@ +{ + "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MIEKE-VOS", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "200X", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "MIEKE", + "VOS" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "198X" + ] + }, + "name": { + "full_name": "Mieke de Vos", + "display_name": "Mieke de Vos", + "name_romanized": null, + "name_tokens": [ + "MIEKE", + "VOS" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "O" + ], + "rationale": "Identified as heritage staff at Ministerie van Buitenlandse Zaken" + }, + "affiliations": [], + "profile_data": { + "name": "Mieke de Vos", + "linkedin_url": "https://www.linkedin.com/in/mieke-de-vos-986a1467", + "headline": "", + "location": "The Randstad, Netherlands (NL)", + "connections": "175 connections • 175 followers", + "about": "Total Experience: 10 years and 7 months", + "experience": [], + "education": [], + "skills": [], + "languages": [ + { + "language": "Nederlands", + "proficiency": "Native or bilingual proficiency" + } + ], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/mieke-de-vos-986a1467_20251214T103139Z.json", + "observed_on": "2025-12-14T10:31:39.377850+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.621105+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/mieke-de-vos-986a1467_20251214T103139Z.json" + ], + "modified_at": "2026-01-09T19:51:13.276891+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "mieke-de-vos-986a1467", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIEKE-VOS", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_MIEKE-VOS", + "changed_at": "2026-01-09T19:41:12.320363+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "edtf_meaning": "one of: 1980s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "1993 is in 200X, but range extends into 198X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 10 years" + }, + { + "step": 2, + "calculation": "2026 - 10 = 2016", + "result": "Estimated first job year: 2016", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2016 - 23 = 1993", + "result": "Estimated birth year: 1993", + "range": "1986-2000 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1986, + 2000 + ], + "output": [ + "198X", + "200X" + ], + "edtf": "[198X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1993 spans decades 198X/200X", + "inferred_at": "2026-01-09T19:51:13.256773+00:00", + "inferred_by": "enrich_ppids.py" + } + } +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_NAVIN-REGI.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_NAVIN-REGI.json index 628ee5f2d6..277b03411c 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_NAVIN-REGI.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_NAVIN-REGI.json @@ -106,7 +106,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/navin-sam-regi-39628595_20251214T104012Z.json" ], - "modified_at": "2026-01-09T19:18:19.022363+00:00", + "modified_at": "2026-01-09T19:51:34.572125+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "navin-sam-regi-39628595", @@ -133,7 +133,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -182,7 +182,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:19.022348+00:00", + "inferred_at": "2026-01-09T19:51:34.516554+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_NOA-SPOOR.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_NOA-SPOOR.json index ce3d8d8829..fbbb116eeb 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_NOA-SPOOR.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_NOA-SPOOR.json @@ -78,10 +78,21 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/noa-spoor-a81987316_20251214T104020Z.json" ], - "modified_at": "2026-01-09T19:18:15.549006+00:00", + "modified_at": "2026-01-09T19:51:21.543201+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "noa-spoor-a81987316", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NOA-SPOOR", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_NOA-SPOOR", + "changed_at": "2026-01-09T19:18:15.549004+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], "inferred_birth_decade": { "values": [ "199X", @@ -94,7 +105,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -143,19 +154,8 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.548980+00:00", + "inferred_at": "2026-01-09T19:51:21.543180+00:00", "inferred_by": "enrich_ppids.py" } - }, - "ppid_history": [ - { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NOA-SPOOR", - "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_NOA-SPOOR", - "changed_at": "2026-01-09T19:18:15.549004+00:00", - "reason": "observation_based_inference", - "inferred_fields": [ - "inferred_birth_decade" - ] - } - ] + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_NURUL-MALLALAHI.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_NURUL-MALLALAHI.json index ea19dd8e25..98a46dab0b 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_NURUL-MALLALAHI.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_NURUL-MALLALAHI.json @@ -98,7 +98,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/nrlhsm_20251214T112023Z.json" ], - "modified_at": "2026-01-09T19:18:14.730330+00:00", + "modified_at": "2026-01-09T19:51:03.812593+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "nrlhsm", @@ -125,7 +125,7 @@ "primary_rationale": "2001 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -174,7 +174,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:14.730320+00:00", + "inferred_at": "2026-01-09T19:51:03.742322+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PIETER-ROELOFS.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_PIETER-ROELOFS.json similarity index 60% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PIETER-ROELOFS.json rename to data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_PIETER-ROELOFS.json index 049dde296c..76badebf05 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PIETER-ROELOFS.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_PIETER-ROELOFS.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PIETER-ROELOFS", + "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_PIETER-ROELOFS", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "PIETER", "ROELOFS" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -85,7 +90,82 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/pieter-roelofs-610392bb_20251214T111418Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:15.064007+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "pieter-roelofs-610392bb" + "linkedin_slug": "pieter-roelofs-610392bb", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PIETER-ROELOFS", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_PIETER-ROELOFS", + "changed_at": "2026-01-09T19:41:11.508380+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2001 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 2 years" + }, + { + "step": 2, + "calculation": "2026 - 2 = 2024", + "result": "Estimated first job year: 2024", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2024 - 23 = 2001", + "result": "Estimated birth year: 2001", + "range": "1994-2008 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1994, + 2008 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2001 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:15.061957+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_RONALD-DUSSELJEE.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_RONALD-DUSSELJEE.json index a11f48999f..1c1f4dc298 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_RONALD-DUSSELJEE.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_RONALD-DUSSELJEE.json @@ -127,7 +127,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ronalddusseljee_20251214T110222Z.json" ], - "modified_at": "2026-01-09T19:18:16.740164+00:00", + "modified_at": "2026-01-09T19:51:14.507414+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "ronalddusseljee", @@ -163,7 +163,7 @@ "primary_rationale": "2002 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -212,7 +212,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.734369+00:00", + "inferred_at": "2026-01-09T19:51:14.501477+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_SEBASTIAAN-HEEREMA.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_SEBASTIAAN-HEEREMA.json index 6fdc8fa946..ef65aa3ec5 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_SEBASTIAAN-HEEREMA.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_SEBASTIAAN-HEEREMA.json @@ -121,7 +121,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/sebastiaan-heerema-b869861a6_20251214T113004Z.json" ], - "modified_at": "2026-01-09T19:18:16.706851+00:00", + "modified_at": "2026-01-09T19:51:21.533345+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "sebastiaan-heerema-b869861a6", @@ -148,7 +148,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -197,7 +197,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:16.695450+00:00", + "inferred_at": "2026-01-09T19:51:21.521610+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TIJN-DONNERS.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_TIJN-DONNERS.json similarity index 64% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TIJN-DONNERS.json rename to data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_TIJN-DONNERS.json index 2564f9f8dd..07bcd8a5e3 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TIJN-DONNERS.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_TIJN-DONNERS.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TIJN-DONNERS", + "ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_TIJN-DONNERS", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "200X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "TIJN", "DONNERS" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -158,7 +163,82 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/tijn-donners-252767171_20251214T104127Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:15.061147+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "tijn-donners-252767171" + "linkedin_slug": "tijn-donners-252767171", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TIJN-DONNERS", + "new_ppid": "ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_TIJN-DONNERS", + "changed_at": "2026-01-09T19:41:11.354806+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "edtf_meaning": "one of: 1990s or 2000s", + "precision": "decade_set", + "primary_value": "200X", + "primary_rationale": "2002 is in 200X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 1 years" + }, + { + "step": 2, + "calculation": "2026 - 1 = 2025", + "result": "Estimated first job year: 2025", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2025 - 23 = 2002", + "result": "Estimated birth year: 2002", + "range": "1995-2009 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1995, + 2009 + ], + "output": [ + "199X", + "200X" + ], + "edtf": "[199X,200X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 2002 spans decades 199X/200X", + "inferred_at": "2026-01-09T19:51:15.059007+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ZAIDE-KRAPI.json b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ZAIDE-KRAPI.json index 362e71ab4d..9b199799b9 100644 --- a/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ZAIDE-KRAPI.json +++ b/data/person/ID_XX-XX-XXX_200X_XX-XX-XXX_XXXX_ZAIDE-KRAPI.json @@ -85,7 +85,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/zaide-krapi-40baa572_20251214T103747Z.json" ], - "modified_at": "2026-01-09T19:18:15.289425+00:00", + "modified_at": "2026-01-09T19:51:08.360506+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "zaide-krapi-40baa572", @@ -112,7 +112,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -161,7 +161,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.289417+00:00", + "inferred_at": "2026-01-09T19:51:08.360480+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_PAUL-POST.json b/data/person/ID_XX-XX-XXX_XXXX_AT-09-VIE_XXXX_HERBERT-SOMPEL.json similarity index 52% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_PAUL-POST.json rename to data/person/ID_XX-XX-XXX_XXXX_AT-09-VIE_XXXX_HERBERT-SOMPEL.json index 6102c50f75..486c3efb4e 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_PAUL-POST.json +++ b/data/person/ID_XX-XX-XXX_XXXX_AT-09-VIE_XXXX_HERBERT-SOMPEL.json @@ -1,25 +1,25 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_PAUL-POST", + "ppid": "ID_XX-XX-XXX_XXXX_AT-09-VIE_XXXX_HERBERT-SOMPEL", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "NL-NH-AMS", + "last_location": "AT-09-VIE", "last_date": "XXXX", "name_tokens": [ - "PAUL", - "POST" + "HERBERT", + "SOMPEL" ], "last_location_source": "inferred_current_settlement" }, "name": { - "full_name": "Paul Post", - "display_name": "Paul Post", + "full_name": "Herbert Van de Sompel", + "display_name": "Herbert Van de Sompel", "name_romanized": null, "name_tokens": [ - "PAUL", - "POST" + "HERBERT", + "SOMPEL" ], "source": "linkedin_profile" }, @@ -31,18 +31,18 @@ "heritage_relevance": { "is_heritage_relevant": true, "heritage_types": [ - "A" + "R" ], - "rationale": "Identified as heritage staff at Regionaal Archief Alkmaar" + "rationale": "Identified as heritage staff at DANS" }, "affiliations": [], "profile_data": { - "name": "Paul Post", - "linkedin_url": "https://www.linkedin.com/in/paul-post-30a25224", - "headline": "Directeur at Regionaal Archief Alkmaar", - "location": "Amsterdam, North Holland, Netherlands (NL)", - "connections": "500 connections • 10 followers", - "about": "Total Experience: 18 years and 9 months", + "name": "Herbert Van de Sompel", + "linkedin_url": "https://www.linkedin.com/in/herbertvandesompel", + "headline": "", + "location": "Vienna, Vienna, Austria (AT)", + "connections": "500 connections • 754 followers", + "about": "", "experience": [], "education": [], "skills": [], @@ -52,8 +52,8 @@ "web_claims": [], "source_observations": [ { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/paul-post-30a25224_20251214T113140Z.json", - "observed_on": "2025-12-14T11:31:40.290122+00:00", + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/herbertvandesompel_20251214T110504Z.json", + "observed_on": "2025-12-14T11:05:04.147686+00:00", "extraction_agent": "claude-sonnet-4-20250514" } ], @@ -64,21 +64,21 @@ } }, "provenance": { - "created_at": "2026-01-09T17:29:48.681145+00:00", + "created_at": "2026-01-09T17:29:48.713518+00:00", "created_by": "generate_ppids.py", "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/paul-post-30a25224_20251214T113140Z.json" + "/Users/kempersc/apps/glam/data/custodian/person/entity/herbertvandesompel_20251214T110504Z.json" ], - "modified_at": "2026-01-09T17:43:07.777345+00:00", + "modified_at": "2026-01-09T19:50:56.838692+00:00", "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "paul-post-30a25224", + "linkedin_slug": "herbertvandesompel", "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", + "value": "Vienna", + "formatted": "AT-09-VIE", + "country_code": "AT", + "region_code": "09", + "settlement_code": "VIE", "confidence": "medium", "inference_provenance": { "method": "profile_location", @@ -87,26 +87,26 @@ "step": 1, "observation": "Profile location field found", "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands (NL)" + "source_value": "Vienna, Vienna, Austria (AT)" }, { "step": 2, "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands (NL)", + "query": "Vienna, Vienna, Austria (AT)", "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", + "geonames_id": 2761369, + "geonames_name": "Vienna", + "admin1_code": "09", + "admin1_name": "Vienna", "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 + "latitude": 48.20849, + "longitude": 16.37208 } }, { "step": 3, "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" + "result": "AT-09-VIE" } ], "assumptions": [ @@ -114,23 +114,23 @@ "Profile location represents current residence" ], "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", + "geonames_id": 2761369, + "geonames_name": "Vienna", + "admin1_code": "09", + "admin1_name": "Vienna", "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 + "latitude": 48.20849, + "longitude": 16.37208 }, - "inferred_at": "2026-01-09T17:43:07.777338+00:00", + "inferred_at": "2026-01-09T19:50:56.838381+00:00", "inferred_by": "enrich_ppids.py" } }, "ppid_history": [ { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PAUL-POST", - "new_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_PAUL-POST", - "changed_at": "2026-01-09T17:43:07.777343+00:00", + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HERBERT-SOMPEL", + "new_ppid": "ID_XX-XX-XXX_XXXX_AT-09-VIE_XXXX_HERBERT-SOMPEL", + "changed_at": "2026-01-09T19:50:56.838670+00:00", "reason": "observation_based_inference", "inferred_fields": [ "inferred_current_settlement" diff --git a/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_DAVID-PEARSON.json b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_DAVID-PEARSON.json new file mode 100644 index 0000000000..db60e1138e --- /dev/null +++ b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_DAVID-PEARSON.json @@ -0,0 +1,143 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_DAVID-PEARSON", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "AU-01-CAN", + "last_date": "XXXX", + "name_tokens": [ + "DAVID", + "PEARSON" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "David Pearson", + "display_name": "David Pearson", + "name_romanized": null, + "name_tokens": [ + "DAVID", + "PEARSON" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "David Pearson", + "linkedin_url": "https://www.linkedin.com/in/david-pearson-8266499", + "headline": "Manager - Digital Preservation at National Library of Australia", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "11 connections • 11 followers", + "about": "", + "experience": [], + "education": [], + "skills": [ + "digital", + "digital preservation" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/david-pearson-8266499_20251214T103923Z.json", + "observed_on": "2025-12-14T10:39:23.676395+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.540359+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/david-pearson-8266499_20251214T103923Z.json" + ], + "modified_at": "2026-01-09T19:51:11.057560+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "david-pearson-8266499", + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:11.057548+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DAVID-PEARSON", + "new_ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_DAVID-PEARSON", + "changed_at": "2026-01-09T19:51:11.057557+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_JAN-FULLERTON.json b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_JAN-FULLERTON.json new file mode 100644 index 0000000000..9086de0d35 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_JAN-FULLERTON.json @@ -0,0 +1,142 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_JAN-FULLERTON", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "AU-01-CAN", + "last_date": "XXXX", + "name_tokens": [ + "JAN", + "FULLERTON" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Jan Fullerton", + "display_name": "Jan Fullerton", + "name_romanized": null, + "name_tokens": [ + "JAN", + "FULLERTON" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Jan Fullerton", + "linkedin_url": "https://www.linkedin.com/in/jan-fullerton-1266769", + "headline": "Director-General at National Library of Australia", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "2 connections • 1 followers", + "about": "", + "experience": [], + "education": [], + "skills": [ + "director" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-fullerton-1266769_20251214T104015Z.json", + "observed_on": "2025-12-14T10:40:15.159051+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.541407+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-fullerton-1266769_20251214T104015Z.json" + ], + "modified_at": "2026-01-09T19:50:49.102545+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "jan-fullerton-1266769", + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:49.102524+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAN-FULLERTON", + "new_ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_JAN-FULLERTON", + "changed_at": "2026-01-09T19:50:49.102541+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_JASMIN-CAMERON.json b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_JASMIN-CAMERON.json new file mode 100644 index 0000000000..3e4e7d21a6 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_JASMIN-CAMERON.json @@ -0,0 +1,142 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_JASMIN-CAMERON", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "AU-01-CAN", + "last_date": "XXXX", + "name_tokens": [ + "JASMIN", + "CAMERON" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Jasmin Cameron", + "display_name": "Jasmin Cameron", + "name_romanized": null, + "name_tokens": [ + "JASMIN", + "CAMERON" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Jasmin Cameron", + "linkedin_url": "https://www.linkedin.com/in/jasmin-cameron-7791b49", + "headline": "Assistant Director General Executive and Public Programs at National Library of Australia", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "4 connections • 4 followers", + "about": "", + "experience": [], + "education": [], + "skills": [ + "director" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/jasmin-cameron-7791b49_20251214T103929Z.json", + "observed_on": "2025-12-14T10:39:29.252081+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.669812+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/jasmin-cameron-7791b49_20251214T103929Z.json" + ], + "modified_at": "2026-01-09T19:51:14.198061+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "jasmin-cameron-7791b49", + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:14.198049+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JASMIN-CAMERON", + "new_ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_JASMIN-CAMERON", + "changed_at": "2026-01-09T19:51:14.198059+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD.json b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MARK-CORBOULD.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD.json rename to data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MARK-CORBOULD.json index 839bcc2d65..fb51a8409c 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD.json +++ b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MARK-CORBOULD.json @@ -1,25 +1,25 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD", + "ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MARK-CORBOULD", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "NL-NH-AMS", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ - "MAARTJE", - "BOOGAARD" + "MARK", + "CORBOULD" ], "last_location_source": "inferred_current_settlement" }, "name": { - "full_name": "Maartje Boogaard", - "display_name": "Maartje Boogaard", + "full_name": "Mark Corbould", + "display_name": "Mark Corbould", "name_romanized": null, "name_tokens": [ - "MAARTJE", - "BOOGAARD" + "MARK", + "CORBOULD" ], "source": "linkedin_profile" }, @@ -31,22 +31,24 @@ "heritage_relevance": { "is_heritage_relevant": true, "heritage_types": [ - "M" + "L" ], - "rationale": "Identified as heritage staff at Van Gogh Museum" + "rationale": "Identified as heritage staff at National Library of Australia" }, "affiliations": [], "profile_data": { - "name": "Maartje Boogaard", - "linkedin_url": "https://www.linkedin.com/in/maartje-boogaard-a7354218a", - "headline": "Personeelsplanner bij Van Gogh Museum", - "location": "Amsterdam, North Holland, Netherlands (NL)", - "connections": "81 connections • 82 followers", - "about": "Total Experience: 7 years and 5 months", + "name": "Mark Corbould", + "linkedin_url": "https://www.linkedin.com/in/mark-corbould-18258a75", + "headline": "Assistant Director-General Information Technology at National Library of Australia", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "29 connections • 34 followers", + "about": "", "experience": [], "education": [], "skills": [ - "retail" + "director", + "technology", + "information technology" ], "languages": [], "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" @@ -54,8 +56,8 @@ "web_claims": [], "source_observations": [ { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/maartje-boogaard-a7354218a_20251214T110128Z.json", - "observed_on": "2025-12-14T11:01:28.764011+00:00", + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/mark-corbould-18258a75_20251214T103855Z.json", + "observed_on": "2025-12-14T10:38:55.069004+00:00", "extraction_agent": "claude-sonnet-4-20250514" } ], @@ -66,21 +68,21 @@ } }, "provenance": { - "created_at": "2026-01-09T17:29:48.633797+00:00", + "created_at": "2026-01-09T17:29:48.656992+00:00", "created_by": "generate_ppids.py", "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/maartje-boogaard-a7354218a_20251214T110128Z.json" + "/Users/kempersc/apps/glam/data/custodian/person/entity/mark-corbould-18258a75_20251214T103855Z.json" ], - "modified_at": "2026-01-09T17:43:02.373359+00:00", + "modified_at": "2026-01-09T19:50:51.080453+00:00", "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "maartje-boogaard-a7354218a", + "linkedin_slug": "mark-corbould-18258a75", "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", "confidence": "medium", "inference_provenance": { "method": "profile_location", @@ -89,26 +91,26 @@ "step": 1, "observation": "Profile location field found", "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands (NL)" + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" }, { "step": 2, "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands (NL)", + "query": "Canberra, Australian Capital Territory, Australia (AU)", "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 + "latitude": -35.28346, + "longitude": 149.12807 } }, { "step": 3, "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" + "result": "AU-01-CAN" } ], "assumptions": [ @@ -116,23 +118,23 @@ "Profile location represents current residence" ], "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 + "latitude": -35.28346, + "longitude": 149.12807 }, - "inferred_at": "2026-01-09T17:43:02.373352+00:00", + "inferred_at": "2026-01-09T19:50:51.080441+00:00", "inferred_by": "enrich_ppids.py" } }, "ppid_history": [ { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MAARTJE-BOOGAARD", - "new_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_MAARTJE-BOOGAARD", - "changed_at": "2026-01-09T17:43:02.373358+00:00", + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARK-CORBOULD", + "new_ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MARK-CORBOULD", + "changed_at": "2026-01-09T19:50:51.080451+00:00", "reason": "observation_based_inference", "inferred_fields": [ "inferred_current_settlement" diff --git a/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MELANIE-SORENSON.json b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MELANIE-SORENSON.json new file mode 100644 index 0000000000..f4f0e4d983 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MELANIE-SORENSON.json @@ -0,0 +1,145 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MELANIE-SORENSON", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "AU-01-CAN", + "last_date": "XXXX", + "name_tokens": [ + "MELANIE", + "SORENSON" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Melanie Sorenson", + "display_name": "Melanie Sorenson", + "name_romanized": null, + "name_tokens": [ + "MELANIE", + "SORENSON" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "M" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Melanie Sorenson", + "linkedin_url": "https://www.linkedin.com/in/melanie-sorenson-629b60a8", + "headline": "Paper Conservator at National Library of Australia", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "2 connections • 2 followers", + "about": "", + "experience": [ + { + "title": "Paper Conservator", + "company": "National Library of Australia" + } + ], + "education": [], + "skills": [], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/melanie-sorenson-629b60a8_20251214T104008Z.json", + "observed_on": "2025-12-14T10:40:08.860127+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.623966+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/melanie-sorenson-629b60a8_20251214T104008Z.json" + ], + "modified_at": "2026-01-09T19:51:04.544404+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "melanie-sorenson-629b60a8", + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:04.544392+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MELANIE-SORENSON", + "new_ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MELANIE-SORENSON", + "changed_at": "2026-01-09T19:51:04.544402+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BENITA-JANSMA.json b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MICHELE-HUSTON.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BENITA-JANSMA.json rename to data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MICHELE-HUSTON.json index 4ad6c37757..fc7051cae3 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BENITA-JANSMA.json +++ b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MICHELE-HUSTON.json @@ -1,25 +1,25 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BENITA-JANSMA", + "ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MICHELE-HUSTON", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "NL-NH-AMS", + "last_location": "AU-01-CAN", "last_date": "XXXX", "name_tokens": [ - "BENITA", - "JANSMA" + "MICHELE", + "HUSTON" ], "last_location_source": "inferred_current_settlement" }, "name": { - "full_name": "Benita Jansma", - "display_name": "Benita Jansma", + "full_name": "Michele Huston", + "display_name": "Michele Huston", "name_romanized": null, "name_tokens": [ - "BENITA", - "JANSMA" + "MICHELE", + "HUSTON" ], "source": "linkedin_profile" }, @@ -31,18 +31,18 @@ "heritage_relevance": { "is_heritage_relevant": true, "heritage_types": [ - "A" + "L" ], - "rationale": "Identified as heritage staff at Regionaal Archief Alkmaar" + "rationale": "Identified as heritage staff at National Library of Australia" }, "affiliations": [], "profile_data": { - "name": "Benita Jansma", - "linkedin_url": "https://www.linkedin.com/in/benita-jansma-47a30311", - "headline": "book-and paperconservator at Regionaal Archief Alkmaar", - "location": "Amsterdam, North Holland, Netherlands (NL)", - "connections": "208 connections • 210 followers", - "about": "Total Experience: 35 years and 7 months", + "name": "Michele Huston", + "linkedin_url": "https://www.linkedin.com/in/michele-huston-18982a1", + "headline": "", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "20 connections • 20 followers", + "about": "", "experience": [], "education": [], "skills": [], @@ -52,8 +52,8 @@ "web_claims": [], "source_observations": [ { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/benita-jansma-47a30311_20251214T113142Z.json", - "observed_on": "2025-12-14T11:31:42.465344+00:00", + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/michele-huston-18982a1_20251214T104002Z.json", + "observed_on": "2025-12-14T10:40:02.589857+00:00", "extraction_agent": "claude-sonnet-4-20250514" } ], @@ -64,21 +64,21 @@ } }, "provenance": { - "created_at": "2026-01-09T17:29:48.708022+00:00", + "created_at": "2026-01-09T17:29:48.622815+00:00", "created_by": "generate_ppids.py", "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/benita-jansma-47a30311_20251214T113142Z.json" + "/Users/kempersc/apps/glam/data/custodian/person/entity/michele-huston-18982a1_20251214T104002Z.json" ], - "modified_at": "2026-01-09T17:43:05.314573+00:00", + "modified_at": "2026-01-09T19:51:12.729138+00:00", "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "benita-jansma-47a30311", + "linkedin_slug": "michele-huston-18982a1", "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", "confidence": "medium", "inference_provenance": { "method": "profile_location", @@ -87,26 +87,26 @@ "step": 1, "observation": "Profile location field found", "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands (NL)" + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" }, { "step": 2, "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands (NL)", + "query": "Canberra, Australian Capital Territory, Australia (AU)", "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 + "latitude": -35.28346, + "longitude": 149.12807 } }, { "step": 3, "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" + "result": "AU-01-CAN" } ], "assumptions": [ @@ -114,23 +114,23 @@ "Profile location represents current residence" ], "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 + "latitude": -35.28346, + "longitude": 149.12807 }, - "inferred_at": "2026-01-09T17:43:05.314566+00:00", + "inferred_at": "2026-01-09T19:51:12.729119+00:00", "inferred_by": "enrich_ppids.py" } }, "ppid_history": [ { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BENITA-JANSMA", - "new_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_BENITA-JANSMA", - "changed_at": "2026-01-09T17:43:05.314571+00:00", + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MICHELE-HUSTON", + "new_ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_MICHELE-HUSTON", + "changed_at": "2026-01-09T19:51:12.729136+00:00", "reason": "observation_based_inference", "inferred_fields": [ "inferred_current_settlement" diff --git a/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_PAM-GATENBY.json b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_PAM-GATENBY.json new file mode 100644 index 0000000000..a46ed796ac --- /dev/null +++ b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_PAM-GATENBY.json @@ -0,0 +1,145 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_PAM-GATENBY", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "AU-01-CAN", + "last_date": "XXXX", + "name_tokens": [ + "PAM", + "GATENBY" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Pam Gatenby", + "display_name": "Pam Gatenby", + "name_romanized": null, + "name_tokens": [ + "PAM", + "GATENBY" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Pam Gatenby", + "linkedin_url": "https://www.linkedin.com/in/pam-gatenby-67636b9", + "headline": "Assistant Director General, Collections Management at National Library of Australia", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "1 connections • 1 followers", + "about": "", + "experience": [], + "education": [], + "skills": [ + "director", + "collections", + "management", + "collections management" + ], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/pam-gatenby-67636b9_20251214T103838Z.json", + "observed_on": "2025-12-14T10:38:38.112911+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.660087+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/pam-gatenby-67636b9_20251214T103838Z.json" + ], + "modified_at": "2026-01-09T19:51:07.177553+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "pam-gatenby-67636b9", + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:51:07.177533+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PAM-GATENBY", + "new_ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_PAM-GATENBY", + "changed_at": "2026-01-09T19:51:07.177550+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_PE-ZAR.json b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_PE-ZAR.json new file mode 100644 index 0000000000..a763a5b3b5 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_PE-ZAR.json @@ -0,0 +1,149 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_PE-ZAR", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "AU-01-CAN", + "last_date": "XXXX", + "name_tokens": [ + "PE", + "ZAR" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Pe Thein Zar", + "display_name": "Pe Thein Zar", + "name_romanized": null, + "name_tokens": [ + "PE", + "ZAR" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Pe Thein Zar", + "linkedin_url": "https://www.linkedin.com/in/pe-thein-zar-54b79557", + "headline": "Librarian Burmese Section at National Library Australia", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "36 connections • 36 followers", + "about": "", + "experience": [ + { + "title": "Librarian Burmese Section", + "company": "National Library Australia (Current)" + }, + { + "title": "Librarian Burmese Section", + "company": "National Library Australia (Current)" + } + ], + "education": [], + "skills": [], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/pe-thein-zar-54b79557_20251214T104008Z.json", + "observed_on": "2025-12-14T10:40:08.170860+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.517998+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/pe-thein-zar-54b79557_20251214T104008Z.json" + ], + "modified_at": "2026-01-09T19:50:53.909037+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "pe-thein-zar-54b79557", + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:53.909023+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PE-ZAR", + "new_ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_PE-ZAR", + "changed_at": "2026-01-09T19:50:53.909035+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_QUENTIN-SLADE.json b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_QUENTIN-SLADE.json new file mode 100644 index 0000000000..2c4f84e8f9 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_QUENTIN-SLADE.json @@ -0,0 +1,145 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_QUENTIN-SLADE", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "AU-01-CAN", + "last_date": "XXXX", + "name_tokens": [ + "QUENTIN", + "SLADE" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Quentin Slade", + "display_name": "Quentin Slade", + "name_romanized": null, + "name_tokens": [ + "QUENTIN", + "SLADE" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Quentin Slade", + "linkedin_url": "https://www.linkedin.com/in/quentin-slade-bb547153", + "headline": "public service at National Library of Australia", + "location": "Canberra, Australian Capital Territory, Australia (AU)", + "connections": "26 connections • 29 followers", + "about": "", + "experience": [ + { + "title": "Public Service", + "company": "National Library of Australia" + } + ], + "education": [], + "skills": [], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/quentin-slade-bb547153_20251214T103842Z.json", + "observed_on": "2025-12-14T10:38:42.961044+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.628940+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/quentin-slade-bb547153_20251214T103842Z.json" + ], + "modified_at": "2026-01-09T19:50:57.743835+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "quentin-slade-bb547153", + "inferred_current_settlement": { + "value": "Canberra", + "formatted": "AU-01-CAN", + "country_code": "AU", + "region_code": "01", + "settlement_code": "CAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Canberra, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Canberra, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-01-CAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2172517, + "geonames_name": "Canberra", + "admin1_code": "01", + "admin1_name": "Australian Capital Territory", + "feature_code": "PPLC", + "latitude": -35.28346, + "longitude": 149.12807 + }, + "inferred_at": "2026-01-09T19:50:57.743812+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_QUENTIN-SLADE", + "new_ppid": "ID_XX-XX-XXX_XXXX_AU-01-CAN_XXXX_QUENTIN-SLADE", + "changed_at": "2026-01-09T19:50:57.743833+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_AU-04-RR_XXXX_BRENTON-CLIFFORD.json b/data/person/ID_XX-XX-XXX_XXXX_AU-04-RR_XXXX_BRENTON-CLIFFORD.json new file mode 100644 index 0000000000..38e52fa430 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_XXXX_AU-04-RR_XXXX_BRENTON-CLIFFORD.json @@ -0,0 +1,143 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_AU-04-RR_XXXX_BRENTON-CLIFFORD", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "AU-04-RR", + "last_date": "XXXX", + "name_tokens": [ + "BRENTON", + "CLIFFORD" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Brenton Clifford", + "display_name": "Brenton Clifford", + "name_romanized": null, + "name_tokens": [ + "BRENTON", + "CLIFFORD" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as heritage staff at National Library of Australia" + }, + "affiliations": [], + "profile_data": { + "name": "Brenton Clifford", + "linkedin_url": "https://www.linkedin.com/in/brenton-clifford-80b018b6", + "headline": "Digitisation Officer at The Australian National University", + "location": "Reid, Australian Capital Territory, Australia (AU)", + "connections": "", + "about": "Completed a Master of Information Studies (Records and Archives Management). Interned at the Noel Butlin Archives Centre at the Australian National University in October 2017, where I have been working since. In the meantime, a skilled researcher, writer, and administrator. Enjoy working in small teams, tight deadlines, and senses of achievement.", + "experience": [], + "education": [], + "skills": [ + "archives", + "management" + ], + "languages": [], + "profile_image_url": "" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/brenton-clifford-80b018b6_20251214T104005Z.json", + "observed_on": "2025-12-14T10:40:05.415010+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.558622+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/brenton-clifford-80b018b6_20251214T104005Z.json" + ], + "modified_at": "2026-01-09T19:51:10.877151+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "brenton-clifford-80b018b6", + "inferred_current_settlement": { + "value": "Reid River", + "formatted": "AU-04-RR", + "country_code": "AU", + "region_code": "04", + "settlement_code": "RR", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Reid, Australian Capital Territory, Australia (AU)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Reid, Australian Capital Territory, Australia (AU)", + "result": { + "geonames_id": 2151767, + "geonames_name": "Reid River", + "admin1_code": "04", + "admin1_name": "Queensland", + "feature_code": "PPL", + "latitude": -19.76667, + "longitude": 146.83333 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "AU-04-RR" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 2151767, + "geonames_name": "Reid River", + "admin1_code": "04", + "admin1_name": "Queensland", + "feature_code": "PPL", + "latitude": -19.76667, + "longitude": 146.83333 + }, + "inferred_at": "2026-01-09T19:51:10.877141+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BRENTON-CLIFFORD", + "new_ppid": "ID_XX-XX-XXX_XXXX_AU-04-RR_XXXX_BRENTON-CLIFFORD", + "changed_at": "2026-01-09T19:51:10.877149+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANDREA-MILLS.json b/data/person/ID_XX-XX-XXX_XXXX_CA-08-TOR_XXXX_ANDREA-MILLS.json similarity index 69% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANDREA-MILLS.json rename to data/person/ID_XX-XX-XXX_XXXX_CA-08-TOR_XXXX_ANDREA-MILLS.json index f9cc4b99b7..555e8bd160 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANDREA-MILLS.json +++ b/data/person/ID_XX-XX-XXX_XXXX_CA-08-TOR_XXXX_ANDREA-MILLS.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANDREA-MILLS", + "ppid": "ID_XX-XX-XXX_XXXX_CA-08-TOR_XXXX_ANDREA-MILLS", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "CA-08-TOR", "last_date": "XXXX", "name_tokens": [ "ANDREA", "MILLS" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Andrea Mills", @@ -142,7 +143,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/millsandrea_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:28.194739+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "millsandrea" + "linkedin_slug": "millsandrea", + "inferred_current_settlement": { + "value": "Toronto", + "formatted": "CA-08-TOR", + "country_code": "CA", + "region_code": "08", + "settlement_code": "TOR", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Toronto, Ontario, Canada" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Toronto, Ontario, Canada", + "result": { + "geonames_id": 6167865, + "geonames_name": "Toronto", + "admin1_code": "08", + "admin1_name": "Ontario", + "feature_code": "PPLA", + "latitude": 43.70643, + "longitude": -79.39864 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "CA-08-TOR" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 6167865, + "geonames_name": "Toronto", + "admin1_code": "08", + "admin1_name": "Ontario", + "feature_code": "PPLA", + "latitude": 43.70643, + "longitude": -79.39864 + }, + "inferred_at": "2026-01-09T19:51:28.194723+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANDREA-MILLS", + "new_ppid": "ID_XX-XX-XXX_XXXX_CA-08-TOR_XXXX_ANDREA-MILLS", + "changed_at": "2026-01-09T19:51:28.194737+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANGELA-DUGAS.json b/data/person/ID_XX-XX-XXX_XXXX_CA-08-TOR_XXXX_ANGELA-DUGAS.json similarity index 60% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANGELA-DUGAS.json rename to data/person/ID_XX-XX-XXX_XXXX_CA-08-TOR_XXXX_ANGELA-DUGAS.json index 62ad60375c..1fa4f82248 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANGELA-DUGAS.json +++ b/data/person/ID_XX-XX-XXX_XXXX_CA-08-TOR_XXXX_ANGELA-DUGAS.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANGELA-DUGAS", + "ppid": "ID_XX-XX-XXX_XXXX_CA-08-TOR_XXXX_ANGELA-DUGAS", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "CA-08-TOR", "last_date": "XXXX", "name_tokens": [ "ANGELA", "DUGAS" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Angela Dugas", @@ -95,7 +96,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/angela-dugas-a332b4127_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:11.259943+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "angela-dugas-a332b4127" + "linkedin_slug": "angela-dugas-a332b4127", + "inferred_current_settlement": { + "value": "Toronto", + "formatted": "CA-08-TOR", + "country_code": "CA", + "region_code": "08", + "settlement_code": "TOR", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Toronto, Ontario, Canada" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Toronto, Ontario, Canada", + "result": { + "geonames_id": 6167865, + "geonames_name": "Toronto", + "admin1_code": "08", + "admin1_name": "Ontario", + "feature_code": "PPLA", + "latitude": 43.70643, + "longitude": -79.39864 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "CA-08-TOR" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 6167865, + "geonames_name": "Toronto", + "admin1_code": "08", + "admin1_name": "Ontario", + "feature_code": "PPLA", + "latitude": 43.70643, + "longitude": -79.39864 + }, + "inferred_at": "2026-01-09T19:51:11.259929+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANGELA-DUGAS", + "new_ppid": "ID_XX-XX-XXX_XXXX_CA-08-TOR_XXXX_ANGELA-DUGAS", + "changed_at": "2026-01-09T19:51:11.259941+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_MARTIN-BERGSMA.json b/data/person/ID_XX-XX-XXX_XXXX_GB-EN-OSM_XXXX_RACHEL-PISTOL.json similarity index 52% rename from data/person/ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_MARTIN-BERGSMA.json rename to data/person/ID_XX-XX-XXX_XXXX_GB-EN-OSM_XXXX_RACHEL-PISTOL.json index 0ee5b52fa2..c29ccdb9a2 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_MARTIN-BERGSMA.json +++ b/data/person/ID_XX-XX-XXX_XXXX_GB-EN-OSM_XXXX_RACHEL-PISTOL.json @@ -1,25 +1,25 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_MARTIN-BERGSMA", + "ppid": "ID_XX-XX-XXX_XXXX_GB-EN-OSM_XXXX_RACHEL-PISTOL", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "NL-GE-NIJ", + "last_location": "GB-EN-OSM", "last_date": "XXXX", "name_tokens": [ - "MARTIN", - "BERGSMA" + "RACHEL", + "PISTOL" ], "last_location_source": "inferred_current_settlement" }, "name": { - "full_name": "Martin Bergsma", - "display_name": "Martin Bergsma", + "full_name": "Rachel Pistol", + "display_name": "Rachel Pistol", "name_romanized": null, "name_tokens": [ - "MARTIN", - "BERGSMA" + "RACHEL", + "PISTOL" ], "source": "linkedin_profile" }, @@ -31,18 +31,18 @@ "heritage_relevance": { "is_heritage_relevant": true, "heritage_types": [ - "E" + "R" ], - "rationale": "Identified as heritage staff at CODA-Apeldoorn" + "rationale": "Identified as heritage staff at EHRI European Holocaust Research Infrastructure" }, "affiliations": [], "profile_data": { - "name": "Martin Bergsma", - "linkedin_url": "https://www.linkedin.com/in/martinbergsma", - "headline": "Vakspecialist Educatie en Verhalenverteller", - "location": "Nijmegen, Gelderland, Netherlands (NL)", - "connections": "369 connections • 380 followers", - "about": "Total Experience: 3 years and 1 month", + "name": "Rachel Pistol", + "linkedin_url": "https://www.linkedin.com/in/rachel-pistol-b40253243", + "headline": "", + "location": "Ottery St Mary, England, United Kingdom (GB)", + "connections": "500 connections • 708 followers", + "about": "", "experience": [], "education": [], "skills": [], @@ -52,8 +52,8 @@ "web_claims": [], "source_observations": [ { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/martinbergsma_20251214T103403Z.json", - "observed_on": "2025-12-14T10:34:03.890064+00:00", + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/rachel-pistol-b40253243_20251214T113122Z.json", + "observed_on": "2025-12-14T11:31:22.654508+00:00", "extraction_agent": "claude-sonnet-4-20250514" } ], @@ -64,21 +64,21 @@ } }, "provenance": { - "created_at": "2026-01-09T17:29:48.676822+00:00", + "created_at": "2026-01-09T17:29:48.713308+00:00", "created_by": "generate_ppids.py", "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/martinbergsma_20251214T103403Z.json" + "/Users/kempersc/apps/glam/data/custodian/person/entity/rachel-pistol-b40253243_20251214T113122Z.json" ], - "modified_at": "2026-01-09T17:42:57.266229+00:00", + "modified_at": "2026-01-09T19:50:54.087313+00:00", "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "martinbergsma", + "linkedin_slug": "rachel-pistol-b40253243", "inferred_current_settlement": { - "value": "Nijmegen", - "formatted": "NL-GE-NIJ", - "country_code": "NL", - "region_code": "GE", - "settlement_code": "NIJ", + "value": "Ottery St Mary", + "formatted": "GB-EN-OSM", + "country_code": "GB", + "region_code": "EN", + "settlement_code": "OSM", "confidence": "medium", "inference_provenance": { "method": "profile_location", @@ -87,26 +87,26 @@ "step": 1, "observation": "Profile location field found", "source_field": "profile_data.location", - "source_value": "Nijmegen, Gelderland, Netherlands (NL)" + "source_value": "Ottery St Mary, England, United Kingdom (GB)" }, { "step": 2, "geocoding": "GeoNames resolution", - "query": "Nijmegen, Gelderland, Netherlands (NL)", + "query": "Ottery St Mary, England, United Kingdom (GB)", "result": { - "geonames_id": 2750053, - "geonames_name": "Nijmegen", - "admin1_code": "03", - "admin1_name": "Gelderland", + "geonames_id": 2640834, + "geonames_name": "Ottery St Mary", + "admin1_code": "ENG", + "admin1_name": "England", "feature_code": "PPL", - "latitude": 51.8425, - "longitude": 5.85278 + "latitude": 50.75, + "longitude": -3.26667 } }, { "step": 3, "formatting": "CC-RR-PPP generation", - "result": "NL-GE-NIJ" + "result": "GB-EN-OSM" } ], "assumptions": [ @@ -114,23 +114,23 @@ "Profile location represents current residence" ], "geonames_data": { - "geonames_id": 2750053, - "geonames_name": "Nijmegen", - "admin1_code": "03", - "admin1_name": "Gelderland", + "geonames_id": 2640834, + "geonames_name": "Ottery St Mary", + "admin1_code": "ENG", + "admin1_name": "England", "feature_code": "PPL", - "latitude": 51.8425, - "longitude": 5.85278 + "latitude": 50.75, + "longitude": -3.26667 }, - "inferred_at": "2026-01-09T17:42:57.266224+00:00", + "inferred_at": "2026-01-09T19:50:54.087296+00:00", "inferred_by": "enrich_ppids.py" } }, "ppid_history": [ { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARTIN-BERGSMA", - "new_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-NIJ_XXXX_MARTIN-BERGSMA", - "changed_at": "2026-01-09T17:42:57.266227+00:00", + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RACHEL-PISTOL", + "new_ppid": "ID_XX-XX-XXX_XXXX_GB-EN-OSM_XXXX_RACHEL-PISTOL", + "changed_at": "2026-01-09T19:50:54.087310+00:00", "reason": "observation_based_inference", "inferred_fields": [ "inferred_current_settlement" diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ACHMAD-QORI.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ACHMAD-QORI.json similarity index 62% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ACHMAD-QORI.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ACHMAD-QORI.json index 541c9a8fae..0fdac3a75f 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ACHMAD-QORI.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ACHMAD-QORI.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ACHMAD-QORI", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ACHMAD-QORI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ACHMAD", "QORI" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Achmad Qori", @@ -95,7 +96,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/achmad-qori-64ab74206_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:50.263216+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "achmad-qori-64ab74206" + "linkedin_slug": "achmad-qori-64ab74206", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:50.263199+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ACHMAD-QORI", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ACHMAD-QORI", + "changed_at": "2026-01-09T19:50:50.263214+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADHIMAS-SUSILO.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ADHIMAS-SUSILO.json similarity index 61% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADHIMAS-SUSILO.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ADHIMAS-SUSILO.json index 1f46b10070..a1b6d0fea9 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADHIMAS-SUSILO.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ADHIMAS-SUSILO.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADHIMAS-SUSILO", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ADHIMAS-SUSILO", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ADHIMAS", "SUSILO" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Adhimas Ashshiddiq Susilo", @@ -94,7 +95,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/adhimas-ashshiddiq-susilo-a7909620a_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:22.787753+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "adhimas-ashshiddiq-susilo-a7909620a" + "linkedin_slug": "adhimas-ashshiddiq-susilo-a7909620a", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:22.787739+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADHIMAS-SUSILO", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ADHIMAS-SUSILO", + "changed_at": "2026-01-09T19:51:22.787751+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADITIAN-PRATAMA.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ADITIAN-PRATAMA.json similarity index 65% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADITIAN-PRATAMA.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ADITIAN-PRATAMA.json index 246273c17e..401c8a7adc 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADITIAN-PRATAMA.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ADITIAN-PRATAMA.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADITIAN-PRATAMA", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ADITIAN-PRATAMA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ADITIAN", "PRATAMA" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Aditian Fauzrin Nur Pratama", @@ -112,7 +113,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/aditianfnp46_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:53.992412+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "aditianfnp46" + "linkedin_slug": "aditianfnp46", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:53.992359+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADITIAN-PRATAMA", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ADITIAN-PRATAMA", + "changed_at": "2026-01-09T19:50:53.992407+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AHMAD-ZUFAR.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AHMAD-ZUFAR.json similarity index 62% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AHMAD-ZUFAR.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AHMAD-ZUFAR.json index 2470be4afb..dc89252b90 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AHMAD-ZUFAR.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AHMAD-ZUFAR.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AHMAD-ZUFAR", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AHMAD-ZUFAR", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "AHMAD", "ZUFAR" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Ahmad Zufar", @@ -93,7 +94,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ahmadzufar03_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:28.530572+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "ahmadzufar03" + "linkedin_slug": "ahmadzufar03", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:28.530548+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AHMAD-ZUFAR", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AHMAD-ZUFAR", + "changed_at": "2026-01-09T19:51:28.530567+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALI-FAJAR.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ALI-FAJAR.json similarity index 64% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALI-FAJAR.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ALI-FAJAR.json index 31033f185f..55ef44895c 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALI-FAJAR.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ALI-FAJAR.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALI-FAJAR", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ALI-FAJAR", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ALI", "FAJAR" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Ali Fajar", @@ -103,7 +104,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ali-fajar-1b216436_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:14.496566+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "ali-fajar-1b216436" + "linkedin_slug": "ali-fajar-1b216436", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:14.496545+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALI-FAJAR", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ALI-FAJAR", + "changed_at": "2026-01-09T19:51:14.496563+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMARA-PUTRI.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AMARA-PUTRI.json similarity index 61% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMARA-PUTRI.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AMARA-PUTRI.json index 2d769cfc2a..a62f9d2840 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMARA-PUTRI.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AMARA-PUTRI.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMARA-PUTRI", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AMARA-PUTRI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "AMARA", "PUTRI" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Amara Derlika Salwa Putri", @@ -94,7 +95,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amara-derlika-salwa-putri-b5a831118_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:49.061867+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "amara-derlika-salwa-putri-b5a831118" + "linkedin_slug": "amara-derlika-salwa-putri-b5a831118", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:49.061847+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMARA-PUTRI", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AMARA-PUTRI", + "changed_at": "2026-01-09T19:50:49.061863+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMBIYA-ADJI.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AMBIYA-ADJI.json similarity index 60% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMBIYA-ADJI.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AMBIYA-ADJI.json index 49c6d2d18e..1c65a17f23 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMBIYA-ADJI.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AMBIYA-ADJI.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMBIYA-ADJI", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AMBIYA-ADJI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "AMBIYA", "ADJI" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Ambiya Ikrami Adji", @@ -95,7 +96,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ambiya-ikrami-adji-0a6b269a_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:22.925414+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "ambiya-ikrami-adji-0a6b269a" + "linkedin_slug": "ambiya-ikrami-adji-0a6b269a", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:22.925400+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMBIYA-ADJI", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AMBIYA-ADJI", + "changed_at": "2026-01-09T19:51:22.925412+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANANTA-YOGA.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANANTA-YOGA.json similarity index 60% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANANTA-YOGA.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANANTA-YOGA.json index 76b9436748..31ebd46783 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANANTA-YOGA.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANANTA-YOGA.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANANTA-YOGA", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANANTA-YOGA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ANANTA", "YOGA" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Ananta Brima Yoga", @@ -94,7 +95,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anantabrima_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:29.788368+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "anantabrima" + "linkedin_slug": "anantabrima", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:29.788352+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANANTA-YOGA", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANANTA-YOGA", + "changed_at": "2026-01-09T19:51:29.788366+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANITA-JANNAH.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANITA-JANNAH.json similarity index 60% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANITA-JANNAH.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANITA-JANNAH.json index aed464bbea..fa5a559803 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANITA-JANNAH.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANITA-JANNAH.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANITA-JANNAH", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANITA-JANNAH", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ANITA", "JANNAH" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Anita Rizki Nur Jannah", @@ -94,7 +95,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anita-rizki-nur-jannah-717269129_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:20.835022+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "anita-rizki-nur-jannah-717269129" + "linkedin_slug": "anita-rizki-nur-jannah-717269129", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:20.834992+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANITA-JANNAH", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANITA-JANNAH", + "changed_at": "2026-01-09T19:51:20.835018+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNISA-HUSNA.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANNISA-HUSNA.json similarity index 63% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNISA-HUSNA.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANNISA-HUSNA.json index 422bd0b5f2..619f8638ac 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNISA-HUSNA.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANNISA-HUSNA.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNISA-HUSNA", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANNISA-HUSNA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ANNISA", "HUSNA" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Annisa Hidayatul Husna", @@ -102,7 +103,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/annisa-hidayatul-husna-91364231b_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:50.956019+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "annisa-hidayatul-husna-91364231b" + "linkedin_slug": "annisa-hidayatul-husna-91364231b", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:50.956000+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNISA-HUSNA", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANNISA-HUSNA", + "changed_at": "2026-01-09T19:50:50.956016+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANWAR-ASYRAF.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANWAR-ASYRAF.json similarity index 62% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANWAR-ASYRAF.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANWAR-ASYRAF.json index b11a9f01c2..6aa7d174dc 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANWAR-ASYRAF.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANWAR-ASYRAF.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANWAR-ASYRAF", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANWAR-ASYRAF", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ANWAR", "ASYRAF" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Anwar Asyraf", @@ -96,7 +97,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anwar-asyraf19_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:15.117071+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "anwar-asyraf19" + "linkedin_slug": "anwar-asyraf19", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:15.117052+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANWAR-ASYRAF", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ANWAR-ASYRAF", + "changed_at": "2026-01-09T19:51:15.117069+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARI-SETIAWAN.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARI-SETIAWAN.json similarity index 60% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARI-SETIAWAN.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARI-SETIAWAN.json index 5fedeabe00..8216728c85 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARI-SETIAWAN.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARI-SETIAWAN.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARI-SETIAWAN", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARI-SETIAWAN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ARI", "SETIAWAN" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Ari Setiawan", @@ -95,7 +96,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/ari-setiawann_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:15.051827+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "ari-setiawann" + "linkedin_slug": "ari-setiawann", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:15.051808+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARI-SETIAWAN", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARI-SETIAWAN", + "changed_at": "2026-01-09T19:51:15.051825+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARIF-JANUAR.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARIF-JANUAR.json similarity index 60% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARIF-JANUAR.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARIF-JANUAR.json index 643aa9990d..7b297f6270 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARIF-JANUAR.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARIF-JANUAR.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARIF-JANUAR", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARIF-JANUAR", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ARIF", "JANUAR" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Arif Januar", @@ -101,7 +102,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arif-januar-847a51251_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:14.414884+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "arif-januar-847a51251" + "linkedin_slug": "arif-januar-847a51251", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:14.414866+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARIF-JANUAR", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARIF-JANUAR", + "changed_at": "2026-01-09T19:51:14.414881+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARINDITHA-PUTRI.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARINDITHA-PUTRI.json similarity index 68% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARINDITHA-PUTRI.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARINDITHA-PUTRI.json index 1c88c3792f..e1086edc3e 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARINDITHA-PUTRI.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARINDITHA-PUTRI.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARINDITHA-PUTRI", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARINDITHA-PUTRI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ARINDITHA", "PUTRI" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Arinditha Bayu Putri", @@ -120,7 +121,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arinditha-bayu-putri-229048195_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:06.314611+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "arinditha-bayu-putri-229048195" + "linkedin_slug": "arinditha-bayu-putri-229048195", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:06.314586+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARINDITHA-PUTRI", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARINDITHA-PUTRI", + "changed_at": "2026-01-09T19:51:06.314608+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARVIA-EARWANTAMA.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARVIA-EARWANTAMA.json similarity index 62% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARVIA-EARWANTAMA.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARVIA-EARWANTAMA.json index b716eb158a..62c0666ef6 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARVIA-EARWANTAMA.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARVIA-EARWANTAMA.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARVIA-EARWANTAMA", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARVIA-EARWANTAMA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "ARVIA", "EARWANTAMA" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Arvia Earwantama", @@ -94,7 +95,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/arvia-earwantama-0b652b1ba_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:00.019323+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "arvia-earwantama-0b652b1ba" + "linkedin_slug": "arvia-earwantama-0b652b1ba", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:00.019288+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARVIA-EARWANTAMA", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_ARVIA-EARWANTAMA", + "changed_at": "2026-01-09T19:51:00.019310+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AULIA-PRAMESTI.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AULIA-PRAMESTI.json similarity index 71% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AULIA-PRAMESTI.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AULIA-PRAMESTI.json index 32187ac170..2f46dc24ce 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AULIA-PRAMESTI.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AULIA-PRAMESTI.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AULIA-PRAMESTI", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AULIA-PRAMESTI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "AULIA", "PRAMESTI" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Aulia Asha Pramesti", @@ -132,7 +133,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/auliaasha_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:14.168223+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "auliaasha" + "linkedin_slug": "auliaasha", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:14.168140+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AULIA-PRAMESTI", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_AULIA-PRAMESTI", + "changed_at": "2026-01-09T19:51:14.168207+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAMBANG-UTOMO.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BAMBANG-UTOMO.json similarity index 58% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAMBANG-UTOMO.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BAMBANG-UTOMO.json index 3e54ebfc76..8422f10214 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAMBANG-UTOMO.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BAMBANG-UTOMO.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAMBANG-UTOMO", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BAMBANG-UTOMO", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "BAMBANG", "UTOMO" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Bambang Supriyo Utomo", @@ -94,7 +95,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bambang-supriyo-utomo-bsu-977a87138_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:53.645831+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "bambang-supriyo-utomo-bsu-977a87138" + "linkedin_slug": "bambang-supriyo-utomo-bsu-977a87138", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:53.645807+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAMBANG-UTOMO", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BAMBANG-UTOMO", + "changed_at": "2026-01-09T19:50:53.645828+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAYU-TANOYO.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BAYU-TANOYO.json similarity index 64% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAYU-TANOYO.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BAYU-TANOYO.json index 6b68a5df69..2cdc928bac 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAYU-TANOYO.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BAYU-TANOYO.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAYU-TANOYO", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BAYU-TANOYO", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "BAYU", "TANOYO" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Bayu Tanoyo", @@ -108,7 +109,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bayu-tanoyo-0a107b96_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:57.984809+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "bayu-tanoyo-0a107b96" + "linkedin_slug": "bayu-tanoyo-0a107b96", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:57.984738+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAYU-TANOYO", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BAYU-TANOYO", + "changed_at": "2026-01-09T19:50:57.984806+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BELLA-MALISSA.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BELLA-MALISSA.json similarity index 61% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BELLA-MALISSA.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BELLA-MALISSA.json index fbe8669d78..6bd423c947 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BELLA-MALISSA.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BELLA-MALISSA.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BELLA-MALISSA", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BELLA-MALISSA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "BELLA", "MALISSA" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Bella Herlyana Malissa", @@ -96,7 +97,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/bella-malissa-1998be_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:59.764079+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "bella-malissa-1998be" + "linkedin_slug": "bella-malissa-1998be", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:50:59.764055+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BELLA-MALISSA", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_BELLA-MALISSA", + "changed_at": "2026-01-09T19:50:59.764076+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_M-KLIJNHUISMAN.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_DADY-RACHMANANTA.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_M-KLIJNHUISMAN.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_DADY-RACHMANANTA.json index 8e49c72f69..a489e9a3f6 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_M-KLIJNHUISMAN.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_DADY-RACHMANANTA.json @@ -1,25 +1,25 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_M-KLIJNHUISMAN", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_DADY-RACHMANANTA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "NL-NH-AMS", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ - "M", - "KLIJNHUISMAN" + "DADY", + "RACHMANANTA" ], "last_location_source": "inferred_current_settlement" }, "name": { - "full_name": "M. Klijn-Huisman", - "display_name": "M. Klijn-Huisman", + "full_name": "Dady Rachmananta", + "display_name": "Dady Rachmananta", "name_romanized": null, "name_tokens": [ - "M", - "KLIJNHUISMAN" + "DADY", + "RACHMANANTA" ], "source": "linkedin_profile" }, @@ -31,22 +31,22 @@ "heritage_relevance": { "is_heritage_relevant": true, "heritage_types": [ - "A" + "L" ], - "rationale": "Identified as heritage staff at Regionaal Archief Alkmaar" + "rationale": "Identified as heritage staff at National Library of Australia" }, "affiliations": [], "profile_data": { - "name": "M. Klijn-Huisman", - "linkedin_url": "https://www.linkedin.com/in/m-klijn-huisman-b796394a", - "headline": "management assistent bij Reg. Archief Alkmaar", - "location": "Amsterdam, North Holland, Netherlands (NL)", - "connections": "28 connections • 28 followers", - "about": "Total Experience: 22 years and 10 months", + "name": "Dady Rachmananta", + "linkedin_url": "https://www.linkedin.com/in/dady-rachmananta-10a9bb3", + "headline": "Director at National Library of Indonesia", + "location": "Jakarta, Jakarta, Indonesia (ID)", + "connections": "2 connections • 4 followers", + "about": "", "experience": [], "education": [], "skills": [ - "management" + "director" ], "languages": [], "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" @@ -54,8 +54,8 @@ "web_claims": [], "source_observations": [ { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/m-klijn-huisman-b796394a_20251214T113152Z.json", - "observed_on": "2025-12-14T11:31:52.507716+00:00", + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/dady-rachmananta-10a9bb3_20251214T103812Z.json", + "observed_on": "2025-12-14T10:38:12.157718+00:00", "extraction_agent": "claude-sonnet-4-20250514" } ], @@ -66,21 +66,21 @@ } }, "provenance": { - "created_at": "2026-01-09T17:29:48.622646+00:00", + "created_at": "2026-01-09T17:29:48.671799+00:00", "created_by": "generate_ppids.py", "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/m-klijn-huisman-b796394a_20251214T113152Z.json" + "/Users/kempersc/apps/glam/data/custodian/person/entity/dady-rachmananta-10a9bb3_20251214T103812Z.json" ], - "modified_at": "2026-01-09T17:42:55.355185+00:00", + "modified_at": "2026-01-09T19:51:21.404167+00:00", "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "m-klijn-huisman-b796394a", + "linkedin_slug": "dady-rachmananta-10a9bb3", "inferred_current_settlement": { - "value": "Amsterdam", - "formatted": "NL-NH-AMS", - "country_code": "NL", - "region_code": "NH", - "settlement_code": "AMS", + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", "confidence": "medium", "inference_provenance": { "method": "profile_location", @@ -89,26 +89,26 @@ "step": 1, "observation": "Profile location field found", "source_field": "profile_data.location", - "source_value": "Amsterdam, North Holland, Netherlands (NL)" + "source_value": "Jakarta, Jakarta, Indonesia (ID)" }, { "step": 2, "geocoding": "GeoNames resolution", - "query": "Amsterdam, North Holland, Netherlands (NL)", + "query": "Jakarta, Jakarta, Indonesia (ID)", "result": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 + "latitude": -6.21462, + "longitude": 106.84513 } }, { "step": 3, "formatting": "CC-RR-PPP generation", - "result": "NL-NH-AMS" + "result": "ID-04-JAK" } ], "assumptions": [ @@ -116,23 +116,23 @@ "Profile location represents current residence" ], "geonames_data": { - "geonames_id": 2759794, - "geonames_name": "Amsterdam", - "admin1_code": "07", - "admin1_name": "North Holland", + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", "feature_code": "PPLC", - "latitude": 52.37403, - "longitude": 4.88969 + "latitude": -6.21462, + "longitude": 106.84513 }, - "inferred_at": "2026-01-09T17:42:55.355180+00:00", + "inferred_at": "2026-01-09T19:51:21.404150+00:00", "inferred_by": "enrich_ppids.py" } }, "ppid_history": [ { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_M-KLIJNHUISMAN", - "new_ppid": "ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_M-KLIJNHUISMAN", - "changed_at": "2026-01-09T17:42:55.355184+00:00", + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DADY-RACHMANANTA", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_DADY-RACHMANANTA", + "changed_at": "2026-01-09T19:51:21.404164+00:00", "reason": "observation_based_inference", "inferred_fields": [ "inferred_current_settlement" diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HAKIM-HAKIM.json b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_HAKIM-HAKIM.json similarity index 52% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HAKIM-HAKIM.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_HAKIM-HAKIM.json index be4d3d999d..d9fd439fb2 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HAKIM-HAKIM.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_HAKIM-HAKIM.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HAKIM-HAKIM", + "ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_HAKIM-HAKIM", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "ID-04-JAK", "last_date": "XXXX", "name_tokens": [ "HAKIM", "HAKIM" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "𝗛𝗮𝗸𝗶𝗺 (𝘐𝘮𝘢𝘮 𝘕𝘶𝘳 𝘏𝘢𝘬𝘪𝘮)", @@ -77,7 +78,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/imamnurhakim_20251214T112033Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:31.790339+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "imamnurhakim" + "linkedin_slug": "imamnurhakim", + "inferred_current_settlement": { + "value": "Jakarta", + "formatted": "ID-04-JAK", + "country_code": "ID", + "region_code": "04", + "settlement_code": "JAK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Jakarta, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Jakarta, Indonesia (ID)", + "result": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-04-JAK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1642911, + "geonames_name": "Jakarta", + "admin1_code": "04", + "admin1_name": "Jakarta", + "feature_code": "PPLC", + "latitude": -6.21462, + "longitude": 106.84513 + }, + "inferred_at": "2026-01-09T19:51:31.790287+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HAKIM-HAKIM", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-04-JAK_XXXX_HAKIM-HAKIM", + "changed_at": "2026-01-09T19:51:31.790336+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_ID-30-BAN_XXXX_TSAMARA-NUGRAHA.json b/data/person/ID_XX-XX-XXX_XXXX_ID-30-BAN_XXXX_TSAMARA-NUGRAHA.json new file mode 100644 index 0000000000..2f82beb658 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-30-BAN_XXXX_TSAMARA-NUGRAHA.json @@ -0,0 +1,140 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_ID-30-BAN_XXXX_TSAMARA-NUGRAHA", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "ID-30-BAN", + "last_date": "XXXX", + "name_tokens": [ + "TSAMARA", + "NUGRAHA" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Tsamara Hasanah Nugraha", + "display_name": "Tsamara Hasanah Nugraha", + "name_romanized": null, + "name_tokens": [ + "TSAMARA", + "NUGRAHA" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "E" + ], + "rationale": "Identified as heritage staff at Ministry of Tourism of the Republic of Indonesia" + }, + "affiliations": [], + "profile_data": { + "name": "Tsamara Hasanah Nugraha", + "linkedin_url": "https://www.linkedin.com/in/tsamarahasanah", + "headline": "Student at School of Business Management, Institut Teknologi Bandung", + "location": "Bandung, West Java, Indonesia (ID)", + "connections": "35 connections • 35 followers", + "about": "", + "experience": [], + "education": [], + "skills": [], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/tsamarahasanah_20251214T112028Z.json", + "observed_on": "2025-12-14T11:20:28.390824+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.537529+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/tsamarahasanah_20251214T112028Z.json" + ], + "modified_at": "2026-01-09T19:51:34.511482+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "tsamarahasanah", + "inferred_current_settlement": { + "value": "Bandung", + "formatted": "ID-30-BAN", + "country_code": "ID", + "region_code": "30", + "settlement_code": "BAN", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Bandung, West Java, Indonesia (ID)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Bandung, West Java, Indonesia (ID)", + "result": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "ID-30-BAN" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 1650357, + "geonames_name": "Bandung", + "admin1_code": "30", + "admin1_name": "West Java", + "feature_code": "PPLA", + "latitude": -6.92222, + "longitude": 107.60694 + }, + "inferred_at": "2026-01-09T19:51:34.511455+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TSAMARA-NUGRAHA", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-30-BAN_XXXX_TSAMARA-NUGRAHA", + "changed_at": "2026-01-09T19:51:34.511479+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-WAG_XXXX_NANNE-GROOT.json b/data/person/ID_XX-XX-XXX_XXXX_ID-33-BAN_XXXX_DEDDY-KRISTIAN.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_NL-GE-WAG_XXXX_NANNE-GROOT.json rename to data/person/ID_XX-XX-XXX_XXXX_ID-33-BAN_XXXX_DEDDY-KRISTIAN.json index d186a4c12f..92bbb60628 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-GE-WAG_XXXX_NANNE-GROOT.json +++ b/data/person/ID_XX-XX-XXX_XXXX_ID-33-BAN_XXXX_DEDDY-KRISTIAN.json @@ -1,25 +1,25 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-GE-WAG_XXXX_NANNE-GROOT", + "ppid": "ID_XX-XX-XXX_XXXX_ID-33-BAN_XXXX_DEDDY-KRISTIAN", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "NL-GE-WAG", + "last_location": "ID-33-BAN", "last_date": "XXXX", "name_tokens": [ - "NANNE", - "GROOT" + "DEDDY", + "KRISTIAN" ], "last_location_source": "inferred_current_settlement" }, "name": { - "full_name": "Nanne Groot", - "display_name": "Nanne Groot", + "full_name": "Deddy Kristian", + "display_name": "Deddy Kristian", "name_romanized": null, "name_tokens": [ - "NANNE", - "GROOT" + "DEDDY", + "KRISTIAN" ], "source": "linkedin_profile" }, @@ -31,22 +31,22 @@ "heritage_relevance": { "is_heritage_relevant": true, "heritage_types": [ - "R" + "O" ], - "rationale": "Identified as heritage staff at ISRIC - World Soil Information" + "rationale": "Identified as heritage staff at Ministry of Tourism of the Republic of Indonesia" }, "affiliations": [], "profile_data": { - "name": "Nanne Groot", - "linkedin_url": "https://www.linkedin.com/in/nanne-groot-a017731a", - "headline": "Senior Projectmanager Building & Development at Wageningen University and Research Centre", - "location": "Wageningen, Gelderland, Netherlands (NL)", - "connections": "27 connections • 29 followers", - "about": "Total Experience: 17 years and 10 months", + "name": "Deddy Kristian", + "linkedin_url": "https://www.linkedin.com/in/deddy-kristian-24606aab", + "headline": "Civil Servent at Ministry of Tourism of Republic of Indonesia", + "location": "Banten, Indonesia (ID)", + "connections": "34 connections • 34 followers", + "about": "", "experience": [], "education": [], "skills": [ - "renovation" + "civil" ], "languages": [], "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" @@ -54,8 +54,8 @@ "web_claims": [], "source_observations": [ { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/nanne-groot-a017731a_20251214T104210Z.json", - "observed_on": "2025-12-14T10:42:10.768868+00:00", + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/deddy-kristian-24606aab_20251214T112011Z.json", + "observed_on": "2025-12-14T11:20:11.448939+00:00", "extraction_agent": "claude-sonnet-4-20250514" } ], @@ -66,21 +66,21 @@ } }, "provenance": { - "created_at": "2026-01-09T17:29:48.541149+00:00", + "created_at": "2026-01-09T17:29:48.666098+00:00", "created_by": "generate_ppids.py", "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/nanne-groot-a017731a_20251214T104210Z.json" + "/Users/kempersc/apps/glam/data/custodian/person/entity/deddy-kristian-24606aab_20251214T112011Z.json" ], - "modified_at": "2026-01-09T17:43:06.731067+00:00", + "modified_at": "2026-01-09T19:51:14.772187+00:00", "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "nanne-groot-a017731a", + "linkedin_slug": "deddy-kristian-24606aab", "inferred_current_settlement": { - "value": "Wageningen", - "formatted": "NL-GE-WAG", - "country_code": "NL", - "region_code": "GE", - "settlement_code": "WAG", + "value": "Banten", + "formatted": "ID-33-BAN", + "country_code": "ID", + "region_code": "33", + "settlement_code": "BAN", "confidence": "medium", "inference_provenance": { "method": "profile_location", @@ -89,26 +89,26 @@ "step": 1, "observation": "Profile location field found", "source_field": "profile_data.location", - "source_value": "Wageningen, Gelderland, Netherlands (NL)" + "source_value": "Banten, Indonesia (ID)" }, { "step": 2, "geocoding": "GeoNames resolution", - "query": "Wageningen, Gelderland, Netherlands (NL)", + "query": "Banten, Indonesia (ID)", "result": { - "geonames_id": 2745088, - "geonames_name": "Wageningen", - "admin1_code": "03", - "admin1_name": "Gelderland", + "geonames_id": 1650134, + "geonames_name": "Banten", + "admin1_code": "33", + "admin1_name": "Banten", "feature_code": "PPL", - "latitude": 51.97, - "longitude": 5.66667 + "latitude": -6.0307, + "longitude": 106.164 } }, { "step": 3, "formatting": "CC-RR-PPP generation", - "result": "NL-GE-WAG" + "result": "ID-33-BAN" } ], "assumptions": [ @@ -116,23 +116,23 @@ "Profile location represents current residence" ], "geonames_data": { - "geonames_id": 2745088, - "geonames_name": "Wageningen", - "admin1_code": "03", - "admin1_name": "Gelderland", + "geonames_id": 1650134, + "geonames_name": "Banten", + "admin1_code": "33", + "admin1_name": "Banten", "feature_code": "PPL", - "latitude": 51.97, - "longitude": 5.66667 + "latitude": -6.0307, + "longitude": 106.164 }, - "inferred_at": "2026-01-09T17:43:06.731060+00:00", + "inferred_at": "2026-01-09T19:51:14.772165+00:00", "inferred_by": "enrich_ppids.py" } }, "ppid_history": [ { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANNE-GROOT", - "new_ppid": "ID_XX-XX-XXX_XXXX_NL-GE-WAG_XXXX_NANNE-GROOT", - "changed_at": "2026-01-09T17:43:06.731065+00:00", + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DEDDY-KRISTIAN", + "new_ppid": "ID_XX-XX-XXX_XXXX_ID-33-BAN_XXXX_DEDDY-KRISTIAN", + "changed_at": "2026-01-09T19:51:14.772184+00:00", "reason": "observation_based_inference", "inferred_fields": [ "inferred_current_settlement" diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_LEONORE-SLOTEN.json b/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_LEONORE-SLOTEN.json index 5832441837..6912bff4d3 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_LEONORE-SLOTEN.json +++ b/data/person/ID_XX-XX-XXX_XXXX_NL-NH-AMS_XXXX_LEONORE-SLOTEN.json @@ -59,8 +59,14 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T01:30:00Z", + "search_queries": [ + "\"Leonore van Sloten\" curator Rembrandthuis born birthday biography", + "\"Leonore van Sloten\" curator Rembrandthuis \"(1980)\" OR \"(1979)\" OR \"(1978)\" OR \"(1981)\" OR \"(1982)\"" + ], + "result": "not_found", + "notes": "Web search conducted via Exa; found academic publications (Kroniek van het Rembrandthuis) but no birth date" } }, "provenance": { diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-SOE_XXXX_ALFRED-STAARMAN.json b/data/person/ID_XX-XX-XXX_XXXX_NL-UT-SOE_XXXX_ALFRED-STAARMAN.json index 9522a808a7..601a17b78c 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-UT-SOE_XXXX_ALFRED-STAARMAN.json +++ b/data/person/ID_XX-XX-XXX_XXXX_NL-UT-SOE_XXXX_ALFRED-STAARMAN.json @@ -89,8 +89,14 @@ ], "enrichment_metadata": { "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" + "attempted": true, + "searched_on": "2025-01-10T01:00:00Z", + "search_queries": [ + "\"Alfred Staarman\" curator \"Nationaal Militair Museum\" born birthday biography", + "\"Alfred Staarman\" militair historicus geboren" + ], + "result": "not_found", + "notes": "Web search conducted via Exa; found mentions in museum records and military history publications but no birth date" } }, "provenance": { diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_EMMEKE-HULSHOF.json b/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_EMMEKE-HULSHOF.json deleted file mode 100644 index 51d1d19f81..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_EMMEKE-HULSHOF.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_EMMEKE-HULSHOF", - "ppid_type": "ID", - "ppid_components": { - "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", - "last_location": "NL-ZH-TH", - "last_date": "XXXX", - "name_tokens": [ - "EMMEKE", - "HULSHOF" - ], - "last_location_source": "inferred_current_settlement" - }, - "name": { - "full_name": "Emmeke Hulshof", - "display_name": "Emmeke Hulshof", - "name_romanized": null, - "name_tokens": [ - "EMMEKE", - "HULSHOF" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at ASML" - }, - "affiliations": [], - "profile_data": { - "name": "Emmeke Hulshof", - "linkedin_url": "https://www.linkedin.com/in/emmekehulshof", - "headline": "", - "location": "The Hague, South Holland, Netherlands (NL)", - "connections": "500 connections • 2,000 followers", - "about": "Total Experience: 2 years and 9 months", - "experience": [], - "education": [], - "skills": [ - "government" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/emmekehulshof_20251214T110911Z.json", - "observed_on": "2025-12-14T11:09:11.689012+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.672481+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/emmekehulshof_20251214T110911Z.json" - ], - "modified_at": "2026-01-09T17:43:04.314071+00:00", - "modified_by": "enrich_ppids.py" - }, - "linkedin_slug": "emmekehulshof", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, South Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, South Holland, Netherlands (NL)", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:43:04.314064+00:00", - "inferred_by": "enrich_ppids.py" - } - }, - "ppid_history": [ - { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_EMMEKE-HULSHOF", - "new_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_EMMEKE-HULSHOF", - "changed_at": "2026-01-09T17:43:04.314069+00:00", - "reason": "observation_based_inference", - "inferred_fields": [ - "inferred_current_settlement" - ] - } - ] -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_INGRID-COLERIDGE.json b/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_INGRID-COLERIDGE.json deleted file mode 100644 index a0507c9a25..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_INGRID-COLERIDGE.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_INGRID-COLERIDGE", - "ppid_type": "ID", - "ppid_components": { - "type": "ID", - "first_location": "XX-XX-XXX", - "first_date": "XXXX", - "last_location": "NL-ZH-TH", - "last_date": "XXXX", - "name_tokens": [ - "INGRID", - "COLERIDGE" - ], - "last_location_source": "inferred_current_settlement" - }, - "name": { - "full_name": "Ingrid Coleridge", - "display_name": "Ingrid Coleridge", - "name_romanized": null, - "name_tokens": [ - "INGRID", - "COLERIDGE" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at Ministerie van Buitenlandse Zaken" - }, - "affiliations": [], - "profile_data": { - "name": "Ingrid Coleridge", - "linkedin_url": "https://www.linkedin.com/in/ingrid-coleridge-53a61240", - "headline": "Financial Advisor at Ministry of Foreign Affairs, Netherlands", - "location": "The Hague, South Holland, Netherlands (NL)", - "connections": "79 connections • 77 followers", - "about": "Total Experience: 16 years and 3 months", - "experience": [], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/ingrid-coleridge-53a61240_20251214T103155Z.json", - "observed_on": "2025-12-14T10:31:55.025599+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.531007+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/ingrid-coleridge-53a61240_20251214T103155Z.json" - ], - "modified_at": "2026-01-09T17:43:01.745437+00:00", - "modified_by": "enrich_ppids.py" - }, - "linkedin_slug": "ingrid-coleridge-53a61240", - "inferred_current_settlement": { - "value": "The Hague", - "formatted": "NL-ZH-TH", - "country_code": "NL", - "region_code": "ZH", - "settlement_code": "TH", - "confidence": "medium", - "inference_provenance": { - "method": "profile_location", - "inference_chain": [ - { - "step": 1, - "observation": "Profile location field found", - "source_field": "profile_data.location", - "source_value": "The Hague, South Holland, Netherlands (NL)" - }, - { - "step": 2, - "geocoding": "GeoNames resolution", - "query": "The Hague, South Holland, Netherlands (NL)", - "result": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - } - }, - { - "step": 3, - "formatting": "CC-RR-PPP generation", - "result": "NL-ZH-TH" - } - ], - "assumptions": [ - "Profile location is up-to-date", - "Profile location represents current residence" - ], - "geonames_data": { - "geonames_id": 2747373, - "geonames_name": "The Hague", - "admin1_code": "11", - "admin1_name": "South Holland", - "feature_code": "PPLG", - "latitude": 52.07667, - "longitude": 4.29861 - }, - "inferred_at": "2026-01-09T17:43:01.745431+00:00", - "inferred_by": "enrich_ppids.py" - } - }, - "ppid_history": [ - { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INGRID-COLERIDGE", - "new_ppid": "ID_XX-XX-XXX_XXXX_NL-ZH-TH_XXXX_INGRID-COLERIDGE", - "changed_at": "2026-01-09T17:43:01.745436+00:00", - "reason": "observation_based_inference", - "inferred_fields": [ - "inferred_current_settlement" - ] - } - ] -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_MALOU-HARMELEN.json b/data/person/ID_XX-XX-XXX_XXXX_NO-09-NOR_XXXX_KIRSTEN-RYDLAND.json similarity index 52% rename from data/person/ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_MALOU-HARMELEN.json rename to data/person/ID_XX-XX-XXX_XXXX_NO-09-NOR_XXXX_KIRSTEN-RYDLAND.json index 8e9a1b3ef3..def8091f86 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_MALOU-HARMELEN.json +++ b/data/person/ID_XX-XX-XXX_XXXX_NO-09-NOR_XXXX_KIRSTEN-RYDLAND.json @@ -1,25 +1,25 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_MALOU-HARMELEN", + "ppid": "ID_XX-XX-XXX_XXXX_NO-09-NOR_XXXX_KIRSTEN-RYDLAND", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "NL-NB-EIN", + "last_location": "NO-09-NOR", "last_date": "XXXX", "name_tokens": [ - "MALOU", - "HARMELEN" + "KIRSTEN", + "RYDLAND" ], "last_location_source": "inferred_current_settlement" }, "name": { - "full_name": "Malou van Harmelen", - "display_name": "Malou van Harmelen", + "full_name": "Kirsten Rydland", + "display_name": "Kirsten Rydland", "name_romanized": null, "name_tokens": [ - "MALOU", - "HARMELEN" + "KIRSTEN", + "RYDLAND" ], "source": "linkedin_profile" }, @@ -31,18 +31,18 @@ "heritage_relevance": { "is_heritage_relevant": true, "heritage_types": [ - "D" + "L" ], - "rationale": "Identified as heritage staff at ASML" + "rationale": "Identified as heritage staff at National Library of Australia" }, "affiliations": [], "profile_data": { - "name": "Malou van Harmelen", - "linkedin_url": "https://www.linkedin.com/in/maloumaris", - "headline": "Functional engineer at ASML", - "location": "Eindhoven, North Brabant, Netherlands (NL)", - "connections": "296 connections • 297 followers", - "about": "Total Experience: 6 years and 2 months", + "name": "Kirsten Rydland", + "linkedin_url": "https://www.linkedin.com/in/kirsten-rydland-a667512", + "headline": "", + "location": "Nordland, Norway (NO)", + "connections": "89 connections • 91 followers", + "about": "", "experience": [], "education": [], "skills": [], @@ -52,8 +52,8 @@ "web_claims": [], "source_observations": [ { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/maloumaris_20251214T110832Z.json", - "observed_on": "2025-12-14T11:08:32.858359+00:00", + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/kirsten-rydland-a667512_20251214T103907Z.json", + "observed_on": "2025-12-14T10:39:07.565174+00:00", "extraction_agent": "claude-sonnet-4-20250514" } ], @@ -64,21 +64,21 @@ } }, "provenance": { - "created_at": "2026-01-09T17:29:48.547713+00:00", + "created_at": "2026-01-09T17:29:48.530069+00:00", "created_by": "generate_ppids.py", "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/maloumaris_20251214T110832Z.json" + "/Users/kempersc/apps/glam/data/custodian/person/entity/kirsten-rydland-a667512_20251214T103907Z.json" ], - "modified_at": "2026-01-09T17:42:55.996768+00:00", + "modified_at": "2026-01-09T19:50:51.124952+00:00", "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "maloumaris", + "linkedin_slug": "kirsten-rydland-a667512", "inferred_current_settlement": { - "value": "Eindhoven", - "formatted": "NL-NB-EIN", - "country_code": "NL", - "region_code": "NB", - "settlement_code": "EIN", + "value": "Nordland", + "formatted": "NO-09-NOR", + "country_code": "NO", + "region_code": "09", + "settlement_code": "NOR", "confidence": "medium", "inference_provenance": { "method": "profile_location", @@ -87,26 +87,26 @@ "step": 1, "observation": "Profile location field found", "source_field": "profile_data.location", - "source_value": "Eindhoven, North Brabant, Netherlands (NL)" + "source_value": "Nordland, Norway (NO)" }, { "step": 2, "geocoding": "GeoNames resolution", - "query": "Eindhoven, North Brabant, Netherlands (NL)", + "query": "Nordland, Norway (NO)", "result": { - "geonames_id": 2756253, - "geonames_name": "Eindhoven", - "admin1_code": "06", - "admin1_name": "North Brabant", + "geonames_id": 3144303, + "geonames_name": "Nordland", + "admin1_code": "09", + "admin1_name": "Nordland", "feature_code": "PPL", - "latitude": 51.44083, - "longitude": 5.47778 + "latitude": 67.69334, + "longitude": 12.70322 } }, { "step": 3, "formatting": "CC-RR-PPP generation", - "result": "NL-NB-EIN" + "result": "NO-09-NOR" } ], "assumptions": [ @@ -114,23 +114,23 @@ "Profile location represents current residence" ], "geonames_data": { - "geonames_id": 2756253, - "geonames_name": "Eindhoven", - "admin1_code": "06", - "admin1_name": "North Brabant", + "geonames_id": 3144303, + "geonames_name": "Nordland", + "admin1_code": "09", + "admin1_name": "Nordland", "feature_code": "PPL", - "latitude": 51.44083, - "longitude": 5.47778 + "latitude": 67.69334, + "longitude": 12.70322 }, - "inferred_at": "2026-01-09T17:42:55.996763+00:00", + "inferred_at": "2026-01-09T19:50:51.124926+00:00", "inferred_by": "enrich_ppids.py" } }, "ppid_history": [ { - "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MALOU-HARMELEN", - "new_ppid": "ID_XX-XX-XXX_XXXX_NL-NB-EIN_XXXX_MALOU-HARMELEN", - "changed_at": "2026-01-09T17:42:55.996767+00:00", + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_KIRSTEN-RYDLAND", + "new_ppid": "ID_XX-XX-XXX_XXXX_NO-09-NOR_XXXX_KIRSTEN-RYDLAND", + "changed_at": "2026-01-09T19:50:51.124949+00:00", "reason": "observation_based_inference", "inferred_fields": [ "inferred_current_settlement" diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MEHMET-YIRTAR.json b/data/person/ID_XX-XX-XXX_XXXX_TR-68-ANK_XXXX_MEHMET-YIRTAR.json similarity index 51% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MEHMET-YIRTAR.json rename to data/person/ID_XX-XX-XXX_XXXX_TR-68-ANK_XXXX_MEHMET-YIRTAR.json index e7a046be41..1bc2690cf8 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MEHMET-YIRTAR.json +++ b/data/person/ID_XX-XX-XXX_XXXX_TR-68-ANK_XXXX_MEHMET-YIRTAR.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MEHMET-YIRTAR", + "ppid": "ID_XX-XX-XXX_XXXX_TR-68-ANK_XXXX_MEHMET-YIRTAR", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "TR-68-ANK", "last_date": "XXXX", "name_tokens": [ "MEHMET", "YIRTAR" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Mehmet Zeki Yırtar", @@ -90,7 +91,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/mzyirtar_20251214T111213Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:29.954050+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "mzyirtar" + "linkedin_slug": "mzyirtar", + "inferred_current_settlement": { + "value": "Ankara", + "formatted": "TR-68-ANK", + "country_code": "TR", + "region_code": "68", + "settlement_code": "ANK", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Ankara, Ankara, Turkey (TR)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Ankara, Ankara, Turkey (TR)", + "result": { + "geonames_id": 323786, + "geonames_name": "Ankara", + "admin1_code": "68", + "admin1_name": "Ankara", + "feature_code": "PPLC", + "latitude": 39.91987, + "longitude": 32.85427 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "TR-68-ANK" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 323786, + "geonames_name": "Ankara", + "admin1_code": "68", + "admin1_name": "Ankara", + "feature_code": "PPLC", + "latitude": 39.91987, + "longitude": 32.85427 + }, + "inferred_at": "2026-01-09T19:51:29.954036+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MEHMET-YIRTAR", + "new_ppid": "ID_XX-XX-XXX_XXXX_TR-68-ANK_XXXX_MEHMET-YIRTAR", + "changed_at": "2026-01-09T19:51:29.954048+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ISA-HERICOVELASCO.json b/data/person/ID_XX-XX-XXX_XXXX_US-CA-CC_XXXX_ISA-HERICOVELASCO.json similarity index 61% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ISA-HERICOVELASCO.json rename to data/person/ID_XX-XX-XXX_XXXX_US-CA-CC_XXXX_ISA-HERICOVELASCO.json index 7a35e60cb4..c8285e779c 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ISA-HERICOVELASCO.json +++ b/data/person/ID_XX-XX-XXX_XXXX_US-CA-CC_XXXX_ISA-HERICOVELASCO.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ISA-HERICOVELASCO", + "ppid": "ID_XX-XX-XXX_XXXX_US-CA-CC_XXXX_ISA-HERICOVELASCO", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "US-CA-CC", "last_date": "XXXX", "name_tokens": [ "ISA", "HERICOVELASCO" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Isa Herico-Velasco", @@ -130,7 +131,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/isa-herico_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:57.662516+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "isa-herico" + "linkedin_slug": "isa-herico", + "inferred_current_settlement": { + "value": "California City", + "formatted": "US-CA-CC", + "country_code": "US", + "region_code": "CA", + "settlement_code": "CC", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "California, United States" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "California, United States", + "result": { + "geonames_id": 5332748, + "geonames_name": "California City", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPL", + "latitude": 35.1258, + "longitude": -117.9859 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-CA-CC" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 5332748, + "geonames_name": "California City", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPL", + "latitude": 35.1258, + "longitude": -117.9859 + }, + "inferred_at": "2026-01-09T19:50:57.662498+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ISA-HERICOVELASCO", + "new_ppid": "ID_XX-XX-XXX_XXXX_US-CA-CC_XXXX_ISA-HERICOVELASCO", + "changed_at": "2026-01-09T19:50:57.662513+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADAM-MILLER.json b/data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ADAM-MILLER.json similarity index 54% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADAM-MILLER.json rename to data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ADAM-MILLER.json index 80dae710bf..72fe5ef2a8 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADAM-MILLER.json +++ b/data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ADAM-MILLER.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADAM-MILLER", + "ppid": "ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ADAM-MILLER", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "US-CA-SF", "last_date": "XXXX", "name_tokens": [ "ADAM", "MILLER" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Adam Miller", @@ -98,7 +99,83 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/adam-miller-54384116a_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:20.435587+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "adam-miller-54384116a" + "linkedin_slug": "adam-miller-54384116a", + "inferred_current_settlement": { + "value": "San Francisco", + "formatted": "US-CA-SF", + "country_code": "US", + "region_code": "CA", + "settlement_code": "SF", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "San Francisco Bay Area, USA" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Internet Archive", + "title": "Senior Crawl Engineer", + "location": "San Francisco, CA, USA" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "San Francisco, CA, USA", + "result": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "US-CA-SF" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + }, + "inferred_at": "2026-01-09T19:51:20.435538+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADAM-MILLER", + "new_ppid": "ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ADAM-MILLER", + "changed_at": "2026-01-09T19:51:20.435584+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEX-DEMPSEY.json b/data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ALEX-DEMPSEY.json similarity index 69% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEX-DEMPSEY.json rename to data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ALEX-DEMPSEY.json index e9a3971f2a..60a8b9dd4a 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEX-DEMPSEY.json +++ b/data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ALEX-DEMPSEY.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEX-DEMPSEY", + "ppid": "ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ALEX-DEMPSEY", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "US-CA-SF", "last_date": "XXXX", "name_tokens": [ "ALEX", "DEMPSEY" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Alex Dempsey", @@ -140,7 +141,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/avdempsey_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:22.016322+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "avdempsey" + "linkedin_slug": "avdempsey", + "inferred_current_settlement": { + "value": "San Francisco", + "formatted": "US-CA-SF", + "country_code": "US", + "region_code": "CA", + "settlement_code": "SF", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "San Francisco, California, USA" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "San Francisco, California, USA", + "result": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-CA-SF" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + }, + "inferred_at": "2026-01-09T19:51:22.016307+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEX-DEMPSEY", + "new_ppid": "ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ALEX-DEMPSEY", + "changed_at": "2026-01-09T19:51:22.016320+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDA-BARRETT.json b/data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMANDA-BARRETT.json similarity index 57% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDA-BARRETT.json rename to data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMANDA-BARRETT.json index d51bc7ba31..a9aa431fc4 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDA-BARRETT.json +++ b/data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMANDA-BARRETT.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDA-BARRETT", + "ppid": "ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMANDA-BARRETT", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "US-CA-SF", "last_date": "XXXX", "name_tokens": [ "AMANDA", "BARRETT" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Amanda Barrett", @@ -102,7 +103,83 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amanda-barrett-ba048128_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:29.171943+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "amanda-barrett-ba048128" + "linkedin_slug": "amanda-barrett-ba048128", + "inferred_current_settlement": { + "value": "San Francisco", + "formatted": "US-CA-SF", + "country_code": "US", + "region_code": "CA", + "settlement_code": "SF", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "San Francisco Bay Area, California, United States" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Internet Archive", + "title": "Staff", + "location": "San Francisco, CA, United States" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "San Francisco, CA, United States", + "result": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "US-CA-SF" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + }, + "inferred_at": "2026-01-09T19:51:29.171929+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDA-BARRETT", + "new_ppid": "ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMANDA-BARRETT", + "changed_at": "2026-01-09T19:51:29.171941+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDARI-KARACA.json b/data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMANDARI-KARACA.json similarity index 58% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDARI-KARACA.json rename to data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMANDARI-KARACA.json index 798aed1490..c63ddc9a88 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDARI-KARACA.json +++ b/data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMANDARI-KARACA.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDARI-KARACA", + "ppid": "ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMANDARI-KARACA", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "US-CA-SF", "last_date": "XXXX", "name_tokens": [ "AMANDARI", "KARACA" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Amandari Karaca", @@ -104,7 +105,83 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amandari_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:50:51.734014+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "amandari" + "linkedin_slug": "amandari", + "inferred_current_settlement": { + "value": "San Francisco", + "formatted": "US-CA-SF", + "country_code": "US", + "region_code": "CA", + "settlement_code": "SF", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "San Francisco Bay Area, California, United States" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Internet Archive", + "title": "Writer", + "location": "San Francisco, CA, United States" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "San Francisco, CA, United States", + "result": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "US-CA-SF" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + }, + "inferred_at": "2026-01-09T19:50:51.733994+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDARI-KARACA", + "new_ppid": "ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMANDARI-KARACA", + "changed_at": "2026-01-09T19:50:51.734012+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMIR-ESFAHANI.json b/data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMIR-ESFAHANI.json similarity index 58% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMIR-ESFAHANI.json rename to data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMIR-ESFAHANI.json index 0cd1153596..c225fce26b 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMIR-ESFAHANI.json +++ b/data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMIR-ESFAHANI.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMIR-ESFAHANI", + "ppid": "ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMIR-ESFAHANI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "US-CA-SF", "last_date": "XXXX", "name_tokens": [ "AMIR", "ESFAHANI" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Amir Saber Esfahani", @@ -104,7 +105,83 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amir-saber-esfahani-37bb1b17_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:02.148399+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "amir-saber-esfahani-37bb1b17" + "linkedin_slug": "amir-saber-esfahani-37bb1b17", + "inferred_current_settlement": { + "value": "San Francisco", + "formatted": "US-CA-SF", + "country_code": "US", + "region_code": "CA", + "settlement_code": "SF", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "San Francisco Bay Area, California, United States" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Internet Archive", + "title": "Artist/Professor Sculpture", + "location": "San Francisco, CA, United States" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "San Francisco, CA, United States", + "result": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "US-CA-SF" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + }, + "inferred_at": "2026-01-09T19:51:02.148298+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMIR-ESFAHANI", + "new_ppid": "ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_AMIR-ESFAHANI", + "changed_at": "2026-01-09T19:51:02.148384+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANISH-SARANGI.json b/data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ANISH-SARANGI.json similarity index 58% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANISH-SARANGI.json rename to data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ANISH-SARANGI.json index 6a2d389086..e5a22a6e3e 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANISH-SARANGI.json +++ b/data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ANISH-SARANGI.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANISH-SARANGI", + "ppid": "ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ANISH-SARANGI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "US-CA-SF", "last_date": "XXXX", "name_tokens": [ "ANISH", "SARANGI" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Anish Kumar Sarangi", @@ -103,7 +104,83 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anish-kumar-sarangi-3b924678_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:02.675852+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "anish-kumar-sarangi-3b924678" + "linkedin_slug": "anish-kumar-sarangi-3b924678", + "inferred_current_settlement": { + "value": "San Francisco", + "formatted": "US-CA-SF", + "country_code": "US", + "region_code": "CA", + "settlement_code": "SF", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "San Francisco Bay Area, California, United States" + }, + { + "step": 2, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "Internet Archive", + "title": "Software Developer", + "location": "San Francisco, CA, United States" + } + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "San Francisco, CA, United States", + "result": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "result": "US-CA-SF" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + }, + "inferred_at": "2026-01-09T19:51:02.675815+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANISH-SARANGI", + "new_ppid": "ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_ANISH-SARANGI", + "changed_at": "2026-01-09T19:51:02.675847+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JONATHAN-MARTINEZ.json b/data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_JONATHAN-MARTINEZ.json similarity index 56% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JONATHAN-MARTINEZ.json rename to data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_JONATHAN-MARTINEZ.json index 98d74173d3..b7417ff418 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JONATHAN-MARTINEZ.json +++ b/data/person/ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_JONATHAN-MARTINEZ.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JONATHAN-MARTINEZ", + "ppid": "ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_JONATHAN-MARTINEZ", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "US-CA-SF", "last_date": "XXXX", "name_tokens": [ "JONATHAN", "MARTINEZ" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Jonathan Martinez", @@ -95,7 +96,77 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/jonatmartinez_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:00.909718+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "jonatmartinez" + "linkedin_slug": "jonatmartinez", + "inferred_current_settlement": { + "value": "San Francisco", + "formatted": "US-CA-SF", + "country_code": "US", + "region_code": "CA", + "settlement_code": "SF", + "confidence": "medium", + "inference_provenance": { + "method": "current_job_location", + "inference_chain": [ + { + "step": 1, + "observation": "Current job with location found", + "source_field": "profile_data.experience", + "source_value": { + "company": "The Internet Archive", + "title": "Operations Engineer", + "location": "San Francisco, California, USA" + } + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "San Francisco, California, USA", + "result": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-CA-SF" + } + ], + "assumptions": [ + "Current job location represents residence area", + "Person works near where they live" + ], + "geonames_data": { + "geonames_id": 5391959, + "geonames_name": "San Francisco", + "admin1_code": "CA", + "admin1_name": "California", + "feature_code": "PPLA2", + "latitude": 37.77493, + "longitude": -122.41942 + }, + "inferred_at": "2026-01-09T19:51:00.909624+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JONATHAN-MARTINEZ", + "new_ppid": "ID_XX-XX-XXX_XXXX_US-CA-SF_XXXX_JONATHAN-MARTINEZ", + "changed_at": "2026-01-09T19:51:00.909708+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_US-NY-NYC_XXXX_DERIS-NAGARA.json b/data/person/ID_XX-XX-XXX_XXXX_US-NY-NYC_XXXX_DERIS-NAGARA.json new file mode 100644 index 0000000000..416b331752 --- /dev/null +++ b/data/person/ID_XX-XX-XXX_XXXX_US-NY-NYC_XXXX_DERIS-NAGARA.json @@ -0,0 +1,140 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_US-NY-NYC_XXXX_DERIS-NAGARA", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "US-NY-NYC", + "last_date": "XXXX", + "name_tokens": [ + "DERIS", + "NAGARA" + ], + "last_location_source": "inferred_current_settlement" + }, + "name": { + "full_name": "Deris - M. Rizki Nugraha Darma Nagara", + "display_name": "Deris - M. Rizki Nugraha Darma Nagara", + "name_romanized": null, + "name_tokens": [ + "DERIS", + "NAGARA" + ], + "source": "linkedin_profile" + }, + "birth_date": { + "edtf": "XXXX", + "precision": "unknown" + }, + "is_living": true, + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "E" + ], + "rationale": "Identified as heritage staff at Ministry of Tourism of the Republic of Indonesia" + }, + "affiliations": [], + "profile_data": { + "name": "Deris - M. Rizki Nugraha Darma Nagara", + "linkedin_url": "https://www.linkedin.com/in/deris-m-rizki-nugraha-darma-nagara-459927152", + "headline": "", + "location": "New York, New York, United States (US)", + "connections": "500 connections • 14,000 followers", + "about": "", + "experience": [], + "education": [], + "skills": [], + "languages": [], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" + }, + "web_claims": [], + "source_observations": [ + { + "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/deris-m-rizki-nugraha-darma-nagara-459927152_20251214T112002Z.json", + "observed_on": "2025-12-14T11:20:02.834373+00:00", + "extraction_agent": "claude-sonnet-4-20250514" + } + ], + "enrichment_metadata": { + "birth_date_search": { + "attempted": false, + "notes": "Not yet searched - requires manual enrichment" + } + }, + "provenance": { + "created_at": "2026-01-09T17:29:48.568291+00:00", + "created_by": "generate_ppids.py", + "source_files": [ + "/Users/kempersc/apps/glam/data/custodian/person/entity/deris-m-rizki-nugraha-darma-nagara-459927152_20251214T112002Z.json" + ], + "modified_at": "2026-01-09T19:50:49.591693+00:00", + "modified_by": "enrich_ppids.py" + }, + "linkedin_slug": "deris-m-rizki-nugraha-darma-nagara-459927152", + "inferred_current_settlement": { + "value": "New York City", + "formatted": "US-NY-NYC", + "country_code": "US", + "region_code": "NY", + "settlement_code": "NYC", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "New York, New York, United States (US)" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "New York, New York, United States (US)", + "result": { + "geonames_id": 5128581, + "geonames_name": "New York City", + "admin1_code": "NY", + "admin1_name": "New York", + "feature_code": "PPL", + "latitude": 40.71427, + "longitude": -74.00597 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-NY-NYC" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 5128581, + "geonames_name": "New York City", + "admin1_code": "NY", + "admin1_name": "New York", + "feature_code": "PPL", + "latitude": 40.71427, + "longitude": -74.00597 + }, + "inferred_at": "2026-01-09T19:50:49.591619+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DERIS-NAGARA", + "new_ppid": "ID_XX-XX-XXX_XXXX_US-NY-NYC_XXXX_DERIS-NAGARA", + "changed_at": "2026-01-09T19:50:49.591683+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] +} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDA-MCCABE.json b/data/person/ID_XX-XX-XXX_XXXX_US-WA-SEA_XXXX_AMANDA-MCCABE.json similarity index 67% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDA-MCCABE.json rename to data/person/ID_XX-XX-XXX_XXXX_US-WA-SEA_XXXX_AMANDA-MCCABE.json index c50a2bd743..73943ecb77 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDA-MCCABE.json +++ b/data/person/ID_XX-XX-XXX_XXXX_US-WA-SEA_XXXX_AMANDA-MCCABE.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDA-MCCABE", + "ppid": "ID_XX-XX-XXX_XXXX_US-WA-SEA_XXXX_AMANDA-MCCABE", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "US-WA-SEA", "last_date": "XXXX", "name_tokens": [ "AMANDA", "MCCABE" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Amanda McCabe", @@ -112,7 +113,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/amccabe_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:24.111392+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "amccabe" + "linkedin_slug": "amccabe", + "inferred_current_settlement": { + "value": "Seattle", + "formatted": "US-WA-SEA", + "country_code": "US", + "region_code": "WA", + "settlement_code": "SEA", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Seattle, Washington, United States" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Seattle, Washington, United States", + "result": { + "geonames_id": 5809844, + "geonames_name": "Seattle", + "admin1_code": "WA", + "admin1_name": "Washington", + "feature_code": "PPLA2", + "latitude": 47.60621, + "longitude": -122.33207 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-WA-SEA" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 5809844, + "geonames_name": "Seattle", + "admin1_code": "WA", + "admin1_name": "Washington", + "feature_code": "PPLA2", + "latitude": 47.60621, + "longitude": -122.33207 + }, + "inferred_at": "2026-01-09T19:51:24.111377+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AMANDA-MCCABE", + "new_ppid": "ID_XX-XX-XXX_XXXX_US-WA-SEA_XXXX_AMANDA-MCCABE", + "changed_at": "2026-01-09T19:51:24.111389+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-TRAMMELL.json b/data/person/ID_XX-XX-XXX_XXXX_US-WA-TAC_XXXX_ANNA-TRAMMELL.json similarity index 64% rename from data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-TRAMMELL.json rename to data/person/ID_XX-XX-XXX_XXXX_US-WA-TAC_XXXX_ANNA-TRAMMELL.json index 3ae5f2db93..5d138261cf 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-TRAMMELL.json +++ b/data/person/ID_XX-XX-XXX_XXXX_US-WA-TAC_XXXX_ANNA-TRAMMELL.json @@ -1,16 +1,17 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-TRAMMELL", + "ppid": "ID_XX-XX-XXX_XXXX_US-WA-TAC_XXXX_ANNA-TRAMMELL", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", "first_date": "XXXX", - "last_location": "XX-XX-XXX", + "last_location": "US-WA-TAC", "last_date": "XXXX", "name_tokens": [ "ANNA", "TRAMMELL" - ] + ], + "last_location_source": "inferred_current_settlement" }, "name": { "full_name": "Anna Trammell", @@ -106,7 +107,73 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/anna-trammell-7a373695_20251214T115050Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:03.339560+00:00", + "modified_by": "enrich_ppids.py" }, - "linkedin_slug": "anna-trammell-7a373695" + "linkedin_slug": "anna-trammell-7a373695", + "inferred_current_settlement": { + "value": "Tacoma", + "formatted": "US-WA-TAC", + "country_code": "US", + "region_code": "WA", + "settlement_code": "TAC", + "confidence": "medium", + "inference_provenance": { + "method": "profile_location", + "inference_chain": [ + { + "step": 1, + "observation": "Profile location field found", + "source_field": "profile_data.location", + "source_value": "Tacoma, Washington, United States" + }, + { + "step": 2, + "geocoding": "GeoNames resolution", + "query": "Tacoma, Washington, United States", + "result": { + "geonames_id": 5812944, + "geonames_name": "Tacoma", + "admin1_code": "WA", + "admin1_name": "Washington", + "feature_code": "PPLA2", + "latitude": 47.25288, + "longitude": -122.44429 + } + }, + { + "step": 3, + "formatting": "CC-RR-PPP generation", + "result": "US-WA-TAC" + } + ], + "assumptions": [ + "Profile location is up-to-date", + "Profile location represents current residence" + ], + "geonames_data": { + "geonames_id": 5812944, + "geonames_name": "Tacoma", + "admin1_code": "WA", + "admin1_name": "Washington", + "feature_code": "PPLA2", + "latitude": 47.25288, + "longitude": -122.44429 + }, + "inferred_at": "2026-01-09T19:51:03.339537+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-TRAMMELL", + "new_ppid": "ID_XX-XX-XXX_XXXX_US-WA-TAC_XXXX_ANNA-TRAMMELL", + "changed_at": "2026-01-09T19:51:03.339556+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_current_settlement" + ] + } + ] } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AARON-XIMM.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AARON-XIMM.json deleted file mode 100644 index 01caed9e4b..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AARON-XIMM.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AARON-XIMM", - "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": [ - "AARON", - "XIMM" - ] - }, - "name": { - "full_name": "Aaron Ximm", - "display_name": "Aaron Ximm", - "name_romanized": null, - "name_tokens": [ - "AARON", - "XIMM" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "D", - "L" - ], - "rationale": "Principal Engineer at Internet Archive, one of the world's most important digital heritage preservation organizations. Works on core infrastructure for web archiving, distributed crawling, and digital preservation. Contributes to preserving global digital cultural heritage through the Wayback Machine and Archive-It." - }, - "affiliations": [ - { - "custodian_name": "Internet Archive", - "custodian_slug": null, - "role_title": "Principal Engineer", - "department": "Core Infrastructure Engineering", - "heritage_relevant": true, - "heritage_type": "D", - "current": true, - "start_date": "2011", - "observed_on": "2025-12-14T11:50:54.351875+00:00", - "source": "linkup_search" - } - ], - "profile_data": { - "name": "Aaron Ximm", - "headline": "Principal Engineer at Internet Archive", - "linkedin_url": "https://www.linkedin.com/in/aaron-ximm-983213", - "location": "San Francisco, California, USA", - "about": "Senior engineer at the Internet Archive (archive.org) with over 32 years of experience. Aaron joined the Archive in 2011, where he aims to assist with the alchemy of converting ephemera into artifacts. As an artist, Aaron is interested in documentation and its possibilities. Primary projects have included updating the Project Gutenberg collection, developing infrastructure for distributed deep crawling of high-value domains, creating a proof of concept for personal digital archiving, and extending Archive ingestion and distribution through the BitTorrent protocol.", - "experience": [ - { - "title": "Principal Engineer", - "company": "Internet Archive", - "location": "San Francisco, California", - "start_date": "2011", - "current": true, - "description": "Senior engineer working on core infrastructure. Projects include: updating Project Gutenberg collection, developing infrastructure for distributed deep crawling of high-value/high-popularity domains, creating proof of concept for personal digital archiving, extending Archive ingestion and distribution through BitTorrent protocol, and managing large-scale focused crawls for the IA and partners." - }, - { - "title": "Engineer", - "company": "SP Controls, Inc", - "location": "California, USA", - "start_date": "1997", - "end_date": "2010", - "current": false, - "description": "Engineering work in software and embedded systems." - }, - { - "title": "Sr Consultant", - "company": "Andersen Consulting", - "location": "USA", - "start_date": "1993", - "end_date": "1996", - "current": false, - "description": "Senior consulting work." - }, - { - "title": "Halo Helper", - "company": "Pantheon Steel, LLC", - "current": false, - "description": "Side project work with handpan instruments." - } - ], - "education": [], - "skills": [ - "Java", - "Python", - "Embedded Systems", - "Distributed Systems", - "REST", - "Algorithms", - "Web Crawling", - "Digital Archiving", - "Elasticsearch", - "Apache Kafka", - "System Architecture", - "Linux", - "Perl", - "C", - "Shell Scripting", - "Git", - "Ansible", - "Redis", - "Scalability", - "Sound Design", - "Field Recording", - "Spatial Audio", - "Binaural Sound" - ], - "languages": [ - "English" - ], - "interests": [ - "Sound Design", - "Field Recording", - "Binaural Sound", - "Spatial Audio", - "Location Sound" - ] - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/aaron-ximm-983213_20251214T115050Z.json", - "observed_on": "2025-12-14T11:50:54.351875+00:00", - "extraction_agent": "claude-opus-4" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.516696+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/aaron-ximm-983213_20251214T115050Z.json" - ] - }, - "linkedin_slug": "aaron-ximm-983213" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ABEER-BEHBEHANI.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ABEER-BEHBEHANI.json deleted file mode 100644 index 60f56bc8c0..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ABEER-BEHBEHANI.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ABEER-BEHBEHANI", - "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": [ - "ABEER", - "BEHBEHANI" - ] - }, - "name": { - "full_name": "Abeer Behbehani", - "display_name": "Abeer Behbehani", - "name_romanized": null, - "name_tokens": [ - "ABEER", - "BEHBEHANI" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Abeer Behbehani", - "linkedin_url": "https://www.linkedin.com/in/abeer-behbehani-59413a52", - "headline": "Head of IT Dept. at Kuwait National Library", - "location": "Kuwait (KW)", - "connections": "31 connections • 37 followers", - "about": "Total Experience: 21 years and 10 months", - "experience": [], - "education": [ - { - "degree": "Master's degree, Library and Information Science", - "institution": "Kuwait University" - }, - { - "degree": "Bachelor's degree, Computer Science", - "institution": "Kuwait University" - } - ], - "skills": [], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C5103AQHjmI8mch6PWQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1516564980619?e=2147483647&v=beta&t=62YKV_Tk1dW7DACdP_YUfk9FUCeCCaQESwVyXF6flnE" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/abeer-behbehani-59413a52_20251214T103804Z.json", - "observed_on": "2025-12-14T10:38:04.496203+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.517657+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/abeer-behbehani-59413a52_20251214T103804Z.json" - ] - }, - "linkedin_slug": "abeer-behbehani-59413a52" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALBERT-REIJNEN.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALBERT-REIJNEN.json deleted file mode 100644 index d5ca1e16e6..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALBERT-REIJNEN.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALBERT-REIJNEN", - "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": [ - "ALBERT", - "REIJNEN" - ] - }, - "name": { - "full_name": "Albert Reijnen", - "display_name": "Albert Reijnen", - "name_romanized": null, - "name_tokens": [ - "ALBERT", - "REIJNEN" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "E" - ], - "rationale": "Education sector professional at government education inspectorate" - }, - "affiliations": [], - "profile_data": { - "name": "Albert Reijnen", - "linkedin_url": "https://www.linkedin.com/in/albert-reijnen-a2629517", - "headline": "School Auditor at 2 klv Schooladvies", - "location": "The Randstad, Netherlands", - "connections": "179 connections • 179 followers", - "about": null, - "experience": [ - { - "title": "School Auditor", - "company": "2 klv Schooladvies", - "dates": "Jul 2021 - Present", - "location": "Nijmegen, Gelderland, Netherlands" - }, - { - "title": "Inspecteur Basisonderwijs", - "company": "Inspectorate of Education", - "dates": "Jan 1999 - Present" - }, - { - "title": "Inspecteur Basisonderwijs", - "company": "Inspectie van het Onderwijs", - "dates": "May 2001 - Jun 2021" - } - ], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": null - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/albert-reijnen-a2629517_20251212T220000Z.json", - "observed_on": "2025-12-12T22:00:00Z", - "extraction_agent": "claude-opus-4.5" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.713120+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/albert-reijnen-a2629517_20251212T220000Z.json" - ] - }, - "linkedin_slug": "albert-reijnen-a2629517" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNISA-FADIAH.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNISA-FADIAH.json deleted file mode 100644 index f401574803..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNISA-FADIAH.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNISA-FADIAH", - "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": [ - "ANNISA", - "FADIAH" - ] - }, - "name": { - "full_name": "Annisa Fadiah", - "display_name": "Annisa Fadiah", - "name_romanized": null, - "name_tokens": [ - "ANNISA", - "FADIAH" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "A" - ], - "rationale": "Archivist at ANRI, Indonesia's national archives, which manages significant documentary heritage collections including Dutch colonial records, post-independence archives, and specialized collections on tsunami/disaster documentation and corruption eradication." - }, - "affiliations": [ - { - "custodian_name": "Arsip Nasional Republik Indonesia (ANRI)", - "custodian_slug": "anri", - "role_title": "Archivist", - "heritage_relevant": true, - "heritage_type": "A", - "current": true, - "observed_on": "2025-12-15T10:30:00Z", - "source": "exa_web_search" - } - ], - "profile_data": { - "name": "Annisa Fadiah", - "headline": "Archivist at Arsip Nasional Republik Indonesia (ANRI)", - "linkedin_url": "https://www.linkedin.com/in/ansfadiah", - "location": "Jakarta, Indonesia", - "about": "Professional archivist at the National Archives of the Republic of Indonesia (ANRI), the non-ministerial government institution responsible for records and archives administration in Indonesia. Also works as a freelance Dutch language tutor, reflecting the importance of Dutch colonial archives in Indonesian heritage documentation.", - "experience": [ - { - "title": "Archivist", - "company": "Arsip Nasional Republik Indonesia (ANRI)", - "location": "Jakarta, Indonesia", - "start_date": "2020", - "end_date": null, - "current": true, - "description": "Works as professional archivist at Indonesia's national archives, which manages significant collections spanning colonial and post-independence periods." - }, - { - "title": "Dutch Tutor", - "company": "Freelance", - "location": "Indonesia", - "start_date": "2018", - "end_date": null, - "current": true, - "description": "Provides Dutch language tutoring, a skill valuable for working with Indonesia's extensive Dutch colonial archive collections." - }, - { - "title": "Kindergarten Teacher", - "company": "Mataharikecil Indonesia Foundation", - "location": "Indonesia", - "start_date": "2019", - "end_date": "2020", - "current": false, - "description": "Early childhood education role prior to transitioning to archival work." - } - ], - "education": [], - "skills": [ - "Archival Science", - "Dutch Language", - "Records Management", - "Colonial Archives", - "Indonesian Heritage Documentation" - ], - "languages": [ - { - "language": "Indonesian", - "proficiency": "Native" - }, - { - "language": "Dutch", - "proficiency": "Professional (tutor level)" - }, - { - "language": "English", - "proficiency": "Professional" - } - ] - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/ansfadiah_20251214T115050Z.json", - "observed_on": "2025-12-15T10:30:00Z", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.678992+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/ansfadiah_20251214T115050Z.json" - ] - }, - "linkedin_slug": "ansfadiah" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNO-DIETEREN-arno_dieteren_37914a30.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNO-DIETEREN-arno_dieteren_37914a30.json deleted file mode 100644 index 48f436de4a..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNO-DIETEREN-arno_dieteren_37914a30.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNO-DIETEREN-arno_dieteren_37914a30", - "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": [ - "ARNO", - "DIETEREN" - ] - }, - "name": { - "full_name": "arno dieteren", - "display_name": "arno dieteren", - "name_romanized": null, - "name_tokens": [ - "ARNO", - "DIETEREN" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at Dienst Uitvoering Onderwijs (Ministerie van OCW)" - }, - "affiliations": [], - "profile_data": { - "name": "arno dieteren", - "linkedin_url": "https://www.linkedin.com/in/arno-dieteren-37914a30", - "headline": "voorlichter at Dienst Uitvoering Onderwijs (Ministerie van OCW)", - "location": "", - "connections": "112 connections • 113 followers", - "about": "Total Experience: 37 years and 8 months", - "experience": [], - "education": [], - "skills": [], - "languages": [ - { - "language": "English", - "proficiency": "Professional working proficiency" - }, - { - "language": "German", - "proficiency": "Professional working proficiency" - } - ], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C5603AQFAAA2RvY1U0Q/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1516440375479?e=2147483647&v=beta&t=J3rSxrCBBEndWew7BUuqzNhyW7HR6pPtNjHGDlxE2P4" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/arno-dieteren-37914a30_20251214T112145Z.json", - "observed_on": "2025-12-14T11:21:45.620165+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.667800+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/arno-dieteren-37914a30_20251214T112145Z.json" - ] - }, - "linkedin_slug": "arno-dieteren-37914a30", - "ppid_collision_suffix": "arno_dieteren_37914a30" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ASTRI-PUSPITA.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ASTRI-PUSPITA.json deleted file mode 100644 index 582fd01cb0..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ASTRI-PUSPITA.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ASTRI-PUSPITA", - "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": [ - "ASTRI", - "PUSPITA" - ] - }, - "name": { - "full_name": "Astri Puspita", - "display_name": "Astri Puspita", - "name_romanized": null, - "name_tokens": [ - "ASTRI", - "PUSPITA" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at Ministry of Tourism of the Republic of Indonesia" - }, - "affiliations": [], - "profile_data": { - "name": "Astri Puspita", - "linkedin_url": "https://www.linkedin.com/in/astri-puspita-129098101", - "headline": "Government Officer at Ministry of Tourism of the Republic of Indonesia", - "location": "Jakarta, Jakarta, Indonesia (ID)", - "connections": "80 connections • 82 followers", - "about": "Total Experience: 10 years and 6 months", - "experience": [], - "education": [], - "skills": [ - "government" - ], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C5603AQHaNPVo-XQALw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1517008335845?e=2147483647&v=beta&t=H4CXNu3lOH7qAsHx1JK6terBrsgsz7kz7fDs1Qgb4Us" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/astri-puspita-129098101_20251214T111952Z.json", - "observed_on": "2025-12-14T11:19:52.783594+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.558252+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/astri-puspita-129098101_20251214T111952Z.json" - ] - }, - "linkedin_slug": "astri-puspita-129098101" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_B-GEORGE.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_B-GEORGE.json deleted file mode 100644 index efc1adbdbd..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_B-GEORGE.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_B-GEORGE", - "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": [ - "B", - "GEORGE" - ] - }, - "name": { - "full_name": "B. George", - "display_name": "B. George", - "name_romanized": null, - "name_tokens": [ - "B", - "GEORGE" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "A" - ], - "rationale": "Co-founder and director of the ARChive of Contemporary Music (ARC), the largest popular music archive in the world. Pioneering figure in music heritage preservation." - }, - "affiliations": [ - { - "custodian_name": "ARChive of Contemporary Music", - "custodian_slug": "archive-of-contemporary-music", - "role_title": "Co-Founder and Director", - "heritage_relevant": true, - "heritage_type": "A", - "current": true, - "observed_on": "2025-12-14T11:50:54.356439+00:00", - "source": "arcmusic.org" - }, - { - "custodian_name": "One Ten Records", - "custodian_slug": null, - "role_title": "Founder and Owner", - "heritage_relevant": true, - "heritage_type": "A", - "current": false, - "observed_on": "2025-12-14T11:50:54.356439+00:00", - "source": "arcmusic.org" - } - ], - "profile_data": { - "name": "B. George", - "headline": "Co-Founder and Director at ARChive of Contemporary Music", - "linkedin_url": "https://www.linkedin.com/in/bgeorgearc", - "location": "New York City, New York, USA", - "about": "B. George is the Co-Founder (1985) and current Director of the ARChive of Contemporary Music (ARC), the largest popular music collection in the world with more than 3 million recordings and millions of historic materials spanning all cultures. He came to New York City in 1974 as a visual arts student at the Whitney Museum Independent Study Program. His record label, One Ten Records, released the first commercial compilation of audio work by visual artists, 'Airwaves', which included the initial recordings by performance artist Laurie Anderson and unreleased work by Meredith Monk. He released Laurie Anderson's first single 'O'Superman' which reached #2 on the UK pop charts. In 1980 he authored 'Volume', the first comprehensive discographical reference work on Punk and New Wave music.", - "experience": [ - { - "title": "Co-Founder and Director", - "company": "ARChive of Contemporary Music (ARC)", - "location": "New York City, USA", - "start_date": "1985", - "end_date": null, - "description": "Founded ARC with initial donation of 47,000 discs from personal collection. ARC is a non-profit archive that has grown to be the largest popular music collection in the world with over 3 million recordings. Manages collections from notable donors including Keith Richards and Jonathan Demme." - }, - { - "title": "Consultant and Music Curator", - "company": "Various International Institutions", - "location": "USA/UK/France", - "start_date": "1981", - "end_date": "1989", - "description": "Selected soundworks for Paris Biennale (1981, 1983), New Music America (1984), Arts & Events at NYC's World Financial Center (1985-1989). Produced occasional surveys of new American pop and experimental music for BBC's 'The John Peel Show' (1982-1985)." - }, - { - "title": "Record Label Owner", - "company": "One Ten Records", - "location": "New York City, USA", - "start_date": "1979", - "end_date": "1985", - "description": "Founded One Ten Records. Released 'Airwaves', the first commercial compilation of audio work by visual artists. Released Laurie Anderson's debut single 'O'Superman' which reached #2 on UK charts. Produced singles and remixes for Dr. John, Orchestra Jazira (UK/Ghana), and Sonny Okusun (Nigeria)." - }, - { - "title": "Stage Director for Laurie Anderson", - "company": "Laurie Anderson Productions", - "location": "New York City, USA", - "start_date": "1975", - "end_date": "1979", - "description": "Co-directed performance artist Laurie Anderson's stage show." - }, - { - "title": "Visual Arts Student", - "company": "Whitney Museum Independent Study Program", - "location": "New York City, USA", - "start_date": "1974", - "end_date": "1975", - "description": "Attended on scholarship." - } - ], - "education": [ - { - "institution": "Whitney Museum Independent Study Program", - "degree": "Visual Arts", - "field_of_study": "Visual Arts", - "start_date": "1974", - "end_date": "1975" - }, - { - "institution": "University of Michigan", - "degree": "Undergraduate (incomplete)", - "field_of_study": null, - "start_date": null, - "end_date": null - } - ], - "skills": [ - "Music Archiving", - "Record Production", - "Music Curation", - "Discography", - "Arts Administration", - "Non-profit Management", - "Music History", - "Collection Management", - "Stage Direction", - "Performance Art" - ], - "languages": [ - "English" - ], - "publications": [ - { - "title": "Volume: The Comprehensive Discographical Reference Work on Punk and New Wave Music", - "year": "1980", - "description": "First comprehensive discographical reference work on Punk and New Wave music, later editions running 600+ pages." - } - ] - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/bgeorgearc_20251214T115050Z.json", - "observed_on": "2025-12-14T11:50:54.356439+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.506730+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/bgeorgearc_20251214T115050Z.json" - ] - }, - "linkedin_slug": "bgeorgearc" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BADRA-KARUNARATHNA.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BADRA-KARUNARATHNA.json deleted file mode 100644 index 6313789f13..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BADRA-KARUNARATHNA.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BADRA-KARUNARATHNA", - "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": [ - "BADRA", - "KARUNARATHNA" - ] - }, - "name": { - "full_name": "Badra Karunarathna", - "display_name": "Badra Karunarathna", - "name_romanized": null, - "name_tokens": [ - "BADRA", - "KARUNARATHNA" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "score": 0.82, - "heritage_types": [ - "L" - ], - "rationale": "HIGH VALUE: Senior Librarian at National Library of Australia - the nation's largest reference library. Over 25 years of library experience. Holds AM (Member of the Order of Australia) - prestigious national honor typically awarded for distinguished service. JP (Justice of the Peace). Degree in Library and Information Management from University of Canberra. NLA is Australia's primary documentary heritage institution under National Library Act 1960." - }, - "affiliations": [ - { - "custodian_name": "National Library of Australia", - "custodian_slug": "national-library-of-australia", - "role_title": "Senior Librarian", - "heritage_relevant": true, - "heritage_type": "L", - "current": true, - "subdivision": { - "type": "department", - "name": "Unknown - Reader Services likely", - "extraction_source": "inferred" - } - } - ], - "profile_data": { - "name": "Badra Karunarathna", - "linkedin_url": "https://www.linkedin.com/in/badra-karunarathna-am-jp-1b834646", - "headline": "Senior Librarian at National Library of Australia", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "55 connections • 57 followers", - "about": "Over 25 years of Library experience and 15 years of teaching and administration… Total Experience: 30 years and 1 month", - "experience": [], - "education": [ - { - "institution": "at Rippon Girls College - Galle" - }, - { - "degree": "Library and Information Management", - "institution": "University of Canberra", - "notes": "Found via ZoomInfo" - } - ], - "skills": [ - "teaching", - "administration" - ], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C5603AQG4OJlLq3suJQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1517427793881?e=2147483647&v=beta&t=xHxpTJprYM8e6rKW1cAeqEtIlxqmvdO764ih7YJoIkk", - "honors": { - "AM": "Member of the Order of Australia", - "JP": "Justice of the Peace" - } - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/badra-karunarathna-am-jp-1b834646_20251214T103852Z.json", - "observed_on": "2025-12-14T10:38:52.736886+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.527958+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/badra-karunarathna-am-jp-1b834646_20251214T103852Z.json" - ] - }, - "linkedin_slug": "badra-karunarathna-am-jp-1b834646" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAS-BEEKHUIS.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAS-BEEKHUIS.json deleted file mode 100644 index 35962ee0a0..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAS-BEEKHUIS.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BAS-BEEKHUIS", - "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": [ - "BAS", - "BEEKHUIS" - ] - }, - "name": { - "full_name": "Bas Beekhuis", - "display_name": "Bas Beekhuis", - "name_romanized": null, - "name_tokens": [ - "BAS", - "BEEKHUIS" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "E" - ], - "rationale": "Identified as heritage staff at Nederlands Openluchtmuseum" - }, - "affiliations": [], - "profile_data": { - "name": "Bas Beekhuis", - "linkedin_url": "https://www.linkedin.com/in/bas-beekhuis-7bbb8329b", - "headline": "Eerste jaars student Facility management op de HAN.", - "location": "", - "connections": "47 connections • 50 followers", - "about": "Total Experience: 3 years and 1 month", - "experience": [], - "education": [ - { - "degree": "*, Facilities Planning and Management", - "institution": "HAN University of Applied Sciences" - } - ], - "skills": [], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/D4D03AQHrCTY4dO8JJA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1732214536352?e=2147483647&v=beta&t=xdg3EJdUSGxLdB2xX_E8yI0AR_LMy9e8PwnDZzs3qZM" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/bas-beekhuis-7bbb8329b_20251214T110649Z.json", - "observed_on": "2025-12-14T11:06:49.770185+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.687474+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/bas-beekhuis-7bbb8329b_20251214T110649Z.json" - ] - }, - "linkedin_slug": "bas-beekhuis-7bbb8329b" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BRENTON-CLIFFORD.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BRENTON-CLIFFORD.json deleted file mode 100644 index 32132cf989..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BRENTON-CLIFFORD.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BRENTON-CLIFFORD", - "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": [ - "BRENTON", - "CLIFFORD" - ] - }, - "name": { - "full_name": "Brenton Clifford", - "display_name": "Brenton Clifford", - "name_romanized": null, - "name_tokens": [ - "BRENTON", - "CLIFFORD" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Brenton Clifford", - "linkedin_url": "https://www.linkedin.com/in/brenton-clifford-80b018b6", - "headline": "Digitisation Officer at The Australian National University", - "location": "Reid, Australian Capital Territory, Australia (AU)", - "connections": "", - "about": "Completed a Master of Information Studies (Records and Archives Management). Interned at the Noel Butlin Archives Centre at the Australian National University in October 2017, where I have been working since. In the meantime, a skilled researcher, writer, and administrator. Enjoy working in small teams, tight deadlines, and senses of achievement.", - "experience": [], - "education": [], - "skills": [ - "archives", - "management" - ], - "languages": [], - "profile_image_url": "" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/brenton-clifford-80b018b6_20251214T104005Z.json", - "observed_on": "2025-12-14T10:40:05.415010+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.558622+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/brenton-clifford-80b018b6_20251214T104005Z.json" - ] - }, - "linkedin_slug": "brenton-clifford-80b018b6" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CASPER-HUIS-casper_huis_8b1350180.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CASPER-HUIS-casper_huis_8b1350180.json index 09afb6e9a1..925373059e 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CASPER-HUIS-casper_huis_8b1350180.json +++ b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CASPER-HUIS-casper_huis_8b1350180.json @@ -80,7 +80,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/casper-huis-8b1350180_20251214T110159Z.json" ], - "modified_at": "2026-01-09T19:18:13.844055+00:00", + "modified_at": "2026-01-09T19:50:56.694426+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "casper-huis-8b1350180", @@ -109,7 +109,7 @@ "primary_rationale": "1995 is in 199X, but range extends into 200X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -158,7 +158,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1995 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:13.844049+00:00", + "inferred_at": "2026-01-09T19:50:56.694414+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-ZIELSTRA.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-ZIELSTRA.json deleted file mode 100644 index fb68da0259..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-ZIELSTRA.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-ZIELSTRA", - "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", - "ZIELSTRA" - ] - }, - "name": { - "full_name": "Chris Zielstra", - "display_name": "Chris Zielstra", - "name_romanized": null, - "name_tokens": [ - "CHRIS", - "ZIELSTRA" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at Dienst Uitvoering Onderwijs (Ministerie van OCW)" - }, - "affiliations": [], - "profile_data": { - "name": "Chris Zielstra", - "linkedin_url": "https://www.linkedin.com/in/chris-zielstra-1b464421", - "headline": "Procesbeheerder EOS at Dienst Uitvoering Onderwijs (Ministerie van OCW)", - "location": "Greater Groningen Area (NL)", - "connections": "153 connections • 151 followers", - "about": "Total Experience: 14 years and 7 months", - "experience": [ - { - "title": "Software Engineer", - "company": "Dienst Uitvoering Onderwijs (DUO)" - } - ], - "education": [], - "skills": [ - "software" - ], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C4D03AQF5RQ1Widqadg/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1516945609990?e=2147483647&v=beta&t=j0TxeNrDA5tdYOQANXgmDjVJm2jDKUteWb3z9ES760E" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/chris-zielstra-1b464421_20251214T112334Z.json", - "observed_on": "2025-12-14T11:23:34.599191+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.555925+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/chris-zielstra-1b464421_20251214T112334Z.json" - ] - }, - "linkedin_slug": "chris-zielstra-1b464421" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CORRIE-PERDOK.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CORRIE-PERDOK.json deleted file mode 100644 index 61ab426ade..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CORRIE-PERDOK.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CORRIE-PERDOK", - "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": [ - "CORRIE", - "PERDOK" - ] - }, - "name": { - "full_name": "Corrie Perdok", - "display_name": "Corrie Perdok", - "name_romanized": null, - "name_tokens": [ - "CORRIE", - "PERDOK" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at Dienst Uitvoering Onderwijs (Ministerie van OCW)" - }, - "affiliations": [], - "profile_data": { - "name": "Corrie Perdok", - "linkedin_url": "https://www.linkedin.com/in/corrie-perdok-95a343186", - "headline": "Software Test Engineer at Dienst Uitvoering Onderwijs (Ministerie van OCW)", - "location": "Greater Groningen Area (NL)", - "connections": "36 connections • 37 followers", - "about": "Total Experience: 20 years and 1 month", - "experience": [], - "education": [], - "skills": [ - "software" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/corrie-perdok-95a343186_20251214T112201Z.json", - "observed_on": "2025-12-14T11:22:01.740635+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.628837+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/corrie-perdok-95a343186_20251214T112201Z.json" - ] - }, - "linkedin_slug": "corrie-perdok-95a343186" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DADY-RACHMANANTA.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DADY-RACHMANANTA.json deleted file mode 100644 index 7961199f25..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DADY-RACHMANANTA.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DADY-RACHMANANTA", - "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": [ - "DADY", - "RACHMANANTA" - ] - }, - "name": { - "full_name": "Dady Rachmananta", - "display_name": "Dady Rachmananta", - "name_romanized": null, - "name_tokens": [ - "DADY", - "RACHMANANTA" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Dady Rachmananta", - "linkedin_url": "https://www.linkedin.com/in/dady-rachmananta-10a9bb3", - "headline": "Director at National Library of Indonesia", - "location": "Jakarta, Jakarta, Indonesia (ID)", - "connections": "2 connections • 4 followers", - "about": "", - "experience": [], - "education": [], - "skills": [ - "director" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/dady-rachmananta-10a9bb3_20251214T103812Z.json", - "observed_on": "2025-12-14T10:38:12.157718+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.671799+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/dady-rachmananta-10a9bb3_20251214T103812Z.json" - ] - }, - "linkedin_slug": "dady-rachmananta-10a9bb3" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DAVID-PEARSON.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DAVID-PEARSON.json deleted file mode 100644 index d9eb0a0c7d..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DAVID-PEARSON.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DAVID-PEARSON", - "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": [ - "DAVID", - "PEARSON" - ] - }, - "name": { - "full_name": "David Pearson", - "display_name": "David Pearson", - "name_romanized": null, - "name_tokens": [ - "DAVID", - "PEARSON" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "David Pearson", - "linkedin_url": "https://www.linkedin.com/in/david-pearson-8266499", - "headline": "Manager - Digital Preservation at National Library of Australia", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "11 connections • 11 followers", - "about": "", - "experience": [], - "education": [], - "skills": [ - "digital", - "digital preservation" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/david-pearson-8266499_20251214T103923Z.json", - "observed_on": "2025-12-14T10:39:23.676395+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.540359+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/david-pearson-8266499_20251214T103923Z.json" - ] - }, - "linkedin_slug": "david-pearson-8266499" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DEBBIE-COX.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DEBBIE-COX.json deleted file mode 100644 index 17b0b0e182..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DEBBIE-COX.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DEBBIE-COX", - "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": [ - "DEBBIE", - "COX" - ] - }, - "name": { - "full_name": "Debbie Cox", - "display_name": "Debbie Cox", - "name_romanized": null, - "name_tokens": [ - "DEBBIE", - "COX" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "M" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Debbie Cox", - "linkedin_url": "https://www.linkedin.com/in/debbie-cox-3306aa138", - "headline": "Coordinator", - "location": "Coombs, Australian Capital Territory, Australia (AU)", - "connections": "68 connections • 68 followers", - "about": "Total Experience: 28 years and 2 months", - "experience": [], - "education": [ - { - "degree": "Bachelor's degree, Library and Information Science", - "institution": "University of Canberra" - } - ], - "skills": [], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/debbie-cox-3306aa138_20251214T103823Z.json", - "observed_on": "2025-12-14T10:38:23.371322+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.558083+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/debbie-cox-3306aa138_20251214T103823Z.json" - ] - }, - "linkedin_slug": "debbie-cox-3306aa138" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DEDDY-KRISTIAN.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DEDDY-KRISTIAN.json deleted file mode 100644 index 90c097cff3..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DEDDY-KRISTIAN.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DEDDY-KRISTIAN", - "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": [ - "DEDDY", - "KRISTIAN" - ] - }, - "name": { - "full_name": "Deddy Kristian", - "display_name": "Deddy Kristian", - "name_romanized": null, - "name_tokens": [ - "DEDDY", - "KRISTIAN" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at Ministry of Tourism of the Republic of Indonesia" - }, - "affiliations": [], - "profile_data": { - "name": "Deddy Kristian", - "linkedin_url": "https://www.linkedin.com/in/deddy-kristian-24606aab", - "headline": "Civil Servent at Ministry of Tourism of Republic of Indonesia", - "location": "Banten, Indonesia (ID)", - "connections": "34 connections • 34 followers", - "about": "", - "experience": [], - "education": [], - "skills": [ - "civil" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/deddy-kristian-24606aab_20251214T112011Z.json", - "observed_on": "2025-12-14T11:20:11.448939+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.666098+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/deddy-kristian-24606aab_20251214T112011Z.json" - ] - }, - "linkedin_slug": "deddy-kristian-24606aab" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DERIS-NAGARA.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DERIS-NAGARA.json deleted file mode 100644 index 3d28594bfa..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DERIS-NAGARA.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DERIS-NAGARA", - "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": [ - "DERIS", - "NAGARA" - ] - }, - "name": { - "full_name": "Deris - M. Rizki Nugraha Darma Nagara", - "display_name": "Deris - M. Rizki Nugraha Darma Nagara", - "name_romanized": null, - "name_tokens": [ - "DERIS", - "NAGARA" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "E" - ], - "rationale": "Identified as heritage staff at Ministry of Tourism of the Republic of Indonesia" - }, - "affiliations": [], - "profile_data": { - "name": "Deris - M. Rizki Nugraha Darma Nagara", - "linkedin_url": "https://www.linkedin.com/in/deris-m-rizki-nugraha-darma-nagara-459927152", - "headline": "", - "location": "New York, New York, United States (US)", - "connections": "500 connections • 14,000 followers", - "about": "", - "experience": [], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/deris-m-rizki-nugraha-darma-nagara-459927152_20251214T112002Z.json", - "observed_on": "2025-12-14T11:20:02.834373+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.568291+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/deris-m-rizki-nugraha-darma-nagara-459927152_20251214T112002Z.json" - ] - }, - "linkedin_slug": "deris-m-rizki-nugraha-darma-nagara-459927152" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DJOKE-DAM-djoke_dam_3a92a3139.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DJOKE-DAM-djoke_dam_3a92a3139.json index c331399ac8..54a907087c 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DJOKE-DAM-djoke_dam_3a92a3139.json +++ b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DJOKE-DAM-djoke_dam_3a92a3139.json @@ -180,7 +180,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/djoke-dam-3a92a3139_20251214T104123Z.json" ], - "modified_at": "2026-01-09T19:18:16.383695+00:00", + "modified_at": "2026-01-09T19:51:18.419293+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "djoke-dam-3a92a3139", @@ -209,7 +209,7 @@ "primary_rationale": "1983 is in 198X, but range extends into 197X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_experience_heuristic", "inference_chain": [ { "step": 1, @@ -258,7 +258,7 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 1983 spans decades 197X/198X", - "inferred_at": "2026-01-09T19:18:16.383683+00:00", + "inferred_at": "2026-01-09T19:51:18.419265+00:00", "inferred_by": "enrich_ppids.py" } } diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ED-BIESTA.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ED-BIESTA.json deleted file mode 100644 index baaaf8a216..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ED-BIESTA.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ED-BIESTA", - "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": [ - "ED", - "BIESTA" - ] - }, - "name": { - "full_name": "Ed Biesta", - "display_name": "Ed Biesta", - "name_romanized": null, - "name_tokens": [ - "ED", - "BIESTA" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "E", - "O" - ], - "rationale": "Veteran education inspector with 35+ years of experience at Dutch Inspectorate of Education" - }, - "affiliations": [], - "profile_data": { - "name": "Ed Biesta", - "linkedin_url": "https://www.linkedin.com/in/ed-biesta-6bb4a824", - "headline": "Inspector of Education at Inspectie van het Onderwijs", - "location": "Netherlands", - "connections": "311 connections • 313 followers", - "about": "Total Experience: 35 years and 4 months", - "experience": [ - { - "title": "Inspector Of Education", - "company": "Inspectie van het Onderwijs", - "duration": "Jul 1990 - Present • 35 years and 3 months", - "company_details": "501-1000 employees • Founded 1801 • Government Agency • Government Administration", - "department": "Education", - "level": "Specialist" - } - ], - "education": [], - "skills": [ - "education" - ], - "languages": [], - "heritage_relevant_experience": [], - "linkedin_photo_url": "https://media.licdn.com/dms/image/v2/C4D03AQEO0w-d11yqGg/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1517076886256?e=2147483647&v=beta&t=Vlpxi7qmDxwhvnHpPUAbOfIhQC3Wg4oDj7NFF5bstF0" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/ed-biesta-6bb4a824_20251213T020000Z.json", - "observed_on": "2025-12-13T02:00:00Z", - "extraction_agent": "claude-opus-4.5" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.514014+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/ed-biesta-6bb4a824_20251213T020000Z.json" - ] - }, - "linkedin_slug": "ed-biesta-6bb4a824" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FRANK-PEETERS.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FRANK-PEETERS.json deleted file mode 100644 index a8d378afed..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FRANK-PEETERS.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FRANK-PEETERS", - "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": [ - "FRANK", - "PEETERS" - ] - }, - "name": { - "full_name": "Frank Peeters", - "display_name": "Frank Peeters", - "name_romanized": null, - "name_tokens": [ - "FRANK", - "PEETERS" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at KB nationale bibliotheek" - }, - "affiliations": [], - "profile_data": { - "name": "Frank Peeters", - "linkedin_url": "https://www.linkedin.com/in/frank-peeters-49b195a", - "headline": "Royal Library", - "location": "The Randstad, Netherlands (NL)", - "connections": "43 connections • 43 followers", - "about": "neerlandicus; studie Nederlands UvA Total Experience: 19 years and 10 months", - "experience": [], - "education": [], - "skills": [ - "nederlands" - ], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C5603AQEapvdBPeaegA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1517683308067?e=2147483647&v=beta&t=1-GUBeZbFnvuOoYWGkrbXVgF3jtsELqEfSi1xmzsans" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/frank-peeters-49b195a_20251214T113420Z.json", - "observed_on": "2025-12-14T11:34:20.955608+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.624389+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/frank-peeters-49b195a_20251214T113420Z.json" - ] - }, - "linkedin_slug": "frank-peeters-49b195a" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GREGORY-DOWNTON.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GREGORY-DOWNTON.json deleted file mode 100644 index 5279af73aa..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GREGORY-DOWNTON.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GREGORY-DOWNTON", - "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": [ - "GREGORY", - "DOWNTON" - ] - }, - "name": { - "full_name": "Gregory J Downton", - "display_name": "Gregory J Downton", - "name_romanized": null, - "name_tokens": [ - "GREGORY", - "DOWNTON" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "A" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Gregory J Downton", - "linkedin_url": "https://www.linkedin.com/in/gregory-j-downton-30a657158", - "headline": "Audio Engineer/DigArchivist/Guitarist(+tech)/Drummer/Producer/Tech nerd", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "78 connections • 1 followers", - "about": "Total Experience: 23 years and 2 months", - "experience": [], - "education": [], - "skills": [ - "audio", - "restoration", - "mastering", - "production", - "outsourcing" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/gregory-j-downton-30a657158_20251214T103932Z.json", - "observed_on": "2025-12-14T10:39:32.039389+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.665224+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/gregory-j-downton-30a657158_20251214T103932Z.json" - ] - }, - "linkedin_slug": "gregory-j-downton-30a657158" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HASAN-KUMAS.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HASAN-KUMAS.json deleted file mode 100644 index 0db169eaa9..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HASAN-KUMAS.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HASAN-KUMAS", - "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": [ - "HASAN", - "KUMAS" - ] - }, - "name": { - "full_name": "Hasan Kumas", - "display_name": "Hasan Kumas", - "name_romanized": null, - "name_tokens": [ - "HASAN", - "KUMAS" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "E" - ], - "rationale": "Education sector professional at government education inspectorate" - }, - "affiliations": [], - "profile_data": { - "name": "Hasan Kumas", - "linkedin_url": "https://www.linkedin.com/in/hasan-kumas-0714ab173", - "headline": "Afdelingshoofd Inspectie van het Onderwijs", - "location": "Arnhem-Nijmegen Region", - "connections": "500 connections • 1,121 followers", - "about": null, - "experience": [ - { - "title": "Afdelingshoofd", - "company": "Inspectie van het Onderwijs", - "dates": "Oct 2023 - Present" - }, - { - "title": "Gemeenteraadslid Arnhem", - "company": "VVD", - "dates": "Mar 2022 - Present" - }, - { - "title": "Voorzitter GMR", - "company": "Flores Onderwijs", - "dates": "Sep 2021 - Oct 2023" - }, - { - "title": "Teamleider", - "company": "Scholengemeenschap Marianum", - "dates": "Nov 2020 - Oct 2023" - }, - { - "title": "Teacher Leader", - "company": "Scholengemeenschap Marianum", - "dates": "Apr 2018 - Nov 2020" - }, - { - "title": "Docent Economie", - "company": "Scholengemeenschap Marianum", - "dates": "Feb 2011 - Nov 2020" - } - ], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C4D03AQEpTuG-B_MBTg/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1647713427433" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/hasan-kumas-0714ab173_20251212T220000Z.json", - "observed_on": "2025-12-12T22:00:00Z", - "extraction_agent": "claude-opus-4.5" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.567730+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/hasan-kumas-0714ab173_20251212T220000Z.json" - ] - }, - "linkedin_slug": "hasan-kumas-0714ab173" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HENK-WEVER.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HENK-WEVER.json deleted file mode 100644 index f694017175..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HENK-WEVER.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HENK-WEVER", - "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": [ - "HENK", - "WEVER" - ] - }, - "name": { - "full_name": "Henk Wever", - "display_name": "Henk Wever", - "name_romanized": null, - "name_tokens": [ - "HENK", - "WEVER" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at Dienst Uitvoering Onderwijs (Ministerie van OCW)" - }, - "affiliations": [], - "profile_data": { - "name": "Henk Wever", - "linkedin_url": "https://www.linkedin.com/in/henk-wever-95720961", - "headline": "Medewerker Klantenservice bij Dienst Uitvoering Onderwijs (Ministerie van OCW)", - "location": "Greater Groningen Area (NL)", - "connections": "58 connections • 59 followers", - "about": "Total Experience: 25 years and 10 months", - "experience": [], - "education": [], - "skills": [ - "klantenservice" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/henk-wever-95720961_20251214T112327Z.json", - "observed_on": "2025-12-14T11:23:27.922294+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.516942+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/henk-wever-95720961_20251214T112327Z.json" - ] - }, - "linkedin_slug": "henk-wever-95720961" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HERBERT-SOMPEL.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HERBERT-SOMPEL.json deleted file mode 100644 index 337213ae7d..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HERBERT-SOMPEL.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HERBERT-SOMPEL", - "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": [ - "HERBERT", - "SOMPEL" - ] - }, - "name": { - "full_name": "Herbert Van de Sompel", - "display_name": "Herbert Van de Sompel", - "name_romanized": null, - "name_tokens": [ - "HERBERT", - "SOMPEL" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "R" - ], - "rationale": "Identified as heritage staff at DANS" - }, - "affiliations": [], - "profile_data": { - "name": "Herbert Van de Sompel", - "linkedin_url": "https://www.linkedin.com/in/herbertvandesompel", - "headline": "", - "location": "Vienna, Vienna, Austria (AT)", - "connections": "500 connections • 754 followers", - "about": "", - "experience": [], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/herbertvandesompel_20251214T110504Z.json", - "observed_on": "2025-12-14T11:05:04.147686+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.713518+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/herbertvandesompel_20251214T110504Z.json" - ] - }, - "linkedin_slug": "herbertvandesompel" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HOORIEH-SAEIDI.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HOORIEH-SAEIDI.json deleted file mode 100644 index 3c52ea582d..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HOORIEH-SAEIDI.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HOORIEH-SAEIDI", - "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": [ - "HOORIEH", - "SAEIDI" - ] - }, - "name": { - "full_name": "Hoorieh Saeidi", - "display_name": "Hoorieh Saeidi", - "name_romanized": null, - "name_tokens": [ - "HOORIEH", - "SAEIDI" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Hoorieh Saeidi", - "linkedin_url": "https://www.linkedin.com/in/hooriehsaeidi", - "headline": "The member of science board at National Library of Iran", - "location": "Iran (IR)", - "connections": "55 connections • 55 followers", - "about": "Total Experience: 5 years", - "experience": [ - { - "title": "The Member Of Science Board", - "company": "National Library of Iran (Current)" - } - ], - "education": [], - "skills": [ - "science" - ], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C5103AQHidZz-HwUGFQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1516836476916?e=2147483647&v=beta&t=q1JqPXMCZE7G90A7x7L90i00wOKBN8F3DQYDUJoNETM" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/hooriehsaeidi_20251214T103832Z.json", - "observed_on": "2025-12-14T10:38:32.546675+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.509236+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/hooriehsaeidi_20251214T103832Z.json" - ] - }, - "linkedin_slug": "hooriehsaeidi" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ILSE-SEVERIJNEN.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ILSE-SEVERIJNEN.json deleted file mode 100644 index cb53ce114e..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ILSE-SEVERIJNEN.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ILSE-SEVERIJNEN", - "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": [ - "ILSE", - "SEVERIJNEN" - ] - }, - "name": { - "full_name": "Ilse Severijnen", - "display_name": "Ilse Severijnen", - "name_romanized": null, - "name_tokens": [ - "ILSE", - "SEVERIJNEN" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "M" - ], - "rationale": "Identified as heritage staff at Rijksmuseum" - }, - "affiliations": [], - "profile_data": { - "name": "Ilse Severijnen", - "linkedin_url": "https://www.linkedin.com/in/ilse-severijnen", - "headline": "Development", - "location": "Netherlands (NL)", - "connections": "494 connections • 496 followers", - "about": "Total Experience: 7 years and 5 months", - "experience": [], - "education": [], - "skills": [ - "research" - ], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C5603AQEoUl2O94pJRg/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1580904956693?e=2147483647&v=beta&t=vDd7w5BrLRsEzJ6A0T-IlZha-atM7TwzBoDQkpSZcrA" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/ilse-severijnen_20251214T111335Z.json", - "observed_on": "2025-12-14T11:13:35.599277+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.626394+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/ilse-severijnen_20251214T111335Z.json" - ] - }, - "linkedin_slug": "ilse-severijnen" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ISOBEL-JOHNSTONE.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ISOBEL-JOHNSTONE.json deleted file mode 100644 index 7841f0a6e2..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ISOBEL-JOHNSTONE.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ISOBEL-JOHNSTONE", - "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": [ - "ISOBEL", - "JOHNSTONE" - ] - }, - "name": { - "full_name": "Isobel Johnstone", - "display_name": "Isobel Johnstone", - "name_romanized": null, - "name_tokens": [ - "ISOBEL", - "JOHNSTONE" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "A" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Isobel Johnstone", - "linkedin_url": "https://www.linkedin.com/in/isobel-johnstone-50611a62", - "headline": "Program Manager, Archival Processing - Collection Management, National Library of Australia", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "43 connections • 44 followers", - "about": "Total Experience: 3 years", - "experience": [], - "education": [], - "skills": [ - "processing", - "management" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/isobel-johnstone-50611a62_20251214T103902Z.json", - "observed_on": "2025-12-14T10:39:02.685317+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.572859+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/isobel-johnstone-50611a62_20251214T103902Z.json" - ] - }, - "linkedin_slug": "isobel-johnstone-50611a62" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAN-FULLERTON.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAN-FULLERTON.json deleted file mode 100644 index 255f051226..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAN-FULLERTON.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAN-FULLERTON", - "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": [ - "JAN", - "FULLERTON" - ] - }, - "name": { - "full_name": "Jan Fullerton", - "display_name": "Jan Fullerton", - "name_romanized": null, - "name_tokens": [ - "JAN", - "FULLERTON" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Jan Fullerton", - "linkedin_url": "https://www.linkedin.com/in/jan-fullerton-1266769", - "headline": "Director-General at National Library of Australia", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "2 connections • 1 followers", - "about": "", - "experience": [], - "education": [], - "skills": [ - "director" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-fullerton-1266769_20251214T104015Z.json", - "observed_on": "2025-12-14T10:40:15.159051+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.541407+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/jan-fullerton-1266769_20251214T104015Z.json" - ] - }, - "linkedin_slug": "jan-fullerton-1266769" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAN-HOND.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAN-HOND.json deleted file mode 100644 index e5d479694a..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAN-HOND.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAN-HOND", - "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": [ - "JAN", - "HOND" - ] - }, - "name": { - "full_name": "jan de hond", - "display_name": "jan de hond", - "name_romanized": null, - "name_tokens": [ - "JAN", - "HOND" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "M" - ], - "rationale": "Identified as heritage staff at Rijksmuseum" - }, - "affiliations": [], - "profile_data": { - "name": "jan de hond", - "linkedin_url": "https://www.linkedin.com/in/jandehond", - "headline": "conservator geschiedenis Rijksmuseum", - "location": "", - "connections": "500 connections • 812 followers", - "about": "Total Experience: 18 years and 11 months", - "experience": [], - "education": [], - "skills": [], - "languages": [ - { - "language": "Nederlands", - "proficiency": "Native or bilingual proficiency" - }, - { - "language": "English", - "proficiency": "Professional working proficiency" - }, - { - "language": "French", - "proficiency": "Limited working proficiency" - }, - { - "language": "German", - "proficiency": "Limited working proficiency" - }, - { - "language": "Italian", - "proficiency": "Elementary proficiency" - } - ], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C4D03AQG5-xnljY3XGA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1561129338600?e=2147483647&v=beta&t=YMIfMAl7I0m7CNcDOqo_-Rqqt4OVmYS4qAysJJz9yyU" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/jandehond_20251214T111447Z.json", - "observed_on": "2025-12-14T11:14:47.463343+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.640158+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/jandehond_20251214T111447Z.json" - ] - }, - "linkedin_slug": "jandehond" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JASMIN-CAMERON.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JASMIN-CAMERON.json deleted file mode 100644 index 368e3b9c94..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JASMIN-CAMERON.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JASMIN-CAMERON", - "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": [ - "JASMIN", - "CAMERON" - ] - }, - "name": { - "full_name": "Jasmin Cameron", - "display_name": "Jasmin Cameron", - "name_romanized": null, - "name_tokens": [ - "JASMIN", - "CAMERON" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Jasmin Cameron", - "linkedin_url": "https://www.linkedin.com/in/jasmin-cameron-7791b49", - "headline": "Assistant Director General Executive and Public Programs at National Library of Australia", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "4 connections • 4 followers", - "about": "", - "experience": [], - "education": [], - "skills": [ - "director" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/jasmin-cameron-7791b49_20251214T103929Z.json", - "observed_on": "2025-12-14T10:39:29.252081+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.669812+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/jasmin-cameron-7791b49_20251214T103929Z.json" - ] - }, - "linkedin_slug": "jasmin-cameron-7791b49" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JEMMA-POSCH.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JEMMA-POSCH.json deleted file mode 100644 index ddfed67fb3..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JEMMA-POSCH.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JEMMA-POSCH", - "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": [ - "JEMMA", - "POSCH" - ] - }, - "name": { - "full_name": "Jemma Posch", - "display_name": "Jemma Posch", - "name_romanized": null, - "name_tokens": [ - "JEMMA", - "POSCH" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Jemma Posch", - "linkedin_url": "https://www.linkedin.com/in/jemma-posch-28a8547a", - "headline": "Image Content Coordinator at National Library of Australia", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "89 connections • 90 followers", - "about": "Total Experience: 11 years and 10 months", - "experience": [], - "education": [ - { - "degree": "Bachelor's Degree, Art History and Curatorship, Honours (1st class)", - "institution": "The Australian National University" - } - ], - "skills": [], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C5603AQEiq4-bgi6fiA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1552339676355?e=2147483647&v=beta&t=0BgKv7H5DqfaUmuL07OF6VfSI8uE9Q9PpiAdVtETVjs" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/jemma-posch-28a8547a_20251214T103918Z.json", - "observed_on": "2025-12-14T10:39:18.753630+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.531789+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/jemma-posch-28a8547a_20251214T103918Z.json" - ] - }, - "linkedin_slug": "jemma-posch-28a8547a" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JENNY-OSTINI.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JENNY-OSTINI.json deleted file mode 100644 index 3c858c3827..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JENNY-OSTINI.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JENNY-OSTINI", - "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": [ - "JENNY", - "OSTINI" - ] - }, - "name": { - "full_name": "Jenny Ostini", - "display_name": "Jenny Ostini", - "name_romanized": null, - "name_tokens": [ - "JENNY", - "OSTINI" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Jenny Ostini", - "linkedin_url": "https://www.linkedin.com/in/jennyostini", - "headline": "Leading thoughtful delivery of meaningful research, governance, policy and services for communities and government", - "location": "Australia (AU)", - "connections": "333 connections • 21 followers", - "about": "I try to understand complicated human experiences in contemporary workplaces. I support and grow gender equitable, safe workplaces where diversity of thought and experience are valued, supported and developed. I translate evidence to strategic policy; lining up the what, the “so what” and the how into achievable actions. I develop data collection methods and establish processes for evaluation and monitoring. I build transparent, practical and well-governed ways that help organisations understand and demonstrate what they are doing, why and how. Total Experience: 1 year and 10 months", - "experience": [], - "education": [ - { - "degree": "Doctor of Philosophy (PhD)", - "institution": "University of Minnesota-Twin Cities" - } - ], - "skills": [ - "safe", - "diversity", - "evaluation", - "director", - "data collection" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/jennyostini_20251214T103952Z.json", - "observed_on": "2025-12-14T10:39:52.624286+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.524206+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/jennyostini_20251214T103952Z.json" - ] - }, - "linkedin_slug": "jennyostini" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JOLANDE-T.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JOLANDE-T.json deleted file mode 100644 index b923892cbb..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JOLANDE-T.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JOLANDE-T", - "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": [ - "JOLANDE", - "T" - ] - }, - "name": { - "full_name": "Jolande T.", - "display_name": "Jolande T.", - "name_romanized": null, - "name_tokens": [ - "JOLANDE", - "T" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at Ministerie van Buitenlandse Zaken" - }, - "affiliations": [], - "profile_data": { - "name": "Jolande T.", - "linkedin_url": "https://www.linkedin.com/in/jolande-t-88093b84", - "headline": "Ministerie van Buitenlandse Zaken", - "location": "Netherlands (NL)", - "connections": "500 connections • 1,299 followers", - "about": "Total Experience: 1 year and 5 months", - "experience": [], - "education": [], - "skills": [ - "counterterrorism" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/jolande-t-88093b84_20251214T103233Z.json", - "observed_on": "2025-12-14T10:32:33.562930+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.541043+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/jolande-t-88093b84_20251214T103233Z.json" - ] - }, - "linkedin_slug": "jolande-t-88093b84" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_KIRSTEN-RYDLAND.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_KIRSTEN-RYDLAND.json deleted file mode 100644 index fe01aff194..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_KIRSTEN-RYDLAND.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_KIRSTEN-RYDLAND", - "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": [ - "KIRSTEN", - "RYDLAND" - ] - }, - "name": { - "full_name": "Kirsten Rydland", - "display_name": "Kirsten Rydland", - "name_romanized": null, - "name_tokens": [ - "KIRSTEN", - "RYDLAND" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Kirsten Rydland", - "linkedin_url": "https://www.linkedin.com/in/kirsten-rydland-a667512", - "headline": "", - "location": "Nordland, Norway (NO)", - "connections": "89 connections • 91 followers", - "about": "", - "experience": [], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/kirsten-rydland-a667512_20251214T103907Z.json", - "observed_on": "2025-12-14T10:39:07.565174+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.530069+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/kirsten-rydland-a667512_20251214T103907Z.json" - ] - }, - "linkedin_slug": "kirsten-rydland-a667512" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARCO-HESSELINK.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARCO-HESSELINK.json deleted file mode 100644 index 69f0dfd89a..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARCO-HESSELINK.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARCO-HESSELINK", - "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": [ - "MARCO", - "HESSELINK" - ] - }, - "name": { - "full_name": "Marco Hesselink", - "display_name": "Marco Hesselink", - "name_romanized": null, - "name_tokens": [ - "MARCO", - "HESSELINK" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at Dienst Uitvoering Onderwijs (Ministerie van OCW)" - }, - "affiliations": [], - "profile_data": { - "name": "Marco Hesselink", - "linkedin_url": "https://www.linkedin.com/in/marco-hesselink-61a793186", - "headline": "technisch applicatie beheerder at Dienst Uitvoering Onderwijs (Ministerie van OCW)", - "location": "Greater Groningen Area (NL)", - "connections": "57 connections • 57 followers", - "about": "Total Experience: 9 years and 2 months", - "experience": [], - "education": [], - "skills": [ - "operations" - ], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C4E03AQFZUkHeAV4BzA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1612990253094?e=2147483647&v=beta&t=S64vKqVLSmaMBJuxgMSzIOioIHdNsRrW4rE1NC_5_eA" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/marco-hesselink-61a793186_20251214T112213Z.json", - "observed_on": "2025-12-14T11:22:13.994762+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.663438+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/marco-hesselink-61a793186_20251214T112213Z.json" - ] - }, - "linkedin_slug": "marco-hesselink-61a793186" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARGA-THIJM.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARGA-THIJM.json deleted file mode 100644 index c8e6db5782..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARGA-THIJM.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARGA-THIJM", - "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": [ - "MARGA", - "THIJM" - ] - }, - "name": { - "full_name": "marga thijm", - "display_name": "marga thijm", - "name_romanized": null, - "name_tokens": [ - "MARGA", - "THIJM" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "M" - ], - "rationale": "Identified as heritage staff at Van Gogh Museum" - }, - "affiliations": [], - "profile_data": { - "name": "marga thijm", - "linkedin_url": "https://www.linkedin.com/in/marga-thijm-20237340", - "headline": "", - "location": "Netherlands (NL)", - "connections": "92 connections • 1 followers", - "about": "Pensionada Total Experience: 29 years and 2 months", - "experience": [], - "education": [], - "skills": [ - "security" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/marga-thijm-20237340_20251214T110318Z.json", - "observed_on": "2025-12-14T11:03:18.236849+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.622594+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/marga-thijm-20237340_20251214T110318Z.json" - ] - }, - "linkedin_slug": "marga-thijm-20237340" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARK-CORBOULD.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARK-CORBOULD.json deleted file mode 100644 index 4651b27fc2..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARK-CORBOULD.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARK-CORBOULD", - "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": [ - "MARK", - "CORBOULD" - ] - }, - "name": { - "full_name": "Mark Corbould", - "display_name": "Mark Corbould", - "name_romanized": null, - "name_tokens": [ - "MARK", - "CORBOULD" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Mark Corbould", - "linkedin_url": "https://www.linkedin.com/in/mark-corbould-18258a75", - "headline": "Assistant Director-General Information Technology at National Library of Australia", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "29 connections • 34 followers", - "about": "", - "experience": [], - "education": [], - "skills": [ - "director", - "technology", - "information technology" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/mark-corbould-18258a75_20251214T103855Z.json", - "observed_on": "2025-12-14T10:38:55.069004+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.656992+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/mark-corbould-18258a75_20251214T103855Z.json" - ] - }, - "linkedin_slug": "mark-corbould-18258a75" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MAYA-T.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MAYA-T.json deleted file mode 100644 index 8b923c236f..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MAYA-T.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MAYA-T", - "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": [ - "MAYA", - "T" - ] - }, - "name": { - "full_name": "Maya T.", - "display_name": "Maya T.", - "name_romanized": null, - "name_tokens": [ - "MAYA", - "T" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at Ministerie van Buitenlandse Zaken" - }, - "affiliations": [], - "profile_data": { - "name": "Maya T.", - "linkedin_url": "https://www.linkedin.com/in/maya-t-82868a118", - "headline": "Senior Policy Officer at Ministerie van Buitenlandse Zaken", - "location": "Netherlands (NL)", - "connections": "500 connections • 77 followers", - "about": "Total Experience: 2 years and 4 months", - "experience": [], - "education": [], - "skills": [ - "communications", - "research" - ], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/D4E03AQGOt6mvwBAYSA/profile-displayphoto-shrink_200_200/B4EZjh.1fwGoAY-/0/1756138003097?e=2147483647&v=beta&t=fcgXd5ucq_abWf3AYugmzmM0YYWJpIJXhJYzIGFM5vI" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/maya-t-82868a118_20251214T103150Z.json", - "observed_on": "2025-12-14T10:31:50.088722+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.670609+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/maya-t-82868a118_20251214T103150Z.json" - ] - }, - "linkedin_slug": "maya-t-82868a118" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MELANIE-SORENSON.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MELANIE-SORENSON.json deleted file mode 100644 index 04f4544187..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MELANIE-SORENSON.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MELANIE-SORENSON", - "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": [ - "MELANIE", - "SORENSON" - ] - }, - "name": { - "full_name": "Melanie Sorenson", - "display_name": "Melanie Sorenson", - "name_romanized": null, - "name_tokens": [ - "MELANIE", - "SORENSON" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "M" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Melanie Sorenson", - "linkedin_url": "https://www.linkedin.com/in/melanie-sorenson-629b60a8", - "headline": "Paper Conservator at National Library of Australia", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "2 connections • 2 followers", - "about": "", - "experience": [ - { - "title": "Paper Conservator", - "company": "National Library of Australia" - } - ], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/melanie-sorenson-629b60a8_20251214T104008Z.json", - "observed_on": "2025-12-14T10:40:08.860127+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.623966+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/melanie-sorenson-629b60a8_20251214T104008Z.json" - ] - }, - "linkedin_slug": "melanie-sorenson-629b60a8" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MICHELE-HUSTON.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MICHELE-HUSTON.json deleted file mode 100644 index be27dd91c2..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MICHELE-HUSTON.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MICHELE-HUSTON", - "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": [ - "MICHELE", - "HUSTON" - ] - }, - "name": { - "full_name": "Michele Huston", - "display_name": "Michele Huston", - "name_romanized": null, - "name_tokens": [ - "MICHELE", - "HUSTON" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Michele Huston", - "linkedin_url": "https://www.linkedin.com/in/michele-huston-18982a1", - "headline": "", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "20 connections • 20 followers", - "about": "", - "experience": [], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/michele-huston-18982a1_20251214T104002Z.json", - "observed_on": "2025-12-14T10:40:02.589857+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.622815+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/michele-huston-18982a1_20251214T104002Z.json" - ] - }, - "linkedin_slug": "michele-huston-18982a1" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIEKE-VOS.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIEKE-VOS.json deleted file mode 100644 index bd05205fa5..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIEKE-VOS.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIEKE-VOS", - "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": [ - "MIEKE", - "VOS" - ] - }, - "name": { - "full_name": "Mieke de Vos", - "display_name": "Mieke de Vos", - "name_romanized": null, - "name_tokens": [ - "MIEKE", - "VOS" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at Ministerie van Buitenlandse Zaken" - }, - "affiliations": [], - "profile_data": { - "name": "Mieke de Vos", - "linkedin_url": "https://www.linkedin.com/in/mieke-de-vos-986a1467", - "headline": "", - "location": "The Randstad, Netherlands (NL)", - "connections": "175 connections • 175 followers", - "about": "Total Experience: 10 years and 7 months", - "experience": [], - "education": [], - "skills": [], - "languages": [ - { - "language": "Nederlands", - "proficiency": "Native or bilingual proficiency" - } - ], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/mieke-de-vos-986a1467_20251214T103139Z.json", - "observed_on": "2025-12-14T10:31:39.377850+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.621105+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/mieke-de-vos-986a1467_20251214T103139Z.json" - ] - }, - "linkedin_slug": "mieke-de-vos-986a1467" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIHAELA-GOLBAN.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIHAELA-GOLBAN.json deleted file mode 100644 index 1d1767c478..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIHAELA-GOLBAN.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIHAELA-GOLBAN", - "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": [ - "MIHAELA", - "GOLBAN" - ] - }, - "name": { - "full_name": "Mihaela Golban", - "display_name": "Mihaela Golban", - "name_romanized": null, - "name_tokens": [ - "MIHAELA", - "GOLBAN" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Mihaela Golban", - "linkedin_url": "https://www.linkedin.com/in/mihaela-golban-a4585a121", - "headline": "The Librarian at National Library of Romania", - "location": "Romania (RO)", - "connections": "24 connections • 24 followers", - "about": "Total Experience: 33 years and 7 months", - "experience": [], - "education": [ - { - "degree": "Specialist, Letters, translator/interpret", - "institution": "University of Bucharest" - } - ], - "skills": [], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C4D03AQF88zY9rFJpDQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1548789136108?e=2147483647&v=beta&t=69-1YesWHf0aw2YCzha-eYCmNxLx3A89TWMmWjnJdyE" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/mihaela-golban-a4585a121_20251214T103954Z.json", - "observed_on": "2025-12-14T10:39:54.123197+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.668934+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/mihaela-golban-a4585a121_20251214T103954Z.json" - ] - }, - "linkedin_slug": "mihaela-golban-a4585a121" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIRCESCU-AURELIA.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIRCESCU-AURELIA.json deleted file mode 100644 index 8d6e04f6e9..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIRCESCU-AURELIA.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIRCESCU-AURELIA", - "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": [ - "MIRCESCU", - "AURELIA" - ] - }, - "name": { - "full_name": "Mircescu Aurelia", - "display_name": "Mircescu Aurelia", - "name_romanized": null, - "name_tokens": [ - "MIRCESCU", - "AURELIA" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Mircescu Aurelia", - "linkedin_url": "https://www.linkedin.com/in/mircescu-aurelia-41755112a", - "headline": "Head of Cataloguing and Indexing Department at National Library of Romania", - "location": "Romania (RO)", - "connections": "31 connections • 30 followers", - "about": "Total Experience: 16 years and 10 months", - "experience": [], - "education": [], - "skills": [ - "indexing" - ], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C5603AQGr5tiQMlfHjQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1600949028806?e=2147483647&v=beta&t=U5FOk7dLYY9m-AsSpXYJSLktDjZMjLNkxDUJeVc8gYI" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/mircescu-aurelia-41755112a_20251214T103852Z.json", - "observed_on": "2025-12-14T10:38:52.022913+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.545011+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/mircescu-aurelia-41755112a_20251214T103852Z.json" - ] - }, - "linkedin_slug": "mircescu-aurelia-41755112a" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NOVITA-DWIHAPSARI-novita_dwihapsari_27788027.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NOVITA-DWIHAPSARI-novita_dwihapsari_27788027.json index 98dcafa20c..ccc5bd8429 100644 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NOVITA-DWIHAPSARI-novita_dwihapsari_27788027.json +++ b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NOVITA-DWIHAPSARI-novita_dwihapsari_27788027.json @@ -1,15 +1,19 @@ { - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NOVITA-DWIHAPSARI-novita_dwihapsari_27788027", + "ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NOVITA-DWIHAPSARI", "ppid_type": "ID", "ppid_components": { "type": "ID", "first_location": "XX-XX-XXX", - "first_date": "XXXX", + "first_date": "198X", "last_location": "XX-XX-XXX", "last_date": "XXXX", "name_tokens": [ "NOVITA", "DWIHAPSARI" + ], + "first_date_source": "inferred_birth_decade.primary_value", + "first_date_alternatives": [ + "199X" ] }, "name": { @@ -24,7 +28,8 @@ }, "birth_date": { "edtf": "XXXX", - "precision": "unknown" + "precision": "unknown", + "note": "See inferred_birth_decade for heuristic estimate" }, "is_living": true, "heritage_relevance": { @@ -69,8 +74,83 @@ "created_by": "generate_ppids.py", "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/novita-dwihapsari-27788027_20251214T111955Z.json" - ] + ], + "modified_at": "2026-01-09T19:51:22.456358+00:00", + "modified_by": "enrich_ppids.py" }, "linkedin_slug": "novita-dwihapsari-27788027", - "ppid_collision_suffix": "novita_dwihapsari_27788027" + "ppid_collision_suffix": "novita_dwihapsari_27788027", + "ppid_history": [ + { + "previous_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NOVITA-DWIHAPSARI-novita_dwihapsari_27788027", + "new_ppid": "ID_XX-XX-XXX_198X_XX-XX-XXX_XXXX_NOVITA-DWIHAPSARI", + "changed_at": "2026-01-09T19:41:11.816225+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade" + ] + } + ], + "inferred_birth_decade": { + "values": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "edtf_meaning": "one of: 1980s or 1990s", + "precision": "decade_set", + "primary_value": "198X", + "primary_rationale": "1988 is in 198X, but range extends into 199X", + "confidence": "very_low", + "inference_provenance": { + "method": "total_experience_heuristic", + "inference_chain": [ + { + "step": 1, + "observation": "Total Experience pattern found in about field", + "source_field": "profile_data.about", + "source_value": "Total Experience: 15 years" + }, + { + "step": 2, + "calculation": "2026 - 15 = 2011", + "result": "Estimated first job year: 2011", + "assumption": "Total experience represents continuous career from first job" + }, + { + "step": 3, + "assumption": "First job age is approximately 23 (±7 years)", + "rationale": "Assumes first job after typical university completion; Total Experience method has highest uncertainty", + "confidence_impact": "Very high uncertainty; first job age varies ±7 years, plus Total Experience aggregation may be inaccurate" + }, + { + "step": 4, + "calculation": "2011 - 23 = 1988", + "result": "Estimated birth year: 1988", + "range": "1981-1995 (accounting for ±7 year variance)" + }, + { + "step": 5, + "generalization": "Birth year range spans decade boundary", + "input_range": [ + 1981, + 1995 + ], + "output": [ + "198X", + "199X" + ], + "edtf": "[198X,199X]", + "rationale": "Cannot determine which decade with certainty; using EDTF 'one of' set notation" + } + ], + "assumptions": [ + "Entry age for education/first job: 23 years (±7)", + "Career records are complete in LinkedIn profile" + ], + "boundary_note": "Birth year estimate 1988 spans decades 198X/199X", + "inferred_at": "2026-01-09T19:51:22.358831+00:00", + "inferred_by": "enrich_ppids.py" + } + } } \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PAM-GATENBY.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PAM-GATENBY.json deleted file mode 100644 index 0db381a9f5..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PAM-GATENBY.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PAM-GATENBY", - "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": [ - "PAM", - "GATENBY" - ] - }, - "name": { - "full_name": "Pam Gatenby", - "display_name": "Pam Gatenby", - "name_romanized": null, - "name_tokens": [ - "PAM", - "GATENBY" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Pam Gatenby", - "linkedin_url": "https://www.linkedin.com/in/pam-gatenby-67636b9", - "headline": "Assistant Director General, Collections Management at National Library of Australia", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "1 connections • 1 followers", - "about": "", - "experience": [], - "education": [], - "skills": [ - "director", - "collections", - "management", - "collections management" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/pam-gatenby-67636b9_20251214T103838Z.json", - "observed_on": "2025-12-14T10:38:38.112911+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.660087+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/pam-gatenby-67636b9_20251214T103838Z.json" - ] - }, - "linkedin_slug": "pam-gatenby-67636b9" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PE-ZAR.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PE-ZAR.json deleted file mode 100644 index f7ff120172..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PE-ZAR.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PE-ZAR", - "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": [ - "PE", - "ZAR" - ] - }, - "name": { - "full_name": "Pe Thein Zar", - "display_name": "Pe Thein Zar", - "name_romanized": null, - "name_tokens": [ - "PE", - "ZAR" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Pe Thein Zar", - "linkedin_url": "https://www.linkedin.com/in/pe-thein-zar-54b79557", - "headline": "Librarian Burmese Section at National Library Australia", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "36 connections • 36 followers", - "about": "", - "experience": [ - { - "title": "Librarian Burmese Section", - "company": "National Library Australia (Current)" - }, - { - "title": "Librarian Burmese Section", - "company": "National Library Australia (Current)" - } - ], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/pe-thein-zar-54b79557_20251214T104008Z.json", - "observed_on": "2025-12-14T10:40:08.170860+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.517998+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/pe-thein-zar-54b79557_20251214T104008Z.json" - ] - }, - "linkedin_slug": "pe-thein-zar-54b79557" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PHILLIP-HALLIDAY.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PHILLIP-HALLIDAY.json deleted file mode 100644 index 585ccaf272..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PHILLIP-HALLIDAY.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PHILLIP-HALLIDAY", - "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": [ - "PHILLIP", - "HALLIDAY" - ] - }, - "name": { - "full_name": "Phillip Halliday", - "display_name": "Phillip Halliday", - "name_romanized": null, - "name_tokens": [ - "PHILLIP", - "HALLIDAY" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "D" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Phillip Halliday", - "linkedin_url": "https://www.linkedin.com/in/testinginaustralia", - "headline": "Test Manager / Lead Test Analyst / Automation Tester / Release Manager / Quality Assurance professional", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "", - "about": "Sorry, I am not seeking a new role for myself until Jan 2022 - unless it is irresistible. A software testing professional with over 10 years’ experience in the IT industry. I have worked on the development of web applications, web pages, COTS and APIs within government environments. I have a proven track record of developing new business solutions and motivating teams to consistently exceed targets. I’ve recently completed the introduction of technical efficiencies that resulted in improved security and accessibility of the Library’s web applications. I 'm in the process of introducing a complete E2E UI automation testing solution for the National Library of Australia using a hybrid of linear and module frameworks and will soon be seeking a new professional challenge. Total Experience: 5 years and 3 months", - "experience": [], - "education": [], - "skills": [ - "software", - "testing", - "apis", - "government", - "security", - "accessibility", - "ui", - "automation", - "projects", - "iso", - "agile", - "validation", - "management", - "collaboration", - "components", - "reports", - "analysis", - "workflow", - "planning", - "legal", - "software testing", - "web applications", - "acceptance testing", - "test management", - "user acceptance testing" - ], - "languages": [], - "profile_image_url": "" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/testinginaustralia_20251214T104006Z.json", - "observed_on": "2025-12-14T10:40:06.793583+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.517146+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/testinginaustralia_20251214T104006Z.json" - ] - }, - "linkedin_slug": "testinginaustralia" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_QUENTIN-SLADE.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_QUENTIN-SLADE.json deleted file mode 100644 index 905fb9e8d8..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_QUENTIN-SLADE.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_QUENTIN-SLADE", - "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": [ - "QUENTIN", - "SLADE" - ] - }, - "name": { - "full_name": "Quentin Slade", - "display_name": "Quentin Slade", - "name_romanized": null, - "name_tokens": [ - "QUENTIN", - "SLADE" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Quentin Slade", - "linkedin_url": "https://www.linkedin.com/in/quentin-slade-bb547153", - "headline": "public service at National Library of Australia", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "26 connections • 29 followers", - "about": "", - "experience": [ - { - "title": "Public Service", - "company": "National Library of Australia" - } - ], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/quentin-slade-bb547153_20251214T103842Z.json", - "observed_on": "2025-12-14T10:38:42.961044+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.628940+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/quentin-slade-bb547153_20251214T103842Z.json" - ] - }, - "linkedin_slug": "quentin-slade-bb547153" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RACHEL-PISTOL.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RACHEL-PISTOL.json deleted file mode 100644 index a6557b683d..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RACHEL-PISTOL.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RACHEL-PISTOL", - "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": [ - "RACHEL", - "PISTOL" - ] - }, - "name": { - "full_name": "Rachel Pistol", - "display_name": "Rachel Pistol", - "name_romanized": null, - "name_tokens": [ - "RACHEL", - "PISTOL" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "R" - ], - "rationale": "Identified as heritage staff at EHRI European Holocaust Research Infrastructure" - }, - "affiliations": [], - "profile_data": { - "name": "Rachel Pistol", - "linkedin_url": "https://www.linkedin.com/in/rachel-pistol-b40253243", - "headline": "", - "location": "Ottery St Mary, England, United Kingdom (GB)", - "connections": "500 connections • 708 followers", - "about": "", - "experience": [], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/rachel-pistol-b40253243_20251214T113122Z.json", - "observed_on": "2025-12-14T11:31:22.654508+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.713308+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/rachel-pistol-b40253243_20251214T113122Z.json" - ] - }, - "linkedin_slug": "rachel-pistol-b40253243" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROB-WILLIS.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROB-WILLIS.json deleted file mode 100644 index 382c663dc3..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROB-WILLIS.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROB-WILLIS", - "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", - "WILLIS" - ] - }, - "name": { - "full_name": "Rob Willis", - "display_name": "Rob Willis", - "name_romanized": null, - "name_tokens": [ - "ROB", - "WILLIS" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Rob Willis", - "linkedin_url": "https://www.linkedin.com/in/rob-willis-0a5a4559", - "headline": "Folklore and Social History Interviewer at National Library of Australia. Performance and radio production.", - "location": "New South Wales, Australia (AU)", - "connections": "132 connections • 134 followers", - "about": "Total Experience: 40 years and 1 month", - "experience": [], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C4E03AQED8FDwjjqhSg/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1563926864871?e=2147483647&v=beta&t=S2VHHQTQGUpxD718gds2G0PWKWrM-dqc3Mpc4Q1MJhE" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/rob-willis-0a5a4559_20251214T103758Z.json", - "observed_on": "2025-12-14T10:37:58.196665+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.520414+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/rob-willis-0a5a4559_20251214T103758Z.json" - ] - }, - "linkedin_slug": "rob-willis-0a5a4559" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROBERT-WESTERHOF.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROBERT-WESTERHOF.json deleted file mode 100644 index 21e326c379..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROBERT-WESTERHOF.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROBERT-WESTERHOF", - "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": [ - "ROBERT", - "WESTERHOF" - ] - }, - "name": { - "full_name": "Robert Westerhof", - "display_name": "Robert Westerhof", - "name_romanized": null, - "name_tokens": [ - "ROBERT", - "WESTERHOF" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "E" - ], - "rationale": "Primary school teacher (leerkracht basisonderwijs) - education provider role" - }, - "affiliations": [], - "profile_data": { - "name": "Robert Westerhof", - "linkedin_url": "https://www.linkedin.com/in/robert-westerhof-8aa5117", - "headline": "Leerkracht bo/ ICT/ iCOACH / Digicoach /Natuurfotograaf", - "current_position": "Leerkracht En ICT'er at Basisschool de Meander", - "location": "Netherlands", - "connections": "195 connections", - "about": null, - "total_experience": "20 years and 7 months", - "experience": [ - { - "title": "Leerkracht En ICT'er", - "company": "Basisschool de Meander", - "duration": "Apr 2005 - Present", - "location": "Ootmarsum", - "description": "Department: Education • Level: Specialist" - } - ], - "education": [], - "certifications": [], - "skills": [ - "ict" - ], - "languages": [], - "publications": [], - "courses": [], - "awards": [], - "organizations": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/D5603AQHiBGsqVMqydQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1673364771606?e=2147483647&v=beta&t=ZS9-ZwVv3FeDUtBLVbyEhbNrMbRCukcel_rWB9A_owU" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/robert-westerhof-8aa5117_20251212T180000Z.json", - "observed_on": "2025-12-12T18:00:00Z", - "extraction_agent": "claude-opus-4.5" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.695027+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/robert-westerhof-8aa5117_20251212T180000Z.json" - ] - }, - "linkedin_slug": "robert-westerhof-8aa5117" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SNEZANA-MIHAJLOVIC.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SNEZANA-MIHAJLOVIC.json deleted file mode 100644 index 16e7e617e9..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SNEZANA-MIHAJLOVIC.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SNEZANA-MIHAJLOVIC", - "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": [ - "SNEZANA", - "MIHAJLOVIC" - ] - }, - "name": { - "full_name": "Snezana Mihajlovic", - "display_name": "Snezana Mihajlovic", - "name_romanized": null, - "name_tokens": [ - "SNEZANA", - "MIHAJLOVIC" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "L" - ], - "rationale": "Identified as heritage staff at National Library of Australia" - }, - "affiliations": [], - "profile_data": { - "name": "Snezana Mihajlovic", - "linkedin_url": "https://www.linkedin.com/in/snezana-mihajlovic-04114141", - "headline": "Java Developer at National Library of Australia", - "location": "Canberra, Australian Capital Territory, Australia (AU)", - "connections": "52 connections • 55 followers", - "about": "Total Experience: 2 years", - "experience": [ - { - "title": "Java Developer", - "company": "National Library of Australia" - } - ], - "education": [], - "skills": [ - "java" - ], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/snezana-mihajlovic-04114141_20251214T103826Z.json", - "observed_on": "2025-12-14T10:38:26.292847+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.641140+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/snezana-mihajlovic-04114141_20251214T103826Z.json" - ] - }, - "linkedin_slug": "snezana-mihajlovic-04114141" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUZI-VARGA.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUZI-VARGA.json deleted file mode 100644 index e93157bb79..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUZI-VARGA.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUZI-VARGA", - "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": [ - "SUZI", - "VARGA" - ] - }, - "name": { - "full_name": "Suzi Varga", - "display_name": "Suzi Varga", - "name_romanized": null, - "name_tokens": [ - "SUZI", - "VARGA" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "M" - ], - "rationale": "Identified as heritage staff at Nederlands Openluchtmuseum" - }, - "affiliations": [], - "profile_data": { - "name": "Suzi Varga", - "linkedin_url": "https://www.linkedin.com/in/suzi-varga-0141218", - "headline": "Drs. at Nederlands Openluchtmuseum", - "location": "Netherlands (NL)", - "connections": "239 connections • 243 followers", - "about": "Total Experience: 16 years", - "experience": [ - { - "title": "Drs.", - "company": "Nederlands Openluchtmuseum" - } - ], - "education": [ - { - "institution": "Utrecht University" - } - ], - "skills": [], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/suzi-varga-0141218_20251214T110706Z.json", - "observed_on": "2025-12-14T11:07:06.068669+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.539507+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/suzi-varga-0141218_20251214T110706Z.json" - ] - }, - "linkedin_slug": "suzi-varga-0141218" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TSAMARA-NUGRAHA.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TSAMARA-NUGRAHA.json deleted file mode 100644 index ad8b978b79..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TSAMARA-NUGRAHA.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TSAMARA-NUGRAHA", - "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": [ - "TSAMARA", - "NUGRAHA" - ] - }, - "name": { - "full_name": "Tsamara Hasanah Nugraha", - "display_name": "Tsamara Hasanah Nugraha", - "name_romanized": null, - "name_tokens": [ - "TSAMARA", - "NUGRAHA" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "E" - ], - "rationale": "Identified as heritage staff at Ministry of Tourism of the Republic of Indonesia" - }, - "affiliations": [], - "profile_data": { - "name": "Tsamara Hasanah Nugraha", - "linkedin_url": "https://www.linkedin.com/in/tsamarahasanah", - "headline": "Student at School of Business Management, Institut Teknologi Bandung", - "location": "Bandung, West Java, Indonesia (ID)", - "connections": "35 connections • 35 followers", - "about": "", - "experience": [], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/tsamarahasanah_20251214T112028Z.json", - "observed_on": "2025-12-14T11:20:28.390824+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.537529+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/tsamarahasanah_20251214T112028Z.json" - ] - }, - "linkedin_slug": "tsamarahasanah" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VINCENT-KAMP.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VINCENT-KAMP.json deleted file mode 100644 index a1d3db416c..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VINCENT-KAMP.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VINCENT-KAMP", - "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", - "KAMP" - ] - }, - "name": { - "full_name": "Vincent van der Kamp", - "display_name": "Vincent van der Kamp", - "name_romanized": null, - "name_tokens": [ - "VINCENT", - "KAMP" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "M" - ], - "rationale": "Identified as heritage staff at Nederlands Openluchtmuseum" - }, - "affiliations": [], - "profile_data": { - "name": "Vincent van der Kamp", - "linkedin_url": "https://www.linkedin.com/in/vvanderkamp", - "headline": "Grafisch Vormgever bij het Nederlands Openluchtmuseum", - "location": "", - "connections": "500 connections • 622 followers", - "about": "Specialisme: Adobe Creative Cloud Adobe Illustrator, Adobe Photoshop, Adobe Dimension, Adobe After Effects Adobe InDesign, Adobe Acrobat. Total Experience: 6 years and 5 months", - "experience": [], - "education": [], - "skills": [ - "adobe", - "creative", - "cloud", - "illustrator", - "photoshop", - "indesign", - "adobe illustrator", - "adobe photoshop", - "adobe indesign", - "adobe acrobat", - "adobe creative cloud" - ], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/D4E03AQFbR2O1KaMkRw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1723200618894?e=2147483647&v=beta&t=rf7i6VnVZ-vm1BTwIGh5nGGa0muImC9b9pFn2hWEmic" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/vvanderkamp_20251214T110624Z.json", - "observed_on": "2025-12-14T11:06:24.782471+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.645291+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/vvanderkamp_20251214T110624Z.json" - ] - }, - "linkedin_slug": "vvanderkamp" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VIOLETTA-RIJTHOVEN.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VIOLETTA-RIJTHOVEN.json deleted file mode 100644 index d5c08eb78c..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VIOLETTA-RIJTHOVEN.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VIOLETTA-RIJTHOVEN", - "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": [ - "VIOLETTA", - "RIJTHOVEN" - ] - }, - "name": { - "full_name": "Violetta Rijthoven", - "display_name": "Violetta Rijthoven", - "name_romanized": null, - "name_tokens": [ - "VIOLETTA", - "RIJTHOVEN" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at Dienst Uitvoering Onderwijs (Ministerie van OCW)" - }, - "affiliations": [], - "profile_data": { - "name": "Violetta Rijthoven", - "linkedin_url": "https://www.linkedin.com/in/violetta-rijthoven-53074765", - "headline": "Managementondersteuner bij het ministerie van OCW", - "location": "Netherlands (NL)", - "connections": "57 connections • 59 followers", - "about": "Total Experience: 18 years and 2 months", - "experience": [], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/D4E03AQEWf49hKPH0eA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1711567602945?e=2147483647&v=beta&t=oWB4Xvktvx3kjpU4V0RijIgNczOF3Dm74eXkhbt6flM" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/violetta-rijthoven-53074765_20251214T112247Z.json", - "observed_on": "2025-12-14T11:22:47.798281+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.640882+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/violetta-rijthoven-53074765_20251214T112247Z.json" - ] - }, - "linkedin_slug": "violetta-rijthoven-53074765" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_WILMA-SIGTERMANS.json b/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_WILMA-SIGTERMANS.json deleted file mode 100644 index 2218465525..0000000000 --- a/data/person/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_WILMA-SIGTERMANS.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_WILMA-SIGTERMANS", - "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": [ - "WILMA", - "SIGTERMANS" - ] - }, - "name": { - "full_name": "Wilma Palstra - Sigtermans", - "display_name": "Wilma Palstra - Sigtermans", - "name_romanized": null, - "name_tokens": [ - "WILMA", - "SIGTERMANS" - ], - "source": "linkedin_profile" - }, - "birth_date": { - "edtf": "XXXX", - "precision": "unknown" - }, - "is_living": true, - "heritage_relevance": { - "is_heritage_relevant": true, - "heritage_types": [ - "O" - ], - "rationale": "Identified as heritage staff at Dienst Uitvoering Onderwijs (Ministerie van OCW)" - }, - "affiliations": [], - "profile_data": { - "name": "Wilma Palstra - Sigtermans", - "linkedin_url": "https://www.linkedin.com/in/wilma-palstra-sigtermans-78b6a38b", - "headline": "Senior voorlichter bij het informatiecentrum Onderwijs bij Dienst Uitvoering Onderwijs (Ministerie van OCW)", - "location": "The Randstad, Netherlands (NL)", - "connections": "16 connections • 16 followers", - "about": "Total Experience: 11 years and 2 months", - "experience": [], - "education": [], - "skills": [], - "languages": [], - "profile_image_url": "https://media.licdn.com/dms/image/v2/C4E03AQEmECqbcQ9kwA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1517364973412?e=2147483647&v=beta&t=htEv8jcwJadyX5YBMeZcU5uI9JZdjlbikhS4Sc6A6nw" - }, - "web_claims": [], - "source_observations": [ - { - "source_file": "/Users/kempersc/apps/glam/data/custodian/person/entity/wilma-palstra-sigtermans-78b6a38b_20251214T112300Z.json", - "observed_on": "2025-12-14T11:23:00.977528+00:00", - "extraction_agent": "claude-sonnet-4-20250514" - } - ], - "enrichment_metadata": { - "birth_date_search": { - "attempted": false, - "notes": "Not yet searched - requires manual enrichment" - } - }, - "provenance": { - "created_at": "2026-01-09T17:29:48.540014+00:00", - "created_by": "generate_ppids.py", - "source_files": [ - "/Users/kempersc/apps/glam/data/custodian/person/entity/wilma-palstra-sigtermans-78b6a38b_20251214T112300Z.json" - ] - }, - "linkedin_slug": "wilma-palstra-sigtermans-78b6a38b" -} \ No newline at end of file diff --git a/data/person/ID_XX-XX-XXX_200X_NL-NB-VEL_XXXX_MATTHEW-THORBURN.json b/data/person/ID_ZA-11-CT_200X_NL-NB-VEL_XXXX_MATTHEW-THORBURN.json similarity index 67% rename from data/person/ID_XX-XX-XXX_200X_NL-NB-VEL_XXXX_MATTHEW-THORBURN.json rename to data/person/ID_ZA-11-CT_200X_NL-NB-VEL_XXXX_MATTHEW-THORBURN.json index 352752730a..a36a29483f 100644 --- a/data/person/ID_XX-XX-XXX_200X_NL-NB-VEL_XXXX_MATTHEW-THORBURN.json +++ b/data/person/ID_ZA-11-CT_200X_NL-NB-VEL_XXXX_MATTHEW-THORBURN.json @@ -1,9 +1,9 @@ { - "ppid": "ID_XX-XX-XXX_200X_NL-NB-VEL_XXXX_MATTHEW-THORBURN", + "ppid": "ID_ZA-11-CT_200X_NL-NB-VEL_XXXX_MATTHEW-THORBURN", "ppid_type": "ID", "ppid_components": { "type": "ID", - "first_location": "XX-XX-XXX", + "first_location": "ZA-11-CT", "first_date": "200X", "last_location": "NL-NB-VEL", "last_date": "XXXX", @@ -15,7 +15,8 @@ "last_location_source": "inferred_current_settlement", "first_date_alternatives": [ "199X" - ] + ], + "first_location_source": "inferred_birth_settlement" }, "name": { "full_name": "Matthew Thorburn", @@ -107,7 +108,7 @@ "source_files": [ "/Users/kempersc/apps/glam/data/custodian/person/entity/matthew-thorburn-59ba481b4_20251214T111219Z.json" ], - "modified_at": "2026-01-09T19:18:15.586013+00:00", + "modified_at": "2026-01-09T19:51:12.221435+00:00", "modified_by": "enrich_ppids.py" }, "linkedin_slug": "matthew-thorburn-59ba481b4", @@ -121,6 +122,16 @@ "inferred_birth_decade", "inferred_current_settlement" ] + }, + { + "previous_ppid": "ID_XX-XX-XXX_200X_NL-NB-VEL_XXXX_MATTHEW-THORBURN", + "new_ppid": "ID_ZA-11-CT_200X_NL-NB-VEL_XXXX_MATTHEW-THORBURN", + "changed_at": "2026-01-09T19:51:12.221432+00:00", + "reason": "observation_based_inference", + "inferred_fields": [ + "inferred_birth_decade", + "inferred_birth_settlement" + ] } ], "inferred_birth_decade": { @@ -135,7 +146,7 @@ "primary_rationale": "2000 is in 200X, but range extends into 199X", "confidence": "very_low", "inference_provenance": { - "method": "earliest_observation_heuristic", + "method": "earliest_education_heuristic", "inference_chain": [ { "step": 1, @@ -184,7 +195,77 @@ "Career records are complete in LinkedIn profile" ], "boundary_note": "Birth year estimate 2000 spans decades 199X/200X", - "inferred_at": "2026-01-09T19:18:15.584059+00:00", + "inferred_at": "2026-01-09T19:51:12.193362+00:00", + "inferred_by": "enrich_ppids.py" + } + }, + "inferred_birth_settlement": { + "value": "Cape Town", + "formatted": "ZA-11-CT", + "country_code": "ZA", + "region_code": "11", + "settlement_code": "CT", + "confidence": "low", + "inference_provenance": { + "method": "earliest_education_location", + "inference_chain": [ + { + "step": 1, + "observation": "Earliest education institution identified", + "source_field": "profile_data.education", + "source_value": { + "institution": "University of Cape Town", + "date_range": "2018 - 2021 • 3 years", + "degree": "Bachelor of Engineering - BE, Electrical and Computer Engineering" + } + }, + { + "step": 2, + "lookup": "Institution location mapping", + "mapping_source": "DUTCH_UNI_LOCATIONS dictionary", + "mapping_key": "University of Cape Town", + "mapping_result": "Cape Town, South Africa" + }, + { + "step": 3, + "geocoding": "GeoNames resolution", + "query": "Cape Town, South Africa", + "result": { + "geonames_id": 3369157, + "geonames_name": "Cape Town", + "admin1_code": "11", + "admin1_name": "Western Cape", + "feature_code": "PPLA", + "latitude": -33.92584, + "longitude": 18.42322 + } + }, + { + "step": 4, + "formatting": "CC-RR-PPP generation", + "components": { + "country_code": "ZA", + "region_code": "11", + "settlement_code": "CT" + }, + "result": "ZA-11-CT" + } + ], + "assumptions": [ + "Student attended school near birth/family residence", + "Institution location is representative of early life location" + ], + "assumption_note": "University location used as proxy for birth settlement; student may have relocated for education", + "geonames_data": { + "geonames_id": 3369157, + "geonames_name": "Cape Town", + "admin1_code": "11", + "admin1_name": "Western Cape", + "feature_code": "PPLA", + "latitude": -33.92584, + "longitude": 18.42322 + }, + "inferred_at": "2026-01-09T19:51:12.221417+00:00", "inferred_by": "enrich_ppids.py" } }