From 7bf268ec4287af8e097fec00fc14cfb406ece5e1 Mon Sep 17 00:00:00 2001 From: quanticsoul4772 <71096528+quanticsoul4772@users.noreply.github.com> Date: Sat, 17 Oct 2026 14:37:07 -0700 Subject: [PATCH] fix(tools): read an airline only from a callsign of seven characters or fewer ICAO flight-plan Item 7 caps aircraft identification at seven characters, so the flight number after the designator is one to four characters, not five. Philippine RP-C1234 and Cuban CU-T1240 registrations read like a designator plus a flight number once the hyphen is dropped; they now count as unknown. Cubana's CUB123 still counts as CUB. Co-Authored-By: Claude Opus 5.5 --- src/tools/queries/aviation.js | 16 +++++++++------- src/tools/queries/aviation.test.mjs | 4 ++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/tools/queries/aviation.js b/src/tools/queries/aviation.js index 6a4cbd54e..fa2ff1172 100644 --- a/src/tools/queries/aviation.js +++ b/src/tools/queries/aviation.js @@ -44,15 +44,17 @@ const GROUP_LABELS = Object.freeze({ /** * The ICAO airline designator a callsign flies under: three letters, then a - * flight number that starts with a digit (SWA1234, UAL12A, BAW1). Registrations - * used as callsigns (N123AB, GABCD) have no designator. + * flight number that starts with a digit, seven characters at most (SWA1234, + * UAL12A, BAW1). Registrations used as callsigns (N123AB, GABCD) have no + * designator; Philippine RP-C1234 and Cuban CU-T1240, which read like one + * without their hyphen, are excluded too. */ export function airlineDesignator(callsign) { - const match = /^([A-Z]{3})\d[0-9A-Z]{0,4}$/.exec( - String(callsign ?? '') - .trim() - .toUpperCase(), - ); + const text = String(callsign ?? '') + .trim() + .toUpperCase(); + if (/^(?:RPC|CUT)\d{4}$/.test(text)) return null; + const match = /^([A-Z]{3})\d[0-9A-Z]{0,3}$/.exec(text); return match ? match[1] : null; } diff --git a/src/tools/queries/aviation.test.mjs b/src/tools/queries/aviation.test.mjs index 721385ef7..32c1e02cd 100644 --- a/src/tools/queries/aviation.test.mjs +++ b/src/tools/queries/aviation.test.mjs @@ -516,6 +516,10 @@ test('an airline designator is read from an ICAO flight callsign only', () => { ['GABCD', null], ['SWA', null], ['SWAX123', null], + ['SWA12345', null], + ['RPC1234', null], + ['CUT1240', null], + ['CUB123', 'CUB'], ['', null], [null, null], ])