العودة إلى Reference
المحتويات
13,941 كلمة
Nov 13, 2026

Heratio Help Center article. Category: Technical.

Heratio - Database ERD

Version: 2.8.2 Last Updated: March 2026


1. Core Extension Tables (Heratio)

2 tables — Plugin registry and centralized settings.

Tables

["atom_plugin","ahg_settings"]

ERD Diagram

COREEXTENSIONTABLESERDHeratioPlugin&SettingsLayeratom_plugin(116rows)PKidbigintunsignednamevarchar(255)UQ◄e.g."ahgThemeB5Plugin"class_namevarchar(255)◄PHPclassnameversionvarchar(50)descriptiontextauthorvarchar(255)categoryvarchar(100)◄themesecuritysectorcapabilityis_enabledtinyint(1)◄0=disabled,1=enabledis_coretinyint(1)◄1=cannotbedisabledis_lockedtinyint(1)◄1=cannotbemodifiedstatusENUM(installed/enabled/disabled/pending_removal)load_orderint◄Lower=loadsfirstplugin_pathvarchar(500)◄Filesystempathsettingsjson◄Pluginconfigurationrecord_check_querytext◄SQLtoverifyplugindataenabled_attimestampdisabled_attimestampcreated_attimestampupdated_attimestampahg_settings(276rows)PKidintsetting_keyvarchar(100)UQ◄e.g."iiif_viewer_enabled"setting_valuetextsetting_typeENUM(string/integer/boolean/json/float)setting_groupvarchar(50)◄e.g.general,iiif,ingest,mediadescriptionvarchar(500)is_sensitivetinyint(1)◄1=maskinUIFKupdated_byint►user.idupdated_atdatetimecreated_atdatetimeLOADINGSEQUENCE:ProjectConfiguration.class.phpSELECTnameFROMatom_pluginWHEREis_enabled=1ORDERBYload_orderenablePlugins($plugins)SETTINGSACCESS:AhgSettingsService::get('key','default')AhgSettingsService::getBool('key')AhgSettingsService::getGroup('group_name')

2. Audit Trail ERD (ahgAuditTrailPlugin)

6 tables — Comprehensive audit logging with field-level change tracking, access logging, and authentication events.

Tables

["audit_log","ahg_audit_log","ahg_audit_access","ahg_audit_authentication","ahg_audit_retention_policy","ahg_audit_settings"]

ERD Diagram

ahgAuditTrailPlugin—AuditTrailERDCompliance/InternationalComplianceAuditLoggingaudit_log(field-level)PKidbiginttable_namevarchar(100)◄e.g."information_object"record_idint◄PKofchangedrecordactionENUM(create/update/delete)field_namevarchar(100)◄specificfieldchangedold_valuetextnew_valuetextold_recordjson◄fullrecordsnapshot(create/delete)new_recordjsonuser_idintusernamevarchar(255)ip_addressvarchar(45)user_agentvarchar(500)modulevarchar(100)action_descriptionvarchar(255)created_atdatetimeahg_audit_log(entity-level,122rows)PKidbigintunsigneduuidchar(36)UQ◄uniqueeventidentifierFKuser_idint►user.idusernamevarchar(255)user_emailvarchar(255)ip_addressvarchar(45)user_agentvarchar(500)session_idvarchar(128)actionvarchar(50)◄view,edit,delete,download,etc.entity_typevarchar(100)◄informationobject,actor,etc.entity_idintentity_slugvarchar(255)entity_titlevarchar(500)modulevarchar(100)action_namevarchar(100)request_methodvarchar(10)request_urivarchar(2000)old_valuesjsonnew_valuesjsonchanged_fieldsjson◄listoffieldnameschangedmetadatajson◄extracontextdatasecurity_classificationvarchar(50)◄classificationattimeofaccessstatusvarchar(20)◄success,denied,errorerror_messagetextcreated_attimestampculture_idintahg_audit_access(file/entityaccess)PKidbigintunsigneduuidchar(36)UQFKuser_idint►user.idusernamevarchar(255)ip_addressvarchar(45)access_typevarchar(50)◄view,download,print,streamentity_typevarchar(100)entity_idintentity_slugvarchar(255)entity_titlevarchar(500)security_classificationvarchar(50)security_clearance_levelintunsignedclearance_verifiedtinyint(1)◄wasclearancecheckpassed?file_pathvarchar(1000)file_namevarchar(255)file_mime_typevarchar(100)file_sizebigintunsignedstatusvarchar(20)◄success,denieddenial_reasonvarchar(255)metadatajsoncreated_attimestampahg_audit_authentication(31rows)PKidbigintunsigneduuidchar(36)UQevent_typevarchar(50)◄login,logout,login_failed,2faFKuser_idint►user.idusernamevarchar(255)ip_addressvarchar(45)user_agentvarchar(500)session_idvarchar(128)statusvarchar(20)◄success,failedfailure_reasonvarchar(255)failed_attemptsintunsignedmetadatajsoncreated_attimestampahg_audit_retention_policyahg_audit_settings(4rows)PKidintunsignedPKidintunsignedlog_typevarchar(50)UQsetting_keyvarchar(100)UQretention_daysintunsignedsetting_valuetextarchive_before_deletetinyint(1)setting_typevarchar(20)archive_pathvarchar(500)descriptiontextlast_cleanup_attimestampcreated_attimestampcreated_attimestampupdated_attimestampupdated_attimestampDUALLOGPATTERN:audit_logfield-levelchangetracking(old/newperfield)ahg_audit_logentity-leveleventtracking(UUID,securityclassification)ahg_audit_accessfile/digitalobjectaccesswithclearanceverificationahg_audit_authenticationlogin/logout/2FAeventsGLAM/DAM&INFORMATIONOBJECTLINKS:audit_log.object_id►object.id(Heratiocore—anyentity)ahg_audit_log.entity_type►informationobjectactoraccessionrepository...ahg_audit_log.entity_id►PolymorphicFKtoanyHeratioentityahg_audit_access.object_id►digital_object/information_object(fileaccess)ahg_audit_access.security_classification_id►security_classification.idAlltables:user_id►user.id(extendsactor.idinHeratio)

3. Privacy & Compliance ERD (ahgPrivacyPlugin)

33 tables across 7 subsystems: Breach Management, Consent, DSAR/PAIA Requests, Jurisdiction/Governance, Data Inventory, Administration, Visual Redaction.

Tables

["privacy_breach","privacy_breach_i18n","privacy_breach_incident","privacy_breach_notification","privacy_consent","privacy_consent_i18n","privacy_consent_log","privacy_consent_record","privacy_dsar","privacy_dsar_i18n","privacy_dsar_log","privacy_dsar_request","privacy_paia_request","privacy_complaint","privacy_jurisdiction","privacy_jurisdiction_registry","privacy_lawful_basis","privacy_compliance_rule","privacy_data_inventory","privacy_processing_activity","privacy_processing_activity_i18n","privacy_retention_schedule","privacy_special_category","privacy_request_type","privacy_officer","privacy_institution_config","privacy_config","privacy_notification","privacy_approval_log","privacy_audit_log","privacy_template","privacy_redaction_cache","privacy_visual_redaction"]

ERD Diagram

ahgPrivacyPlugin—Privacy&ComplianceERDCompliance/GDPR/CCPA/PIPEDA/NDPA/DPA/CDPA(7jurisdictions)BREACHMANAGEMENTprivacy_breachPKidintunsignedreference_numbervarchar(50)UQ◄e.g.BREACH-2026-001jurisdictionvarchar(30)◄popia,gdpr,ccpa,etc.breach_typeENUM(confidentiality/integrity/availability)severityENUM(low/medium/high/critical)statusENUM(detected/investigating/contained/resolved/closed)detected_datedatetimeoccurred_datedatetimecontained_datedatetimeresolved_datedatetimedata_subjects_affectedintdata_categories_affectedtextnotification_requiredtinyint(1)regulator_notifiedtinyint(1)regulator_notified_datedatetimesubjects_notifiedtinyint(1)subjects_notified_datedatetimerisk_to_rightsENUM(unlikely/possible/likely/high)assigned_tointcreated_byintcreated_at/updated_atprivacy_breach_privacy_breach_notificationprivacy_breach_incidenti18nPKidintunsignedPKidintunsignedPKid(FK)FKbreach_idintunsignedreferencevarchar(50)PKculturenotification_typeENUM(incident_datetitleregulator/data_subjectdiscovered_datedescription/internal/third_party)breach_typecauserecipientvarchar(255)descriptiontextimpact_methodENUM(email/letterindividuals_affectedassessment/portal/phone/severityvarchar(50)remedial_in_person)root_causetextactionssent_datedatetimecontainment_actionslessons_acknowledged_datestatusvarchar(50)learnedcontenttextcreated_by/atcreated_by/created_atCONSENTMANAGEMENTprivacy_consentPKidintunsignedconsent_typeENUM(processing/marketing/profiling/third_party/cookies/research/special_category)purpose_codevarchar(50)is_requiredtinyint(1)is_activetinyint(1)valid_from/valid_untildatecreated_at/updated_atprivacy_consent_privacy_consent_logprivacy_consent_recordi18nPKidintunsignedPKidintunsignedPKid(FK)FKconsent_idintunsigneddata_subject_idvarcharPKcultureuser_idintsubject_namevarcharnamesubject_identifiervarcharsubject_emailvarchardescriptionactionENUM(granted/purposevarcharpurpose_withdrawn/expired/consent_giventinyint(1)descriptionrenewed)consent_methodvarchar(50)consent_giventinyint(1)consent_datedatetimeconsent_datedatetimewithdrawal_datedatetimewithdrawal_datedatetimesourcevarchar(100)ip_addressvarchar(45)jurisdictionvarchar(20)user_agenttextip_addressvarchar(45)consent_prooftextstatusvarchar(50)created_atcreated_by/created_atDSAR&PAIAREQUESTSprivacy_dsarprivacy_paia_requestPKidintunsignedPKidintunsignedreference_numbervarchar(50)UQreference_numbervarchar(50)UQjurisdictionvarchar(30)paia_sectionENUM(section_18/22/23/request_typeENUM(access/rectification/50/77)erasure/portability/restriction/objection/requestor_name/email/phonewithdraw_consent)requestor_id_numbervarchar(100)requestor_name/email/phonerequestor_addresstextrequestor_id_type/id_numberrecord_descriptiontextrequestor_addresstextaccess_formENUM(inspect/copy/both)is_verifiedtinyint(1)statusENUM(received/processing/verified_at/verified_bygranted/partially_granted/refused/statusENUM(received/verified/in_progress/transferred/appealed)pending_info/completed/rejected/withdrawn)outcome_reason/refusal_groundspriorityENUM(low/normal/high/urgent)fee_deposit/fee_accessdecimalreceived_date/due_date/completed_datefee_paidtinyint(1)assigned_tointreceived_date/due_date/completedoutcomeENUM(granted/partially_granted/assigned_to/created_byrefused/not_applicable)created_at/updated_atrefusal_reasontextfee_requireddecimal/fee_paidtinyintcreated_by/created_at/updated_atprivacy_complaintPKidintunsignedreference_numbervarchar(50)UQjurisdictionvarchar(20)privacy_dsar_privacy_dsar_logcomplainant_name/email/phonei18ncomplaint_typevarchar(100)PKidintunsigndescriptiontextPKid(FK)FKdsar_iddate_of_incidentdatePKcultureactionv(100)statusENUM(received/investigating/descriptiondetailstextresolved/escalated/closed)notesuser_idassigned_to/resolution/resolvedresponse_ip_addresscreated_at/updated_atsummarycreated_atprivacy_dsar_request(legacy)privacy_request_typePKidintunsignedPKidintunsignedreferencevarchar(50)UQjurisdiction_codevarchar(30)request_typevarchar(50)codevarchar(50)data_subject_name/email/id_typenamevarchar(255)received_date/deadline_datedescriptiontextcompleted_date/status/noteslegal_referencevarchar(100)assigned_to/created_by/created_atresponse_daysintfee_allowedtinyint(1)is_active/sort_orderJURISDICTION&GOVERNANCEprivacy_jurisdictionprivacy_jurisdiction_registryPKidintunsignedPKidintunsignedcodevarchar(30)UQcodevarchar(30)UQnamevarchar(50)name/full_name/country/regionfull_namevarchar(255)regulator/regulator_urlcountryvarchar(100)dsar_days/breach_hoursregionvarchar(50)effective_date/related_lawsjsonregulatorvarchar(255)icon/default_currencyregulator_urlvarchar(255)is_installed/installed_atdsar_daysintis_active/sort_order/config_databreach_hoursintcreated_at/updated_ateffective_datedaterelated_lawsjsoniconvarchar(10)is_active/sort_orderprivacy_lawful_basiscreated_at/updated_atPKidintunsignedjurisdiction_codevarchar(30)code/name/descriptionprivacy_compliance_rulelegal_referencevarchar(100)requires_consent/requires_liaPKidintunsignedis_active/sort_orderjurisdiction_codevarchar(30)categoryvarchar(50)code/name/descriptioncheck_typevarchar(50)privacy_special_categoryfield_name/condition/error_messagelegal_referencevarchar(100)PKidintunsignedseverityENUM(error/warning/info)jurisdiction_codevarchar(30)is_active/sort_ordercode/name/descriptionlegal_referencevarchar(100)requires_explicit_consenttinyint(1)is_active/sort_orderDATAINVENTORY&PROCESSINGprivacy_data_inventoryprivacy_processing_activityPKidintunsignedPKidintunsignedname/descriptionname/descriptiondata_typeENUM(personal/special_category/jurisdictionvarchar(20)children/criminal/financial/health/purposetextbiometric/genetic)lawful_basis/lawful_basis_codestorage_locationvarchar(255)data_categories/data_subjectstextstorage_formatENUM(electronic/paper/both)recipients/transferstextencryptiontinyint(1)third_countriesjsonaccess_controlstextretention_periodvarchar(100)retention_years/disposal_methodsecurity_measurestextis_active/created_at/updated_atdpia_required/completed/datestatus/owner/departmentassigned_officer_idintsubmitted_at/by/approved_at/byprivacy_retention_schedulerejected_at/by/rejection_reasonnext_review_date/created_byPKidintunsignedcreated_at/updated_atrecord_typevarchar(255)descriptiontextretention_periodvarchar(100)retention_yearsintlegal_basisvarchar(255)privacy_processing_activity_i18ndisposal_actionENUM(destroy/archive/anonymize/review)PKid(FK)/PKculturejurisdictionvarchar(30)name/purpose/descriptionis_active/created_at/updated_atADMINISTRATION&SUPPORTprivacy_officerprivacy_institution_configPKidintunsignedPKidintunsignedFKuser_idintrepository_idintUQname/email/phone/titlejurisdiction_codevarchar(30)jurisdictionvarchar(30)organization_namevarchar(255)registration_numbervarcharregistration_number/privacy_officerappointed_datedatedata_protection_emailis_active/created_at/upddsar_response_days/breach_notif_hrsretention_default_years/settingscreated_at/updated_atprivacy_configPKidintunsignedprivacy_notificationjurisdictionvarchar(50)organization_namevarcharPKidintunsignedregistration_numbervarcharFKuser_idintprivacy_officer_idintunsignentity_type/entity_iddata_protection_emailnotification_type/subject/messagedsar_response_daysintlinkvarchar(500)breach_notification_hoursintis_read/read_atretention_default_yearsintemail_sent/email_sent_atis_active/settingsjsoncreated_by/created_atcreated_at/updated_atprivacy_audit_logprivacy_approval_logPKidintunsignedPKidintunsignedentity_type/entity_identity_type/entity_idactionvarchar(50)actionvarchar(50)user_idintold_status/new_statusip_addressvarchar(45)commenttextold_values/new_valuesjsonuser_id/created_atnotestextcreated_atprivacy_templatePKidintunsignedcategoryvarchar(50)◄breach_notification,consent_form,etc.namevarchar(255)contenttextfile_path/file_name/file_sizemime_typevarchar(100)is_active/created_atVISUALREDACTIONprivacy_visual_redactionprivacy_redaction_cachePKidbigintunsignedPKidbigintunsignedobject_idintobject_idintdigital_object_idintdigital_object_idintpage_numberintoriginal_pathvarchar(500)region_typeENUM(rectangle/polygon/freehand)redacted_pathvarchar(500)coordinatesjsonfile_typeENUM(pdf/image)normalizedtinyint(1)regions_hashvarchar(64)sourceENUM(manual/auto_ner/auto_pii/imported)region_countintlinked_entity_idbigintunsignedfile_sizebigintunsignedlabelvarchar(255)generated_atdatetimecolorvarchar(7)expires_atdatetimestatusENUM(pending/approved/applied/rejected)created_by/reviewed_by/reviewed_atapplied_at/created_at/updated_atGLAM/DAM&INFORMATIONOBJECTLINKS:privacy_redaction_cache.object_id►information_object.id(redactedrecord)privacy_visual_redaction.object_id►information_object.id(visualredactiontarget)privacy_institution_config.repository_id►repository.id(per-institutionconfig)privacy_officer.user_id►user.id(extendsactor.idinHeratio)Allaudit/logtables:user_id►user.idEXTERNALREFERENCES:user.id(user_id,assigned_to,created_by,verified_by)information_object.id(object_idviaredactiontables)repository.id(privacy_institution_config)privacy_jurisdiction.code(jurisdiction_code)

Subsystem Summary

Subsystem Tables Purpose
Breach Management privacy_breach, _i18n, _incident, _notification Data breach tracking, notifications, regulatory reporting
Consent privacy_consent, _i18n, _log, _record Consent definitions, individual consent records, withdrawal tracking
DSAR/PAIA Requests privacy_dsar, _i18n, _log, _request, privacy_paia_request, privacy_complaint Data subject access requests (DSAR), SA PAIA requests, complaints
Jurisdiction & Governance privacy_jurisdiction, _registry, _lawful_basis, _compliance_rule, _special_category, _request_type Multi-jurisdiction config, lawful bases, compliance rules
Data Inventory privacy_data_inventory, privacy_processing_activity, _i18n, privacy_retention_schedule Data mapping, processing register (ROPA), retention schedules
Administration privacy_officer, privacy_config, _institution_config, _notification, _approval_log, _audit_log, _template Officers, config, notifications, audit trail, document templates
Visual Redaction privacy_visual_redaction, privacy_redaction_cache Region-based PII redaction on digital objects with caching

4. Security Classification & Embargo ERD (ahgSecurityClearancePlugin)

20 tables across 5 subsystems: Classification Core, User Clearance, Object Classification, Embargo, Access & Audit.

Tables

["security_classification","security_compartment","object_security_classification","object_classification_history","user_security_clearance","user_security_clearance_log","security_clearance_history","security_2fa_session","embargo","embargo_audit","embargo_exception","embargo_i18n","security_access_log","security_access_request","security_access_condition_link","security_audit_log","security_compliance_log","security_declassification_schedule","security_retention_schedule","security_watermark_log"]

ERD Diagram

