bulk-data-submit

Implements FHIR Bulk Data Submit ingestion with manifests, OAuth, and JWE decryption.

51|19|Updated Jan 4, 2025
One-click install
npx skills add https://github.com/HeliosSoftware/hfs --skill bulk-data-submit-heliossoftware
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: bulk-data-submit
Source: https://github.com/HeliosSoftware/hfs/tree/main/.agents/skills/bulk-data-submit
Command: npx skills add https://github.com/HeliosSoftware/hfs --skill bulk-data-submit-heliossoftware

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Ingesting large FHIR datasets from external Data Providers requires coordinating asynchronous manifest fetching, NDJSON file retrieval, authentication, encryption, and status tracking. This Skill documents how the Helios FHIR Server implements the $bulk-submit operation as a Data Consumer so you can configure, operate, and troubleshoot bulk ingestion correctly. ## Core Features & Use Cases - Asynchronous Bulk Ingestion: Kick off $bulk-submit with a manifest URL, poll status via poll tokens, cancel submissions, and fetch paginated status manifests. - Secure File Retrieval: Supports SMART Backend Services OAuth with private_key_jwt client assertions and JWE-encrypted files via fileEncryptionKey with ECDH-ES and AES key wrapping algorithms. - Import Modes and Indexing Controls: Choose replace or merge (RFC 7396) import semantics, deferred search indexing, index-during-ingest for Elasticsearch composites, and drift verification with $reindex repair. - Use Case: A Data Provider posts a $bulk-submit kick-off referencing an export manifest; HFS fetches and ingests the NDJSON files in batches, and you poll /bulk-submit-status/{poll_token} until the manifest reports completed. ## Quick Start Ask the assistant to kick off a $bulk-submit with a submitter identifier, submissionId, and manifestUrl, then poll the returned status URL until the manifest completes.

Frequently Asked Questions about bulk-data-submit

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I kick off a FHIR $bulk-submit request?▼

POST a Parameters resource to /$bulk-submit with a submitter Identifier, a submissionId string, and either a submissionStatus Coding or a manifestUrl. HFS queues ingestion and returns 200, or 429 when the per-tenant concurrency cap is reached.

How do I poll bulk submit status and get results?▼

POST to /$bulk-submit-status to receive a 202 with a Content-Location poll URL, then GET /bulk-submit-status/{poll_token}. In-progress polls return 202 with X-Progress and Retry-After; completion returns 200 with a paginated status manifest fetched via ?page=N.

Does bulk submit support encrypted files and OAuth-protected manifests?▼

Yes. Files marked requiresAccessToken are fetched with SMART Backend Services tokens using client_credentials and private_key_jwt when HFS_BULK_SUBMIT_CLIENT_ID and HFS_BULK_SUBMIT_PRIVATE_KEY are set. JWE-encrypted files are decrypted via fileEncryptionKey using ECDH-ES or AES key wrapping; RSA-OAEP is rejected.

What is the difference between replace and merge import modes?▼

Replace (the default) upserts by id so the submitted resource overwrites the stored one wholesale. Merge applies an RFC 7396 JSON Merge Patch, retaining elements absent from the submission, replacing arrays wholesale, and removing elements set to null while preserving the stored id.

Why is my bulk submit manifest marked failed instead of completed?▼

A manifest fails when any output or deleted file cannot be fetched or read to its end even after Range-request retries. Batches committed before the break stay stored and receipts are still published; per-entry errors alone leave the manifest completed with a populated error array.

How do I fix search results missing after a bulk import on Elasticsearch composites?▼

Check the status manifest's error artifact for incomplete OperationOutcomes, then confirm counts with GET /{type}?_summary=count per tenant. Repair by running POST /{type}/$reindex and verifying errorCount is 0 in /$reindex-status/{job_id}; raise HFS_ELASTICSEARCH_NESTED_OBJECTS_LIMIT for nested-object rejections.