FA-96646 / Phone number formatting / Open access
PBX dial plan normalizer: international calls omit the international prefix · case 01
"+42 ..." dials the outside code followed directly by the country code.
ROOT CAUSE
The site international prefix is not inserted after the outside prefix.
THE FAILURE
The site international prefix is not inserted after the outside prefix.
Unsuccessful approach: Dialing intl + digits drops the outside prefix needed to seize a trunk.
Case contract
Input [dialed, site] with site ext_len, outside prefix and intl prefix. "+" (after stripping) means international: outside + intl + digits. Otherwise on digits: exactly ext_len digits is internal; digits that start with the outside prefix and have 7 or 11 digits after it are already external; 7 digits get the outside prefix; 10 digits get outside + "1"; anything else is invalid.
Why this case matters
Desk phones and softphones share one dial plan; a wrong prefix rule either rings an internal extension or places an unintended external call.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
dialed, site = x
plus = dialed.strip().startswith('+')
d = ''.join(c for c in dialed if c.isdigit())
n_ext, out = site['ext_len'], site['outside']
if plus:
return ['external', out + d] if d else ['invalid', '']
if len(d) == n_ext:
return ['internal', d]
if d.startswith(out) and len(d) - len(out) in (7, 11):
return ['external', d]
if len(d) == 7:
return ['external', out + d]
if len(d) == 10:
return ['external', out + '1' + d]
return ['invalid', d]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['international from site A', ['+42 555 0114', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '9011425550114']], ['international with a leading space at site B', [' +42 555 0114', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '8100425550114']], ['four-digit extension', ['2111', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['internal', '2111']], ['five-digit extension at site B', ['31111', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['internal', '31111']], ['three digits are not an extension', ['111', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['invalid', '111']], ['already prefixed local number', ['95550114', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550114']], ['already prefixed with two-digit outside code', ['815550114', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '815550114']], ['seven-digit local number', ['555-0114', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550114']], ['ten-digit national number', ['202-555-0114', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '912025550114']], ['ten-digit number starting with the outside digit', ['955-555-0114', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '919555550114']]], [['international from site A', ['+42 555 0125', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '9011425550125']], ['international with a leading space at site B', [' +42 555 0125', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '8100425550125']], ['four-digit extension', ['2222', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['internal', '2222']], ['five-digit extension at site B', ['32222', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['internal', '32222']], ['three digits are not an extension', ['122', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['invalid', '122']], ['already prefixed local number', ['95550125', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550125']], ['already prefixed with two-digit outside code', ['815550125', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '815550125']], ['seven-digit local number', ['555-0125', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550125']], ['ten-digit national number', ['202-555-0125', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '912025550125']], ['ten-digit number starting with the outside digit', ['955-555-0125', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '919555550125']]], [['international from site A', ['+42 555 0136', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '9011425550136']], ['international with a leading space at site B', [' +42 555 0136', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '8100425550136']], ['four-digit extension', ['2333', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['internal', '2333']], ['five-digit extension at site B', ['33333', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['internal', '33333']], ['three digits are not an extension', ['133', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['invalid', '133']], ['already prefixed local number', ['95550136', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550136']], ['already prefixed with two-digit outside code', ['815550136', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '815550136']], ['seven-digit local number', ['555-0136', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550136']], ['ten-digit national number', ['202-555-0136', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '912025550136']], ['ten-digit number starting with the outside digit', ['955-555-0136', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '919555550136']]], [['international from site A', ['+42 555 0147', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '9011425550147']], ['international with a leading space at site B', [' +42 555 0147', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '8100425550147']], ['four-digit extension', ['2444', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['internal', '2444']], ['five-digit extension at site B', ['34444', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['internal', '34444']], ['three digits are not an extension', ['144', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['invalid', '144']], ['already prefixed local number', ['95550147', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550147']], ['already prefixed with two-digit outside code', ['815550147', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '815550147']], ['seven-digit local number', ['555-0147', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550147']], ['ten-digit national number', ['202-555-0147', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '912025550147']], ['ten-digit number starting with the outside digit', ['955-555-0147', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '919555550147']]], [['international from site A', ['+42 555 0158', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '9011425550158']], ['international with a leading space at site B', [' +42 555 0158', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '8100425550158']], ['four-digit extension', ['2555', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['internal', '2555']], ['five-digit extension at site B', ['35555', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['internal', '35555']], ['three digits are not an extension', ['155', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['invalid', '155']], ['already prefixed local number', ['95550158', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550158']], ['already prefixed with two-digit outside code', ['815550158', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '815550158']], ['seven-digit local number', ['555-0158', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550158']], ['ten-digit national number', ['202-555-0158', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '912025550158']], ['ten-digit number starting with the outside digit', ['955-555-0158', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '919555550158']]]]
for label, arg, expected in fixtures[N - 1]:
check(label, solve(arg), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| international from site A | ['external', '9425550114'] | ['external', '9011425550114'] | Failed |
| international with a leading space at site B | ['external', '81425550114'] | ['external', '8100425550114'] | Failed |
| four-digit extension | ['internal', '2111'] | ['internal', '2111'] | Passed |
| five-digit extension at site B | ['internal', '31111'] | ['internal', '31111'] | Passed |
| three digits are not an extension | ['invalid', '111'] | ['invalid', '111'] | Passed |
| already prefixed local number | ['external', '95550114'] | ['external', '95550114'] | Passed |
| already prefixed with two-digit outside code | ['external', '815550114'] | ['external', '815550114'] | Passed |
| seven-digit local number | ['external', '95550114'] | ['external', '95550114'] | Passed |
| ten-digit national number | ['external', '912025550114'] | ['external', '912025550114'] | Passed |
| ten-digit number starting with the outside digit | ['external', '919555550114'] | ['external', '919555550114'] | Passed |
SHA-256 / dc9c351a43fec41e35c1a6b329d84cc50d6327045b82b9101238b2892abac0ee
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
dialed, site = x
plus = dialed.strip().startswith('+')
d = ''.join(c for c in dialed if c.isdigit())
n_ext, out = site['ext_len'], site['outside']
if plus:
return ['external', site['intl'] + d] if d else ['invalid', '']
if len(d) == n_ext:
return ['internal', d]
if d.startswith(out) and len(d) - len(out) in (7, 11):
return ['external', d]
if len(d) == 7:
return ['external', out + d]
if len(d) == 10:
return ['external', out + '1' + d]
return ['invalid', d]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['international from site A', ['+42 555 0114', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '9011425550114']], ['international with a leading space at site B', [' +42 555 0114', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '8100425550114']], ['four-digit extension', ['2111', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['internal', '2111']], ['five-digit extension at site B', ['31111', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['internal', '31111']], ['three digits are not an extension', ['111', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['invalid', '111']], ['already prefixed local number', ['95550114', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550114']], ['already prefixed with two-digit outside code', ['815550114', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '815550114']], ['seven-digit local number', ['555-0114', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550114']], ['ten-digit national number', ['202-555-0114', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '912025550114']], ['ten-digit number starting with the outside digit', ['955-555-0114', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '919555550114']]], [['international from site A', ['+42 555 0125', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '9011425550125']], ['international with a leading space at site B', [' +42 555 0125', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '8100425550125']], ['four-digit extension', ['2222', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['internal', '2222']], ['five-digit extension at site B', ['32222', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['internal', '32222']], ['three digits are not an extension', ['122', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['invalid', '122']], ['already prefixed local number', ['95550125', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550125']], ['already prefixed with two-digit outside code', ['815550125', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '815550125']], ['seven-digit local number', ['555-0125', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550125']], ['ten-digit national number', ['202-555-0125', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '912025550125']], ['ten-digit number starting with the outside digit', ['955-555-0125', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '919555550125']]], [['international from site A', ['+42 555 0136', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '9011425550136']], ['international with a leading space at site B', [' +42 555 0136', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '8100425550136']], ['four-digit extension', ['2333', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['internal', '2333']], ['five-digit extension at site B', ['33333', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['internal', '33333']], ['three digits are not an extension', ['133', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['invalid', '133']], ['already prefixed local number', ['95550136', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550136']], ['already prefixed with two-digit outside code', ['815550136', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '815550136']], ['seven-digit local number', ['555-0136', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550136']], ['ten-digit national number', ['202-555-0136', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '912025550136']], ['ten-digit number starting with the outside digit', ['955-555-0136', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '919555550136']]], [['international from site A', ['+42 555 0147', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '9011425550147']], ['international with a leading space at site B', [' +42 555 0147', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '8100425550147']], ['four-digit extension', ['2444', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['internal', '2444']], ['five-digit extension at site B', ['34444', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['internal', '34444']], ['three digits are not an extension', ['144', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['invalid', '144']], ['already prefixed local number', ['95550147', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550147']], ['already prefixed with two-digit outside code', ['815550147', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '815550147']], ['seven-digit local number', ['555-0147', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550147']], ['ten-digit national number', ['202-555-0147', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '912025550147']], ['ten-digit number starting with the outside digit', ['955-555-0147', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '919555550147']]], [['international from site A', ['+42 555 0158', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '9011425550158']], ['international with a leading space at site B', [' +42 555 0158', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '8100425550158']], ['four-digit extension', ['2555', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['internal', '2555']], ['five-digit extension at site B', ['35555', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['internal', '35555']], ['three digits are not an extension', ['155', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['invalid', '155']], ['already prefixed local number', ['95550158', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550158']], ['already prefixed with two-digit outside code', ['815550158', {'ext_len': 5, 'outside': '81', 'intl': '00'}], ['external', '815550158']], ['seven-digit local number', ['555-0158', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '95550158']], ['ten-digit national number', ['202-555-0158', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '912025550158']], ['ten-digit number starting with the outside digit', ['955-555-0158', {'ext_len': 4, 'outside': '9', 'intl': '011'}], ['external', '919555550158']]]]
for label, arg, expected in fixtures[N - 1]:
check(label, solve(arg), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| international from site A | ['external', '011425550114'] | ['external', '9011425550114'] | Failed |
| international with a leading space at site B | ['external', '00425550114'] | ['external', '8100425550114'] | Failed |
| four-digit extension | ['internal', '2111'] | ['internal', '2111'] | Passed |
| five-digit extension at site B | ['internal', '31111'] | ['internal', '31111'] | Passed |
| three digits are not an extension | ['invalid', '111'] | ['invalid', '111'] | Passed |
| already prefixed local number | ['external', '95550114'] | ['external', '95550114'] | Passed |
| already prefixed with two-digit outside code | ['external', '815550114'] | ['external', '815550114'] | Passed |
| seven-digit local number | ['external', '95550114'] | ['external', '95550114'] | Passed |
| ten-digit national number | ['external', '912025550114'] | ['external', '912025550114'] | Passed |
| ten-digit number starting with the outside digit | ['external', '919555550114'] | ['external', '919555550114'] | Passed |
SHA-256 / 32994c057165c5334251728251b4ca5b974f62ba036a2c04ad3d85c4bc16b321
HELD IN THE MEMBER ARCHIVE
The verified repair and its recorded checks are member-only.
This mechanism has 10 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.
Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.
Member access is invitation-based. Sign in with your invited account to inspect the repair.
Sign in to the archive ↗Verification & scope
A deterministic toy contract over synthetic, obviously fictitious telephone numbers and toy country tables. The rules are stipulated for this model only and make no claim of conformance with any numbering plan or telecommunications standard. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:52:24.773297+00:00.
Case digest / 783133451a37dd2b964907236d9406a7e395b8cfcf88182129826eda4f50ed5b