external_system_id plus task_external_system_id, within the project
Layout
Plan and task columns sit on the same row, one row per task. Plan columns are repeated identically across every row belonging to the same plan. When a plan’s rows disagree on the plan-level columns, the first row in the file wins and the rest are ignored.Plan columns
A plan targets a vehicle type or a component type, never both and never neither.
Task columns
The tolerances are what decide whether work shows as due soon, due, or overdue, so they are
worth getting right even though they default to zero.
Rules
- Exactly one of
vehicle_type_code/component_type_code, and the code must resolve within the project. secondary_interval_typeandsecondary_interval_valuemust both be set or both be empty.- A
SEASONALtask requires all four season fields; a non-seasonal task must have none of them. Months are 1–12 and days 1–31.
What gets deleted
After inserting and updating, the import deletes tasks. The scope is precise, and both of its sharp edges are worth understanding. What is safe: the delete only touches plans whoseexternal_system_id appears in the
file you just delivered, and never crosses projects. Plans the file does not mention are
untouched.
What is deleted: within each plan the file does mention, every task in the platform
whose identifier is absent from that plan’s rows in the file. This is a hard delete, not an
archive flag.
estimated_manhours and estimated_cost are maintained in the application by the Planner
role. They are not in this file and are never overwritten by an import — so ordinary
re-imports preserve them.The exception follows from the delete above: if a task disappears from a delivered revision,
its row is removed and those locally maintained estimates go with it. Re-adding the task
later creates a fresh row with empty estimates.