ahgSecurityClearancePlugin—EntityRelationshipDiagramSecurityClassificationsecurity_classificationsecurity_compartmentPKidintunsigned◄PKidintunsignedcodevarchar(20)UQ►codevarchar(50)UQleveltinyintUQnamevarchar(255)namevarchar(100)descriptiontextdescriptiontextFKmin_clearance_idintunsigned►security_classification.idcolorvarchar(20)requires_need_to_knowtinyint(1)iconvarchar(100)requires_briefingtinyint(1)requires_justificationt(1)activetinyint(1)requires_approvalt(1)created_attimestamprequires_2fat(1)updated_attimestampmax_session_hoursintwatermark_requiredt(1)watermark_imagevarchar(255)download_allowedt(1)print_allowedt(1)copy_allowedt(1)activetinyint(1)created_atdatetimeupdated_atdatetimeobject_security_classificationPKidintunsignedFKobject_idintUQ►information_object.idFKclassification_idintunsignedFKclassified_byint►user.idclassified_attimestampFKassigned_byintunsigned►user.idassigned_atdatetimereview_datedatedeclassify_datedatedeclassify_to_idintunsignedreasontexthandling_instructionstextinherit_to_childrentinyint(1)justificationtextactivetinyint(1)created_at/updated_atobject_classification_historyPKidintunsignedFKobject_idint►information_object.idFKprevious_classification_idintunsignedFKnew_classification_idintunsignedactionvarchar(50)FKchanged_byint►user.idreasontextcreated_attimestampuser_security_clearancePKidintunsignedFKuser_idintunsignedUQ►user.idFKclassification_idintunsigned►security_classif.idFKgranted_byintunsigned►user.idgranted_atdatetimeexpires_atdatetimenotestextuser_security_clearance_logPKidintunsignedFKuser_idintunsigned►user.idclassification_idintunsignedactionENUM(granted/revoked/updated/expired)FKchanged_byintunsigned►user.idnotestextcreated_attimestampsecurity_clearance_historyPKidintunsignedFKuser_idintunsigned►user.idFKprevious_classification_idintunsigned►security_classif.idFKnew_classification_idintunsigned►security_classif.idactionENUM(granted/upgraded/downgraded/revoked/renewed/expired/2fa_*)changed_byintunsignedreasontextcreated_attimestampsecurity_2fa_sessionPKidintunsignedFKuser_idintunsigned►user.idsession_idvarchar(100)UQverified_attimestampexpires_attimestampip_addressvarchar(45)device_fingerprintvarchar(255)created_attimestampEMBARGOSUBSYSTEMembargoPKidbigintunsignedFKobject_idint►information_object.idembargo_typeENUM(full/metadata_only/digital_object/custom)start_datedateend_datedatereasontextis_perpetualtinyint(1)statusENUM(active/expired/lifted/pending)FKcreated_byint►user.idlifted_by/lifted_at/lift_reasonnotify_on_expirytinyint(1)notify_days_beforeintcreated_at/updated_at/is_activeembargo_auditembargo_exceptionembargo_i18nPKidbigintPKidbigintPKidbigintFKembargo_idFKembargo_idFKembargo_idactionENUM(exception_typeculturevarchar(10)created/ENUM(user/group/reasonvarcharmodified/ip_range/notestextlifted/repository)public_messagetextextended/exception_idexception_*)ip_range_start/enduser_idvalid_from/untilold_valuesjsonnotestextnew_valuesjsongranted_byintip_addresscreated_atcreated_atupdated_atACCESS&AUDITSUBSYSTEMsecurity_access_logsecurity_access_requestPKidbigintunsignedPKidintunsignedFKuser_idintunsignedFKuser_idintunsigned►userFKobject_idintFKobject_idintunsigned►ioFKclassification_idintunsignFKclassification_idintunsignedactionvarchar(50)FKcompartment_idintunsigned►compartm.access_grantedtinyint(1)request_typeENUM(view/download/denial_reasonvarchar(255)print/clearance_upgrade/justificationtextcompartment_access/renewal)ip_addressvarchar(45)justificationtextuser_agentvarchar(255)duration_hoursintcreated_atdatetimepriorityENUM(normal/urgent/immed.)statusENUM(pending/approved/denied/expired/cancelled)reviewed_by/reviewed_atsecurity_audit_logreview_notes/access_granted_untilcreated_at/updated_atPKidintobject_idintobject_typevarchar(50)user_idintsecurity_access_condition_linkuser_namevarchar(255)actionvarchar(100)PKidintunsignedaction_categoryvarchar(50)FKobject_idint►iodetailsjsonFKclassification_idintunsignedip_addressvarchar(45)access_conditionstextuser_agenttextreproduction_conditionstextcreated_atdatetimenarssa_refvarchar(100)retention_periodvarchar(50)updated_by/updated_atsecurity_compliance_logPKidintunsignedsecurity_watermark_logactionvarchar(100)object_idintPKidbigintunsigneduser_idintFKuser_idintunsignedusernamevarchar(255)FKobject_idintunsigneddetailstextdigital_object_idintunsignedip_addressvarchar(45)watermark_typeENUM(visible/hashvarchar(64)invisible/both)created_atdatetimewatermark_textvarchar(500)watermark_codevarchar(100)file_hashvarchar(64)file_namevarchar(255)security_declassification_ip_addressvarchar(45)schedulecreated_attimestampPKidintunsignedFKobject_idintunsignedscheduled_datedatesecurity_retention_scheduleFKfrom_classification_idFKto_classification_idPKidintunsignedtrigger_typeENUM(date/narssa_refvarchar(100)UQevent/retention)record_typevarchar(255)trigger_eventvarchar(255)retention_periodvarchar(100)processedtinyint(1)disposal_actionvarchar(100)processed_at/processed_bylegal_referencetextnotestextnotestextcreated_attimestampcreated_atdatetimeGLAM/DAM&INFORMATIONOBJECTLINKS:object_security_classification.object_id►information_object.id(classifiedrecord)object_compartment.object_id►information_object.id(compartmentedrecord)object_access_grant.object_id►information_object.id(grantedaccess)object_classification_history.object_id►information_object.id(classificationaudit)object_declassification_schedule.object_id►information_object.idsecurity_access_log.object_id►information_object.id(accessevent)security_access_request.object_id►information_object.id(accessrequest)security_watermark_log.object_id►information_object.id(watermarkapplied)user_security_clearance.user_id►user.id(extendsactor.idinHeratio)user_compartment_access.user_id►user.idsecurity_2fa_session.user_id►user.idINTERNAL:security_classification.id,security_compartment.id(referencedbyobject_*)

Subsystem Summary

Subsystem Tables Purpose
Classification Core security_classification, security_compartment Define classification levels (U/R/C/S/TS) and compartments
User Clearance user_security_clearance, user_security_clearance_log, security_clearance_history, security_2fa_session User clearance assignment, history, 2FA sessions
Object Classification object_security_classification, object_classification_history Classify archival records, track changes
Embargo embargo, embargo_audit, embargo_exception, embargo_i18n Time-based access restrictions with exceptions and i18n
Access & Audit security_access_log, security_access_request, security_access_condition_link, security_audit_log, security_compliance_log, security_declassification_schedule, security_retention_schedule, security_watermark_log Access logging, requests, compliance, watermarks, International retention

Access Control Logic

User can access a record when:
  user_security_clearance.classification.level >= object_security_classification.classification.level
  AND (no active embargo on object OR user has embargo_exception)
  AND (no compartment restriction OR user has compartment access)
  AND clearance has not expired (user_security_clearance.expires_at)

5. Condition Assessment ERD (ahgConditionPlugin)

8 tables — Condition reporting, damage tracking, conservation, scheduling, and controlled vocabularies. museum procedures compliant.

Tables

["condition_report","condition_damage","condition_image","condition_event","condition_assessment_schedule","condition_conservation_link","condition_vocabulary","condition_vocabulary_term"]

ERD Diagram

ahgConditionPlugin—ConditionAssessmentERDMuseum5.1Compliancecondition_reportPKidbigintunsignedFKinformation_object_idintunsigned►information_object.idassessor_user_idintunsignedassessment_datedatecontextENUM(acquisition/loan_out/loan_in/loan_return/exhibition/storage/conservation/routine/incident/insurance/deaccession)overall_ratingENUM(excellent/good/fair/poor/unacceptable)summarytextrecommendationstextpriorityENUM(low/normal/high/urgent)next_check_datedateenvironmental_notestexthandling_notestextdisplay_notestextstorage_notestextcreated_at/updated_attimestamp1:N1:Ncondition_damagecondition_imagePKidbigintunsignedPKidbigintunsignedFKcondition_report_idFKcondition_report_iddamage_typevarchar(50)digital_object_idintunsignlocationvarchar(50)file_pathvarchar(500)severityENUM(minor/captionvarchar(500)moderate/severe)image_typeENUM(general/descriptiontextdetail/damage/before/dimensionsvarchar(100)after/raking/uv)is_activetinyint(1)annotationsjsontreatment_requiredt(1)created_attimestamptreatment_notestextcreated_attimestampcondition_eventPKidintunsignedFKobject_idint►information_object.idevent_typevarchar(50)◄assessment,treatment,incidentevent_datedateassessorvarchar(255)condition_statusvarchar(50)damage_typesjsonseverityvarchar(50)notestextrisk_scoredecimal(5,2)created_byintcreated_at/updated_at1:Ncondition_conservation_linkPKidintunsignedFKcondition_event_idintunsignFKtreatment_idintunsignedlink_typevarchar(50)◄treatmentcreated_atdatetimecondition_assessment_schedulecondition_vocabulary(43rows)PKidintunsignedPKidintunsignedFKobject_idintvocabulary_typeENUM(damage_type/frequency_monthsintseverity/condition/priority/last_assessment_datedatematerial/location_zone)next_due_datedatecode/display_name/descriptionpriorityvarchar(20)color/iconnotestextsort_order/is_activeis_activetinyint(1)created_at/updated_atcondition_vocabulary_termPKidintunsignedvocabulary_typevarchar(50)term_code/term_labelterm_descriptiontextsort_order/is_activeGLAM/DAM&INFORMATIONOBJECTLINKS:condition_report.information_object_id►information_object.id(assessedrecord)condition_event.object_id►information_object.id(eventtarget)condition_assessment_schedule.object_id►information_object.id(scheduledcheck)condition_report.assessor_user_id►user.id(extendsactor.idinHeratio)condition_event.created_by►user.idcondition_image.digital_object_id►digital_object.id(photodocumentation)CROSS-PLUGIN:condition_conservation_link.treatment_id►spectrum_conservation.id(linkstoahgSpectrumPluginforMuseum5.1conservationtreatments)ahg_loan_condition_report(ahgLoanPlugin)referencesconditiondataahg_ai_condition_assessment(ahgAIPlugin)AI-poweredassessments

6. Loan Management ERD (ahgLoanPlugin)

20 tables (4 base + 16 ahg_loan_*) — Full GLAM loan lifecycle: requests, objects, condition reports, facility reports, shipments, couriers, costs, notifications.

Tables

["loan","loan_object","loan_document","loan_extension","ahg_loan","ahg_loan_object","ahg_loan_document","ahg_loan_extension","ahg_loan_condition_report","ahg_loan_condition_image","ahg_loan_cost","ahg_loan_courier","ahg_loan_facility_report","ahg_loan_facility_image","ahg_loan_history","ahg_loan_notification_log","ahg_loan_notification_template","ahg_loan_shipment","ahg_loan_shipment_event","ahg_loan_status_history"]

ERD Diagram

ahgLoanPlugin—LoanManagementERDSharedLoanSystemforGLAMInstitutionsCORELOAN(baseahg)loan(base)ahg_loan(extended,3rows)PKidbigintunsignedPKidbigintunsignedloan_numbervarchar(50)UQloan_numbervarchar(50)UQloan_typeENUM(out/in)loan_typeENUM(out/in)statusvarchar(50)sectorENUM(museum/gallery/archive/purposeENUM(exhibition/research/library/dam)conservation/photography/education/title/description/purposevarchar(100)filming/long_term/other)partner_institution/contact_name/email/phonetitle/descriptionpartner_addresstextpartner_institution/contact_name/email/phonerequest_date/start_date/end_date/returnpartner_addresstextinsurance_typeENUM(6values)/value/request_date/start_date/end_date/returncurrency/policy_number/providerinsurance_typeENUM(5values)/value/loan_fee/loan_fee_currencycurrency/policy_number/providerstatusvarchar(50)loan_fee/loan_fee_currencyinternal_approver_id/approved_dateinternal_approver_id/approved_dateexhibition_id/repository_id/sector_datanotes/created_by/created_at/updated_atnotes/created_by/updated_by/timestampsloan_loan_loan_ahg_loan_objectahg_loan_ahg_loan_objectdocumentextension(1row)documentextensionididididididloan_idloan_idloan_idloan_idloan_idloan_idinfo_objdoc_typeprev_endinfo_object_iddocument_typeprev/newend_datetitlefile_*new_endexternal_obj_idfile_*reason/approvedidentifierdescriptreasontitle/identifierdescriptioncreated_atins_valueuploadedapprovedobject_typeuploaded_bycond_rptcreatedcreatedins_value/condcreated_atspec_reqdeparture/returndisplayspecial/displaycreatedstatusENUM(8)dispatch/receivereturndatescreated/updatedCONDITION&FACILITYREPORTSahg_loan_condition_report(35columns)ahg_loan_facility_report(36columns)PKidbigintunsignedPKidbigintunsignedFKloan_id/loan_object_id/info_object_idFKloan_idreport_typeENUM(pre_loan/post_loan/venue_name/address/contact_*in_transit/periodic)assessment_date/assessed_byexamination_date/examiner_id/examiner_namehas_climate_control/temp_min/maxlocationvarchar(255)humidity_min/max/has_uv_filteringoverall_conditionENUM(5values)light_levels_luxcondition_stabletinyint(1)has_24hr_security/cctv/alarmstructural/surface_conditiontexthas_fire_suppression/typehas_damage/damage_descriptionsecurity_noteshas_previous_repairs/repair_descriptiondisplay_case_type/mounting_methodhas_active_deterioration/descriptionbarrier_distance/storage_typeheight/width/depth_cm/weight_kgpublic_access_hours/staff_supervisionhandling/mounting/environmentalrequirementsphotography_allowedtreatment/display_recommendationsoverall_ratingENUM(5values)signed_by_lender/borrowersignature_datesrecommendations/conditions_requiredpdf_generated/pdf_pathapproved/approved_by/approved_datecreated_at/updated_atcreated_at/updated_atahg_loan_condition_imageahg_loan_facility_imageid/condition_report_idid/facility_report_idfile_path/name/mime_typefile_path/name/mime_typeimage_type/captioncaption/image_typeannotation_datajsoncreated_atview_position/sort_orderSHIPPING&LOGISTICSahg_loan_shipmentahg_loan_courier(10rows)PKidbigintunsignedPKidbigintunsignedFKloan_id/courier_idcompany_namevarchar(255)shipment_typeENUM(outbound/return)contact_name/email/phoneshipment_number/tracking_number/waybilladdresstext/websiteorigin_address/destination_addressis_art_specialisttinyint(1)scheduled_pickup/actual_pickuphas_climate_controltinyint(1)scheduled_delivery/actual_deliveryhas_gps_trackingtinyint(1)statusENUM(planned/picked_up/in_transit/insurance_coveragedecimalcustoms/out_for_delivery/delivered/insurance_currencyvarchar(3)failed/returned)quality_ratingdecimal(3,2)handling_instructions/special_requirementsnotes/is_activeshipping/insurance/customs/total_costdecimalcreated_at/updated_atcost_currency/notes/created_bycreated_at/updated_atahg_loan_shipment_eventid/shipment_idevent_time/event_typelocation/descriptioncreated_atCOSTS&TRACKINGahg_loan_costahg_loan_history(2rows)ahg_loan_status_historyid/loan_idid/loan_idid/loan_idcost_typevarchar(50)actionvarchar(100)from_status/to_statusdescription/amountdecimaldetailsjsonchanged_by/commentcurrency/vendor/invoice_*user_id/created_atcreated_atpaidtinyint/paid_datepaid_byENUM(lender/borrower/shared)notes/created_byahg_loan_notification_templateahg_loan_notification_logcreated_at/updated_at(5rows)id/loan_id/template_idid/codeUQ/name/descriptionnotification_typesector/subject_templaterecipient_email/namebody_template/trigger_eventsubject/bodytrigger_days_before/is_activestatusENUM(pending/sent/created_at/updated_atfailed/bounced)sent_at/error_messagecreated_atGLAM/DAM&INFORMATIONOBJECTLINKSahg_loansectorENUM►museumgalleryarchivelibrarydamexhibition_id►exhibition.id(ahgExhibitionPlugin)repository_id►repository.id(Heratiocore—archivalinstitution)sector_dataJSON►Sector-specificmetadata(e.g.galleryprovenance)internal_approver_id►user.idcreated_by/updated_by►user.idahg_loan_objectinformation_object_id►information_object.id(Heratiocore—archivalrecord)external_object_id►Externalreffornon-Heratioobjects(gallery/museum)object_type►archivemuseum_objectgallery_artworkdam_assetcondition_report_id►ahg_loan_condition_report.idahg_loan_condition_reportinformation_object_id►information_object.idexaminer_id►user.idloan_object(base)information_object_id►information_object.idloan(base)partner_institution►Freetext(borrower/lenderinstitutionname)created_by►user.idDUALTABLEPATTERN:`loan`(base)`ahg_loan`(extendedwithsector,exhibitionlink)Basetables:loan,loan_object,loan_document,loan_extensionExtended:ahg_loan15ahg_loan_*tablesforfulllifecyclemanagementGLAMSECTORAWARE:sectorENUMdrivesUI/workflowperinstitutiontype

7. Heritage Accounting ERD (Heritage Assets / IPSAS 45)

Plugins: ahgHeritageAccountingPlugin (12 tables) + ahgIPSASPlugin (10 tables) Standards: Heritage Assets (South Africa), IPSAS 45 (International) Total: 22 tables (+ 1 legacy view: grap_heritage_asset)

