A tidy table in ChatGPT is not the data you should import. The valuable output of an EASA Form 1 workflow is a result your application can inspect, associate with the source and pass to a reviewer. Importing a chat paraphrase drops uncertainFields and serial arrays.
For connection steps, use How to extract an EASA Form 1 with ChatGPT. Consuming the succeeded result in an application is the next step.
Before you import fields
Status must be succeeded, documentType must be easa_form_1, and result must be present. A tool response may describe an in-flight job instead of a completed certificate. Keep the job identifier for retrieval and troubleshooting.
Poll get_extraction_result with job_id while status is dispatch_pending, queued, running, or outcome_unknown. documentType: unknown is usually a succeeded job with no Form 1 — not a status named unknown, and not an empty accepted row. On failed_refundable or failed_charged, show lastError. Re-sending the same file within 24 hours can replay; do not import an in-flight envelope as if it were easa-form-1-v1.
The first extract_easa_form1 call uses a different envelope: job_id, status, poll_after_seconds, replayed, quota and optional result. Retrieval through get_extraction_result is the payload you map.
Fields in easa-form-1-v1
Doana’s extraction model separates headers, item rows and release sections. Each extracted scalar field includes a value, a confidence and a page reference. The EASA API page includes a synthetic JSON excerpt. It is intentionally shortened, not a fixture for validating the complete response. Use the live tool’s advertised schema for the full contract.
| Group | Paths (illustrative) |
|---|---|
| Header | header.box1Authority, box3TrackingNumber, box4OrganisationName, box4OrganisationAddress, box5WorkOrder |
| Each item | box6Item, box7Description, box8PartNumber, box9Quantity, box10SerialNumbers[], box11Status, box12Remarks |
| Release 13 | release13.boxA … boxE (production / manufacturing) |
| Release 14 | release14.boxA … boxE (maintenance) |
Serial numbers remain an array within each item. Empty release13 with filled release14 is expected for many maintenance Form 1 files. Do not treat that as a parse error unless the path is in uncertainFields.
EASA’s Form 1 FAQ is the document context, not a JSON schema.
Map to a CSV or database row
Agree the mapping before the first export. One certificate can have several items, so a single-row spreadsheet that keeps only items[0] hides the rest. Keep a header row plus child tables, and keep box10SerialNumbers as an array of objects.
- One database header row keyed by
job_id, plus a child table for items, plus a child table for serials. - One CSV per certificate for header + release, and a second CSV for items (one row per item, serials as a JSON array column).
- Do not explode serials into
serial_1,serial_2unless you also keep a count and an overflow rule.
If you flatten remarks into a single “notes” column, keep the original box12Remarks.value in another column. If you skip uncertainFields, reviewers cannot see what the model flagged.
The public contract describes the supported MCP interface. Your application owns the downstream mapping and export.
Worked uncertainFields example
Teaching data only — not a real certificate. Suppose items.0.box8PartNumber.value is DEMO-PN-00I with confidence 0.61 and items.0.box10SerialNumbers.0 is listed in uncertainFields. The operator then compares the PDF before any inventory match. The 0.7 threshold flags non-empty weak values onto that list.
If Block 8 is actually DEMO-PN-001, record the reviewed part number in a reviewed_part_number column and leave the extracted value in place. Do not overwrite the extraction blob. If the serial is unreadable, leave inventory unmatched.
Confidence is an estimate attached to extraction; it does not certify a character sequence or a regulatory interpretation. Empty unused fields are not automatically uncertain.
Troubleshoot a result you cannot import
Confirm status, documentType and result before blaming the mapper. In-flight statuses mean poll. failed_refundable / failed_charged mean read lastError. documentType: unknown on a succeeded job means the file was not a supported Form 1 — do not invent fields. Replay within 24 hours can return an existing job; still store that job_id.
If ChatGPT showed a table that does not match the JSON, import the JSON. The table is a view. Serials that appear comma-separated in chat must go back to an array in the database.
Quota, TIFF, page caps and expired URLs are upload problems, not mapping problems. Handle them with the ChatGPT extraction how-to and the MCP walkthrough.
A synthetic excerpt is not a test fixture. If your importer asserts every header key, use the live advertised schema from tools/list and OpenAPI, not the shortened DEMO-PN-001 example on the API landing.
Do not collapse uncertainty into a yes/no answer
A boolean “valid” hides which path was weak. The uncertainFields list helps direct attention to specific fields. If an identifier needs correction, record the reviewed value separately from the original extraction. Keep the source available to the reviewer.
ChatGPT can display the JSON. It should not flatten it into a sentence that drops arrays. Ask it to list uncertain paths verbatim.
Build the API integration or review the aviation agent workflow.
