Mount and dismount events. Must be loaded before the other files.
Mount and dismount events — which component is fitted in which position on which vehicle.
Delivered daily.Update key:external_system_id — one identifier per mount period, reused to close it
This file must be loaded before the others. Defects and measurements cross-check against
configuration data, and vehicle readings recompute component mileage from the active mounts.
Loading readings first corrupts recorded component mileage whenever a component is swapped
in the same batch.
This is the most common mistake with this file. To record a dismount, re-send the original
mount row with the same external_system_id, now carrying dismounted_at,
dismounted_mileage_km, dismount_reason and depot, and a newer last_updated.Sending a separate row with a new identifier creates a second mount period rather than
closing the first.
The reverse also applies: re-sending a row whose dismounted_at is empty, with a newer
last_updated, re-opens a closed mount period. Your exporter must carry the dismount
fields forward once they are set.
The slot must resolve from the combination of vehicle type, product_group_code and
slot_position — and here the product group must match the slot’s node exactly, and a
miss rejects the file. This is stricter than the same column pair on
defects, where the code may sit below the slot’s node (the ancestor
walk) and a miss only warns: a configuration row defines where a component sits and must
be precise, while a defect merely quotes the code its reporter had.
The component’s type must be among the slot’s allowed component types.
The component must not be in a repair-workflow status — IN_TRANSIT,
IN_TRANSIT_BACK, UNDER_REPAIR or SCRAPPED. A part in any of those states cannot
physically be on a vehicle. MOUNTED, DISMOUNTED and IN_STORE are accepted.
A component can be actively mounted in only one place, and a slot can hold only one active
component. Dismounts in a file are applied before mounts, so a slot handover can be
delivered in a single file.
depot on a dismount is enforced by a database constraint, not by validation. It is not
in the required-field list, so a dismount missing its depot passes validation and then fails
at load time as a raw constraint violation — without a row number. If a file fails with an
error that names no row, this is the first thing to check.
Importing this file sets the component’s status (MOUNTED or DISMOUNTED) and its
current_location — the vehicle number while mounted, the depot once dismounted — and
finalises the component’s lifetime mileage on dismount.
Required fields are checked first and abort before anything else runs:
Row 4: missing or empty external_system_idRow 6: missing or empty slot_position
Then references, types and status together:
Row 8: vehicle_number 'X61099' not found in projectRow 9: component_serial_number '0123-9' not found in projectRow 11: slot (product_group='EA', position='1') not found for vehicle typeRow 13: component type 'Bogie' not in slot allowed typesRow 15: component '0123-1' is in repair status UNDER_REPAIR and cannot be mounted or dismounted
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"A7 manager","description":"Railway fleet management platform — internal documentation","colors":{"primary":"#3d4700","light":"#859900","dark":"#2a3200"},"favicon":"https://mintcdn.com/a7tech/hppoGf5bH4-HkvDU/favicon.svg?fit=max\u0026auto=format\u0026n=hppoGf5bH4-HkvDU\u0026q=85\u0026s=c13ec973f62604e6266c04ef2d078b42","footer":{"links":[{"header":"Project","items":[{"label":"Repository","href":"https://github.com/Railway-John/Warrantinator"}]}]},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"a7tech","hasAudioNarration":false,"actualSubdomain":"a7tech","customDomains":["docs.a7manager.se"],"gitSource":{"type":"github","owner":"railway-john","repo":"warrantinator","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ada63064ca920a4c8408cea","collectionId":"d410dcfe-019a-4194-b121-b5185f986a5b","liveDeploymentHistoryId":"6ada63064ca920a4c8408cea","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ada63064ca920a4c8408cea","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"Pages","count":24},{"language":"default","tag":"Data","count":20},{"language":"default","tag":"Tables","count":10},{"language":"default","tag":"File formats","count":8},{"language":"default","tag":"Overview","count":8},{"language":"default","tag":"Platform","count":6},{"language":"default","tag":"Service Book","count":5},{"language":"default","tag":"Project Config","count":5},{"language":"default","tag":"Assets","count":2},{"language":"default","tag":"Inspections","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"@media (min-width:1400px){[class*=max-w-8xl]{max-width:120rem!important}}"}],"page":{"pagePath":"data/files/vehicle-configurations","slug":"/data/files/vehicle-configurations","pageMetadata":{"title":"vehicle_configurations","description":"Mount and dismount events. Must be loaded before the other files.","href":"/data/files/vehicle-configurations"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Mount and dismount events. Must be loaded before the other files.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Mount and dismount events — which component is fitted in which position on which vehicle.\nDelivered daily.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Update key:`}),` `,_jsx(_components.code,{children:`external_system_id`}),` — one identifier per `,_jsx(_components.strong,{children:`mount period`}),`, reused to close it`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`This file must be loaded before the others.`}),` Defects and measurements cross-check against\nconfiguration data, and vehicle readings recompute component mileage from the active mounts.\nLoading readings first corrupts recorded component mileage whenever a component is swapped\nin the same batch.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`columns`,children:`Columns`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Column`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{style:{textAlign:`center`},children:`Required`}),_jsx(_components.th,{children:`Notes`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`external_system_id`})}),_jsx(_components.td,{children:`text(100)`}),_jsx(_components.td,{style:{textAlign:`center`},children:`●`}),_jsx(_components.td,{children:`One identifier per mount period, reused to close it`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`vehicle_number`})}),_jsx(_components.td,{children:`text(100)`}),_jsx(_components.td,{style:{textAlign:`center`},children:`●`}),_jsx(_components.td,{children:`Must exist in project`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`product_group_code`})}),_jsx(_components.td,{children:`text(20)`}),_jsx(_components.td,{style:{textAlign:`center`},children:`●`}),_jsxs(_components.td,{children:[`With `,_jsx(_components.code,{children:`slot_position`}),`, identifies the slot. Note the 20-character limit`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`slot_position`})}),_jsx(_components.td,{children:`text(20)`}),_jsx(_components.td,{style:{textAlign:`center`},children:`●`}),_jsx(_components.td,{children:`Must match a slot defined on the vehicle’s type`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`component_serial_number`})}),_jsx(_components.td,{children:`text(100)`}),_jsx(_components.td,{style:{textAlign:`center`},children:`●`}),_jsx(_components.td,{children:`Must exist in project`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`mounted_at`})}),_jsx(_components.td,{children:`timestamptz`}),_jsx(_components.td,{style:{textAlign:`center`},children:`●`}),_jsx(_components.td,{})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`mounted_mileage_km`})}),_jsx(_components.td,{children:`integer`}),_jsx(_components.td,{style:{textAlign:`center`},children:`○`}),_jsx(_components.td,{children:`Vehicle odometer at mount — needed for mileage tracking`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`dismounted_at`})}),_jsx(_components.td,{children:`timestamptz`}),_jsx(_components.td,{style:{textAlign:`center`},children:`○`}),_jsx(_components.td,{children:`Empty means still mounted`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`dismounted_mileage_km`})}),_jsx(_components.td,{children:`integer`}),_jsx(_components.td,{style:{textAlign:`center`},children:`○`}),_jsx(_components.td,{children:`Vehicle odometer at dismount`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`dismount_reason`})}),_jsx(_components.td,{children:`text(255)`}),_jsx(_components.td,{style:{textAlign:`center`},children:`○`}),_jsx(_components.td,{})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`depot`})}),_jsx(_components.td,{children:`text(100)`}),_jsx(_components.td,{style:{textAlign:`center`},children:`○`}),_jsxs(_components.td,{children:[_jsxs(_components.strong,{children:[`Required when `,_jsx(_components.code,{children:`dismounted_at`}),` is set`]}),` — see below`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`notes`})}),_jsx(_components.td,{children:`text`}),_jsx(_components.td,{style:{textAlign:`center`},children:`○`}),_jsx(_components.td,{})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`last_updated`})}),_jsx(_components.td,{children:`timestamptz`}),_jsx(_components.td,{style:{textAlign:`center`},children:`●`}),_jsx(_components.td,{children:`Staleness key`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`a-dismount-is-not-a-new-row`,children:`A dismount is not a new row`}),`\n`,_jsxs(_components.p,{children:[`This is the most common mistake with this file. To record a dismount, `,_jsx(_components.strong,{children:`re-send the original\nmount row`}),` with the same `,_jsx(_components.code,{children:`external_system_id`}),`, now carrying `,_jsx(_components.code,{children:`dismounted_at`}),`,\n`,_jsx(_components.code,{children:`dismounted_mileage_km`}),`, `,_jsx(_components.code,{children:`dismount_reason`}),` and `,_jsx(_components.code,{children:`depot`}),`, and a newer `,_jsx(_components.code,{children:`last_updated`}),`.`]}),`\n`,_jsx(_components.p,{children:`Sending a separate row with a new identifier creates a second mount period rather than\nclosing the first.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`The reverse also applies: re-sending a row whose `,_jsx(_components.code,{children:`dismounted_at`}),` is empty, with a newer\n`,_jsx(_components.code,{children:`last_updated`}),`, `,_jsx(_components.strong,{children:`re-opens a closed mount period`}),`. Your exporter must carry the dismount\nfields forward once they are set.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`rules`,children:`Rules`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The slot must resolve from the combination of vehicle type, `,_jsx(_components.code,{children:`product_group_code`}),` and\n`,_jsx(_components.code,{children:`slot_position`}),` — and here the product group must match the slot’s node `,_jsx(_components.strong,{children:`exactly`}),`, and a\nmiss rejects the file. This is stricter than the same column pair on\n`,_jsx(_components.a,{href:`/data/files/defects`,children:`defects`}),`, where the code may sit below the slot’s node (the ancestor\nwalk) and a miss only warns: a configuration row `,_jsx(_components.em,{children:`defines`}),` where a component sits and must\nbe precise, while a defect merely quotes the code its reporter had.`]}),`\n`,_jsx(_components.li,{children:`The component’s type must be among the slot’s allowed component types.`}),`\n`,_jsxs(_components.li,{children:[`The component must `,_jsx(_components.strong,{children:`not`}),` be in a repair-workflow status — `,_jsx(_components.code,{children:`IN_TRANSIT`}),`,\n`,_jsx(_components.code,{children:`IN_TRANSIT_BACK`}),`, `,_jsx(_components.code,{children:`UNDER_REPAIR`}),` or `,_jsx(_components.code,{children:`SCRAPPED`}),`. A part in any of those states cannot\nphysically be on a vehicle. `,_jsx(_components.code,{children:`MOUNTED`}),`, `,_jsx(_components.code,{children:`DISMOUNTED`}),` and `,_jsx(_components.code,{children:`IN_STORE`}),` are accepted.`]}),`\n`,_jsx(_components.li,{children:`A component can be actively mounted in only one place, and a slot can hold only one active\ncomponent. Dismounts in a file are applied before mounts, so a slot handover can be\ndelivered in a single file.`}),`\n`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`depot`}),` on a dismount is enforced by a database constraint, not by validation.`]}),` It is not\nin the required-field list, so a dismount missing its depot passes validation and then fails\nat load time as a raw constraint violation — without a row number. If a file fails with an\nerror that names no row, this is the first thing to check.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`side-effects`,children:`Side effects`}),`\n`,_jsxs(_components.p,{children:[`Importing this file sets the component’s status (`,_jsx(_components.code,{children:`MOUNTED`}),` or `,_jsx(_components.code,{children:`DISMOUNTED`}),`) and its\n`,_jsx(_components.code,{children:`current_location`}),` — the vehicle number while mounted, the depot once dismounted — and\nfinalises the component’s lifetime mileage on dismount.`]}),`\n`,_jsx(Heading,{level:`2`,id:`example`,children:`Example`}),`\n`,_jsx(_components.p,{children:`A mount:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`csv`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`csv`,children:_jsxs(_components.code,{language:`csv`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`external_system_id,`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`vehicle_number,`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`product_group_code,`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`slot_position,`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`component_serial_number,`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`mounted_at,`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`mounted_mileage_km,`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`dismounted_at,`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-light-font-weight\":`bold`,\"--shiki-dark\":`#569CD6`,\"--shiki-dark-font-weight\":`bold`},children:`dismounted_mileage_km,`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#F44747`},children:`dismount_reason,`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`depot,`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`notes,`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`last_updated`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`CFG-045,`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`X61001,`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`EA,`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`1,`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`0123-1,`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`2026-03-16T11:00:00Z,`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`16000,`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`,`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-light-font-weight\":`bold`,\"--shiki-dark\":`#569CD6`,\"--shiki-dark-font-weight\":`bold`},children:`,`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#F44747`},children:`,`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`,`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`2026-03-16T12:00:00Z`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`CFG-046,`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`X61001,`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`EC,`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`1,`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`0789-D-5,`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`2026-03-16T11:00:00Z,`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`16000,`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`,`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-light-font-weight\":`bold`,\"--shiki-dark\":`#569CD6`,\"--shiki-dark-font-weight\":`bold`},children:`,`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#F44747`},children:`,`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`,`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`2026-03-16T12:00:00Z`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The same mount period later closed — note the identical `,_jsx(_components.code,{children:`external_system_id`}),`, the retained\nmount fields, and the bumped `,_jsx(_components.code,{children:`last_updated`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`csv`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`csv`,children:_jsxs(_components.code,{language:`csv`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`CFG-045,`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`X61001,`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`EA,`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`1,`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`0123-1,`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`2026-01-15T08:00:00Z,`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`12000,`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`2026-04-29T07:00:00Z,`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-light-font-weight\":`bold`,\"--shiki-dark\":`#569CD6`,\"--shiki-dark-font-weight\":`bold`},children:`108225,`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#F44747`},children:`Preventive swap,`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Raus,`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`Bearing temperature alarm — preventive swap pending NDT inspection,`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`2026-05-05T10:00:00Z`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`why-a-file-gets-rejected`,children:`Why a file gets rejected`}),`\n`,_jsx(_components.p,{children:`Required fields are checked first and abort before anything else runs:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Row 4: missing or empty external_system_id`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Row 6: missing or empty slot_position`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Then references, types and status together:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Row 8: vehicle_number 'X61099' not found in project`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Row 9: component_serial_number '0123-9' not found in project`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Row 11: slot (product_group='EA', position='1') not found for vehicle type`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Row 13: component type 'Bogie' not in slot allowed types`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Row 15: component '0123-1' is in repair status UNDER_REPAIR and cannot be mounted or dismounted`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"vehicle_configurations","description":"Mount and dismount events. Must be loaded before the other files.","href":"/data/files/vehicle-configurations"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Columns","slug":"columns","depth":2,"children":[]},{"title":"A dismount is not a new row","slug":"a-dismount-is-not-a-new-row","depth":2,"children":[]},{"title":"Rules","slug":"rules","depth":2,"children":[]},{"title":"Side effects","slug":"side-effects","depth":2,"children":[]},{"title":"Example","slug":"example","depth":2,"children":[]},{"title":"Why a file gets rejected","slug":"why-a-file-gets-rejected","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"a7tech","siteName":"A7 manager","title":"vehicle_configurations - A7 manager","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-16T16:42:41.668Z","originalFileLocation":"data/files/vehicle-configurations.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Mount and dismount events. Must be loaded before the other files.\">\u003cmeta data-mint-head name=\"application-name\" content=\"A7 manager\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/a7tech/KMXth563saw9sJGT/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/a7tech/KMXth563saw9sJGT/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/a7tech/KMXth563saw9sJGT/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/a7tech/KMXth563saw9sJGT/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/a7tech/KMXth563saw9sJGT/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/a7tech/KMXth563saw9sJGT/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/a7tech/KMXth563saw9sJGT/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/a7tech/KMXth563saw9sJGT/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/a7tech/KMXth563saw9sJGT/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"vehicle_configurations - A7 manager\">\u003cmeta data-mint-head property=\"og:description\" content=\"Mount and dismount events. Must be loaded before the other files.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"A7 manager\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.a7manager.se/data/files/vehicle-configurations\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://a7tech.mintlify.app/_mintlify/api/og/v2?division=File+formats\u0026amp;title=vehicle_configurations\u0026amp;description=Mount+and+dismount+events.+Must+be+loaded+before+the+other+files.\u0026amp;theme=a9098c755b87d1ea4134c8a5\u0026amp;signature=ac5bad8f4248ec5ab752eb508de6c862b01259cee445ec65cdc95668eb18417a\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"vehicle_configurations - A7 manager\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Mount and dismount events. Must be loaded before the other files.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://a7tech.mintlify.app/_mintlify/api/og/v2?division=File+formats\u0026amp;title=vehicle_configurations\u0026amp;description=Mount+and+dismount+events.+Must+be+loaded+before+the+other+files.\u0026amp;theme=a9098c755b87d1ea4134c8a5\u0026amp;signature=ac5bad8f4248ec5ab752eb508de6c862b01259cee445ec65cdc95668eb18417a\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/a7tech/KMXth563saw9sJGT/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"A7 manager\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3d4700\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.a7manager.se/data/files/vehicle-configurations\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/data/files/vehicle-configurations.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.a7manager.se/#organization\",\"name\":\"A7 manager\",\"url\":\"https://docs.a7manager.se\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.a7manager.se#website\",\"name\":\"A7 manager\",\"url\":\"https://docs.a7manager.se\",\"publisher\":{\"@id\":\"https://docs.a7manager.se/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.a7manager.se/data/files/vehicle-configurations#webpage\",\"url\":\"https://docs.a7manager.se/data/files/vehicle-configurations\",\"name\":\"vehicle_configurations\",\"description\":\"Mount and dismount events. Must be loaded before the other files.\",\"dateModified\":\"2026-08-16T16:42:41.668Z\",\"isPartOf\":{\"@id\":\"https://docs.a7manager.se#website\"},\"breadcrumb\":{\"@id\":\"https://docs.a7manager.se/data/files/vehicle-configurations#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.a7manager.se/data/files/vehicle-configurations#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"A7 manager\",\"item\":\"https://docs.a7manager.se\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"vehicle_configurations\",\"item\":\"https://docs.a7manager.se/data/files/vehicle-configurations\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.a7manager.se/data/files/vehicle-configurations#article\",\"headline\":\"vehicle_configurations\",\"name\":\"vehicle_configurations\",\"description\":\"Mount and dismount events. Must be loaded before the other files.\",\"url\":\"https://docs.a7manager.se/data/files/vehicle-configurations\",\"mainEntityOfPage\":{\"@id\":\"https://docs.a7manager.se/data/files/vehicle-configurations#webpage\"},\"dateModified\":\"2026-08-16T16:42:41.668Z\",\"publisher\":{\"@id\":\"https://docs.a7manager.se/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.a7manager.se#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"A7 manager\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"A7 manager","nav":{"global":null,"tabs":[{"tab":"Platform","icon":"train","pages":[{"title":"Platform","href":""}]},{"tab":"Pages","icon":"desktop","pages":[{"title":"Pages","href":"/pages/ask-ai"}]},{"tab":"Data","icon":"database","groups":[{"group":"Overview","pages":[{"title":"Database structure","href":"/data/schema-overview"},{"title":"How ingestion works","description":"Daily CSV import pipeline: delivery, validation, and the rules that apply to every file.","href":"/data/ingestion"}]},{"group":"File formats","pages":[{"title":"vehicle_configurations","href":"/data/files/vehicle-configurations"},{"title":"defects","description":"Faults recorded against a vehicle or a component.","href":"/data/files/defects"},{"title":"vehicle_readings","href":"/data/files/vehicle-readings"},{"title":"maintenance_records","href":"/data/files/maintenance-records"},{"title":"measurements","href":"/data/files/measurements"},{"title":"vehicle_out_of_service","href":"/data/files/vehicle-out-of-service"},{"title":"cleaning_records","href":"/data/files/cleaning-records"},{"title":"maintenance_plans","href":"/data/files/maintenance-plans"}]},{"group":"Tables","pages":[{"title":"Projects and Users tables","href":"/data/tables/projects-and-users"},{"title":"Assets tables","href":"/data/tables/assets"},{"title":"Service Book tables","href":"/data/tables/service-book"},{"title":"Defects tables","href":"/data/tables/defects"},{"title":"Warranty tables","href":"/data/tables/warranty"},{"title":"High-Value Components tables","href":"/data/tables/high-value-components"},{"title":"Inspections tables","href":"/data/tables/inspections"},{"title":"Reporting tables","href":"/data/tables/reporting"},{"title":"Measurements tables","href":"/data/tables/measurements"},{"title":"Planner tables","href":"/data/tables/planner"}]}]}]},"title":"vehicle_configurations - A7 manager","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":[],"chunks":[]}