HERITAGEACCOUNTINGERD—ahgHeritageAccountingPlugin(12tables)HeritageAssetsheritageassetaccounting:recognition,valuation,depreciation,impairmentheritage_accounting_standard(10rows)PKidintunsignedAUTO_INCREMENTUQcodevarchar(20)namevarchar(100)countryvarchar(50)IXregion_codevarchar(30)descriptiontextcapitalisation_requiredtinyint(1)valuation_methodsjsondisclosure_requirementsjsonis_activetinyint(1)sort_orderintcreated_atdatetime1:Nheritage_compliance_rule(233rows)PKidintunsignedAUTO_INCREMENTFKstandard_idintunsignedheritage_accounting_standard.idIXcategoryENUM(recognition,measurement,disclosure)codevarchar(50)namevarchar(255)descriptiontextcheck_typeENUM(required_field,value_check,date_check,custom)field_namevarchar(100)conditionvarchar(255)error_messagevarchar(255)NOTNULLreferencevarchar(100)severityENUM(error,warning,info)is_activetinyint(1)sort_orderintcreated_atdatetimeheritage_asset_class(17rows,self-referencinghierarchy)PKidintunsignedAUTO_INCREMENTUQcodevarchar(50)namevarchar(100)NOTNULLdescriptiontextFKparent_idintunsignedheritage_asset_class.iddefault_useful_lifeintdefault_depreciation_methodvarchar(50)is_depreciabletinyint(1)is_activetinyint(1)sort_orderintcreated_atdatetime1:Nheritage_asset(62columns,5rows)—CentralassetregisterPKidintunsignedAUTO_INCREMENTIXinformation_object_idintinformation_object.idUQobject_idintFKaccounting_standard_idintunsignedheritage_accounting_standard.idFKasset_class_idintunsignedheritage_asset_class.idRecognitionIXrecognition_statusENUM(recognised,not_recognised,pending,derecognised)recognition_status_reasonvarchar(255)recognition_datedateasset_sub_classvarchar(100)Measurement/Valuationmeasurement_basisENUM(cost,fair_value,nominal,not_practicable)acquisition_methodENUM(purchase,donation,bequest,transfer,found,exchange,other)IXacquisition_datedateacquisition_costdecimal(18,2)fair_value_at_acquisitiondecimal(18,2)nominal_valuedecimal(18,2)DEFAULT1.00donor_name/donor_restrictionsinitial_carrying_amountdecimal(18,2)current_carrying_amountdecimal(18,2)accumulated_depreciationdecimal(18,2)revaluation_surplusdecimal(18,2)impairment_lossdecimal(18,2)ValuationDetailIXlast_valuation_datedatelast_valuation_amountdecimal(18,2)valuation_methodENUM(market,cost,income,expert,insurance,other)valuer_name/valuer_credentials/valuation_report_referencerevaluation_frequencyENUM(annual,triennial,quinquennial,as_needed,not_applicable)Depreciationdepreciation_policyENUM(not_depreciated,straight_line,reducing_balance,units_of_production)useful_life_yearsintresidual_valuedecimal(18,2)annual_depreciationdecimal(18,2)Impairmentlast_impairment_datedateimpairment_indicatorstinyint(1)impairment_indicators_detailstextrecoverable_amountdecimal(18,2)Derecognitionderecognition_datedatederecognition_reasonENUM(disposal,destruction,loss,transfer,write_off,other)derecognition_proceedsdecimal(18,2)gain_loss_on_derecognitiondecimal(18,2)HeritageSignificanceheritage_significanceENUM(exceptional,high,medium,low)significance_statementtextrestrictions_on_use/restrictions_on_disposaltextconservation_requirementstextInsuranceinsurance_requiredtinyint(1)insurance_valuedecimal(18,2)insurance_policy_numbervarchar(100)insurance_providervarchar(255)insurance_expiry_datedatePhysicalcurrent_locationvarchar(255)storage_conditionstextcondition_ratingENUM(excellent,good,fair,poor,critical)last_condition_assessmentdateAuditcreated_by/updated_by/approved_by(intuser.id)approved_datedatenotestextcreated_at/updated_atdatetime1:N1:N1:N1:Nheritage_valuation_heritage_movement_heritage_depreciation_heritage_impairment_history(2rows)register(2rows)scheduleassessment(2rows)PKidintunsignedPKidintunsignedPKidintunsignedPKidintunsignedFKheritage_asset_idFKheritage_asset_idFKheritage_asset_idFKheritage_asset_idIXvaluation_dateIXmovement_dateIXfiscal_yearIXassessment_dateprevious_valueIXmovement_typeENUMfiscal_periodphysical_damagenew_value(loan_out,opening_value_detailsvaluation_changeloan_return,depreciation_amountobsolescencevaluation_methodtransfer,closing_value_detailsENUM(6values)exhibition,calculated_atchange_in_usevaluer_nameconservation,notes_detailsvaluer_credentialsstorage_change,created_atexternal_factorsvaluer_organizationother)_detailsvaluation_report_from/to_locationimpairment_identfiedreferencereasontextcarrying_amount_revaluation_authorized_bybefore/aftersurplus_changeauthorization_daterecoverable_amountnotesexpected/actualimpairment_losscreated_by_return_datereversal_applicablecreated_atcondition_on_reversal_amountdeparture/returnreversal_dateENUM(4values)assessor_namecondition_notesnotes/created_byinsurance_confirmedcreated_atinsurance_valuecreated_bycreated_atJOURNAL&FINANCIALTRACKINGheritage_journal_entry(3rows)—Double-entryaccountingjournalPKidintunsignedAUTO_INCREMENTFKheritage_asset_idintunsignedheritage_asset.idIXjournal_datedatejournal_numbervarchar(50)IXjournal_typeENUM(recognition,revaluation,depreciation,impairment,impairment_reversal,derecognition,adjustment,transfer)debit_accountvarchar(50)NOTNULLdebit_amountdecimal(18,2)NOTNULLcredit_accountvarchar(50)NOTNULLcredit_amountdecimal(18,2)NOTNULLdescriptiontextreference_documentvarchar(255)IXfiscal_yearintfiscal_periodintIXpostedtinyint(1)posted_by/posted_atint/datetimereversedtinyint(1)reversal_journal_idintunsignedreversal_date/reversal_reasoncreated_byintcreated_atdatetimeheritage_financial_year_snapshot(25columns)PKidintunsignedAUTO_INCREMENTIXrepository_idintrepository.idFKaccounting_standard_idintunsignedheritage_accounting_standard.idfinancial_year_startdateNOTNULLIXfinancial_year_enddateFKasset_class_idintunsignedheritage_asset_class.idtotal_assets/recognised_assets/not_recognised_assetsinttotal_carrying_amountdecimal(18,2)total_accumulated_depreciationdecimal(18,2)total_impairment/total_revaluation_surplusdecimal(18,2)additions_count/additions_valuedisposals_count/disposals_valueimpairments_count/impairments_valuerevaluations_count/revaluations_valuesnapshot_datajsonnotes/created_by/created_atheritage_transaction_log(22rows)PKidintunsignedAUTO_INCREMENTFKheritage_asset_idintunsignedIXobject_idintIXtransaction_typevarchar(50)NOTNULLtransaction_datedateamountdecimal(18,2)transaction_datajsonuser_idintIXcreated_atdatetimegrap_heritage_asset(30cols,legacyview)id/object_id/repository_idrecognition_status/asset_classasset_subclass/acquisition_dateacquisition_methodENUM(7values)donor_source/cost_of_acquisitioncurrent_carrying_amount/impairment_lossaccumulated_depreciation/residual_valuemeasurement_basisENUM(4values)valuation_date/valuer/valuation_methodphysical_location/condition_descriptioninsurance_value/policy/expirycompliance_score/compliance_noteslast_compliance_check/notescreated_at/updated_atIPSAS45ERD—ahgIPSASPlugin(10tables)InternationalPublicSectorAccountingStandardsheritageassetmanagementipsas_asset_category(9rows)PKidbigintunsignedUQcodevarchar(20)namevarchar(255)NOTNULLdescriptiontextasset_typeENUM(heritage,operational,mixed)depreciation_policyENUM(none,straight_line,reducing_balance)useful_life_yearsintaccount_codevarchar(50)is_activetinyint(1)created_attimestamp1:Nipsas_heritage_asset(31columns)PKidbigintunsignedAUTO_INCREMENTUQasset_numbervarchar(50)information_object_idintFKcategory_idbigintunsignedipsas_asset_category.idtitlevarchar(500)NOTNULLdescriptiontextlocationvarchar(255)IXrepository_idintrepository.idacquisition_datedateacquisition_methodENUM(purchase,donation,bequest,transfer,found,exchange,unknown)acquisition_source/acquisition_cost/acquisition_currencyIXvaluation_basisENUM(historical_cost,fair_value,nominal,not_recognized)current_value/current_value_currency/current_value_datedepreciation_policyENUM(none,straight_line,reducing_balance)useful_life_years/residual_value/accumulated_depreciationinsured_value/insurance_policy/insurance_expiryIXstatusENUM(active,on_loan,in_storage,under_conservation,disposed,lost,destroyed)condition_ratingENUM(excellent,good,fair,poor,critical)risk_levelENUM(low,medium,high,critical)risk_notestextcreated_byintNOTNULLcreated_at/updated_attimestamp1:N1:N1:N1:Nipsas_valuationipsas_depreciationipsas_disposalipsas_impairment(20cols)(13cols)(15cols)(19cols)PKidbigintunsignedPKidbigintunsignedPKidbigintunsignedPKidbigintunsignedFKasset_idipsas_FKasset_idipsas_FKasset_idipsas_FKasset_idipsas_heritage_asset.idheritage_asset.idheritage_asset.idheritage_asset.idIXvaluation_dateIXfinancial_yearIXdisposal_dateIXassessment_dateIXvaluation_typeENUMperiod_start/endIXdisposal_methodphysical_damage(initial,revaluationopening_valueENUM(sale,donation,obsolescenceimpairment,reversaldepreciation_amountdestruction,loss,decline_in_demanddisposal)closing_valuetheft,transfer,market_value_valuation_basisaccumulated_deaccession)declineENUM(4values)depreciationcarrying_valueother_indicatorprevious/new_valuecalculation_methoddisposal_proceedsindicator_descrcurrencyrate_percentgain_losscarrying_amountchange_amount/%notesrecipientrecoverable_amountvaluer_name/calculated_atauthorization_refimpairment_lossqualification/typeauthorized_by/dateimpairment_valuation_methodreason/doc_refrecognizedmarket_evidencecreated_byrecognition_datecomparable_salescreated_atis_reversaldocumentation_refreversal_amountnotesnotes/assessed_bycreated_bycreated_atcreated_atipsas_insurance(20cols)PKidbigintunsignedFKasset_idbigintunsignedipsas_heritage_asset.idIXpolicy_numbervarchar(100)policy_typeENUM(all_risks,named_perils,blanket,transit,exhibition)insurervarchar(255)NOTNULLcoverage_start/enddatesum_insureddecimal(15,2)NOTNULLcurrency/premium/deductiblecoverage_details/exclusionstextIXstatusENUM(active,expired,cancelled,pending_renewal)renewal_reminder_senttinyint(1)broker_name/broker_contactcreated_by/created_at/updated_atipsas_financial_year_summary(22cols)ipsas_config(9rows)PKidbigintunsignedPKidbigintunsignedUQfinancial_yearvarchar(10)UQconfig_keyvarchar(100)year_start/year_enddateconfig_valuetextopening_total_assets/opening_total_valuedescriptiontextadditions_count/additions_valuecreated_at/updated_atdisposals_count/disposals_valuerevaluations_increase/revaluations_decreaseimpairments/depreciationclosing_total_assets/closing_total_valueipsas_audit_logIXstatusENUM(open,closed,audited)closed_by/closed_atPKidbigintunsignednotes/created_at/updated_atIXaction_typevarchar(50)IXentity_typevarchar(50)entity_idbigintunsigneduser_idintip_addressvarchar(45)old_value/new_valuejsonnotestextIXcreated_attimestampHeritageAssetsSUBSYSTEM:heritage_assetheritage_accounting_standardheritage_asset_classheritage_assethas5childtables:valuation_history,movement_register,depreciation_schedule,impairment_assessment,journal_entryheritage_transaction_logheritage_financial_year_snapshotforreportingheritage_compliance_rulelinkedtoheritage_accounting_standardIPSAS45SUBSYSTEM:ipsas_heritage_assetipsas_asset_categoryipsas_heritage_assethas5childtables:valuation,depreciation,disposal,impairment,insuranceipsas_financial_year_summaryforannualreportingipsas_configforsystemsettings,ipsas_audit_logforchangetrackingGLAM/DAM&INFORMATIONOBJECTLINKS:heritage_asset.information_object_id►information_object.id(heritagerecord)heritage_asset.object_id►object.id(Heratiocoreentity)ipsas_heritage_asset.information_object_id►information_object.idipsas_heritage_asset.repository_id►repository.id(owninginstitution)heritage_financial_year_snapshot.repository_id►repository.idheritage_transaction_log.object_id►information_object.id(transactiontarget)heritage_batch_item.object_id►information_object.id(batchprocessing)heritage_popia_flag.object_id►information_object.id(Compliance-flagged)heritage_audit_log.user_id►user.id(extendsactor.idinHeratio)heritage_batch_job.user_id►user.idCROSS-PLUGIN:heritage_depreciation_scheduleHeritageAssetsannualdepreciationipsas_valuation/ipsas_impairmentIPSAS45valuationstandardsheritage_popia_flaglinkstoahgPrivacyPlugincompliance

8. IIIF Integration ERD

Plugin: ahgIiifPlugin (16 tables) Standards: IIIF Presentation API 3.0, IIIF Auth API 1.0 Subsystems: Annotations, OCR, Collections, Auth, Manifest Cache, 3D, Validation

IIIFINTEGRATIONERD—ahgIiifPlugin(16tables)IIIFmanifests,annotations,OCR,collections,authservices,3D,validationANNOTATIONS&OCRiiif_annotation(9columns)PKidintAUTO_INCREMENTIXobject_idintNOTNULLinformation_object.idcanvas_idintIXtarget_canvasvarchar(500)NOTNULLtarget_selectorjsonIXmotivationENUM(commenting,tagging,describing,linking,transcribing,identifying,supplementing)IXcreated_byintuser.idcreated_at/updated_atdatetime1:Niiif_annotation_body(7columns)PKidintAUTO_INCREMENTFKannotation_idintNOTNULLiiif_annotation.idbody_typevarchar(50)body_valuetextbody_formatvarchar(50)body_languagevarchar(10)body_purposevarchar(50)iiif_ocr_text(9columns)PKidintAUTO_INCREMENTIXdigital_object_idintNOTNULLdigital_object.idIXobject_idintinformation_object.idFTfull_textlongtext(FULLTEXTindexed)formatENUM(plain,alto,hocr)languagevarchar(10)confidencedecimal(5,2)created_at/updated_atdatetime1:Niiif_ocr_block(11columns)—Word/line/paragraphcoordinateblocksPKidintAUTO_INCREMENTFKocr_idintNOTNULLiiif_ocr_text.idIXpage_numberintIXblock_typeENUM(word,line,paragraph,region)IXtextvarchar(1000)x/y/width/heightintNOTNULLconfidencedecimal(5,2)block_orderintCOLLECTIONSiiif_collection(15columns,2rows,self-referencinghierarchy)PKidintAUTO_INCREMENTnamevarchar(255)NOTNULLUQslugvarchar(255)descriptiontextattributionvarchar(500)logo_url/thumbnail_urlvarchar(500)viewing_hintENUM(individuals,paged,continuous,multi-part,top)nav_datedateFKparent_idintiiif_collection.id(self-ref)sort_orderintIXis_publictinyint(1)created_byintcreated_at/updated_attimestamp1:N1:Niiif_collection_i18niiif_collection_item(10cols,9rows)(5cols)PKidintAUTO_INCREMENTPKidintAUTO_INCREMENTFKcollection_idintiiif_collection.idFKcollection_idiiif_FKobject_idintinformation_object.idcollection.idmanifest_urivarchar(1000)culturevarchar(10)item_typeENUM(manifest,collection)namevarchar(255)labelvarchar(500)descriptiontextdescriptiontextthumbnail_urlvarchar(500)sort_orderintadded_attimestampAUTH(IIIFAuthAPI1.0)iiif_auth_service(14columns,3rows)—AuthservicedefinitionsPKidintunsignedAUTO_INCREMENTUQnamevarchar(100)NOTNULLIXprofileENUM(login,clickthrough,kiosk,external)NOTNULLlabelvarchar(255)NOTNULLdescriptiontextconfirm_labelvarchar(100)failure_header/failure_descriptionlogin_url/logout_urlvarchar(500)token_ttlintIXis_activetinyint(1)created_at/updated_attimestamp1:N1:N1:Niiif_auth_repositoryiiif_auth_resourceiiif_auth_token(11cols)(7cols)(9cols)PKidintunsignedPKidintunsignedPKidintunsignedUQtoken_hashchar(64)IXrepository_idrepoIXobject_idinfo_IXuser_idintFKservice_idiiif_object.idFKservice_idiiif_auth_auth_service.idFKservice_idiiif_service.iddegraded_accessauth_service.idIXsession_idvarchar(128)degraded_widthapply_to_childrenip_address/user_agentnotes/created_atdegraded_accessissued_attimestampdegraded_widthIXexpires_attimestampnoteslast_used_attimestampcreated/updated_atIXis_revokedtinyint(1)iiif_auth_access_log(9cols)PKidbigintunsignedIXobject_id/user_idtoken_idintunsignedIXactionENUM(view,download,token_request,token_grant,token_deny,logout)ip_address/user_agentdetailsjsonIXcreated_attimestampCACHE,3D,VALIDATION,SETTINGSiiif_manifest_cache(34rows)iiif_3d_manifestPKidbigintunsignedPKidintAUTO_INCREMENTIXobject_idintNOTNULLUQmodel_idintobject_3d_model.idculturevarchar(10)NOTNULLmanifest_jsonlongtextmanifest_jsonlongtextNOTNULLmanifest_hashvarchar(64)UQcache_keyvarchar(64)generated_attimestamppage_countintcreated_at/expires_attimestampiiif_validation_resultiiif_viewer_settings(19rows)PKidintAUTO_INCREMENTIXobject_idintNOTNULLPKidintAUTO_INCREMENTIXvalidation_typevarchar(100)UQsetting_keyvarchar(100)IXstatusvarchar(50)setting_valuetextdetailstextdescriptionvarchar(255)IXvalidated_atdatetimecreated_at/updated_attimestampvalidated_byintNoiiif_manifestoriiif_canvastablesexist—manifestsaregeneratedon-the-flyfrominformation_object/digital_objectdata,cachediniiif_manifest_cache.iiif_annotationlinkstoinfoobjectsbyobject_id(notmanifest/canvastables).iiif_ocr_textiiif_ocr_blockforcoordinate-levelOCRword/linepositions.Authsubsystem:iiif_auth_servicerepositorybindingsresourcebindingstokens.GLAM/DAM&INFORMATIONOBJECTLINKS:iiif_annotation.object_id►information_object.id(annotatedrecord)iiif_ocr_text.object_id►information_object.id(OCRsource)iiif_manifest_cache.object_id►information_object.id(cachedmanifest)iiif_collection_item.object_id►information_object.id(collectionmember)iiif_auth_resource.object_id►information_object.id(auth-protected)iiif_auth_access_log.object_id►information_object.id(accessevent)iiif_validation_result.object_id►information_object.id(validationtarget)iiif_auth_repository.repository_id►repository.id(per-institutionauthconfig)iiif_auth_token.user_id►user.id(extendsactor.idinHeratio)iiif_auth_access_log.user_id►user.idobject_3d_model.object_id►information_object.id(3Dmodellink)object_3d_audit_log.object_id►information_object.idiiif_3d_manifestobject_3d_model(3DIIIFmanifestgeneration)CROSS-PLUGIN:object_3d_model/object_3d_hotspotahg3DModelPlugin(3Dviewer)triposr_jobsAI-powered3DmodelgenerationManifestsgeneratedon-the-flyfrominformation_objectdigital_object

9. Research Portal ERD

Plugin: ahgResearchPlugin (83 tables + 4 researcher_submission tables) Subsystems: Researcher Registration, Reading Room, Material Requests, Reproductions, Projects, Collections, Annotations, Bibliography, Evidence, Reports, API, Submissions Total: 87 tables (largest plugin in the system)

