Heratio Help Center article. Category: Import/Export.
Data Ingestion Manager
User Guide
OAIS-aligned multi-stage ingestion pipeline for batch import of archival records and digital objects. A 6-step wizard that sits between AtoM's basic CSV import and Archivematica's full OAIS pipeline: Configure, Upload, Map & Enrich, Validate, Preview, Commit.
Scanner / watched-folder capture uses this same engine through a different entry point. For continuous capture from scanning stations — where files arrive one at a time instead of in one big batch — see the Scanner / Capture user guide. The scanner reuses the ingest session, derivatives, virus scan, OCR, and SIP/AIP/DIP packaging you configure here — you do not need to re-learn anything.
Commit runner (delivered 2026-04-24)
The wizard's Commit step now runs a real commit: IngestCommitRunner walks every valid ingest_row, creates the information object (via InformationObjectService::create()), attaches any mapped digital object file (via IngestService::ingestFile()), and if the session has SIP/AIP/DIP flags set it invokes OaisPackagerService per IO. Progress is tracked in ingest_job and rendered on the commit page.
Invocation paths:
- Web UI: the "Start Commit" button on the commit page posts to
/ingest/{id}/commitwhich triggers the runner synchronously. - CLI:
php artisan ahg:ingest-commit <session_id>— useful for long batches or scripted workflows.
For very large batches, the web commit path automatically dispatches to the Laravel queue worker when the session's valid-row count is at or above heratio.ingest.queue_threshold (default 500, configurable via HERATIO_INGEST_QUEUE_THRESHOLD). The commit view polls the seeded ingest_job row for progress — the UI behaves identically whether the run is sync or queued. If your deployment doesn't run a queue worker, set the threshold very high (or to 0 — which disables the queue path entirely) to force sync, and use php artisan ahg:ingest-commit <session_id> on the CLI for long-running batches.
Overview
Key Features
Ingestion Capabilities
| Item | Description |
|---|---|
| [Wizard] 6-Step Pipeline | Guided wizard from config |
| to commit with rollback | |
| [Upload] Multi-Format | CSV, ZIP (with DOs), EAD XML |
| [Map] Auto-Mapping | Confidence-based field |
| matching with saved profiles | |
| [Check] Validation | Required fields, dates, |
| hierarchy, duplicates | |
| [Tree] Preview | Hierarchical tree view with |
| expand/collapse + approval | |
| [Package] OAIS Packaging | SIP, AIP, DIP generation |
| [Progress] Live Progress | AJAX-polled progress bar |
| [Undo] Rollback | Undo entire committed batch |
| [Hash] Checksums | SHA-256 integrity hashing |
| [AI] AI Processing | NER, OCR, virus scan, |
| summarize, spellcheck, more |
How to Access
Direct URL: /ingest
Dependencies: ahgCorePlugin, ahgSecurityClearancePlugin
Required Role: Administrator or user with ingestion permissions
Session Dashboard
When you open the Ingestion Manager, you see all ingestion sessions:
| INGESTION MANAGER - SESSION DASHBOARD | |||||
|---|---|---|---|---|---|
| [+ New Ingestion] [Download CSV Templates v] | |||||
| ID | Title | Sector | Status | Records | Actions |
| ING-5 | 2026 Photo | archive | commit | 1,240 | [Manifest] |
| Collection | -ted | [Rollback] | |||
| ING-4 | Museum | museum | in | 380 | [Resume] |
| Catalogue | progr. | [Cancel] | |||
| ING-3 | Library | library | commit | 2,500 | [Manifest] |
| Batch Import | -ted | [Rollback] | |||
| ING-2 | Gallery | gallery | rolled | 150 | [View] |
| Artworks | back | ||||
| ING-1 | DAM Media | dam | cancel | --- | [View] |
| Upload | -led |
Dashboard Actions
| Action | Description |
|---|---|
| New Ingestion | Start a new 6-step wizard session |
| Resume | Continue an in-progress session at the last step |
| Cancel | Abort an in-progress session |
| Manifest | Download CSV with created AtoM record IDs |
| Rollback | Undo all records created by a committed session |
| Download CSV Templates | Get blank CSV templates per GLAM sector |
Step 1: Configure
Set up the parameters for your ingestion session.
Step 1.1: Open a New Ingestion
Click [+ New Ingestion] on the dashboard or navigate to /ingest/configure
Step 1.2: Fill In Session Details
Step 1.3: Configure Parent Placement
Step 1.4: Configure Output Options
Step 1.5: Configure AI Processing (Optional)
Step 2: Upload
Upload your source data files.
Step 2.1: Choose Upload Method
Step 2.2: File Auto-Detection
After upload, the system auto-detects file properties:
Step 2.3: Preview Data (First 10 Rows)
Step 2.4: ZIP File Extraction (if applicable)
When a ZIP file is uploaded, the system extracts and displays the file tree:
Step 3: Map & Enrich
Map source columns to AtoM target fields and enrich with metadata.
Step 3.1: Two-Column Mapping Interface
Step 3.2: Default Value Assignment
Step 3.3: Digital Object Matching Strategy
Step 3.4: Metadata Extraction Panel
Saved Mapping Profiles
Mapping profiles can be loaded from the ahgDataMigrationPlugin (if installed) or saved during the current session for reuse in future ingestions.
| Action | Description |
|---|---|
| Load Profile | Apply a previously saved column-to-field mapping |
| Save Current Mapping | Store the current mapping for future sessions |
| Auto-Map | Re-run auto-detection to reset confidence scores |
Step 4: Validate
Validate all rows before committing to the database.
Step 4.1: Automatic Validation Runs
Step 4.2: Validation Summary
Step 4.3: Review Issues
Step 4.4: Inline Fix or Exclude Rows
Click [E] (Edit) on any row to fix inline, or exclude it from the import:
- EDIT ROW 42
- identifier: [PHO-0042 ]
- title: [Untitled Photograph ]
- eventDates: [1968 ]
- levelOfDesc: [Item v]
- Include this row [ ] Exclude from import
- [Cancel] [Save & Re-validate]
Duplicate Detection Methods
| Method | Description |
|---|---|
| Identifier | Exact match on identifier field |
| Legacy ID | Exact match on legacyId field |
| Title + Date | Records with same title AND date |
| Checksum | SHA-256 match on digital object file |
[<< Back] [Next: Preview >>]
Step 5: Preview & Approve
Review the complete import as a hierarchical tree before committing.
Step 5.1: Hierarchical Tree Visualization
Step 5.2: SIP/DIP Package Preview (if enabled)
Step 5.3: Approval Actions
Step 6: Commit & Report
Execute the import and monitor progress in real time.
Step 6.1: Live Progress Bar
Step 6.2: Completion Report
Manifest CSV Format
The downloadable manifest contains:
| row | identifier | atomId | slug | digitalObjectPath | stat |
|---|---|---|---|---|---|
| 1 | PHO-0001 | 123456 | pho-.. | uploads/r/n/... | ok |
| 2 | PHO-0002 | 123457 | pho-.. | uploads/r/n/... | ok |
| 3 | PHO-0003 | 123458 | pho-.. | uploads/r/n/... | ok |
| ... | ... | ... | ... | ... | ... |
Rollback
Rollback undoes an entire committed session, removing all created records and digital objects.
How Rollback Works
After rollback, the session status changes to "rolled back" and the records are permanently removed from AtoM.
CSV Templates
Download pre-built CSV templates for each GLAM sector from the dashboard:
Available Templates
| Template | Sector | Standard | Columns |
|---|---|---|---|
| Archive - ISAD(G) | Archive | ISAD(G) | identifier, title, levelOfDescription, eventDates, eventTypes, eventActors, repository, scopeAndContent, extentAndMedium, ... |
| Archive - RAD | Archive | RAD | identifier, title, levelOfDescription, dates, nameAccessPoints, placeAccessPoints, ... |
| Archive - DACS | Archive | DACS | identifier, title, levelOfDescription, date, extent, scopeAndContent, ... |
| Museum | Museum | CCO | objectNumber, objectName, title, briefDescription, numberOfObjects, ... |
| Library - Dublin Core | Library | Dublin Core | identifier, title, creator, subject, description, publisher, date, type, format, ... |
| Gallery - CCO | Gallery | CCO | identifier, title, creator, date, workType, measurements, materials, ... |
| DAM - Dublin Core | DAM | Dublin Core | identifier, title, creator, date, format, rights, description, ... |
Supported File Formats
Upload Formats
| Format | Extension | Description |
|---|---|---|
| CSV | .csv | Comma/tab/semicolon delimited data |
| ZIP | .zip | Archive containing CSV + digital objects |
| EAD XML | .xml | Encoded Archival Description finding aid |
Digital Object Formats (within ZIP)
| Category | Formats |
|---|---|
| Images | TIFF, JPEG, PNG, GIF, BMP, SVG |
| Documents | PDF, DOCX, DOC, ODT, TXT |
| Audio | WAV, MP3, FLAC, OGG, AIFF |
| Video | MP4, MOV, AVI, MKV, WEBM |
| 3D | OBJ, GLB, GLTF, STL |
Quick Reference
Navigation Paths
| Page | URL | Description |
|---|---|---|
| Dashboard | /ingest |
All sessions overview |
| New Session | /ingest/configure |
Start Step 1 |
| Upload | /ingest/upload |
Step 2 (within session) |
| Map & Enrich | /ingest/map |
Step 3 (within session) |
| Validate | /ingest/validate |
Step 4 (within session) |
| Preview | /ingest/preview |
Step 5 (within session) |
| Commit | /ingest/commit |
Step 6 (within session) |
Session Statuses
| Status | Meaning |
|---|---|
| configuring | Session created, Step 1 in progress |
| uploading | Files being uploaded, Step 2 |
| mapping | Field mapping, Step 3 |
| validating | Validation running, Step 4 |
| previewing | Awaiting approval, Step 5 |
| committing | Import executing, Step 6 |
| committed | Successfully completed |
| rolled back | Commit undone |
| cancelled | Session aborted by user |
| failed | Import failed with errors |
Database Tables
| Table | Purpose |
|---|---|
ingest_session |
Session metadata, status, configuration |
ingest_file |
Uploaded files and extracted paths |
ingest_mapping |
Column-to-field mapping definitions |
ingest_validation |
Validation results per row |
ingest_row |
Individual row data and status |
ingest_job |
Background job tracking |
Descriptive Standards by Sector
| Sector | Recommended Standard | Alternatives |
|---|---|---|
| Archive | ISAD(G) | RAD, DACS |
| Museum | Collections procedure | CCO |
| Library | Dublin Core | - |
| Gallery | CCO | Dublin Core |
| DAM | Dublin Core | - |
Troubleshooting
Upload Fails
[!] Troubleshooting
- Problem: File upload fails or times out
- Solution:
-
- Check file size against PHP upload_max_filesize
- (default 2M - increase in php.ini)
-
- Check post_max_size in php.ini
-
- For large batches, use the server directory path
- option instead of browser upload
-
- Verify file permissions on upload directory
Mapping Not Auto-Detecting
- [!] TROUBLESHOOTING
- Problem: All columns show as unmapped (red)
- Solution:
-
- Ensure CSV headers match AtoM field names
- (e.g., "title" not "Title" or "TITLE")
-
- Check the selected descriptive standard matches
- your CSV structure
-
- Try loading a saved mapping profile
-
- Manually map columns using the dropdown selectors
Validation Errors on Hierarchy
- [!] TROUBLESHOOTING
- Problem: "parentId not found" or "circular reference"
- Solution:
-
- Verify parentId values reference valid legacyId
- values within the same CSV
-
- Check for typos in parentId column
-
- Ensure parent rows appear BEFORE child rows
-
- Use the inline edit [E] button to correct references
-
- Select "Top-level" placement if hierarchy is flat
Commit Takes Too Long
[!] Troubleshooting
- Problem: Commit stage seems stuck or very slow
- Solution:
-
- Large batches (>5,000 rows) are normal to take
- 30+ minutes
-
- Digital object upload is the slowest stage -
- consider smaller batches for large files
-
- AI processing (NER, OCR) adds significant time -
- disable if not needed for this batch
-
- Check server disk space for derivative generation
-
- Do not close the browser tab - progress is polled
- via AJAX every 2 seconds
Rollback Not Available
- [!] TROUBLESHOOTING
- Problem: Rollback button is disabled or missing
- Solution:
-
- Only committed sessions can be rolled back
-
- Already rolled-back sessions cannot be rolled back
- again
-
- Verify you have administrator privileges
-
- Sessions older than the configured retention period
- may lose rollback capability
Digital Objects Not Matching
- [!] TROUBLESHOOTING
- Problem: Digital objects not linked to records
- Solution:
-
- Check the matching strategy in Step 3
- (filename, legacyId, title, CSV column)
-
- For filename matching, ensure the file name
- (without extension) matches the identifier
-
- Verify digital objects are in the correct
- directory within the ZIP
-
- Check for case sensitivity mismatches
- (PHO-0001.tif vs pho-0001.tif)
Need Help?
Contact your system administrator or visit the AHG documentation at: https://github.com/ArchiveHeritageGroup/atom-extensions-catalog/tree/main/docs
Part of the AtoM AHG Framework