Files
edr-platform/apps/edr-freight-api/src/modules/wagons/train-runs.const.ts
natib21 20eb54521b fix
2026-07-18 08:34:43 +00:00

42 lines
1.5 KiB
TypeScript

/**
* EDR run-number pairs, keyed by the odd EXPORT run (Ethiopia → Djibouti). The
* even IMPORT run (Djibouti → Ethiopia) is fixed by the export run.
*
* Run numbers are always 4 digits (8401, never 84001). Pairs are listed out
* rather than computed from the 8001/+100/+1 pattern, so a run that ever breaks
* the convention stays correct here.
*
* SeedWagonRunNumbers2280000000000 carries its own frozen copy on purpose: a
* migration must keep doing what it did when it was applied, whereas this list
* is live config for the update script. Add or retire runs HERE.
*/
export const TRAIN_RUN_PAIRS: Record<string, string> = {
'8001': '8002',
'8101': '8102',
'8201': '8202',
'8301': '8302',
'8401': '8402',
'8501': '8502',
'8601': '8602',
'8701': '8702',
'8801': '8802',
'8901': '8902',
'9001': '9002',
};
/** Even IMPORT run -> its odd EXPORT run. Derived so the two cannot drift. */
export const EXPORT_BY_IMPORT: Record<string, string> = Object.fromEntries(
Object.entries(TRAIN_RUN_PAIRS).map(([exportRun, importRun]) => [importRun, exportRun]),
);
/**
* Normalise any run number to its EXPORT run. Accepts either half of a pair, so
* a sheet listing "8002" and one listing "8001" both resolve to the same train.
* Returns null when the number belongs to no known run.
*/
export const toExportRun = (run: string): string | null => {
const value = run.trim();
if (TRAIN_RUN_PAIRS[value]) return value;
return EXPORT_BY_IMPORT[value] ?? null;
};