RESEARCHPORTALERD—ahgResearchPlugin(87tables)Comprehensiveresearchportal:registration,readingrooms,materialrequests,reproductions,projects,workspaces,annotations,bibliography,evidence,reports1.RESEARCHERREGISTRATION&IDENTITYresearch_researcher(46columns,20rows)PKidintAUTO_INCREMENTIXuser_idintuser.idtitle/first_name/last_name/email/phoneaffiliation_typeENUM(academic,government,private,independent,student,other)institution/institution_id/department/position/student_idresearch_interests/current_projecttextorcid_id/orcid_verified/orcid_access_token/orcid_refresh_tokenorcid_token_expires_at/researcher_id_wos/scopus_id/isniresearcher_type_idintresearch_researcher_type.idtimezone/preferred_language/api_key/api_key_expires_atid_typeENUM(5)/id_number/id_verified/id_verified_by/id_verified_atIXstatusENUM(pending,approved,suspended,expired,rejected)rejection_reason/approved_by/approved_at/expires_atrenewal_reminder_sent/notes/photo_pathcard_number/card_barcode/card_issued_atcreated_at/updated_atresearch_researcher_type(10rows)research_researcher_type_i18nPKid/UQcode/namePKidresearch_researcher_typedescriptionPKculturevarchar(10)max_booking_days_advancename/descriptionmax_booking_hours_per_daymax_materials_per_bookingcan_remote_accesstinyint(1)can_request_reproductionsresearch_verification(15cols)can_export_data/auto_approverequires_id_verificationPKid/IXresearcher_idexpiry_months/priority_levelIXverification_typeENUM(7vals)IXis_active/IXsort_orderdocument_type/reference/pathcreated_at/updated_atverification_datajsonIXstatusENUM(pending,verified,rejected,expired)verified_by/at/expires_atresearch_researcher_audit(23cols)rejection_reason/notesPKid/original_id/user_idtitle/first/last/email/phoneaffiliation_type/institutionresearch_password_reset(5cols)department/position/interestscurrent_project/orcid_idPKid/IXuser_idid_type/id_number/statusIXtokenvarchar(64)rejection_reasonIXexpires_at/created_atarchived_by/at/original_*2.READINGROOM&BOOKINGresearch_reading_room(22columns,2rows)PKidintAUTO_INCREMENTname/code/description/amenities/location/operating_hours/rulescapacity/has_seat_managementtinyint(1)walk_ins_allowed/walk_in_capacity/floor_plan_pathadvance_booking_days/max_booking_hours/cancellation_hoursopening_time/closing_time/days_openis_active/created_at/updated_at1:N1:Nresearch_reading_room_seatresearch_booking(22cols,8rows)(17cols)PKid/IXresearcher_id/IXreading_room_idPKid/IXreading_room_idproject_id/IXbooking_date/start/end_timeseat_number/seat_labelpurposetextIXseat_typeENUM(standard,IXstatusENUM(pending,confirmed,cancelled,accessible,computer,completed,no_show)microfilm,oversize,confirmed_by/at/cancelled_at/reasonquiet,group)checked_in_at/checked_out_athas_power/lamp/computernotes/is_walk_in/rules_acknowledged/athas_magnifierIXseat_id/created_at/updated_atposition_x/y/IXzonenotes/IXis_activesort_order/created_atupdated_atresearch_seat_assignment(9cols)PKid/IXbooking_id/IXseat_idIXassigned_at/assigned_byresearch_walk_in_visitorreleased_at/released_by(23cols)IXstatusENUM(assigned,occupied,released,no_show)notesPKid/IXreading_room_idIXvisit_date/first/lastIXemail/phoneid_typeENUM(5)/id_noresearch_equipment(20cols)id_verified/affiliationinstitution/purposePKid/IXreading_room_id/UQcode/namematerials_requestedtextIXequipment_typeENUM(microfilm_reader,microfiche,checked_in_at/out_atscanner,computer,magnifier,book_cradle,light_box,rules_acknowledged/atcamera_stand,gloves,weights,other)staff_member/notesbrand/model/serial_number/description/locationregistered_researcher_idrequires_training/max_booking_hourscreated_atbooking_increment_minutescondition_statusENUM(5)/last/next_maintenanceIXis_available/notes/created_at/updated_atresearch_equipment_booking(18cols)research_retrieval_schedule(12cols)PKid/IXbooking/researchIXequipment_id/booking_datePKid/IXreading_room_id/namestart/end_time/purposeIXday_of_week/IXretrieval_timeIXstatusENUM(reserved,cutoff_minutes_before/max_items_per_runin_use,returned,storage_locationcancelled,no_show)IXis_active/notes/created_at/updated_atchecked_out_at/byreturned_at/bycondition_on_returnENUMreturn_notes/notescreated_at/updated_at3.MATERIALREQUESTS&CUSTODYresearch_material_request(38columns)—Paging/retrieval/returntrackingPKidintAUTO_INCREMENTIXbooking_id/IXobject_idintinformation_object.idquantity/notes/request_typeENUM(reading_room,reproduction,loan,remote_access)priorityENUM(normal,high,rush)/handling_instructionslocation_code/shelf_location/location_currentIXretrieval_scheduled_fordatetime/IXqueue_idbox_number/folder_numbercuratorial_approval_required/curatorial_approved_by/atpaging_slip_printed/call_slip_printed_at/bystatusENUM(requested,retrieved,delivered,in_use,returned,unavailable)retrieved_by/at/returned_at/condition_notessla_due_date/assigned_totriage_status/triage_by/triage_atcheckout_confirmed_at/by/return_condition/return_verified_by/atcreated_at/updated_atresearch_request_queue(19cols,research_custody_handoff(17cols)7rows)PKid/IXmaterial_request_idPKid/name/UQcodeIXhandoff_typevarchar(50)descriptionfrom/to_handler_idIXqueue_typeENUM(retrieval,from/to_locationpaging,return,curatorial,condition_at_handoff/notesreproduction)signature_confirmed/by/atfilter_status/room_id/prioritybarcode_scannedsort_field/sort_directionIXspectrum_movement_idauto_assign/assigned_staff_idnotes/IXcreated_atcolor/icon/is_defaultcreated_byIXis_active/sort_ordercreated_at/updated_atresearch_request_correspondence(11cols)research_request_status_history(8cols)PKid/IXrequest_idrequest_type/sender_typePKid/IXrequest_idIXsender_id/subject/bodyrequest_typeENUM(material,is_internal/attachment_*reproduction)IXcreated_atold_status/new_statuschanged_by/notesIXcreated_atresearch_access_decision(7cols)PKid/IXpolicy_id/IXresearchrresearch_rights_policy(10cols)action_requestedIXdecisionENUM(permitted,denied)PKid/IXtarget_type/target_idrationale/evaluated_atIXpolicy_typeENUM(permission,prohibition,obligation)IXaction_typeENUM(use,reproduce,distribute,modify,archive,display)constraints_json/policy_jsoncreated_by/created_at/upd4.REPRODUCTIONREQUESTSresearch_reproduction_request(33columns,7rows)PKid/IXresearcher_id/UQreference_numberpurpose/intended_use/publication_detailsIXstatusENUM(draft,submitted,processing,awaiting_payment,in_production,completed,cancelled)estimated_cost/final_costdecimal(10,2)/currencypayment_reference/payment_date/payment_methodinvoice_number/invoice_datedelivery_methodENUM(email,download,post,collect,digital,pickup,courier,physical)delivery_address/delivery_emailcompleted_at/processed_by/notes/admin_notestriage_status/by/at/notes/sla_due_date/assigned_toclosed_at/by/closure_reason/IXcreated_at/updated_at1:Nresearch_reproduction_item(17cols)research_reproduction_file(11cols)PKid/IXrequest_id/IXobject_idPKid/IXitem_iddigital_object_idfile_name/path/size/mime_typereproduction_typeENUM(photocopy,scan,checksumvarchar(64)photograph,digital_copy,digital_download_count/expires_atscan,transcription,certification,IXdownload_tokenvarchar(64)certified_copy,microfilm,other)created_atformat/resolution/color_modeENUMquantity/page_range/special_instrunit_price/total_pricedecimal(10,2)IXstatusENUM(pending,in_progress,completed,cancelled)completed_at/notes/created_at5.PROJECTS&COLLABORATIONresearch_project(19columns,2rows)PKid/IXowner_id(researcher)/title/descriptionIXproject_typeENUM(thesis,dissertation,publication,exhibition,documentary,genealogy,institutional,personal,other)institution/supervisor/funding_source/grant_number/ethics_approvalstart_date/expected_end_date/actual_end_dateIXstatusENUM(planning,active,on_hold,completed,archived)visibilityENUM(private,collaborators,public)/IXshare_tokenmetadatajson/created_at/updated_at1:N1:N1:Nresearch_project_research_project_research_project_resourcecollaborator(10cols,milestone(10cols)(15cols)4rows)PKid/IXproject_idPKid/IXproject_idPKid/IXproject_idtitle/descriptionIXresource_typeENUM(8vals)IXresearcher_idIXdue_dateresource_id/IXobject_idroleENUM(owner,completed_at/byexternal_url/link_typeeditor,contributorIXstatusENUM(pending,link_metadatajsonviewer)in_progress,completed,title/description/notespermissionsjsoncancelled)tags/added_by/sort_orderinvited_by/atsort_order/createdadded_ataccepted_atIXstatusENUM(4vals)notesresearch_workspace(9cols,2rows)research_institution(11cols)PKid/IXowner_id/name/descrPKid/name/UQcodeIXvisibilityENUM(private,members,description/urlpublic)contact_name/contact_emailIXshare_token/settingsjsonlogo_path/is_activecreated_at/updated_atcreated_at/updated_at1:Nresearch_institutional_shareresearch_workspace_member(8cols)(13cols)PKid/IXworkspace_idPKid/IXproject_idIXresearcher_idIXinstitution_idroleENUM(owner,admin,editor,UQshare_token/share_typeENUMviewer,member,contributor)shared_by/accepted_byinvited_by/invited_atIXstatusENUM(pending,active,accepted_atrevoked,expired)IXstatusENUM(4vals)message/permissionsjsonexpires_at/created/updatedresearch_workspace_resource(10cols)research_external_collaboratorPKid/IXworkspace_id(10cols)IXresource_typeENUM(6vals)resource_id/external_urlPKid/IXshare_id/nametitle/description/added_byIXemail/institution/orcid_idsort_order/added_atUQaccess_token/roleENUMlast_accessed_at/created_at6.COLLECTIONS&ANNOTATIONSresearch_collection(9cols,10rows)research_clipboard_project(7cols)PKid/IXresearcher_id/project_idPKid/IXresearcher_idname/descriptionIXproject_id/object_idis_public/IXshare_tokenis_pinned/notes/created_atcreated_at/updated_at1:Nresearch_annotation(19cols)research_collection_item(11cols,40rows)PKid/IXresearcher_idproject_id/IXobject_idPKid/IXcollection_id/IXobj_identity_type/IXcollection_idobject_type/culturedigital_object_idexternal_uri/tags/ref_codeannotation_typeENUM(note,notes/sort_order/created_athighlight,bookmark,tag,transcription)IXtitle/content/content_formattarget_selector/canvas_idresearch_annotation_v2(11cols,6row)iiif_annotation_id/tagsis_private/visibilityENUMPKid/IXresearcher_id/IXprojectcreated_at/updated_atIXmotivationENUM(commenting,describing,classifying,linking,questioning,tagging,highlighting)body_json/creator_json/research_annotation_target(8cols)generated_jsonIXstatusENUM(active,archived,deletedPKid/IXannotation_idIXvisibilityENUM(private,shared,pub)IXsource_type/source_idcreated_at/updated_atIXselector_typeENUM(6W3Ctypes)selector_json/source_urlcreated_at7.RESEARCHTOOLSresearch_bibliography(10cols)research_saved_search(21cols)PKid/IXresearcher_idPKid/IXresearcher_idIXproject_id/name/descrproject_id/name/descriptioncitation_stylesearch_query/search_filtersis_public/IXshare_tokenquery_ast_json/result_snapcreated_at/updated_atcitation_id/last_result_countsearch_type/total_results1:Nfacetsjsonalert_enabled/alert_frequencyresearch_bibliography_entryENUM(daily,weekly,monthly)(25cols,2rows)last_alert_at/new_resultsis_public/created/updatedPKid/IXbibliography_idIXobject_id/IXentry_typeENUMcsl_datajson/title/authorsdate/publisher/containerresearch_citation_log(8929rows)volume/issue/pages/doiurl/accessed_datePKid/IXresearcher_idarchive_name/location/IXobject_id/citation_stylecollection_title/box/foldercitation_text/created_atnotes/sort_order/createdupdated_atresearch_journal_entry(15cols)research_map_point(13cols)PKid/IXresearcher_idIXproject_id/IXentry_datePKid/IXproject_id/researcherIXtitle/content/content_formatlabel/descriptionentry_typeENUM(8types)IXlatitude/longitudedecimaltime_spent_minutes/tagsplace_name/date_valid_*is_private/related_entity_*IXsource_type/source_idcreated_at/updated_atcreated_atresearch_comment(11cols)research_timeline_event(13cols)PKid/IXresearcher_idPKid/IXproject_id/researcherIXentity_typeENUM(5types)label/descriptionentity_id/IXparent_idIXdate_start/date_endcontent/is_resolveddate_typeENUM(event,creation,resolved_by/at/created/updaccession,publication)IXsource_type/source_idposition/colorcreated_atresearch_discussion(13cols)PKid/IXworkspace/project_idIXparent_id/IXresearcher_idresearch_search_alert_log(9cols)subject/contentis_pinned/is_resolvedPKid/IXsaved_search_idresolved_by/at/created/updIXresearcher_idprevious/new/new_items_countnotification_sent/methodIXcreated_at8.EVIDENCE&ANALYSISresearch_assertion(17cols)research_hypothesis(9cols)PKid/IXresearcher/project_idPKid/IXproject/researcher_idIXsubject_type/subject_idstatementtextsubject_labelIXstatusENUM(proposed,testing,IXpredicatevarchar(255)supported,refuted)object_value/object_typeevidence_count/tagsobject_id/object_labelcreated_at/updated_atIXassertion_typeENUM(5types)IXstatusENUM(proposed,verified,1:Ndisputed,retracted)confidence/versionresearch_hypothesis_evidencecreated_at/updated_at(9cols)1:NPKid/IXhypothesis_idIXsource_type/source_idresearch_assertion_evidenceIXrelationshipENUM(supports,(9cols)refutes,neutral)confidence/note/added_byPKid/IXassertion_idcreated_atIXsource_type/source_idselector_jsonIXrelationshipENUM(supports,refutes)research_source_assessment(10cols)note/added_by/created_atPKid/IXobject/researcher_idIXsource_typeENUM(primary,secondary,tertiary)research_entity_resolution(15cols)source_formENUM(5values)completenessENUM(5values)PKid/IXentity_a_type/idIXtrust_score/rationaleIXentity_b_type/entity_b_idbias_context/assessed_atIXconfidencedecimal(5,4)match_methodIXstatusENUM(proposed,accepted,rejected)research_quality_metric(20rows)resolver_id/resolved_atnotes/evidence_jsonPKid/IXobject_idrelationship_typeIXmetric_typeENUM(4types)proposer_id/created_atmetric_value/source_serviceraw_data_json/created_at9.SNAPSHOTS,EXTRACTION&VALIDATIONresearch_snapshot(14cols)research_extraction_job(13cols)PKid/IXproject/researcher_idPKid/IXproject/collection/title/descriptionresearcher_idIXhash_sha256varchar(64)IXextraction_typeENUM(7types)query_state_jsonparameters_jsonrights_state_jsonIXstatusENUM(queued,running,metadata_json/item_countcompleted,failed)IXstatusENUM(active,frozen,progress/total/processedarchived)error_log/created_atfrozen_at/citation_idcompleted_atcreated_at1:N1:Nresearch_extraction_result(9cols)research_snapshot_item(10cols)PKid/IXjob_id/IXobject_idPKid/IXsnapshot_idIXresult_typeENUM(6types)IXobject_id/object_typedata_jsonculture/slugIXconfidencedecimal(5,4)metadata_version_jsonmodel_version/input_hashrights_snapshot_jsoncreated_atsort_order/created_atresearch_validation_queue(9cols)PKid/IXresult_idIXresearcher_idIXstatusENUM(pending,accepted,rejected,modified)modified_data_jsonIXreviewer_id/reviewed_atnotes/created_at10.ACTIVITIES&EVENTSresearch_activity(31columns)—Classes,tours,filming,events,meetingsPKid/IXactivity_typeENUM(class,tour,exhibit,loan,conservation,photography,filming,event,meeting,other)title/description/IXorganizer_id/organizer_name/email/phoneorganization/expected_attendees/IXreading_room_idIXstart_date/end_date/start_time/end_timerecurring/recurrence_patternjsonsetup_requirements/av_requirements/catering_notes/special_instructionsIXstatusENUM(requested,tentative,confirmed,in_progress,completed,cancelled)confirmed_by/at/cancelled_by/at/reason/notes/admin_notescreated_at/updated_at1:N1:Nresearch_activity_materialresearch_activity_participant(17cols)(18cols)PKid/IXactivity/researcher_idPKid/IXactivity_idname/email/phone/organizationIXobject_id/purposeIXroleENUM(organizer,instructor,presenter,handling/display_notesstudent,visitor,assistant,staff,other)insurance_valuedietary_requirements/accessibility_needsloan_agreement_signedIXregistration_statusENUM(6values)condition_before/afterregistered/confirmed/checked_in/checked_out_atIXstatusENUM(7values)feedback/notesapproved_by/atretrieved_at/returnednotes/created/updatedresearch_activity_log(12cols,4rows)PKid/IXresearcher/project_idIXactivity_typeENUM(26actiontypes)IXentity_type/entity_id/entity_titledetailsjson/session_id/ip_addressuser_agent/IXcreated_at11.REPORTS&TEMPLATESresearch_report(10cols,2rows)research_report_template(7cols)PKid/IXresearcher/project_idPKid/name/UQcodetitledescription/sections_configtemplate_typeENUM(6types)is_system/created_atdescriptionIXstatusENUM(draft,in_progress,review,completed,archived)metadatajsonresearch_peer_review(9cols)created_at/updated_atPKid/IXreport_id1:Nrequested_by/IXreviewer_idIXstatusENUM(pending,in_progressresearch_report_section(12cols)completed,declined)feedback/ratingPKid/IXreport_idrequested_at/completed_atsection_typeENUM(9types)title/content/content_fmtbibliography/collection_idsettingsjson/IXsort_orderresearch_print_template(20cols)created_at/updated_atPKid/name/UQcodeIXtemplate_typeENUM(7types)description/template_htmlresearch_document_template(8cols)css_styles/page_sizeENUMorientation/margin_*PKid/name/IXdocument_typecopies_default/variablesjsondescription/fields_jsonis_default/IXis_activeIXcreated_by/created/updatedcreated_by/created/updated12.NOTIFICATIONS,API&STATISTICSresearch_notification(11cols)research_api_key(11cols)PKid/IXresearcher_idPKid/IXresearcher_id/nametypeENUM(7notificationtypes)UQapi_keyvarchar(64)title/message/linkpermissionsjson/rate_limitrelated_entity_type/idlast_used_at/request_countIXis_read/read_atexpires_at/IXis_activeIXcreated_atcreated_atresearch_notification_preferenceresearch_api_log(11cols)(6cols)PKid/IXapi_key_idPKid/IXresearcher_idIXresearcher_id/IXendpointnotification_typemethod/request_paramsjsonemail_enabled/in_app_enabledresponse_code/response_timedigest_frequencyENUMip_address/user_agentIXcreated_atresearch_statistics_daily(9cols)PKid/IXstat_date/IXstat_typedimension/dimension_valuecount_value/sum_valuemetadatajson/created_at13.VIRTUALRESEARCHROOMSresearch_room(9cols)PKidbigintunsignedIXproject_id/name/descrresearch_room_manifest(6cols)IXstatusENUM(draft,active,archived)PKid/FKroom_idresearch_roomcreated_by/max_participantsobject_id/manifest_jsoncreated_at/updated_atderivative_typeENUM(full,subset,annotated)/created_at1:Nresearch_room_participant(5cols)PKid/FKroom_idresearch_roomuser_idroleENUM(owner,editor,viewerjoined_at14.RESEARCHERSUBMISSIONSresearcher_submission(22columns,1row)—User-contributeddescriptionsPKidbigintunsigned/IXresearcher_id/IXuser_idtitle/description/repository_id/parent_object_id/IXproject_idsource_typeENUM(online,offline)/source_file/include_imagesIXstatusENUM(draft,submitted,under_review,approved,published,returned,rejected)workflow_task_id/total_items/total_files/total_file_sizereturn_comment/reject_comment/published_at/submitted_atcreated_at/updated_at1:Nresearcher_submission_item(28cols)researcher_submission_review(6cols)PKidbigintunsignedFKsubmission_idresearcher_submission.idPKid/FKsubmission_idFKparent_item_idself(hierarchy)reviewer_idIXitem_typeENUM(description,note,actionENUM(comment,return,repository,creator)approve,reject,publish)title/identifier/level_of_descriptioncomment/created_atscope_and_content/extent_and_mediumdate_display/date_start/date_endcreators/subjects/places/genresaccess/reproduction_conditions/notesresearcher_submission_filerepository_name/address/contact(12cols)reference_object_id/reference_slugsort_order/published_object_idPKid/FKitem_id_item.idcreated_at/updated_atoriginal/stored_name/pathmime_type/file_sizechecksum/caption/sort_orderpublished_do_id/created_atNOTE:research_requestandresearch_request_itemtablesDONOTEXIST.Materialrequestsuseresearch_material_request(notaseparaterequestentity).TheoldERDshowedthesenon-existenttables—correctedinthisversion.KEYRELATIONSHIPS:research_researcheruser.id(1:1optional)research_researcherresearch_researcher_type(N:1)research_bookingresearch_reading_roomresearch_researcher(N:1each)research_material_requestresearch_bookinginformation_object(N:1each)research_projectresearch_researcher(owner,N:1)research_collection/annotation/saved_searchresearch_researcher(N:1)researcher_submissionresearcher_submission_itemresearcher_submission_fileGLAM/DAM&INFORMATIONOBJECTLINKS:research_material_request.object_id►information_object.id(requestedrecord)research_activity_material.object_id►information_object.id(studiedmaterial)research_annotation.object_id►information_object.id(annotatedrecord)research_assertion.object_id►information_object.id(researchclaim)research_bibliography_entry.object_id►information_object.id(citedrecord)research_citation_log.object_id►information_object.id(citationevent)research_clipboard_project.object_id►information_object.id(savedtoclipboard)research_collection_item.object_id►information_object.id(incollection)research_extraction_result.object_id►information_object.id(extracteddata)research_project_resource.object_id►information_object.id(projectresource)research_quality_metric.object_id►information_object.id(qualityscore)research_reproduction_item.object_id►information_object.id(reproduction)research_room_manifest.object_id►information_object.id(roommanifest)research_snapshot_item.object_id►information_object.id(snapshot)research_source_assessment.object_id►information_object.id(sourceeval)researcher_submission.repository_id►repository.id(submissiontarget)research_researcher.user_id►user.id(extendsactor.idinHeratio)CROSS-PLUGIN:research_reproduction_requestahgCartPlugin(reproductionorders)research_material_requestlinkstophysicalstorageforretrievalresearch_reading_roomresearch_bookingresearch_researcher

10. Registry Standards & Conformance ERD

Plugin: ahgRegistryPlugin (32 tables) Subsystems: Standards & Extensions, Software & Components, Institutions, Vendors, Instances, ERD Documentation, Discussions, Blog, Newsletter, User Groups, OAuth Total: 32 tables

REGISTRYSTANDARDS&CONFORMANCEERD—ahgRegistryPlugin(32tables)GlobalGLAMsoftwareregistry:standards,software,institutions,vendors,instances1.STANDARDS&EXTENSIONSregistry_standard(17columns,27rows)PKidbigintunsignedAUTO_INCREMENTIXnamevarchar(255)acronymvarchar(50)UQslugvarchar(255)IXcategoryvarchar(50)description/short_descriptiontextwebsite_urlvarchar(500)issuing_bodyvarchar(255)current_versionvarchar(50)publication_yearintsector_applicabilityjsonis_featured/IXis_active/sort_ordercreated_at/updated_atdatetime1:Nregistry_standard_extension(14columns,14rows)PKidbigintunsignedFKstandard_idbigintunsignedregistry_standard.idIXextension_typevarchar(30)titlevarchar(255)description/rationaletextIXplugin_namevarchar(100)api_endpoint/db_tablesvarchar(255/500)is_active/sort_order/created_by/created_at/updated_at2.SOFTWARE,COMPONENTS&RELEASESregistry_software(46columns,6rows)—SoftwareproductsintheregistryPKidbigintunsignedAUTO_INCREMENTIXname/UQslug/IXvendor_idIXcategoryENUM(ams,ims,dam,dams,cms,preservation,digitization,discovery,utility,plugin,integration,theme,glam,other)description/short_description/logo_path/screenshot_pathwebsite/documentation_url/install_urlgit_providerENUM(github,gitlab,bitbucket,self_hosted,none)git_url/git_default_branch/git_latest_tag/git_latest_commitgit_is_public/git_api_token_encryptedis_internal/upload_path/upload_filename/upload_size/upload_checksumlicense/license_url/latest_versionsupported_platforms/glam_sectors/standards_supported/languagesjsonmin_php_version/min_mysql_version/requirementspricing_modelENUM(free,open_source,freemium,subscription,one_time,contact)pricing_details/is_verified/is_featured/IXis_activeinstitution_count/average_rating/rating_count/download_countcreated_by/created_at/updated_at1:N1:N1:Nregistry_software_registry_software_registry_setup_guide(15cols)component(17cols,release(17cols,84rows)10rows)PKid/FKsoftware_idregistry_software.idPKid/IXsoftware_idPKid/IXsoftware_idIXtitle/slug/IXcategoryname/slugIXversion/release_contenttext/short_descrIXcomponent_typeENUMtypeENUM(major,author_name/author_user_id(plugin,module,minor,patch,beta,is_featured/IXis_activeextension,theme,rc,alpha)view_count/sort_orderintegration,libraryrelease_notescreated_at/updated_atother)git_tag/commitIXcategory/descrgit_compare_urlshort_descr/versionfile_path/name/is_required/activesize/checksumregistry_software_standard(7cols)git/doc_url/icondownload_countsort_orderis_stable/PKid/FKsoftware_idcreated/updatedIXis_latestregistry_software.idreleased_atFKstandard_idcreated_atregistry_standard.idconformance_level/notescreated_at/updated_at3.INSTITUTIONSregistry_institution(43columns,184rows)—GLAMinstitutionsdirectoryPKidbigintunsignedAUTO_INCREMENTIXname/UQslugIXinstitution_typeENUM(archive,library,museum,gallery,dam,heritage_site,research_centre,government,university,other)glam_sectorsjson/description/short_descriptionlogo_path/banner_path/website/email/phone/faxstreet_address/city/province_state/postal_code/IXcountrylatitude/longitudesizeENUM(small,medium,large,national)governanceENUM(public,private,ngo,academic,government,tribal,community)parent_body/established_year/accreditationcollection_summary/collection_strengthsjson/total_holdingsdigitization_percentage/descriptive_standardsjsonmanagement_system/uses_atom/open_to_public/institution_urlis_verified/is_featured/IXis_activeverification_notes/verified_at/verified_bycreated_by/created_at/updated_at1:Nregistry_institution_software(8cols,2rows)PKid/IXinstitution_id/IXsoftware_idinstance_id/version_in_use/deployment_datenotes/created_at4.VENDORSregistry_vendor(39columns,2rows)—Serviceproviders&developersPKidbigintunsignedAUTO_INCREMENTIXname/UQslug/vendor_typejson/specializationsjsondescription/short_description/logo_path/banner_pathwebsite/email/phone/street_address/city/province_statepostal_code/IXcountry/company_registration/vat_numberestablished_year/team_sizeENUM(solo,2-5,6-20,21-50,50)service_regions/languages/certificationsjsongithub_url/gitlab_url/linkedin_urlis_verified/is_featured/IXis_activeverification_notes/verified_at/verified_byclient_count/average_rating/rating_countcreated_by/created_at/updated_at1:N1:Nregistry_vendor_institutionregistry_vendor_call_log(23cols)(10cols,1row)PKid/IXvendor_id/IXinstitution_idPKid/IXvendor_idlogged_by_user_id/name/emailIXinstitution_idIXinteraction_typeENUM(call,email,meeting,relationship_typeENUMsupport_ticket,site_visit,video_call,other)(developer,hosting,directionENUM(inbound,outbound)/subjectmaintenance,consulting,descriptiontextdigitization,training,IXstatusENUM(open,in_progress,resolved,integration)closed,escalated)/IXpriorityENUM(4vals)service_descr/datescontact_name/email/phone/resolutionis_active/is_publicresolved_at/by/IXfollow_up_date/notescreated_atduration_minutes/IXcreated_at/updated_at5.INSTANCES&SYNCregistry_instance(28columns,168rows)—DeployedsoftwareinstancesPKidbigintunsignedAUTO_INCREMENTIXinstitution_id/name/urlinstance_typeENUM(production,staging,development,demo,offline)software/software_versionhostingENUM(self_hosted,cloud,vendor_hosted,saas)IXhosting_vendor_id/IXmaintained_by_vendor_idIXsync_token/sync_enabled/last_sync_at/last_heartbeat_at/sync_datajsonIXstatusENUM(online,offline,maintenance,decommissioned)is_public/description/record_count/digital_object_countstorage_gb/os_environment/languagesjson/descriptive_standardfeature_usagejson/feature_notesjson/created_at/updated_at1:Nregistry_instance_feature(6cols)registry_sync_log(8cols)PKid/IXinstance_idPKid/IXinstance_idfeature_name/is_in_useIXevent_typeENUM(register,comments/created_atheartbeat,sync,update,error)payloadjson/ip_addressstatusENUM(success,error)error_message/IXcreated_at6.COMMUNITY&CONTENTregistry_discussion(20cols,registry_blog_post(20cols,24rows)12rows)PKid/IXgroup_id/IXblog_idPKid/IXtitle/UQslugauthor_email/name/user_idcontent/excerptIXtitle/contentfeatured_image_pathtopic_typeENUM(6types)IXauthor_typeENUM(admin,vendor,tagsjson/IXis_pinnedinstitution,user_group)is_locked/is_resolvedauthor_id/author_nameIXstatusENUM(active,closed,IXcategoryENUM(8types)hidden,spam)tagsjson/IXstatusENUMreply_count/view_countis_featured/is_pinnedIXlast_reply_at/last_reply_byview_count/comment_countcreated_at/updated_atcomments_enabledIXpublished_at/created/updated1:Nregistry_discussion_reply(11cols,23rows)registry_user_group(32cols,5rows)PKid/IXdiscussion_idIXparent_reply_id(threaded)PKid/IXname/UQslug/descrauthor_email/name/user_idlogo/banner_pathcontentIXgroup_typeENUM(regional,is_accepted_answertopic,software,institutional,statusENUM(active,hidden,spamother)IXcreated_at/updated_atfocus_areasjsonwebsite/email/cityIXcountry/region/is_virtualmeeting_frequency/format/registry_user_group_memberplatform/next_meeting_*(10cols,80rows)mailing_list/slack/discord/forumurlsPKid/IXgroup_id/user_idmember_count/IXis_activename/IXemail/institutionis_featured/is_verifiedroleENUM(organizer,co_org,created_by/organizer_*member,speaker,sponsor)created_at/updated_atis_active/email_notificationsjoined_at7.NEWSLETTER&OAUTHregistry_newsletter(15cols)registry_newsletter_subscriber(13cols,51rows)PKid/subject/content/excerptauthor_name/author_user_idPKid/UQemail/nameIXstatusENUM(draft,scheduled,user_id/institution_idsent,cancelled)vendor_idrecipient/sent/open/click_cntIXstatusENUM(active,scheduled_at/IXsent_atunsubscribed,bounced)created_at/updated_atsubscribed/unsubscribed_atIXunsubscribe_token/confirm_*1:Nis_confirmed/created_atregistry_newsletter_send_log(7cols)registry_oauth_account(14cols)PKid/IXnewsletter_idIXsubscriber_idPKid/IXuser_idstatusENUM(queued,sent,IXproviderENUM(google,facebook,failed,bounced,opened,github,linkedin,microsoft)clicked)provider_user_id/IXemailsent_at/opened_at/errorname/avatar_urlaccess/refresh_token_encryptedtoken_expires_at/profile_datalast_login_at/created/updated8.POLYMORPHICTABLESregistry_erd(17cols,31rows)registry_contact(16cols,4rows)PKid/UQplugin_name/UQslugPKid/IXentity_typeENUMvendor_id/display_name(institution,vendor)/entity_idcategory/descriptionfirst/last_name/email/phonetables_json/diagramlongtextmobile/job_title/departmentdiagram_image/notesrolesjson/is_primaryicon/color/is_activeis_public/notes/created/updsort_order/created/updatedregistry_review(12cols)registry_note(10cols)PKid/IXentity_typeENUMPKid/IXentity_type/entity_id(vendor,software)/entity_idIXuser_id/user_name/contentreviewer_institution_idis_pinned/is_activereviewer_name/reviewer_emailcreated_at/updated_atIXrating/title/commentis_visible/is_verifiedcreated_atregistry_attachment(14cols)PKid/IXentity_typeENUMregistry_tag(4cols,13rows)(discussion,reply,blog_post,institution,vendor,software)PKid/IXentity_typeENUMentity_id/file_path/name(institution,vendor,software)file_size/mime_typeentity_id/IXtagvarchar(100)IXfile_typeENUM(6types)caption/is_inlinedownload_countuploaded_by_email/user_idregistry_favorite(5cols,2rows)created_atPKid/IXuser_idIXentity_typeENUM(institution,vendor,software,group)registry_settings(45rows)entity_id/created_atPKid/UQsetting_keysetting_value/setting_typeENUM(text,number,boolean,json)/descriptioncreated_at/updated_atFOREIGNKEYRELATIONSHIPS:registry_standard_extension.standard_idregistry_standard.idregistry_software_standard.software_idregistry_software.idregistry_software_standard.standard_idregistry_standard.idregistry_setup_guide.software_idregistry_software.idPOLYMORPHICTABLES:registry_contact,registry_attachment,registry_note,registry_tag,registry_review,registry_favoritealluseentity_typeentity_idGLAM/DAM&INFORMATIONOBJECTLINKS:RegistryisaSTANDALONEsubsystem—nodirectinformation_objectreferences.registry_favorite.user_id►user.id(Heratiouser)registry_note.user_id►user.idregistry_newsletter_subscriber.user_id►user.idregistry_oauth_account.user_id►user.idregistry_user_group_member.user_id►user.idregistry_erd.tables_json►ReferencestablenamesfromALLplugins(liveschemaintrospectionviainformation_schema)EXTERNALREFERENCES:user.id(forcreated_by,user_idfields)

11. Digital Preservation (ahgPreservationPlugin)

21 tables | tables_json: ["preservation_event","preservation_checksum","preservation_format","preservation_package","preservation_virus_scan","preservation_fixity_check","preservation_object_format","preservation_format_conversion","preservation_format_obsolescence","preservation_migration_pathway","preservation_migration_plan","preservation_migration_plan_object","preservation_package_event","preservation_package_object","preservation_policy","preservation_replication_target","preservation_replication_log","preservation_backup_verification","preservation_stats","preservation_workflow_run","preservation_workflow_schedule"]

preservation_eventpreservation_checksumidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKdigital_object_idINTFKdigital_objectdigital_object_idINTFKdigital_objectinformation_object_idINTFKinfo_objectalgorithmENUM(md5,sha1,sha256,512)event_typeENUM(16types)checksum_valueVARCHAR(128)event_datetimeDATETIMEfile_sizeBIGINTUNSIGNEDevent_outcomeENUM(success,fail,warn)verification_statusENUM(pending,valid,..)linking_agent_typeENUM(user,system,..)created_atDATETIMElinking_agent_valueVARCHAR(255)created_atDATETIMEpreservation_virus_scanpreservation_formatidBIGINTUNSIGNEDPKdigital_object_idINTFKdigital_objectidBIGINTUNSIGNEDPKscan_engineVARCHAR(50)puidVARCHAR(50)PRONOMIDstatusENUM(clean,infected,err)mime_typeVARCHAR(255)threat_nameVARCHAR(255)format_nameVARCHAR(255)quarantinedTINYINT(1)risk_levelENUM(low,med,high,crit)scanned_atDATETIMEpreservation_actionENUM(none,monitor,..)migration_target_idBIGINTFKselfis_preservation_formatTINYINT(1)preservation_object_formatFKidBIGINTUNSIGNEDPKdigital_object_idINTFKdigital_objectformat_idBIGINTFKpres_formatpreservation_format_conversionidentified_byVARCHAR(100)idBIGINTUNSIGNEDPKsource_format_idBIGINTFKpres_formattarget_format_idBIGINTFKpres_formatpreservation_fixity_checktoolVARCHAR(255)command_templateTEXTidBIGINTUNSIGNEDPKdigital_object_idINTFKdigital_objectalgorithmVARCHAR(20)expected_checksumVARCHAR(128)preservation_format_obsolescenceactual_checksumVARCHAR(128)statusVARCHAR(20)idBIGINTUNSIGNEDPKchecked_atDATETIMEformat_idBIGINTFKpres_formatrisk_assessmentTEXTrecommended_actionVARCHAR(100)review_dateDATEpreservation_packagepreservation_package_objectidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKuuidCHAR(36)package_idBIGINTFKpres_packagenameVARCHAR(255)digital_object_idINTFKdigital_objectpackage_typeENUM(sip,aip,dip)information_object_idINTFKinfo_objectstatusENUM(draft,building,..)file_pathVARCHAR(1024)package_formatENUM(bagit,zip,tar,..)object_countINTUNSIGNEDtotal_sizeBIGINTUNSIGNEDinformation_object_idINTFKinfo_object►preservation_package_eventparent_package_idBIGINTFKselfmetadataJSONidBIGINTUNSIGNEDPKcreated_atDATETIMEpackage_idBIGINTFKpres_packageevent_typeVARCHAR(50)detailsTEXTpreservation_migration_pathwayidBIGINTUNSIGNEDPKpreservation_migration_plansource_format_idBIGINTFKpres_formattarget_format_idBIGINTFKpres_formatidBIGINTUNSIGNEDPKtoolVARCHAR(255)nameVARCHAR(255)priorityINTstatusVARCHAR(50)descriptionTEXTFKpreservation_migration_plan_object◄idBIGINTUNSIGNEDPKplan_idBIGINTFKmigration_planpreservation_replication_targetdigital_object_idINTFKdigital_objectstatusVARCHAR(50)idBIGINTUNSIGNEDPKnameVARCHAR(255)storage_typeVARCHAR(50)config_jsonJSONpreservation_replication_logFKidBIGINTUNSIGNEDPK◄target_idBIGINTFKrepl_targetdigital_object_idINTFKdigital_objectstatusVARCHAR(50)preservation_policyidBIGINTUNSIGNEDPKnameVARCHAR(255)preservation_workflow_schedulepolicy_typeVARCHAR(50)schedule_jsonJSONidBIGINTUNSIGNEDPKnameVARCHAR(255)task_typeVARCHAR(50)cron_expressionVARCHAR(50)preservation_backup_verificationis_activeTINYINT(1)idBIGINTUNSIGNEDPKFKbackup_pathVARCHAR(1024)statusVARCHAR(50)verified_atDATETIMEpreservation_workflow_runidBIGINTUNSIGNEDPKschedule_idBIGINTFKwf_schedulepreservation_statsstatusVARCHAR(50)started_atDATETIMEidBIGINTUNSIGNEDPKcompleted_atDATETIMEstat_dateDATEmetric_nameVARCHAR(100)metric_valueBIGINTGLAM/DAM&INFORMATIONOBJECTLINKS:•preservation_event.information_object_id►information_object.id•preservation_event.digital_object_id►digital_object.id•preservation_checksum.digital_object_id►digital_object.id•preservation_virus_scan.digital_object_id►digital_object.id•preservation_fixity_check.digital_object_id►digital_object.id•preservation_object_format.digital_object_id►digital_object.id•preservation_package.information_object_id►information_object.id•preservation_package_object.information_object_id►information_object.id•preservation_package_object.digital_object_id►digital_object.id•preservation_migration_plan_object.digital_object_id►digital_object.id•preservation_replication_log.digital_object_id►digital_object.id

12. AI & NER (ahgAIPlugin)

25 tables | tables_json: ["ahg_ner_entity","ahg_ner_entity_link","ahg_ner_extraction","ahg_ner_authority_stub","ahg_ner_settings","ahg_ner_usage","ahg_ai_batch","ahg_ai_job","ahg_ai_job_log","ahg_ai_pending_extraction","ahg_ai_auto_trigger_log","ahg_ai_condition_assessment","ahg_ai_condition_damage","ahg_ai_condition_history","ahg_ai_service_client","ahg_ai_service_usage","ahg_ai_training_contribution","ahg_ai_usage","ahg_ai_settings","ahg_llm_config","ahg_spellcheck_result","ahg_translation_draft","ahg_translation_log","ahg_translation_queue","ahg_translation_settings"]

ahg_ner_extractionahg_ner_entityidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKobject_idINTFKinfo_objectextraction_idBIGINTFKner_extractionbackend_usedVARCHAR(50)object_idINTFKinfo_objectstatusVARCHAR(50)entity_typeVARCHAR(50)entity_countINTentity_valueVARCHAR(500)extracted_atTIMESTAMPconfidenceDECIMAL(5,4)statusVARCHAR(50)linked_actor_idINTFKactorreviewed_byINTFKuser►correction_typeVARCHAR(20)ahg_ner_entity_linkahg_ner_authority_stubidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKentity_idBIGINTFKner_entityner_entity_idBIGINTFKner_entityactor_idINTFKactoractor_idINTFKactorlink_typeENUM(exact,fuzzy,manual)source_object_idINTFKinfo_objectconfidenceDECIMAL(5,4)entity_typeVARCHAR(50)created_byINTFKuserstatusVARCHAR(20)ahg_ai_batchahg_ai_jobidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKnameVARCHAR(255)batch_idBIGINTFKai_batchtask_typesJSONobject_idINTFKinfo_objectstatusENUM(pending,running,..)task_typeVARCHAR(50)total_itemsINTstatusENUM(pending,running,..)completed_itemsINTresult_dataJSONprogress_percentDECIMAL(5,2)processing_time_msINTcreated_byINTFKuser►ahg_ai_job_logidBIGINTUNSIGNEDPKbatch_idBIGINTFKai_batchjob_idBIGINTFKai_jobevent_typeVARCHAR(50)detailsJSONahg_ai_condition_assessmentahg_ai_condition_damageidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKinformation_object_idINTFKinfo_object►assessment_idBIGINTFKcondition_assessdigital_object_idINTFKdigital_objdamage_typeVARCHAR(50)overall_scoreDECIMAL(5,2)severityVARCHAR(50)condition_gradeVARCHAR(50)confidenceDECIMAL(4,3)damage_countINTbbox_x/y/w/hINT(boundingbox)api_client_idBIGINTFKservice_clientarea_percentDECIMAL(5,2)confirmed_byINTFKusercreated_byINTFKuserahg_ai_condition_historyahg_ai_pending_extractionidBIGINTUNSIGNEDPKinformation_object_idINTFKinfo_objectidBIGINTUNSIGNEDPKassessment_idBIGINTFKcondition_assessobject_idINTFKinfo_objectscoreDECIMAL(5,2)digital_object_idINTFKdigital_objcondition_gradeVARCHAR(50)task_typeVARCHAR(50)assessed_atDATETIMEstatusENUM(pending,processing)attempt_countINTahg_ai_auto_trigger_logahg_ai_service_clientidBIGINTUNSIGNEDPKobject_idINTFKinfo_objectidBIGINTUNSIGNEDPKdigital_object_idINTFKdigital_objnameVARCHAR(255)task_typeVARCHAR(50)organizationVARCHAR(255)statusVARCHAR(50)api_keyVARCHAR(64)tierVARCHAR(50)monthly_limitINTis_activeTINYINT(1)ahg_ai_training_contributionidBIGINTUNSIGNEDPKsourceVARCHAR(50)ahg_ai_service_usageobject_idINTFKinfo_objectclient_idBIGINTFKservice_clientidBIGINTUNSIGNEDPKimage_filenameVARCHAR(255)client_idBIGINTFKservice_client◄statusVARCHAR(20)year_monthVARCHAR(7)scans_usedINTahg_llm_configahg_spellcheck_resultidINTUNSIGNEDPKproviderVARCHAR(50)idBIGINTUNSIGNEDPKnameVARCHAR(100)object_idINTFKinfo_objectmodelVARCHAR(100)errors_jsonJSONendpoint_urlVARCHAR(500)error_countINTapi_key_encryptedTEXTstatusENUM(pending,reviewed,..)max_tokensINTreviewed_byINTFKusertemperatureDECIMAL(3,2)is_activeTINYINT(1)is_defaultTINYINT(1)ahg_translation_queueidBIGINTUNSIGNEDPKahg_translation_logobject_idINTFKinfo_objectsource_cultureVARCHAR(10)idBIGINTUNSIGNEDPKtarget_cultureVARCHAR(10)object_idINTFKinfo_objectfieldsTEXT(JSON)field_nameVARCHAR(100)statusENUM(pending,processing)source_cultureVARCHAR(10)created_byINTFKusertarget_cultureVARCHAR(10)translation_engineVARCHAR(50)created_byINTFKuserahg_translation_draftidBIGINTUNSIGNEDPKahg_ai_usageobject_idBIGINTentity_typeVARCHAR(64)idBIGINTUNSIGNEDPKfield_nameVARCHAR(64)featureVARCHAR(50)source_cultureVARCHAR(8)user_idINTFKusertarget_cultureVARCHAR(8)endpointVARCHAR(100)source_textLONGTEXTresponse_time_msINTtranslated_textLONGTEXTstatus_codeINTstatusENUM(draft,applied,rej)created_by_user_idBIGINTFKuserSettingstables:ahg_ai_settings,ahg_ner_settings,ahg_translation_settings,ahg_ner_usage(key-valueconfigstores)GLAM/DAM&INFORMATIONOBJECTLINKS:•ahg_ner_extraction.object_id►information_object.id•ahg_ner_entity.object_id►information_object.id•ahg_ner_entity.linked_actor_id►actor.id•ahg_ner_entity_link.actor_id►actor.id•ahg_ner_authority_stub.actor_id►actor.id(createdstub)•ahg_ner_authority_stub.source_object_id►information_object.id•ahg_ai_job.object_id►information_object.id•ahg_ai_pending_extraction.object_id►information_object.id•ahg_ai_pending_extraction.digital_object_id►digital_object.id•ahg_ai_auto_trigger_log.object_id►information_object.id•ahg_ai_auto_trigger_log.digital_object_id►digital_object.id•ahg_ai_condition_assessment.information_object_id►information_object.id•ahg_ai_condition_assessment.digital_object_id►digital_object.id•ahg_ai_condition_history.information_object_id►information_object.id•ahg_ai_training_contribution.object_id►information_object.id•ahg_spellcheck_result.object_id►information_object.id•ahg_translation_queue.object_id►information_object.id•ahg_translation_log.object_id►information_object.id•ahg_ai_batch.created_by►user.id•ahg_ai_usage.user_id►user.id•ahg_ai_condition_assessment.confirmed_by/created_by►user.id

13. Extended Rights (ahgExtendedRightsPlugin)

10 tables | tables_json: ["extended_rights","extended_rights_i18n","extended_rights_tk_label","extended_rights_batch_log","embargo","embargo_i18n","embargo_audit","embargo_exception","rights_statement","rights_statement_i18n"]

extended_rightsrights_statementidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKobject_idINTFKinfo_objecturiVARCHAR(255)rights_statement_idBIGINTFKrights_stmt►codeVARCHAR(50)creative_commons_license_idBIGINTcategoryENUM(in-copyright,no-,..)rights_dateDATEicon_urlVARCHAR(255)expiry_dateDATEis_activeTINYINT(1)rights_holderVARCHAR(255)sort_orderINTis_primaryTINYINT(1)created_byINTFKuserFKupdated_byINTFKuserrights_statement_i18nFKidBIGINTFKrights_statementcultureVARCHAR(16)labelVARCHAR(255)extended_rights_i18ndescriptionTEXTidBIGINTFKextended_rightscultureVARCHAR(16)notesTEXTextended_rights_tk_labelextended_rights_batch_logidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKextended_rights_idBIGINTFKext_rightsbatch_operationVARCHAR(100)tk_label_codeVARCHAR(50)affected_countINTassigned_byINTFKuserperformed_byINTFKuserembargoembargo_auditidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKobject_idINTFKinfo_object►embargo_idBIGINTFKembargoembargo_typeENUM(full,metadata,..)actionVARCHAR(50)start_dateDATEperformed_byINTFKuserend_dateDATEis_perpetualTINYINT(1)statusENUM(active,expired,..)created_byINTFKuserembargo_exceptionlifted_byINTFKusernotify_on_expiryTINYINT(1)idBIGINTUNSIGNEDPKnotify_days_beforeINTembargo_idBIGINTFKembargouser_idINTFKuserFKreasonTEXTgranted_byINTFKuserembargo_i18nidBIGINTFKembargocultureVARCHAR(16)reasonTEXTGLAM/DAM&INFORMATIONOBJECTLINKS:•extended_rights.object_id►information_object.id•embargo.object_id►information_object.id•extended_rights.created_by/updated_by►user.id•embargo.created_by/lifted_by►user.id•embargo_exception.user_id/granted_by►user.id•extended_rights_tk_label.assigned_by►user.idCROSS-PLUGIN:extended_rights_tk_label↔ahgICIPPlugin(TKLabels)

14. Exhibition Management (ahgExhibitionPlugin)

13 tables | tables_json: ["exhibition","exhibition_object","exhibition_venue","exhibition_section","exhibition_gallery","exhibition_media","exhibition_event","exhibition_storyline","exhibition_storyline_stop","exhibition_checklist","exhibition_checklist_item","exhibition_checklist_template","exhibition_status_history"]

exhibitionidBIGINTUNSIGNEDPKtitleVARCHAR(255)slugVARCHAR(255)exhibition_typeVARCHAR(50)sectorVARCHAR(50)GLAM/DAMstatusVARCHAR(50)repository_idINTFKrepositorystart_dateDATEend_dateDATEcreated_byINTFKuserFKFKFKexhibitionexhibitionexhibition_venue_object_sectionidBIGINTUNSIGNEDPKidPKidPKexhibition_idBIGINTFKexhibexhibition_idexhibition_idnameVARCHAR(255)FKexhibFKexhibaddressTEXTobject_idtitlestart_dateDATEFKinfo_objdescriptionend_dateDATEdisplay_orderdisplay_orderexhibition_galleryexhibition_mediaidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKexhibition_idBIGINTFKexhibexhibition_idBIGINTFKexhibnameVARCHAR(255)media_typeVARCHAR(50)floor_plan_imageVARCHAR(500)file_pathVARCHAR(1024)titleVARCHAR(255)exhibition_eventexhibition_storylineidBIGINTUNSIGNEDPKexhibition_idBIGINTFKexhibidBIGINTUNSIGNEDPKevent_typeVARCHAR(50)exhibition_idBIGINTFKexhibevent_dateDATETIMEtitleVARCHAR(255)detailsTEXTdescriptionTEXTFKexhibition_status_historyexhibition_storyline_stopidBIGINTUNSIGNEDPKexhibition_idBIGINTFKexhibidBIGINTUNSIGNEDPKfrom_statusVARCHAR(50)storyline_idBIGINTFKstorylineto_statusVARCHAR(50)object_idINTFKinfo_objectchanged_byINTFKusernarrativeTEXTdisplay_orderINTexhibition_checklistexhibition_checklist_templateidBIGINTUNSIGNEDPKexhibition_idBIGINTFKexhibidBIGINTUNSIGNEDPKtemplate_idBIGINTFKchecklist_tnameVARCHAR(255)statusVARCHAR(50)categoryVARCHAR(100)items_jsonJSONFKexhibition_checklist_itemidBIGINTUNSIGNEDPKchecklist_idBIGINTFKchecklistitem_textTEXTis_completedTINYINT(1)GLAM/DAM&INFORMATIONOBJECTLINKS:•exhibition.repository_id►repository.id•exhibition.sector►GLAM/DAMdispatch(museumgalleryarchivelibrarydam)•exhibition_object.object_id►information_object.id•exhibition_storyline_stop.object_id►information_object.id•exhibition.created_by►user.id•exhibition_status_history.changed_by►user.idCROSS-PLUGIN:exhibition↔ahgLoanPlugin(exhibition_idonahg_loan)

15. Donor Agreements (ahgDonorAgreementPlugin)

12 tables | tables_json: ["donor_agreement","donor_agreement_i18n","donor_agreement_accession","donor_agreement_classification","donor_agreement_document","donor_agreement_history","donor_agreement_record","donor_agreement_reminder","donor_agreement_reminder_log","donor_agreement_restriction","donor_agreement_right","donor_agreement_rights"]

donor_agreementidBIGINTUNSIGNEDPKtitleVARCHAR(255)agreement_numberVARCHAR(100)agreement_typeVARCHAR(50)donor_idINTFKactorrepository_idINTFKrepositorystatusVARCHAR(50)signed_dateDATEexpiry_dateDATEcreated_byINTFKuserFKFKFKFKFKdonor_donor_agree-donor_agree-donor_agree-donor_agreementagree-ment_ment_recordment_document_accessionment_classifica-i18ntionidPKidPKidPKagreement_idagreement_idagreement_ididFKidPKFKdonor_agrFKdonor_agrFKdonor_agrcultureagreementinfo_objectfile_pathaccession_idtitle_idFK_idFKIOdocument_typeFKaccessiondescr.security_classif.donor_agreement_historydonor_agreement_restrictionidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKagreement_idBIGINTFKdonor_agragreement_idBIGINTFKdonor_agractionVARCHAR(50)restriction_typeVARCHAR(50)performed_byINTFKuserdetailsTEXTdonor_agreement_rightdonor_agreement_rightsidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKagreement_idBIGINTFKdonor_agragreement_idBIGINTFKdonor_agrright_typeVARCHAR(50)rights_typeVARCHAR(50)descriptionTEXTdonor_agreement_reminderdonor_agreement_reminder_logidBIGINTUNSIGNEDPK►idBIGINTUNSIGNEDPKagreement_idBIGINTFKdonor_agrreminder_idBIGINTFKreminderreminder_dateDATEsent_atDATETIMEreminder_typeVARCHAR(50)statusVARCHAR(50)GLAM/DAM&INFORMATIONOBJECTLINKS:•donor_agreement.donor_id►actor.id(donorisanactor)•donor_agreement.repository_id►repository.id•donor_agreement_record.information_object_id►information_object.id•donor_agreement_accession.accession_id►accession.id•donor_agreement.created_by►user.id•donor_agreement_history.performed_by►user.id

16. Report Builder (ahgReportBuilderPlugin)

3 tables | tables_json: ["report_template","report_section","report_schedule"]

report_templateidBIGINTUNSIGNEDPKnameVARCHAR(255)slugVARCHAR(255)descriptionTEXTreport_typeVARCHAR(50)categoryVARCHAR(100)formatVARCHAR(50)sql_queryTEXTis_activeTINYINT(1)is_publicTINYINT(1)created_byINTFKuserrepository_idINTFKrepositoryFKFKreport_sectionreport_scheduleidBIGINTPKidBIGINTPKtemplate_idBIGINTFKtmpltemplate_idBIGINTFKtmpltitleVARCHAR(255)frequencyVARCHAR(50)section_typeVARCHAR(50)cron_expressionVARCHAR(100)contentLONGTEXTrecipients_jsonJSONsql_queryTEXTlast_run_atDATETIMEdisplay_orderINTnext_run_atDATETIMEis_activeTINYINT(1)GLAM/DAM&INFORMATIONOBJECTLINKS:•report_template.repository_id►repository.id•report_template.created_by►user.id•report_section.sql_querymayreferenceinformation_objectandothercoretables

17. Provenance Tracking (ahgProvenancePlugin)

8 tables | tables_json: ["provenance_record","provenance_record_i18n","provenance_event","provenance_event_i18n","provenance_agent","provenance_agent_i18n","provenance_entry","provenance_document"]

provenance_recordprovenance_record_i18nidBIGINTUNSIGNEDPKidBIGINTFKprov_recordinformation_object_idINTFKinfo_objectcultureVARCHAR(16)statusVARCHAR(50)titleVARCHAR(255)is_verifiedTINYINT(1)descriptionTEXTFKFKprovenance_eventprovenance_entryidPKidPKrecord_idFKrecordrecord_idFKrecevent_typeVARCHARentry_dateDATEevent_dateDATEdescriptionTEXTagent_idFKprov_agtsourceVARCHARFKprovenance_documentidBIGINTUNSIGNEDPKprovenance_agentrecord_idBIGINTFKprov_recordfile_pathVARCHAR(1024)idPKdocument_typeVARCHAR(50)actor_idFKactortitleVARCHAR(255)agent_typeVARCHAR(50)FKprovenance_event_i18nprovenance_agent_i18nidBIGINTFKprov_eventcultureVARCHAR(16)idFKprov_agentdescriptionTEXTcultureVARCHAR(16)nameVARCHAR(255)descriptionTEXTGLAM/DAM&INFORMATIONOBJECTLINKS:•provenance_record.information_object_id►information_object.id•provenance_agent.actor_id►actor.id

18. Workflow Engine (ahgWorkflowPlugin)

7 tables | tables_json: ["ahg_workflow","ahg_workflow_step","ahg_workflow_task","ahg_workflow_history","ahg_workflow_notification","ahg_workflow_queue","ahg_workflow_sla_policy"]

ahg_workflowidINTPKnameVARCHAR(255)scope_typeVARCHAR(50)scope_idINTFKrepository/IOtrigger_eventVARCHAR(50)applies_toVARCHAR(50)is_activeTINYINT(1)is_defaultTINYINT(1)require_all_stepsTINYINT(1)allow_parallelTINYINT(1)notification_enabledTINYINT(1)created_byINTFKuserFKFKahg_workflow_stepahg_workflow_taskidINTPKidINTPKworkflow_idINTFKwfworkflow_idINTFKworkflownameVARCHAR(255)step_idINTFKwf_stepstep_orderINTobject_idINTFKinfo_objectstep_typeVARCHAR(50)object_typeVARCHAR(50)assignee_typeVARCHAR(50)statusVARCHAR(50)assignee_idINTassigned_toINTFKuserauto_approve_daysINTpriorityVARCHAR(20)is_requiredTINYINT(1)due_dateDATETIMEstarted_atDATETIMEcompleted_atDATETIMEFKFKahg_workflow_historyahg_workflow_notificationidINTPKidINTPKtask_idFKtasktask_idFKtaskworkflow_idFKwfuser_idFKuserobject_idFKIOnotification_typeactionVARCHARsubjectVARCHARfrom_statusVARCHARbodyTEXTto_statusVARCHARstatusVARCHARperformed_byFKusersent_atDATETIMEcommentTEXTahg_workflow_queueahg_workflow_sla_policyidINTPKidINTPKtask_idINTFKwf_taskworkflow_idINTFKworkflowactionVARCHAR(50)step_idINTFKwf_stepscheduled_atDATETIMEmax_duration_hoursINTstatusVARCHAR(50)escalation_user_idINTFKuserprocessed_atDATETIMEauto_actionVARCHAR(50)GLAM/DAM&INFORMATIONOBJECTLINKS:•ahg_workflow_task.object_id►information_object.id(polymorphicviaobject_type)•ahg_workflow_history.object_id►information_object.id•ahg_workflow.scope_id►repository.idorinformation_object.id(viascope_type)•ahg_workflow_task.assigned_to►user.id•ahg_workflow_history.performed_by►user.id•ahg_workflow_notification.user_id►user.id•ahg_workflow_sla_policy.escalation_user_id►user.id•ahg_workflow.created_by►user.id

19. CDPA — Zimbabwe (ahgCDPAPlugin)

9 tables | tables_json: ["cdpa_controller_license","cdpa_dpo","cdpa_processing_activity","cdpa_consent","cdpa_data_subject_request","cdpa_breach","cdpa_dpia","cdpa_audit_log","cdpa_config"]

cdpa_controller_licenseidBIGINTUNSIGNEDPKorganization_nameVARCHAR(255)license_numberVARCHAR(100)license_typeVARCHAR(50)statusVARCHAR(50)issued_dateDATEexpiry_dateDATErepository_idINTFKrepositoryFKFKFKFKcdpa_dpocdpa_processingcdpa_data_subjectcdpa_breach_activity_requestidPKidPKnameidPKidPKlicense_idFKemaillicense_idFKlicense_idFKbreach_datephoneactivity_namerequest_typedetected_datelicense_idpurposerequester_nameseverityFKlicenselegal_basisrequester_emaildescriptionuser_iddata_categoriesstatusaffected_countFKuserJSONdue_datenotified_potrazis_activeretention_prdhandled_byFKusrreported_byFKuserFKcdpa_consentcdpa_dpiaidPKidBIGINTUNSIGNEDPKactivity_idFKactivity_idBIGINTFKproc_actdata_subjectassessment_dateDATEconsent_typerisk_levelVARCHAR(50)statusmitigationsTEXTobtained_atapproved_byINTFKuserwithdrawn_atcdpa_audit_logcdpa_configidBIGINTUNSIGNEDPKidINTPKlicense_idBIGINTFKlicensesetting_keyVARCHAR(100)actionVARCHAR(50)setting_valueTEXTperformed_byINTFKuserdetailsTEXTGLAM/DAM&INFORMATIONOBJECTLINKS:•cdpa_controller_license.repository_id►repository.id•cdpa_dpo.user_id►user.id•cdpa_data_subject_request.handled_by►user.id•cdpa_breach.reported_by►user.id•cdpa_dpia.approved_by►user.id•cdpa_audit_log.performed_by►user.idNOTE:CDPAtablesdonotdirectlyreferenceinformation_object—theytrackorganizationalcompliance(datacontrollerlicenses,processingactivities)

20. Indigenous Cultural IP (ahgICIPPlugin)

11 tables | tables_json: ["icip_community","icip_tk_label_type","icip_tk_label","icip_cultural_notice_type","icip_cultural_notice","icip_notice_acknowledgement","icip_access_restriction","icip_consent","icip_consultation","icip_object_summary","icip_config"]

icip_communityicip_tk_label_typeidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKnameVARCHAR(255)codeVARCHAR(50)regionVARCHAR(255)nameVARCHAR(255)countryVARCHAR(100)descriptionTEXTcontact_nameVARCHAR(255)iconVARCHAR(500)contact_emailVARCHAR(255)categoryVARCHAR(100)is_activeTINYINT(1)FKicip_tk_labelFKidBIGINTUNSIGNEDPK►type_idBIGINTFKtk_typeobject_idINTFKinfo_objectcommunity_idBIGINTFKcommunityassigned_byINTFKuserstatusVARCHAR(50)icip_cultural_notice_typeidBIGINTUNSIGNEDPKcodeVARCHAR(50)nameVARCHAR(255)iconVARCHAR(500)FK►icip_cultural_noticeidBIGINTUNSIGNEDPKtype_idBIGINTFKnotice_typeobject_idINTFKinfo_objectcommunity_idBIGINTFKcommunityassigned_byINTFKuserFKicip_notice_acknowledgement◄idBIGINTUNSIGNEDPKnotice_idBIGINTFKcult_noticeuser_idINTFKuseracknowledged_atDATETIME►icip_access_restrictionidBIGINTUNSIGNEDPKobject_idINTFKinfo_objectcommunity_idBIGINTFKcommunityrestriction_typeVARCHAR(50)reasonTEXTis_activeTINYINT(1)►icip_consentidBIGINTUNSIGNEDPKcommunity_idBIGINTFKcommunityobject_idINTFKinfo_objectconsent_typeVARCHAR(50)statusVARCHAR(50)given_byVARCHAR(255)►icip_consultationidBIGINTUNSIGNEDPKcommunity_idBIGINTFKcommunityobject_idINTFKinfo_objectpurposeTEXTstatusVARCHAR(50)conducted_byINTFKuserscheduled_dateDATEicip_object_summaryicip_configidBIGINTUNSIGNEDPKidINTPKobject_idINTFKinfo_objectsetting_keyVARCHAR(100)has_tk_labelsTINYINT(1)setting_valueTEXThas_noticesTINYINT(1)has_restrictionsTINYINT(1)community_countINTGLAM/DAM&INFORMATIONOBJECTLINKS:•icip_tk_label.object_id►information_object.id•icip_cultural_notice.object_id►information_object.id•icip_access_restriction.object_id►information_object.id•icip_consent.object_id►information_object.id•icip_consultation.object_id►information_object.id•icip_object_summary.object_id►information_object.id•icip_tk_label.assigned_by/icip_cultural_notice.assigned_by►user.id•icip_notice_acknowledgement.user_id►user.id•icip_consultation.conducted_by►user.idCROSS-PLUGIN:icip_tk_label↔ahgExtendedRightsPlugin(extended_rights_tk_label)

21. NAZ — Zimbabwe (ahgNAZPlugin)

10 tables | tables_json: ["naz_closure_period","naz_protected_record","naz_records_schedule","naz_transfer","naz_transfer_item","naz_researcher","naz_research_permit","naz_research_visit","naz_audit_log","naz_config"]

naz_closure_periodnaz_protected_recordidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKinformation_object_idINTFKinfo_objectinformation_object_idINTFKinfo_objectclosure_typeVARCHAR(50)protection_typeVARCHAR(50)closure_yearsINTdeclared_dateDATEstart_dateDATEgazette_referenceVARCHAR(255)expiry_dateDATEis_activeTINYINT(1)reasonTEXTstatusVARCHAR(50)extended_byINTFKusernaz_records_scheduleidBIGINTUNSIGNEDPKnaz_transfernameVARCHAR(255)retention_period_yearsINTidBIGINTUNSIGNEDPKdisposal_actionVARCHAR(50)repository_idINTFKrepositoryauthority_referenceVARCHAR(255)transfer_numberVARCHAR(100)repository_idINTFKrepositorytransfer_dateDATEstatusVARCHAR(50)received_byINTFKuserFKnaz_transfer_itemidBIGINTUNSIGNEDPKtransfer_idBIGINTFKnaz_transferinformation_object_idINTFKinfo_objectaccession_numberVARCHAR(100)naz_researcheridBIGINTUNSIGNEDPKuser_idINTFKuserregistration_numberVARCHAR(100)institutionVARCHAR(255)research_areaVARCHAR(255)is_approvedTINYINT(1)FKnaz_research_permitidBIGINTUNSIGNEDPKresearcher_idBIGINTFKnaz_researcherpermit_numberVARCHAR(100)purposeTEXTvalid_fromDATEvalid_toDATEstatusVARCHAR(50)approved_byINTFKuserFKnaz_research_visitidBIGINTUNSIGNEDPKpermit_idBIGINTFKnaz_permitvisit_dateDATEsign_inTIMEsign_outTIMEmaterials_accessedTEXTnaz_audit_lognaz_configidBIGINTUNSIGNEDPKidINTPKactionVARCHAR(50)setting_keyVARCHAR(100)entity_typeVARCHAR(50)setting_valueTEXTentity_idBIGINTperformed_byINTFKuserdetailsTEXTGLAM/DAM&INFORMATIONOBJECTLINKS:•naz_closure_period.information_object_id►information_object.id•naz_protected_record.information_object_id►information_object.id•naz_transfer_item.information_object_id►information_object.id•naz_transfer.repository_id►repository.id•naz_records_schedule.repository_id►repository.id•naz_researcher.user_id►user.id•naz_transfer.received_by►user.id•naz_closure_period.extended_by►user.id•naz_research_permit.approved_by►user.id•naz_audit_log.performed_by►user.id

22. DOI Integration (ahgDoiPlugin)

5 tables | tables_json: ["ahg_doi","ahg_doi_config","ahg_doi_log","ahg_doi_mapping","ahg_doi_queue"]

ahg_doiahg_doi_configidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKinformation_object_idINTFKinfo_objectrepository_idINTFKrepositorydoiVARCHAR(255)datacite_repo_idVARCHAR(100)doi_urlVARCHAR(500)datacite_prefixVARCHAR(50)statusENUM(draft,registered,..)datacite_passwordVARCHAR(255)minted_atDATETIMEdatacite_urlVARCHAR(255)minted_byINTFKuserenvironmentENUM(test,production)datacite_responseJSONauto_mintTINYINT(1)metadata_jsonJSONauto_mint_levelsJSONlast_sync_atDATETIMEsuffix_patternVARCHAR(100)is_activeTINYINT(1)FKahg_doi_logidBIGINTUNSIGNEDPKahg_doi_mappingdoi_idBIGINTFKahg_doiinformation_object_idINTFKinfo_objectidBIGINTUNSIGNEDPKactionVARCHAR(50)config_idBIGINTFKdoi_configstatus_beforeVARCHAR(50)datacite_fieldVARCHAR(100)status_afterVARCHAR(50)atom_fieldVARCHAR(100)performed_byINTFKusertransform_functionVARCHAR(255)detailsJSONahg_doi_queueidBIGINTUNSIGNEDPKinformation_object_idINTFKinfo_objectactionVARCHAR(50)statusENUM(pending,processing)priorityINTerror_messageTEXTcreated_byINTFKuserGLAM/DAM&INFORMATIONOBJECTLINKS:•ahg_doi.information_object_id►information_object.id•ahg_doi_log.information_object_id►information_object.id•ahg_doi_queue.information_object_id►information_object.id•ahg_doi_config.repository_id►repository.id•ahg_doi.minted_by►user.id•ahg_doi_log.performed_by►user.id•ahg_doi_queue.created_by►user.id

23. Data Ingest (ahgIngestPlugin)

6 tables | tables_json: ["ingest_session","ingest_file","ingest_mapping","ingest_row","ingest_validation","ingest_job"]

ingest_sessionidBIGINTUNSIGNEDPKnameVARCHAR(255)statusVARCHAR(50)sectorVARCHAR(50)GLAM/DAMstandardVARCHAR(50)repository_idINTFKrepositoryparent_object_idINTFKinfo_objectuser_idINTFKusersettings_jsonJSONFKFKFKingest_fileingest_mappingingest_rowidPKidPKidBIGINTUNSIGNEDPKsession_idsession_idsession_idBIGINTFKsessionFKsessionFKsessionrow_numberINToriginal_namesource_columndata_jsonJSONstored_pathtarget_fieldenriched_jsonJSONfile_typetransformstatusVARCHAR(50)file_sizedisplay_orderinformation_object_idINTFKIOstatusFKingest_validationidBIGINTUNSIGNEDPKsession_idBIGINTFKsessionrow_idBIGINTFKingest_rowruleVARCHAR(100)severityVARCHAR(20)messageTEXTingest_jobidBIGINTUNSIGNEDPKsession_idBIGINTFKsessionstatusVARCHAR(50)progress_percentDECIMAL(5,2)total_rowsINTprocessed_rowsINTerror_countINTstarted_atDATETIMEcompleted_atDATETIMEGLAM/DAM&INFORMATIONOBJECTLINKS:•ingest_session.repository_id►repository.id•ingest_session.parent_object_id►information_object.id•ingest_session.sector►GLAM/DAMdispatch(museumgalleryarchivelibrarydam)•ingest_row.information_object_id►information_object.id(createdrecord)•ingest_session.user_id►user.id

24. RiC / Fuseki (ahgRicExplorerPlugin)

5 tables | tables_json: ["ric_sync_config","ric_sync_log","ric_sync_queue","ric_sync_status","ric_sync_summary"]

ric_sync_configidBIGINTUNSIGNEDPKsetting_keyVARCHAR(100)setting_valueTEXTsetting_groupVARCHAR(50)ric_sync_queueric_sync_statusidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKentity_typeVARCHAR(50)entity_typeVARCHAR(50)entity_idINTentity_idINTactionVARCHAR(50)last_synced_atDATETIMEpriorityINTsync_statusVARCHAR(50)statusVARCHAR(50)triple_countINTcreated_atDATETIMEprocessed_atDATETIMEric_sync_summaryric_sync_logidBIGINTUNSIGNEDPKsync_dateDATEidBIGINTUNSIGNEDPKentities_syncedINTactionVARCHAR(50)triples_createdINTentity_typeVARCHAR(50)triples_deletedINTentity_idINTduration_secondsINTstatusVARCHAR(50)messageTEXTcreated_atDATETIMEGLAM/DAM&INFORMATIONOBJECTLINKS:•ric_sync_queue.entity_id►polymorphic(information_object.id,actor.id,etc.)•ric_sync_status.entity_id►polymorphic(viaentity_typedispatch)•ric_sync_log.entity_id►polymorphic(viaentity_typedispatch)NOTE:RiCsynctracksANYHeratioentitytypefortriplestoresynchronization

25. Library System — Full ILS (ahgLibraryPlugin)

18 tables | tables_json: ["library_item","library_item_creator","library_item_subject","library_copy","library_patron","library_checkout","library_hold","library_fine","library_loan_rule","library_budget","library_order","library_order_line","library_subscription","library_serial_issue","library_ill_request","library_settings","library_subject_authority","library_entity_subject_map"]

25.1 Catalog Core

library_itemidBIGINTUNSIGNEDPKAUTO_INCREMENTinformation_object_idINTUNSIGNEDFKinformation_object.idBibliographicmaterial_typeVARCHAR(50)NOTNULLDEFAULT'monograph'subtitleVARCHAR(500)responsibility_statementVARCHAR(500)editionVARCHAR(255)edition_statementVARCHAR(500)publisherVARCHAR(255)publication_placeVARCHAR(255)publication_dateVARCHAR(100)copyright_dateVARCHAR(50)printingVARCHAR(100)languageVARCHAR(100)Classificationcall_numberVARCHAR(100)classification_schemeVARCHAR(50)classification_numberVARCHAR(100)dewey_decimalVARCHAR(50)cutter_numberVARCHAR(50)shelf_locationVARCHAR(100)IdentifiersisbnVARCHAR(17)issnVARCHAR(9)lccnVARCHAR(50)oclc_numberVARCHAR(50)doiVARCHAR(255)barcodeVARCHAR(50)openlibrary_idVARCHAR(50)goodreads_idVARCHAR(50)librarything_idVARCHAR(50)PhysicalpaginationVARCHAR(100)dimensionsVARCHAR(100)physical_detailsTEXTaccompanying_materialTEXTcopy_numberVARCHAR(20)volume_designationVARCHAR(100)Seriesseries_titleVARCHAR(500)series_numberVARCHAR(50)series_issnVARCHAR(9)subseries_titleVARCHAR(500)Notesgeneral_noteTEXTbibliography_noteTEXTcontents_noteTEXTsummaryTEXTtarget_audienceTEXTsystem_requirementsTEXTbinding_noteTEXTSerials-specificfrequencyVARCHAR(50)former_frequencyVARCHAR(100)numbering_peculiaritiesVARCHAR(255)publication_start_dateDATEpublication_end_dateDATEpublication_statusVARCHAR(20)Linkscover_urlVARCHAR(500)cover_url_originalVARCHAR(500)openlibrary_urlVARCHAR(500)ebook_preview_urlVARCHAR(500)Circulationtotal_copiesSMALLINTUNSIGNEDNOTNULLDEFAULT1available_copiesSMALLINTUNSIGNEDNOTNULLDEFAULT1circulation_statusVARCHAR(30)NOTNULLDEFAULT'available'Catalogingcataloging_sourceVARCHAR(100)cataloging_rulesVARCHAR(20)encoding_levelVARCHAR(20)HeritageAccounting(GRAP103/IPSAS45)heritage_asset_idINTUNSIGNEDacquisition_methodVARCHAR(50)acquisition_dateDATEacquisition_costDECIMAL(15,2)acquisition_currencyVARCHAR(3)DEFAULT'ZAR'replacement_valueDECIMAL(15,2)insurance_valueDECIMAL(15,2)insurance_policyVARCHAR(100)insurance_expiryDATEasset_class_codeVARCHAR(20)recognition_statusVARCHAR(30)DEFAULT'pending'valuation_dateDATEvaluation_methodVARCHAR(50)valuation_notesTEXTdonor_nameVARCHAR(255)donor_restrictionsTEXTcondition_gradeVARCHAR(30)conservation_priorityVARCHAR(20)created_atTIMESTAMPupdated_atTIMESTAMPFKFKlibrary_item_creatorlibrary_item_subjectidBIGINTPKidBIGINTPKlibrary_item_idBIGINTFKitemlibrary_item_idBIGINTFKitemnameVARCHAR(500)headingVARCHAR(500)roleVARCHAR(50)subject_typeVARCHAR(50)def'topic'is_primaryTINYINT(1)sourceVARCHAR(100)sort_orderINTdef0uriVARCHAR(500)authority_uriVARCHAR(500)lcsh_idVARCHAR(100)created_atTIMESTAMPauthority_idBIGINTFKsubj_authdewey_numberVARCHAR(50)lcc_numberVARCHAR(50)subdivisionsJSONcreated_atTIMESTAMP

25.2 Copy Management

library_copyidBIGINTUNSIGNEDPKAUTO_INCREMENTlibrary_item_idBIGINTUNSIGNEDFKlibrary_item.idcopy_numberSMALLINTUNSIGNEDNOTNULLDEFAULT1barcodeVARCHAR(50)UNIQUEaccession_numberVARCHAR(50)INDEXcall_number_suffixVARCHAR(20)shelf_locationVARCHAR(100)branchVARCHAR(100)INDEXstatusVARCHAR(30)NOTNULLDEFAULT'available'condition_gradeVARCHAR(30)condition_notesTEXTacquisition_methodVARCHAR(50)acquisition_dateDATEacquisition_costDECIMAL(15,2)acquisition_sourceVARCHAR(255)withdrawal_dateDATEwithdrawal_reasonTEXTnotesTEXTcreated_atTIMESTAMPupdated_atTIMESTAMPStatusvalues:available,checked_out,on_hold,in_transit,in_repair,lost,missing,withdrawn

25.3 Patron Management

library_patronidBIGINTUNSIGNEDPKAUTO_INCREMENTactor_idINTUNSIGNEDFKactor.idcard_numberVARCHAR(50)NOTNULLUNIQUEpatron_typeVARCHAR(30)NOTNULLDEFAULT'public'first_nameVARCHAR(100)NOTNULLlast_nameVARCHAR(100)NOTNULLINDEXemailVARCHAR(255)INDEXphoneVARCHAR(50)addressTEXTinstitutionVARCHAR(255)departmentVARCHAR(100)id_numberVARCHAR(50)date_of_birthDATEmembership_startDATENOTNULLmembership_expiryDATEINDEXmax_checkoutsSMALLINTUNSIGNEDNOTNULLDEFAULT5max_renewalsSMALLINTUNSIGNEDNOTNULLDEFAULT2max_holdsSMALLINTUNSIGNEDNOTNULLDEFAULT3borrowing_statusVARCHAR(20)NOTNULLDEFAULT'active'suspension_reasonTEXTsuspension_untilDATEtotal_fines_owedDECIMAL(10,2)NOTNULLDEFAULT0.00total_fines_paidDECIMAL(10,2)NOTNULLDEFAULT0.00total_checkoutsINTUNSIGNEDNOTNULLDEFAULT0last_activity_dateDATEphoto_urlVARCHAR(500)notesTEXTcreated_byINTUNSIGNEDcreated_atTIMESTAMPupdated_atTIMESTAMPPatrontypes:public,student,faculty,staff,researcher,institutionalBorrowingstatus:active,suspended,expired,barred

25.4 Circulation

library_checkoutidBIGINTUNSIGNEDPKAUTO_INCREMENTcopy_idBIGINTUNSIGNEDFKlibrary_copy.idpatron_idBIGINTUNSIGNEDFKlibrary_patroncheckout_dateDATETIMENOTNULLINDEXdue_dateDATENOTNULLINDEXreturn_dateDATETIMErenewed_countSMALLINTUNSIGNEDNOTNULLDEFAULT0statusVARCHAR(30)NOTNULLINDEXcheckout_notesTEXTreturn_notesTEXTreturn_conditionVARCHAR(30)checked_out_byINTUNSIGNEDchecked_in_byINTUNSIGNEDcreated_atTIMESTAMPupdated_atTIMESTAMPStatusvalues:active,returned,lost,claimed_returnedlibrary_holdidBIGINTUNSIGNEDPKAUTO_INCREMENTlibrary_item_idBIGINTUNSIGNEDFKlibrary_itempatron_idBIGINTUNSIGNEDFKlibrary_patronhold_dateDATETIMENOTNULLexpiry_dateDATEpickup_branchVARCHAR(100)queue_positionSMALLINTUNSIGNEDNOTNULLDEFAULT1statusVARCHAR(30)NOTNULLINDEXnotification_sentTINYINT(1)NOTNULLDEFAULT0notification_dateDATETIMEfulfilled_dateDATETIMEcancelled_dateDATETIMEcancel_reasonTEXTnotesTEXTcreated_atTIMESTAMPupdated_atTIMESTAMPHoldstatus:pending,ready,fulfilled,cancelled,expiredlibrary_fineidBIGINTUNSIGNEDPKAUTO_INCREMENTpatron_idBIGINTUNSIGNEDFKlibrary_patroncheckout_idBIGINTUNSIGNEDFKlibrary_checkoutfine_typeVARCHAR(30)NOTNULLINDEXamountDECIMAL(10,2)NOTNULLpaid_amountDECIMAL(10,2)NOTNULLDEFAULT0currencyVARCHAR(3)NOTNULLDEFAULT'ZAR'statusVARCHAR(20)NOTNULLINDEXdescriptionTEXTfine_dateDATENOTNULLINDEXpayment_dateDATETIMEpayment_methodVARCHAR(30)payment_referenceVARCHAR(100)waived_byINTUNSIGNEDwaived_dateDATETIMEwaive_reasonTEXTnotesTEXTcreated_atTIMESTAMPupdated_atTIMESTAMPFinetypes:overdue,lost,damaged,processing,replacementStatus:outstanding,paid,waived,partiallibrary_loan_ruleidBIGINTUNSIGNEDPKAUTO_INCREMENTmaterial_typeVARCHAR(50)NOTNULLINDEXpatron_typeVARCHAR(30)NOTNULLDEF'*'loan_period_daysSMALLINTUNSIGNEDNOTNULLDEF14renewal_period_daysSMALLINTUNSIGNEDNOTNULLDEF14max_renewalsSMALLINTUNSIGNEDNOTNULLDEF2fine_per_dayDECIMAL(10,2)NOTNULLDEF1.00fine_capDECIMAL(10,2)grace_period_daysSMALLINTUNSIGNEDNOTNULLDEF0is_loanableTINYINT(1)NOTNULLDEF1notesTEXTcreated_atTIMESTAMPLookupfallback:exactmatchmaterial_type'*'globaldefault

25.5 Acquisitions

library_orderidBIGINTUNSIGNEDPKAUTO_INCREMENTorder_numberVARCHAR(50)NOTNULLUNIQUEvendor_idINTUNSIGNEDFKactor.idINDEXvendor_nameVARCHAR(255)order_dateDATENOTNULLINDEXexpected_dateDATEreceived_dateDATEstatusVARCHAR(30)NOTNULLINDEXorder_typeVARCHAR(30)NOTNULLDEF'purchase'budget_codeVARCHAR(50)INDEXsubtotalDECIMAL(15,2)NOTNULLDEFAULT0taxDECIMAL(15,2)NOTNULLDEFAULT0shippingDECIMAL(15,2)NOTNULLDEFAULT0totalDECIMAL(15,2)NOTNULLDEFAULT0currencyVARCHAR(3)DEFAULT'ZAR'invoice_numberVARCHAR(100)invoice_dateDATEpayment_statusVARCHAR(30)DEFAULT'unpaid'shipping_addressTEXTnotesTEXTapproved_byINTUNSIGNEDapproved_dateDATETIMEcreated_byINTUNSIGNEDcreated_atTIMESTAMPupdated_atTIMESTAMPOrderstatus:draft,submitted,approved,ordered,partial,received,cancelledOrdertype:purchase,standing_order,gift,exchangePaymentstatus:unpaid,partial,paidlibrary_order_lineidBIGINTUNSIGNEDPKAUTO_INCREMENTorder_idBIGINTUNSIGNEDFKlibrary_orderlibrary_item_idBIGINTUNSIGNEDFKlibrary_itemtitleVARCHAR(500)NOTNULLisbnVARCHAR(17)INDEXissnVARCHAR(9)authorVARCHAR(255)publisherVARCHAR(255)editionVARCHAR(100)material_typeVARCHAR(50)quantitySMALLINTUNSIGNEDNOTNULLDEFAULT1unit_priceDECIMAL(15,2)NOTNULLDEFAULT0discount_percentDECIMAL(5,2)NOTNULLDEFAULT0line_totalDECIMAL(15,2)NOTNULLDEFAULT0quantity_receivedSMALLINTUNSIGNEDNOTNULLDEF0received_dateDATEstatusVARCHAR(30)NOTNULLINDEXbudget_codeVARCHAR(50)fund_codeVARCHAR(50)notesTEXTcreated_atTIMESTAMPLinestatus:ordered,partial,received,cancelled,backorderedlibrary_budgetidBIGINTUNSIGNEDPKAUTO_INCREMENTbudget_codeVARCHAR(50)NOTNULLINDEXfund_nameVARCHAR(255)NOTNULLfiscal_yearVARCHAR(9)NOTNULLINDEXallocated_amountDECIMAL(15,2)NOTNULLDEFAULT0committed_amountDECIMAL(15,2)NOTNULLDEFAULT0spent_amountDECIMAL(15,2)NOTNULLDEFAULT0currencyVARCHAR(3)DEFAULT'ZAR'categoryVARCHAR(50)INDEXdepartmentVARCHAR(100)notesTEXTstatusVARCHAR(20)NOTNULLINDEXcreated_byINTUNSIGNEDcreated_atTIMESTAMPupdated_atTIMESTAMPBudgetstatus:active,frozen,closed

25.6 Serials

library_subscriptionidBIGINTUNSIGNEDPKAUTO_INCREMENTlibrary_item_idBIGINTUNSIGNEDFKlibrary_itemvendor_idINTUNSIGNEDsubscription_numberVARCHAR(100)statusVARCHAR(30)NOTNULLINDEXstart_dateDATENOTNULLend_dateDATErenewal_dateDATEINDEXfrequencyVARCHAR(30)issues_per_yearSMALLINTUNSIGNEDcost_per_yearDECIMAL(10,2)currencyVARCHAR(3)DEFAULT'ZAR'budget_codeVARCHAR(50)routing_listJSONdelivery_methodVARCHAR(30)notesTEXTcreated_byINTUNSIGNEDcreated_atTIMESTAMPupdated_atTIMESTAMPSubscriptionstatus:active,suspended,cancelled,expiredlibrary_serial_issueidBIGINTUNSIGNEDPKAUTO_INCREMENTsubscription_idBIGINTUNSIGNEDFKsubscriptionlibrary_item_idBIGINTUNSIGNEDFKlibrary_itemvolumeVARCHAR(20)INDEXissue_numberVARCHAR(20)partVARCHAR(20)supplementVARCHAR(50)issue_dateDATEexpected_dateDATEINDEXreceived_dateDATEstatusVARCHAR(30)NOTNULLINDEXclaim_dateDATEclaim_countSMALLINTUNSIGNEDNOTNULLDEFAULT0barcodeVARCHAR(50)UNIQUEshelf_locationVARCHAR(100)bound_volume_idBIGINTUNSIGNEDnotesTEXTchecked_in_byINTUNSIGNEDcreated_atTIMESTAMPupdated_atTIMESTAMPIssuestatus:expected,received,claimed,missing,bound

25.7 Interlibrary Loan

library_ill_requestidBIGINTUNSIGNEDPKAUTO_INCREMENTrequest_numberVARCHAR(50)NOTNULLUNIQUEdirectionVARCHAR(20)NOTNULLINDEXpatron_idBIGINTUNSIGNEDFKlibrary_patronpartner_libraryVARCHAR(255)NOTNULLINDEXpartner_contactVARCHAR(255)partner_emailVARCHAR(255)titleVARCHAR(500)NOTNULLauthorVARCHAR(255)isbnVARCHAR(17)issnVARCHAR(9)publisherVARCHAR(255)publication_yearVARCHAR(10)volume_issueVARCHAR(100)pagesVARCHAR(50)library_item_idBIGINTUNSIGNEDFKlibrary_itemcopy_idBIGINTUNSIGNEDstatusVARCHAR(30)NOTNULLINDEXrequest_dateDATENOTNULLINDEXneeded_byDATEshipped_dateDATEreceived_dateDATEdue_dateDATEreturn_dateDATEshipping_methodVARCHAR(50)tracking_numberVARCHAR(100)costDECIMAL(10,2)currencyVARCHAR(3)DEFAULT'ZAR'notesTEXTcreated_byINTUNSIGNEDcreated_atTIMESTAMPupdated_atTIMESTAMPDirection:borrow,lendStatus:requested,approved,shipped,received,in_use,returned,cancelled

25.8 Subject Authority & Settings

library_subject_authorityidBIGINTUNSIGNEDPKAUTO_INCREMENTheadingVARCHAR(500)NOTNULLINDEXheading_normalizedVARCHAR(500)NOTNULLINDEXheading_typeVARCHAR(61)INDEXsourceVARCHAR(50)INDEXlcsh_idVARCHAR(100)lcsh_uriVARCHAR(500)suggested_deweyVARCHAR(50)suggested_lccVARCHAR(50)broader_termsJSONnarrower_termsJSONrelated_termsJSONusage_countINTUNSIGNEDINDEXDEFAULT1first_used_atTIMESTAMPlast_used_atTIMESTAMPcreated_atTIMESTAMPHeadingtypes:topical,geographic,personal_name,corporate_name,genre_formSources:lcsh,mesh,fast,locallibrary_entity_subject_mapidBIGINTUNSIGNEDPKAUTO_INCentity_typeVARCHAR(50)NOTNULLINDEXentity_valueVARCHAR(500)NOTNULLentity_normalizedVARCHAR(500)NOTNULLsubject_authority_idBIGINTUNSIGNEDFKsubj_authco_occurrence_countINTUNSIGNEDDEFAULT1confidenceDECIMAL(5,4)INDEXDEF1.0created_atTIMESTAMPupdated_atTIMESTAMPlibrary_settingsidINTUNSIGNEDPKAUTO_INCREMENTsetting_keyVARCHAR(100)NOTNULLUNIQUEsetting_valueTEXTsetting_typeVARCHAR(37)DEFAULT'string'descriptionVARCHAR(255)created_atTIMESTAMPupdated_atTIMESTAMP

25.9 Relationships

CORELINKS:•library_item.information_object_id►information_object.id•library_item_creator.library_item_id►library_item.id•library_item_subject.library_item_id►library_item.id•library_item_subject.authority_id►library_subject_authority.id•library_entity_subject_map.subject_authority_id►library_subject_authority.idCOPY&CIRCULATION:•library_copy.library_item_id►library_item.id•library_checkout.copy_id►library_copy.id•library_checkout.patron_id►library_patron.id•library_hold.library_item_id►library_item.id•library_hold.patron_id►library_patron.id•library_fine.patron_id►library_patron.id•library_fine.checkout_id►library_checkout.idPATRON:•library_patron.actor_id►actor.idACQUISITIONS:•library_order.vendor_id►actor.id(vendorasactor)•library_order_line.order_id►library_order.id•library_order_line.library_item_id►library_item.idSERIALS:•library_subscription.library_item_id►library_item.id•library_serial_issue.subscription_id►library_subscription.id•library_serial_issue.library_item_id►library_item.idINTERLIBRARYLOAN:•library_ill_request.patron_id►library_patron.id•library_ill_request.library_item_id►library_item.idPUBLICATIONSTATUS(viastatustable):•status.object_id►information_object.id•status.type_id=158(publicationtype)•status.status_id:160=Published,159=Draft

9 tables | tables_json: ["gallery_artist","gallery_artist_bibliography","gallery_artist_exhibition_history","gallery_loan","gallery_loan_object","gallery_valuation","gallery_insurance_policy","gallery_facility_report","gallery_space"]

gallery_artistidBIGINTUNSIGNEDPKactor_idINTFKactorbirth_dateDATEdeath_dateDATEnationalityVARCHAR(100)mediumVARCHAR(255)biographyTEXTis_representedTINYINT(1)repository_idINTFKrepositoryFKgallery_artist_bibliography◄gallery_artist_exhibition_historyidBIGINTUNSIGNEDPK►idBIGINTUNSIGNEDPKartist_idBIGINTFKgallery_artistartist_idBIGINTFKgallery_artisttitleVARCHAR(500)exhibition_titleVARCHAR(500)publicationVARCHAR(500)venueVARCHAR(255)yearINTyearINTcitationTEXTis_soloTINYINT(1)gallery_loangallery_loan_objectidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKloan_typeVARCHAR(50)in/out►loan_idBIGINTFKgallery_loanborrower_idINTFKactorobject_idINTFKinfo_objectlender_idINTFKactorcondition_outTEXTrepository_idINTFKrepositorycondition_inTEXTstatusVARCHAR(50)start_dateDATEend_dateDATEinsurance_valueDECIMAL(15,2)gallery_valuationidBIGINTUNSIGNEDPKobject_idINTFKinfo_objectgallery_insurance_policyvaluation_dateDATEvalue_amountDECIMAL(15,2)idBIGINTUNSIGNEDPKcurrencyVARCHAR(10)policy_numberVARCHAR(100)valuatorVARCHAR(255)providerVARCHAR(255)purposeVARCHAR(100)coverage_amountDECIMAL(15,2)start_dateDATEend_dateDATErepository_idINTFKrepositorygallery_spaceidBIGINTUNSIGNEDPKnameVARCHAR(255)gallery_facility_reportrepository_idINTFKrepositoryarea_sqmDECIMAL(10,2)idBIGINTUNSIGNEDPKcapacityINTvenue_nameVARCHAR(255)space_typeVARCHAR(50)report_dateDATEsecurity_ratingVARCHAR(50)climate_controlVARCHAR(50)lightingVARCHAR(50)approved_byINTFKuserGLAM/DAM&INFORMATIONOBJECTLINKS:•gallery_artist.actor_id►actor.id•gallery_artist.repository_id►repository.id•gallery_loan.borrower_id/lender_id►actor.id•gallery_loan.repository_id►repository.id•gallery_loan_object.object_id►information_object.id•gallery_valuation.object_id►information_object.id•gallery_insurance_policy.repository_id►repository.id•gallery_space.repository_id►repository.id•gallery_facility_report.approved_by►user.id

27. Digital Asset Management (ahgDAMPlugin)

4 tables | tables_json: ["dam_iptc_metadata","dam_external_links","dam_format_holdings","dam_version_links"]

dam_iptc_metadatadam_external_linksidBIGINTUNSIGNEDPKidBIGINTUNSIGNEDPKinformation_object_idINTFKinfo_objectinformation_object_idINTFKinfo_objectheadlineVARCHAR(255)platformVARCHAR(100)captionTEXTexternal_urlVARCHAR(1024)keywordsJSONexternal_idVARCHAR(255)creatorVARCHAR(255)sync_statusVARCHAR(50)creditVARCHAR(255)sourceVARCHAR(255)copyright_noticeVARCHAR(500)cityVARCHAR(100)dam_format_holdingscountryVARCHAR(100)categoryVARCHAR(100)idBIGINTUNSIGNEDPKinformation_object_idINTFKinfo_objectformat_typeVARCHAR(50)file_pathVARCHAR(1024)dam_version_linksfile_sizeBIGINTmime_typeVARCHAR(100)idBIGINTUNSIGNEDPKis_primaryTINYINT(1)information_object_idINTFKinfo_objectversion_numberINTparent_version_idBIGINTFKselfchange_descriptionTEXTcreated_byINTFKuserGLAM/DAM&INFORMATIONOBJECTLINKS:•dam_iptc_metadata.information_object_id►information_object.id•dam_external_links.information_object_id►information_object.id•dam_format_holdings.information_object_id►information_object.id•dam_version_links.information_object_id►information_object.id•dam_version_links.created_by►user.idNOTE:AllDAMtablesattachdirectlytoinformation_object—DAMisasectoroverlay

28. Museum Cataloging (ahgMuseumPlugin)

1 table | tables_json: ["museum_metadata"]

museum_metadataidBIGINTUNSIGNEDPKinformation_object_idINTFKinfo_objectobject_nameVARCHAR(255)classificationVARCHAR(255)materialsTEXTdimensionsVARCHAR(255)inscriptionTEXTmarksTEXTcondition_statusVARCHAR(50)acquisition_methodVARCHAR(100)acquisition_dateDATEprovenance_summaryTEXTcultural_contextVARCHAR(255)periodVARCHAR(100)styleVARCHAR(100)repository_idINTFKrepositoryGLAM/DAM&INFORMATIONOBJECTLINKS:•museum_metadata.information_object_id►information_object.id•museum_metadata.repository_id►repository.idNOTE:Museummetadataisa1:1sectorextensiononinformation_object

29. Extended Contacts (ahgContactPlugin)

3 tables | tables_json: ["contact_information","contact_information_extended","contact_information_i18n"]

contact_informationidBIGINTUNSIGNEDPKactor_idINTFKactorcontact_typeVARCHAR(50)primary_nameVARCHAR(255)emailVARCHAR(255)telephoneVARCHAR(50)faxVARCHAR(50)websiteVARCHAR(500)street_addressTEXTcityVARCHAR(255)regionVARCHAR(255)country_codeVARCHAR(5)postal_codeVARCHAR(20)is_primaryTINYINT(1)FKFKcontact_informationcontact_information_i18n_extendedidBIGINTFKcontact_infoidPKcultureVARCHAR(16)contact_information_idnoteTEXTFKcontact_infofield_nameVARCHAR(100)field_valueTEXTGLAM/DAM&INFORMATIONOBJECTLINKS:•contact_information.actor_id►actor.idNOTE:Contactsarelinkedtoactors(persons,organizations),notdirectlytoIO

30. Custom Fields / EAV (ahgCustomFieldsPlugin)

2 tables | tables_json: ["custom_field_definition","custom_field_value"]

custom_field_definitionidBIGINTUNSIGNEDPKentity_typeVARCHAR(50)(IO/actor/..)field_nameVARCHAR(100)field_labelVARCHAR(255)field_typeVARCHAR(50)(text/textarea/date/number/boolean/dropdown/url)dropdown_taxonomyVARCHAR(100)is_requiredTINYINT(1)is_repeatableTINYINT(1)is_searchableTINYINT(1)field_groupVARCHAR(100)display_orderINTvalidation_rulesJSONis_activeTINYINT(1)help_textTEXTFKcustom_field_valueidBIGINTUNSIGNEDPKdefinition_idBIGINTFKfield_defentity_typeVARCHAR(50)object_idINT(polymorphicFK)►information_object.id►actor.id►accession.id►repository.id►donor.id►function.idvalue_textTEXTvalue_dateDATEvalue_numberDECIMALvalue_booleanTINYINT(1)repeat_indexINTGLAM/DAM&INFORMATIONOBJECTLINKS:•custom_field_value.object_id►polymorphic:-information_object.id(entity_type='informationobject')-actor.id(entity_type='actor')-accession.id(entity_type='accession')-repository.id(entity_type='repository')-donor.id(entity_type='donor')-function.id(entity_type='function')NOTE:EAVpattern—anyentitytypecanhavecustomfieldswithoutschemachanges

31. User Feedback (ahgFeedbackPlugin)

2 tables | tables_json: ["feedback","feedback_i18n"]

feedbackidBIGINTUNSIGNEDPKuser_idINTFKuserobject_idINTFKinfo_objectfeedback_typeVARCHAR(50)statusVARCHAR(50)ratingINTis_publicTINYINT(1)created_atDATETIMEresolved_atDATETIMEresolved_byINTFKuserFKfeedback_i18nidBIGINTFKfeedbackcultureVARCHAR(16)subjectVARCHAR(255)messageTEXTresponseTEXTGLAM/DAM&INFORMATIONOBJECTLINKS:•feedback.object_id►information_object.id•feedback.user_id►user.id•feedback.resolved_by►user.id

32. AHG Settings (ahgSettingsPlugin)

1 table | tables_json: ["ahg_settings"]

ahg_settingsidINTPKsetting_keyVARCHAR(100)UNIQUEsetting_valueTEXTsetting_groupVARCHAR(50)created_atDATETIMEupdated_atDATETIMESettinggroups:general,multi_tenant,metadata,iiif,spectrum,data_protection,faces,media,photos,jobs,fuseki,ingestGLAM/DAM&INFORMATIONOBJECTLINKS:•NodirectFKreferences—storesglobalconfigurationkey-valuepairs•UsedbyALLpluginsviaAhgSettingsService::get('key','default')

33. Table Relationships Summary

All plugin tables that reference information_object.id — the central archival record in Heratio.

INFORMATIONOBJECT—CROSS-PLUGINRELATIONSHIPSinformation_object(HeratioCore).id=PKCONDITIONLOANPRESERVATIONSECURITYIIIFcondition_loan_objectpreservation_object_security_iiif_report.info_obj_ideventclassificationannotationcondition_ahg_loan_objectpreservation_object_iiif_event.info_obj_idchecksumcompartmentocr_textcondition_ahg_loan_preservation_object_access_iiif_assessment_condition_rptpackagegrantmanifest_schedule.info_obj_idpremis_objectobject_classif_cacheahg_file_checksumhistoryiiif_object_declass_collectionHERITAGEACCTRESEARCHRIGHTSschedule_itemsecurity_access_iiif_auth_heritage_research_materialextended_rightslog/requestresourceasset_requestembargosecurity_iiif_heritage_research_rights_recordwatermark_logvalidationtransactionannotationrights_embargo_result_logresearch_rights_orphan_object_3d_heritage_collection_itemworkPROVENANCEmodelbatch_itemresearch_rights_object_heritage_bibliography_tk_labelprovenance_entrypopia_flagentryrights_derivative_provenance_DOIipsas_research_rulerecordheritage_assertionobject_rights_object_ahg_doiassetresearch_holderprovenanceahg_doi_extraction_object_rights_queueresultstatementahg_doi_AI&NERresearch_DONORAGREEMENTlogclipboard_ahg_ner_projectCUSTOMFIELDSdonor_agreemententityresearch_project_donor_agreement_ICIPahg_ner_resourcecustom_field_recordextractionresearch_quality_valuedonor_provenanceicip_ahg_ai_jobmetric.object_idtk_labelahg_ai_research_(polymorphic—icip_condition_snapshot_itemanyentity)EXHIBITIONconsentassessmentresearch_icip_ahg_ai_reproduction_exhibition_access_pending_itemNAZ(Zimbabwe)objectrestrictextractionresearch_room_icip_ahg_manifestnaz_closure_culturalspellcheckresearch_source_periodLIBRARY_noticeahg_assessmentnaz_protected_icip_translationrecordlibrary_itemobject__draft/lognaz_transfer_item.info_obj_idsummaryahg_DAMdescription_suggestiondam_external_MUSEUMGALLERYFEEDBACKlinksdam_format_museum_metadatagallery_feedbackholdings.object_idloan_object_i18ndam_iptc_gallery_.object_idmetadatavaluationdam_version_.object_idlinks.object_id

Tables that link to repository.id — the archival institution in Heratio.

Plugin Table Column
ahgLoanPlugin ahg_loan repository_id
ahgHeritageAccountingPlugin heritage_financial_year_snapshot repository_id
ahgHeritageAccountingPlugin ipsas_heritage_asset repository_id
ahgIiifPlugin iiif_auth_repository repository_id
ahgResearchPlugin researcher_submission repository_id
ahgPrivacyPlugin privacy_institution_config repository_id
ahgDoiPlugin ahg_doi_config repository_id
ahgDoiPlugin ahg_doi_mapping repository_id
ahgAIPlugin ahg_prompt_template repository_id
ahgReportBuilderPlugin report_template repository_id
ahgIngestPlugin ingest_session repository_id

Tables that link to actor.id — persons, organizations, families in Heratio.

Plugin Table Column
ahgProvenancePlugin provenance_agent actor_id
ahgDonorAgreementPlugin donor_agreement actor_id
ahgDonorAgreementPlugin donor_agreement donor_id
ahgGalleryPlugin gallery_artist actor_id
ahgContactPlugin contact_information actor_id
ahgAIPlugin ahg_ner_authority_stub actor_id
ahgAIPlugin ahg_ner_entity_link actor_id

Tables that link to user.id (user extends actor in Heratio).

Plugin Tables
ahgAuditTrailPlugin audit_log, ahg_audit_log, ahg_audit_access, ahg_audit_authentication
ahgSecurityClearancePlugin user_security_clearance, user_security_clearance_log, user_compartment_access, security_2fa_session, security_access_log, security_access_request, security_audit_log, security_clearance_history, security_compliance_log, security_watermark_log
ahgPrivacyPlugin privacy_approval_log, privacy_audit_log, privacy_consent_log, privacy_dsar_log, privacy_notification, privacy_officer
ahgLoanPlugin ahg_loan_history
ahgHeritageAccountingPlugin heritage_audit_log, heritage_batch_job, heritage_transaction_log, ipsas_audit_log
ahgIiifPlugin iiif_auth_token, iiif_auth_access_log, object_3d_audit_log
ahgResearchPlugin research_researcher, research_password_reset, research_room_participant, researcher_submission
ahgWorkflowPlugin ahg_workflow_notification, workflow_history
ahgAIPlugin ahg_ai_usage, ahg_ner_usage
ahgIngestPlugin ingest_session
ahgReportBuilderPlugin report_comment
ahgICIPPlugin icip_notice_acknowledgement
ahgCDPAPlugin cdpa_audit_log
ahgNAZPlugin naz_audit_log, naz_researcher

33.5 GLAM Sector Dispatch

The loan system uses sector ENUM(museum, gallery, archive, library, dam) to drive sector-specific behavior. Cross-plugin links:

GLAM/DAMSECTORCROSS-REFERENCESahg_loan.sectormuseum►museum_metadata.object_idgallery►gallery_artist,gallery_valuation,gallery_loanarchive►information_object(defaultHeratio)library►library_item.information_object_iddam►dam_iptc_metadata,dam_format_holdingsahg_loan.exhibition_id►exhibition.id(ahgExhibitionPlugin)ahg_loan_object.object_type►archivemuseum_objectgallery_artworkdamexhibition_object.information_object_id►information_object.idlibrary_item.information_object_id►information_object.idmuseum_metadata.object_id►information_object.idgallery_loan_object.object_id►information_object.idgallery_valuation.object_id►information_object.iddam_iptc_metadata.object_id►information_object.iddam_format_holdings.object_id►information_object.iddam_external_links.object_id►information_object.iddam_version_links.object_id►information_object.idingest_session.sector►museumgalleryarchivelibrarydamdisplay_object_config.object_id►information_object.id(GLAMdisplayrouting)

33.6 Audit Trail Coverage

The audit system tracks changes across ALL plugins via polymorphic entity references:

audit_log.object_id►anyHeratioobject.id(field-levelchanges)ahg_audit_log.entity_type►informationobjectactoraccessionrepository...ahg_audit_log.entity_id►polymorphicFKtoanyentityahg_audit_access.object_id►digital_object/information_object(fileaccesstracking)

Part of the Heratio - v2.8.2