## Overview

The Tools importer bulk-creates or revises tools. In ION, a tool is a part with the **tool** part type, so this importer follows the same revision flow as the [Parts importer](https://docs.firstresonance.io/administration/ion-importers/parts) but exposes a narrower, tool-relevant column set. Two things are set automatically on every row:

- **Part type** is always `tool`.
- **Tracking type** is always `serial`, because tools are serial-tracked. Including a `tracking_type` column in the CSV is rejected.

## Columns

| Column               | Required | Description                                                                                      |
| --------------------| -------- | ----------------------------------------------------------------------------------------------- |
| `part_number`       | Yes      | The tool’s part number.                                                                        |
| `revision`          | No       | The revision. Omit to let ION assign the next revision automatically (or the scheme’s initial value if the tool is new). |
| `revision_scheme`   | No       | Name of the revision scheme to use when creating a brand-new tool. Defaults to the org’s default scheme. |
| `description`       | No       | Free-text description.                                                                          |
| `export_controlled` | No       | Whether the tool is export controlled. Boolean field (see [accepted values](https://docs.firstresonance.io/administration/ion-importers#accepted-boolean-values)). |
| `maintenance_interval` | No   | Maintenance interval as a duration. See [Duration format](https://docs.firstresonance.io/administration/ion-importers/tools#duration-format). |
| `subtypes`          | No       | Semicolon-delimited list of tool subtype names, such as `Torque Wrench;Calibrated`.           |

## Duration format

The `maintenance_interval` column accepts a duration written in days, hours, and minutes. Use the units `d`, `h`, and `m`, in that order, with optional spaces between terms. Each unit is optional. The value is rounded down to the nearest minute. A plain number with no unit is read as a number of seconds. Valid values include:

| Value     | Meaning                       |
| --------- | ------------------------------ |
| `30d`    | 30 days                      |
| `1d 2h`  | 1 day, 2 hours               |
| `1d 2h 20m` | 1 day, 2 hours, 20 minutes    |
| `45m`    | 45 minutes                   |
| `3600`   | 3,600 seconds (1 hour)      |

The **Review** step flags a value that uses any other unit (such as weeks or seconds), lists the units out of order, or is otherwise unparseable.

## Revisions

Revision behavior mirrors the [Parts importer](https://docs.firstresonance.io/administration/ion-importers/parts#revisions): rows with an explicit revision create or update that exact `(part_number, revision)`, while rows that omit revision either initialize a new tool at the scheme’s first value or auto-revise an existing tool from its latest revision.

## Subtypes

The `subtypes` column attaches one or more subtypes to the tool. Subtype names are matched case-insensitively; **names that don’t exist yet are created automatically**, so you can bootstrap your subtype list from the same CSV. Associations that already exist are skipped, keeping re-imports idempotent.

## Custom attributes

Any column not in the standard list above is treated as a custom attribute on the tool. Custom attribute columns must match a configured attribute key for your organization; unknown columns cause a validation error.
