## Overview

The Part-Procedure Relations importer links parts to procedures, one CSV row per `(part, procedure)` pair. The part is identified by `part_number` + `revision`, the procedure by `procedure_title` + `procedure_version`, and the only data field is the `required` flag. Re-imports are idempotent: if the link already exists, its `required` flag is updated to match the CSV; otherwise a new link is created.

## Columns

| Column | Required | Description |
| --- | --- | --- |
| `part_number` | Yes | Part number. Matched case-insensitively. |
| `revision` | No | Part revision. If omitted and the part has exactly one revision, that revision is used; multiple revisions produce an ambiguity error asking you to specify one. |
| `procedure_title` | Yes | Title of the procedure. |
| `procedure_version` | Yes | Procedure version. Must be a positive integer. |
| `required` | No | Whether the procedure is required for the part. Boolean field (see [accepted values](https://docs.firstresonance.io/administration/ion-importers#accepted-boolean-values)). Defaults to `false`. |

Each `(part, procedure)` pair can appear only once per file. Duplicate rows are rejected. Procedure titles aren’t globally unique, so a `(procedure_title, procedure_version)` pair that matches more than one procedure produces an ambiguity error rather than guessing.

This importer does not support custom attributes. Any column outside the list above causes a validation error.
