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 <[email protected]>
This commit is contained in:
quanticsoul4772andClaude Opus 5.5 committed 2026-10-17 14:37:07 -07:00
1 parent 661e1d7fa3
commit 7bf268ec42
2 files changed
+13 -7

No files matched your search

+9 -7
View File
@@ -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;
}
+4
View File
@@ -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],
])