@ham2k/lib-operation-data 1.1.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/dist/index.cjs +759 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +95 -1
- package/dist/index.d.ts +95 -1
- package/dist/index.js +754 -22
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -198,20 +198,47 @@ function frequencyForBand(band, mode) {
|
|
|
198
198
|
// src/data/bandPlans.json
|
|
199
199
|
var bandPlans_default = {
|
|
200
200
|
bands: {
|
|
201
|
+
"2190m": {
|
|
202
|
+
mhz: [135.7, 137.8],
|
|
203
|
+
exceptLevels: ["at:3", "at:4", "au:F", "au:S", "be:C", "be:B", "bg:2", "ca:B", "ch:HB3", "cl:ASP", "cl:N", "cn:A", "cz:N", "de:N", "de:E", "dk:D", "hr:P", "hu:KEZDO", "hu:NOVICE", "id:SIAGA", "my:C", "my:B", "nl:N", "no:begrenset", "rs:C", "rs:B", "ru:4", "se:insteg", "si:N", "ua:C", "ua:B", "us:N", "us:T"],
|
|
204
|
+
segments: [
|
|
205
|
+
{ name: "JP 4th Class: DATA only", mhz: [135.7, 137.8], levels: ["jp:4"], superModes: ["DATA"] }
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
"630m": {
|
|
209
|
+
mhz: [472, 479],
|
|
210
|
+
exceptLevels: ["at:3", "at:4", "au:F", "au:S", "be:C", "be:B", "bg:2", "ca:B", "ch:HB3", "cl:ASP", "cl:N", "de:N", "de:E", "dk:D", "gb:F", "gb:I", "hr:P", "hu:KEZDO", "hu:NOVICE", "id:SIAGA", "my:C", "my:B", "nl:N", "no:begrenset", "rs:C", "rs:B", "se:insteg", "si:N", "us:N", "us:T"],
|
|
211
|
+
segments: [
|
|
212
|
+
{ name: "JP 4th Class: DATA only", mhz: [472, 479], levels: ["jp:4"], superModes: ["DATA"] }
|
|
213
|
+
]
|
|
214
|
+
},
|
|
215
|
+
"560m": {
|
|
216
|
+
mhz: [501, 504],
|
|
217
|
+
exceptLevels: ["be:C", "be:B"],
|
|
218
|
+
segments: []
|
|
219
|
+
},
|
|
201
220
|
"160m": {
|
|
202
221
|
mhz: [1800, 2e3],
|
|
222
|
+
exceptLevels: ["at:3", "au:F", "au:S", "be:C", "bg:2", "ca:B", "cl:ASP", "cl:N", "cn:A", "de:N", "dk:D", "hr:P", "hu:KEZDO", "id:SIAGA", "kr:4", "my:C", "my:B", "nl:N", "no:begrenset", "rs:C", "rs:B", "ru:4", "se:insteg", "si:N", "us:N", "us:T"],
|
|
203
223
|
segments: [
|
|
204
|
-
{ name: "Out of band Reg1", mhz: [1800,
|
|
224
|
+
{ name: "Out of band Reg1", mhz: [1800, 1810], mode: false, regions: [1] },
|
|
205
225
|
{ name: "CW Reg1", mhz: [1810, 1838], mode: "CW", regions: [1] },
|
|
206
226
|
{ name: "Data", mhz: [1800, 1810], mode: "RTTY" },
|
|
207
227
|
{ name: "CW", mhz: [1800, 1843], mode: "CW" },
|
|
208
228
|
{ name: "FT8", mhz: [1840, 1843], mode: "FT8", priority: 100 },
|
|
209
229
|
{ name: "Phone", mhz: [1843, 2e3], mode: "SSB", submode: "LSB" },
|
|
210
|
-
{ name: "Australia", mhz: [1800, 1875], mode: null, countries: ["au"] }
|
|
230
|
+
{ name: "Australia", mhz: [1800, 1875], mode: null, countries: ["au"] },
|
|
231
|
+
{ name: "BR: Class A only", mhz: [1850, 2e3], exceptLevels: ["br:C", "br:B"] },
|
|
232
|
+
{ name: "CZ: Class A only", mhz: [1810, 1830], exceptLevels: ["cz:N"] },
|
|
233
|
+
{ name: "HU: CEPT (full) only", mhz: [1850, 2e3], exceptLevels: ["hu:NOVICE"] },
|
|
234
|
+
{ name: "JP 4th Class: DATA only", mhz: [1907.5, 1912.5], levels: ["jp:4"], superModes: ["DATA"] },
|
|
235
|
+
{ name: "UA Entry level (student): DATA only", mhz: [1840, 1842], levels: ["ua:C"], superModes: ["DATA"] },
|
|
236
|
+
{ name: "UA: Novice, Higher qualification (HAREC) only", mhz: [1842, 1850], exceptLevels: ["ua:C"] }
|
|
211
237
|
]
|
|
212
238
|
},
|
|
213
239
|
"80m": {
|
|
214
|
-
mhz: [3500,
|
|
240
|
+
mhz: [3500, 4e3],
|
|
241
|
+
exceptLevels: ["at:3", "bg:2", "ca:B", "cn:A", "de:N", "dk:D", "kr:4", "my:C", "nl:N", "ru:4", "se:insteg"],
|
|
215
242
|
segments: [
|
|
216
243
|
{ name: "CW Reg1", mhz: [3500, 3570], mode: "CW", regions: [1] },
|
|
217
244
|
{ name: "CW", mhz: [3500, 3600], mode: "CW" },
|
|
@@ -220,11 +247,27 @@ var bandPlans_default = {
|
|
|
220
247
|
{ name: "Data", mhz: [3570, 3600], mode: "RTTY" },
|
|
221
248
|
{ name: "FT8", mhz: [3573, 3576], mode: "FT8", priority: 100 },
|
|
222
249
|
{ name: "Phone", mhz: [3600, 4e3], mode: "SSB", submode: "LSB" },
|
|
223
|
-
{ name: "Australia", mhz: [3500, 3800], mode: null, countries: ["au"] }
|
|
250
|
+
{ name: "Australia", mhz: [3500, 3800], mode: null, countries: ["au"] },
|
|
251
|
+
{ name: "AU: Advanced only", mhz: [3776, 3800], exceptLevels: ["au:F", "au:S"] },
|
|
252
|
+
{ name: "BR: Class A only", mhz: [3800, 4e3], exceptLevels: ["br:C", "br:B"] },
|
|
253
|
+
{ name: "CZ: Class A only", mhz: [3500, 3550], exceptLevels: ["cz:N"] },
|
|
254
|
+
{ name: "CZ: Class A only", mhz: [3700, 3800], exceptLevels: ["cz:N"] },
|
|
255
|
+
{ name: "UA: Novice, Higher qualification (HAREC) only", mhz: [3650, 3700], exceptLevels: ["ua:C"] },
|
|
256
|
+
{ name: "UA: Higher qualification (HAREC) only", mhz: [3700, 3730], exceptLevels: ["ua:C", "ua:B"] },
|
|
257
|
+
{ name: "UA: Novice, Higher qualification (HAREC) only", mhz: [3730, 3740], exceptLevels: ["ua:C"] },
|
|
258
|
+
{ name: "UA Novice: DATA only", mhz: [3730, 3740], levels: ["ua:B"], superModes: ["DATA"] },
|
|
259
|
+
{ name: "UA: Higher qualification (HAREC) only", mhz: [3740, 3800], exceptLevels: ["ua:C", "ua:B"] },
|
|
260
|
+
{ name: "US: Amateur Extra only", mhz: [3500, 3525], exceptLevels: ["us:N", "us:T", "us:G", "us:A"] },
|
|
261
|
+
{ name: "US Novice, Technician: CW only", mhz: [3525, 3600], levels: ["us:N", "us:T"], superModes: ["CW"] },
|
|
262
|
+
{ name: "US: Amateur Extra only", mhz: [3600, 3700], exceptLevels: ["us:N", "us:T", "us:G", "us:A"] },
|
|
263
|
+
{ name: "US: Advanced, Amateur Extra only", mhz: [3700, 3800], exceptLevels: ["us:N", "us:T", "us:G"] },
|
|
264
|
+
{ name: "US: General, Advanced, Amateur Extra only", mhz: [3800, 3900], exceptLevels: ["us:N", "us:T"] },
|
|
265
|
+
{ name: "US: General, Advanced, Amateur Extra only", mhz: [3900, 4e3], regions: [2], exceptLevels: ["us:N", "us:T"] }
|
|
224
266
|
]
|
|
225
267
|
},
|
|
226
268
|
"60m": {
|
|
227
|
-
mhz: [
|
|
269
|
+
mhz: [5250, 5450],
|
|
270
|
+
exceptLevels: ["at:3", "at:4", "be:C", "be:B", "bg:2", "br:C", "br:B", "ca:B", "ch:HB3", "cl:ASP", "cl:N", "cn:A", "de:N", "de:E", "dk:D", "gb:F", "gb:I", "hr:P", "hu:KEZDO", "hu:NOVICE", "id:SIAGA", "id:PENGGALANG", "my:C", "nl:N", "no:begrenset", "rs:C", "rs:B", "se:insteg", "si:N", "us:N", "us:T"],
|
|
228
271
|
segments: [
|
|
229
272
|
{ name: "60m Channel 1", mhz: [5330.5, 5333.5] },
|
|
230
273
|
{ name: "60m Channel 2", mhz: [5346.5, 5349.5] },
|
|
@@ -235,6 +278,7 @@ var bandPlans_default = {
|
|
|
235
278
|
},
|
|
236
279
|
"40m": {
|
|
237
280
|
mhz: [7e3, 7300],
|
|
281
|
+
exceptLevels: ["at:3", "at:4", "bg:2", "ca:B", "ch:HB3", "cn:A", "cz:N", "de:N", "de:E", "dk:D", "kr:4", "my:C", "ru:4"],
|
|
238
282
|
segments: [
|
|
239
283
|
{ name: "CW", mhz: [7e3, 7060], mode: "CW" },
|
|
240
284
|
{ name: "CW Reg1", mhz: [7e3, 7040], mode: "CW", regions: [1] },
|
|
@@ -245,11 +289,22 @@ var bandPlans_default = {
|
|
|
245
289
|
{ name: "Data", mhz: [7080, 7125], mode: "RTTY", countries: ["us"] },
|
|
246
290
|
{ name: "Phone", mhz: [7125, 7300], mode: "SSB", submode: "LSB", countries: ["us"] },
|
|
247
291
|
{ name: "Australia", mhz: [7e3, 7300], mode: null, countries: ["au"] },
|
|
248
|
-
{ name: "Out of band Reg1", mhz: [7200, 7300], mode: false, regions: [1] }
|
|
292
|
+
{ name: "Out of band Reg1", mhz: [7200, 7300], mode: false, regions: [1] },
|
|
293
|
+
{ name: "BR: Class B, Class A only", mhz: [7047, 7300], exceptLevels: ["br:C"] },
|
|
294
|
+
{ name: "HU: CEPT Novice, CEPT (full) only", mhz: [7100, 7175], exceptLevels: ["hu:KEZDO"] },
|
|
295
|
+
{ name: "UA Entry level (student): CW only", mhz: [7040, 7050], levels: ["ua:C"], superModes: ["CW"] },
|
|
296
|
+
{ name: "UA Entry level (student): CW/PHONE only", mhz: [7050, 7080], levels: ["ua:C"], superModes: ["CW", "PHONE"] },
|
|
297
|
+
{ name: "UA: Higher qualification (HAREC) only", mhz: [7100, 7200], exceptLevels: ["ua:C", "ua:B"] },
|
|
298
|
+
{ name: "US: Amateur Extra only", mhz: [7e3, 7025], exceptLevels: ["us:N", "us:T", "us:G", "us:A"] },
|
|
299
|
+
{ name: "US Novice, Technician: CW only", mhz: [7025, 7125], levels: ["us:N", "us:T"], superModes: ["CW"] },
|
|
300
|
+
{ name: "US: Advanced, Amateur Extra only", mhz: [7125, 7175], exceptLevels: ["us:N", "us:T", "us:G"] },
|
|
301
|
+
{ name: "US: General, Advanced, Amateur Extra only", mhz: [7175, 7200], exceptLevels: ["us:N", "us:T"] },
|
|
302
|
+
{ name: "US: General, Advanced, Amateur Extra only", mhz: [7200, 7300], regions: [2], exceptLevels: ["us:N", "us:T"] }
|
|
249
303
|
]
|
|
250
304
|
},
|
|
251
305
|
"30m": {
|
|
252
306
|
mhz: [10100, 10150],
|
|
307
|
+
exceptLevels: ["ar:N", "ar:G", "at:3", "at:4", "au:F", "au:S", "bg:2", "br:C", "br:B", "ca:B", "ch:HB3", "cl:ASP", "cn:A", "cz:N", "de:N", "de:E", "dk:D", "hr:P", "hu:KEZDO", "hu:NOVICE", "id:SIAGA", "id:PENGGALANG", "jp:4", "jp:3", "kr:4", "kr:3P", "kr:3T", "my:C", "nl:N", "no:begrenset", "rs:C", "rs:B", "ru:4", "se:insteg", "si:N", "us:N", "us:T"],
|
|
253
308
|
segments: [
|
|
254
309
|
{ name: "CW", mhz: [10100, 10150], mode: "CW" },
|
|
255
310
|
{ name: "CW Reg1", mhz: [10100, 10130], mode: "CW", regions: [1] },
|
|
@@ -257,11 +312,13 @@ var bandPlans_default = {
|
|
|
257
312
|
{ name: "FT8", mhz: [10136, 10139], mode: "FT8", priority: 100 },
|
|
258
313
|
{ name: "FT4", mhz: [10140, 10143], mode: "FT4", priority: 100 },
|
|
259
314
|
{ name: "Australia & New Zealand", mhz: [10100, 10150], mode: null, countries: ["au", "nz"] },
|
|
260
|
-
{ name: "Africa south of the Equator", mhz: [10100, 10150], mode: null, countries: ["ao", "bi", "bw", "cd", "cg", "ga", "ke", "km", "ls", "mg", "mu", "mw", "mz", "na", "rw", "sc", "so", "st", "sz", "tz", "ug", "za", "zm", "zw"] }
|
|
315
|
+
{ name: "Africa south of the Equator", mhz: [10100, 10150], mode: null, countries: ["ao", "bi", "bw", "cd", "cg", "ga", "ke", "km", "ls", "mg", "mu", "mw", "mz", "na", "rw", "sc", "so", "st", "sz", "tz", "ug", "za", "zm", "zw"] },
|
|
316
|
+
{ name: "UA Entry level (student): CW only", mhz: [10136, 10150], levels: ["ua:C"], superModes: ["CW"] }
|
|
261
317
|
]
|
|
262
318
|
},
|
|
263
319
|
"20m": {
|
|
264
320
|
mhz: [14e3, 14350],
|
|
321
|
+
exceptLevels: ["at:3", "at:4", "au:F", "bg:2", "br:C", "br:B", "ca:B", "ch:HB3", "cl:ASP", "cl:N", "cn:A", "cz:N", "de:N", "de:E", "dk:D", "id:SIAGA", "jp:4", "jp:3", "kr:4", "kr:3P", "kr:3T", "my:C", "rs:C", "ru:4", "si:N", "ua:C", "us:N", "us:T"],
|
|
265
322
|
segments: [
|
|
266
323
|
{ name: "CW", mhz: [14e3, 14150], mode: "CW" },
|
|
267
324
|
{ name: "CW Reg1", mhz: [14e3, 14070], mode: "CW", regions: [1] },
|
|
@@ -271,11 +328,27 @@ var bandPlans_default = {
|
|
|
271
328
|
{ name: "FT4", mhz: [14080, 14083], mode: "FT4", priority: 100 },
|
|
272
329
|
{ name: "Phone", mhz: [14112, 14350], mode: "SSB", submode: "USB", regions: [1, 2] },
|
|
273
330
|
{ name: "Phone", mhz: [14150, 14350], mode: "SSB", submode: "USB", countries: ["us"] },
|
|
274
|
-
{ name: "Australia", mhz: [14e3, 14350], mode: null, countries: ["au"] }
|
|
331
|
+
{ name: "Australia", mhz: [14e3, 14350], mode: null, countries: ["au"] },
|
|
332
|
+
{ name: "AR: General, Superior, Special only", mhz: [14e3, 14070], exceptLevels: ["ar:N"] },
|
|
333
|
+
{ name: "AR Novice: CW/DATA only", mhz: [14070, 14099], levels: ["ar:N"], superModes: ["CW", "DATA"] },
|
|
334
|
+
{ name: "AR: General, Superior, Special only", mhz: [14099, 14350], exceptLevels: ["ar:N"] },
|
|
335
|
+
{ name: "HR: Class A only", mhz: [14e3, 14040], exceptLevels: ["hr:P"] },
|
|
336
|
+
{ name: "HR: Class A only", mhz: [14150, 14280], exceptLevels: ["hr:P"] },
|
|
337
|
+
{ name: "HU: CEPT Novice, CEPT (full) only", mhz: [14300, 14350], exceptLevels: ["hu:KEZDO"] },
|
|
338
|
+
{ name: "ID Advanced: CW only", mhz: [14e3, 14070], levels: ["id:PENGGALANG"], superModes: ["CW"] },
|
|
339
|
+
{ name: "ID Advanced: DATA only", mhz: [14070, 14110], levels: ["id:PENGGALANG"], superModes: ["DATA"] },
|
|
340
|
+
{ name: "ID: Extra Class only", mhz: [14150, 14350], exceptLevels: ["id:PENGGALANG"] },
|
|
341
|
+
{ name: "UA Novice: CW/DATA only", mhz: [14100, 14112], levels: ["ua:B"], superModes: ["CW", "DATA"] },
|
|
342
|
+
{ name: "UA Novice: CW only", mhz: [14112, 14250], levels: ["ua:B"], superModes: ["CW"] },
|
|
343
|
+
{ name: "UA: Higher qualification (HAREC) only", mhz: [14250, 14350], exceptLevels: ["ua:B"] },
|
|
344
|
+
{ name: "US: Amateur Extra only", mhz: [14e3, 14025], exceptLevels: ["us:G", "us:A"] },
|
|
345
|
+
{ name: "US: Amateur Extra only", mhz: [14150, 14175], exceptLevels: ["us:G", "us:A"] },
|
|
346
|
+
{ name: "US: Advanced, Amateur Extra only", mhz: [14175, 14225], exceptLevels: ["us:G"] }
|
|
275
347
|
]
|
|
276
348
|
},
|
|
277
349
|
"17m": {
|
|
278
350
|
mhz: [18068, 18168],
|
|
351
|
+
exceptLevels: ["ar:N", "at:3", "at:4", "au:F", "au:S", "be:C", "bg:2", "br:C", "br:B", "ca:B", "ch:HB3", "cl:ASP", "cl:N", "cn:A", "cz:N", "de:N", "de:E", "dk:D", "hr:P", "hu:KEZDO", "hu:NOVICE", "id:SIAGA", "id:PENGGALANG", "jp:4", "kr:4", "kr:3P", "kr:3T", "my:C", "nl:N", "rs:C", "rs:B", "ru:4", "se:insteg", "si:N", "us:N", "us:T"],
|
|
279
352
|
segments: [
|
|
280
353
|
{ name: "CW", mhz: [18068, 18110], mode: "CW" },
|
|
281
354
|
{ name: "CW Reg1", mhz: [18068, 18095], mode: "CW", regions: [1] },
|
|
@@ -285,11 +358,13 @@ var bandPlans_default = {
|
|
|
285
358
|
{ name: "Beacons only", mhz: [18109, 18111], priority: 100 },
|
|
286
359
|
{ name: "Phone", mhz: [18111, 18168], mode: "SSB", submode: "USB" },
|
|
287
360
|
{ name: "Phone US", mhz: [18110, 18168], mode: "SSB", submode: "USB", countries: ["us"] },
|
|
288
|
-
{ name: "Australia", mhz: [18068, 18168], mode: null, countries: ["au"] }
|
|
361
|
+
{ name: "Australia", mhz: [18068, 18168], mode: null, countries: ["au"] },
|
|
362
|
+
{ name: "UA Entry level (student): CW only", mhz: [18100, 18168], levels: ["ua:C"], superModes: ["CW"] }
|
|
289
363
|
]
|
|
290
364
|
},
|
|
291
365
|
"15m": {
|
|
292
366
|
mhz: [21e3, 21450],
|
|
367
|
+
exceptLevels: ["at:3", "bg:2", "ca:B", "cl:ASP", "cl:N", "cn:A", "de:N", "dk:D", "kr:4", "my:C", "nl:N", "rs:C", "ru:4"],
|
|
293
368
|
segments: [
|
|
294
369
|
{ name: "CW", mhz: [21e3, 21150], mode: "CW" },
|
|
295
370
|
{ name: "CW Reg1", mhz: [21e3, 21070], mode: "CW", regions: [1] },
|
|
@@ -299,11 +374,31 @@ var bandPlans_default = {
|
|
|
299
374
|
{ name: "Beacons only", mhz: [21149, 21151], priority: 100 },
|
|
300
375
|
{ name: "Phone", mhz: [21151, 21450], mode: "SSB", submode: "USB" },
|
|
301
376
|
{ name: "Phone US", mhz: [21150, 21450], mode: "SSB", submode: "USB", countries: ["us"] },
|
|
302
|
-
{ name: "Australia", mhz: [21e3, 21450], mode: null, countries: ["au"] }
|
|
377
|
+
{ name: "Australia", mhz: [21e3, 21450], mode: null, countries: ["au"] },
|
|
378
|
+
{ name: "AR: General, Superior, Special only", mhz: [21e3, 21070], exceptLevels: ["ar:N"] },
|
|
379
|
+
{ name: "AR Novice: CW/DATA only", mhz: [21070, 21125], levels: ["ar:N"], superModes: ["CW", "DATA"] },
|
|
380
|
+
{ name: "AR Novice: CW only", mhz: [21125, 21149], levels: ["ar:N"], superModes: ["CW"] },
|
|
381
|
+
{ name: "AR: General, Superior, Special only", mhz: [21149, 21200], exceptLevels: ["ar:N"] },
|
|
382
|
+
{ name: "AR: Superior, Special only", mhz: [21310, 21450], exceptLevels: ["ar:N", "ar:G"] },
|
|
383
|
+
{ name: "BR: Class B, Class A only", mhz: [21150, 21300], exceptLevels: ["br:C"] },
|
|
384
|
+
{ name: "BR: Class A only", mhz: [21300, 21450], exceptLevels: ["br:C", "br:B"] },
|
|
385
|
+
{ name: "CZ: Class A only", mhz: [21e3, 21050], exceptLevels: ["cz:N"] },
|
|
386
|
+
{ name: "CZ: Class A only", mhz: [21200, 21450], exceptLevels: ["cz:N"] },
|
|
387
|
+
{ name: "ID General: CW only", mhz: [21e3, 21070], levels: ["id:SIAGA"], superModes: ["CW"] },
|
|
388
|
+
{ name: "ID General: CW/DATA only", mhz: [21070, 21125], levels: ["id:SIAGA"], superModes: ["CW", "DATA"] },
|
|
389
|
+
{ name: "ID General: CW only", mhz: [21125, 21200], levels: ["id:SIAGA"], superModes: ["CW"] },
|
|
390
|
+
{ name: "ID: Advanced, Extra Class only", mhz: [21200, 21450], exceptLevels: ["id:SIAGA"] },
|
|
391
|
+
{ name: "UA Entry level (student), Novice: CW only", mhz: [21250, 21450], levels: ["ua:C", "ua:B"], superModes: ["CW"] },
|
|
392
|
+
{ name: "US: Amateur Extra only", mhz: [21e3, 21025], exceptLevels: ["us:N", "us:T", "us:G", "us:A"] },
|
|
393
|
+
{ name: "US Novice, Technician: CW only", mhz: [21025, 21200], levels: ["us:N", "us:T"], superModes: ["CW"] },
|
|
394
|
+
{ name: "US: Amateur Extra only", mhz: [21200, 21225], exceptLevels: ["us:N", "us:T", "us:G", "us:A"] },
|
|
395
|
+
{ name: "US: Advanced, Amateur Extra only", mhz: [21225, 21275], exceptLevels: ["us:N", "us:T", "us:G"] },
|
|
396
|
+
{ name: "US: General, Advanced, Amateur Extra only", mhz: [21275, 21450], exceptLevels: ["us:N", "us:T"] }
|
|
303
397
|
]
|
|
304
398
|
},
|
|
305
399
|
"12m": {
|
|
306
|
-
mhz: [
|
|
400
|
+
mhz: [24740, 24990],
|
|
401
|
+
exceptLevels: ["ar:N", "at:3", "at:4", "au:F", "au:S", "be:C", "bg:2", "ca:B", "ch:HB3", "cl:ASP", "cl:N", "cn:A", "cz:N", "de:N", "de:E", "dk:D", "hr:P", "hu:KEZDO", "id:SIAGA", "id:PENGGALANG", "kr:4", "my:C", "nl:N", "no:begrenset", "rs:C", "rs:B", "ru:4", "se:insteg", "si:N", "us:N", "us:T"],
|
|
307
402
|
segments: [
|
|
308
403
|
{ name: "CW", mhz: [24890, 24930], mode: "CW" },
|
|
309
404
|
{ name: "CW Reg1", mhz: [24890, 24915], mode: "CW", regions: [1] },
|
|
@@ -313,11 +408,13 @@ var bandPlans_default = {
|
|
|
313
408
|
{ name: "Phone", mhz: [24930, 24990], mode: "SSB", submode: "USB" },
|
|
314
409
|
{ name: "Beacons only", mhz: [24929, 24931], priority: 100 },
|
|
315
410
|
{ name: "Phone US", mhz: [24930, 24990], mode: "SSB", submode: "USB", countries: ["us"] },
|
|
316
|
-
{ name: "Australia", mhz: [24890, 24990], mode: null, countries: ["au"] }
|
|
411
|
+
{ name: "Australia", mhz: [24890, 24990], mode: null, countries: ["au"] },
|
|
412
|
+
{ name: "UA Entry level (student): CW only", mhz: [24915, 24990], levels: ["ua:C"], superModes: ["CW"] }
|
|
317
413
|
]
|
|
318
414
|
},
|
|
319
415
|
"10m": {
|
|
320
416
|
mhz: [28e3, 29700],
|
|
417
|
+
exceptLevels: ["at:3", "bg:2", "ca:B", "cn:A", "kr:4", "my:C", "rs:C", "ru:4"],
|
|
321
418
|
segments: [
|
|
322
419
|
{ name: "CW", mhz: [28e3, 28190], mode: "CW" },
|
|
323
420
|
{ name: "CW Reg1", mhz: [28e3, 28070], mode: "CW", regions: [1] },
|
|
@@ -332,11 +429,23 @@ var bandPlans_default = {
|
|
|
332
429
|
{ name: "Repeater Uplinks", mhz: [29520, 29590] },
|
|
333
430
|
{ name: "FM", mhz: [29520, 29700], mode: "FM" },
|
|
334
431
|
{ name: "Repeater Downlinks", mhz: [29620, 29700] },
|
|
335
|
-
{ name: "Australia", mhz: [28e3, 29700], mode: null, countries: ["au"] }
|
|
432
|
+
{ name: "Australia", mhz: [28e3, 29700], mode: null, countries: ["au"] },
|
|
433
|
+
{ name: "CZ: Class A only", mhz: [28e3, 28050], exceptLevels: ["cz:N"] },
|
|
434
|
+
{ name: "CZ: Class A only", mhz: [28400, 29700], exceptLevels: ["cz:N"] },
|
|
435
|
+
{ name: "UA Entry level (student), Novice: CW/PHONE only", mhz: [28675, 28685], levels: ["ua:C", "ua:B"], superModes: ["CW", "PHONE"] },
|
|
436
|
+
{ name: "UA: Novice, Higher qualification (HAREC) only", mhz: [29300, 29520], exceptLevels: ["ua:C"] },
|
|
437
|
+
{ name: "US Novice, Technician: CW/PHONE only", mhz: [28300, 28500], levels: ["us:N", "us:T"], superModes: ["CW", "PHONE"] },
|
|
438
|
+
{ name: "US: General, Advanced, Amateur Extra only", mhz: [28500, 29700], exceptLevels: ["us:N", "us:T"] }
|
|
336
439
|
]
|
|
337
440
|
},
|
|
441
|
+
"8m": {
|
|
442
|
+
mhz: [40660, 40700],
|
|
443
|
+
exceptLevels: ["be:C", "be:B", "si:N"],
|
|
444
|
+
segments: []
|
|
445
|
+
},
|
|
338
446
|
"6m": {
|
|
339
447
|
mhz: [5e4, 54e3],
|
|
448
|
+
exceptLevels: ["at:3", "at:4", "au:F", "be:C", "bg:2", "ch:HB3", "cl:ASP", "cz:N", "de:N", "de:E", "hr:P", "hu:KEZDO", "hu:NOVICE", "id:SIAGA", "nl:N", "rs:C", "rs:B", "ua:C", "ua:B", "us:N"],
|
|
340
449
|
segments: [
|
|
341
450
|
{ name: "Beacon project Reg1", mhz: [5e4, 50010], mode: null, regions: [1] },
|
|
342
451
|
{ name: "Beacon project Reg2", mhz: [50010, 50020], mode: null, regions: [2] },
|
|
@@ -352,11 +461,13 @@ var bandPlans_default = {
|
|
|
352
461
|
{ name: "FT8", mhz: [50313, 50316], mode: "FT8", priority: 100 },
|
|
353
462
|
{ name: "FT4", mhz: [50318, 50321], mode: "FT4", priority: 100 },
|
|
354
463
|
{ name: "FT8", mhz: [50323, 50326], mode: "FT8", priority: 100 },
|
|
355
|
-
{ name: "Australia", mhz: [5e4, 54e3], mode: null, countries: ["au"] }
|
|
464
|
+
{ name: "Australia", mhz: [5e4, 54e3], mode: null, countries: ["au"] },
|
|
465
|
+
{ name: "AR Novice: CW only", mhz: [51e3, 51100], levels: ["ar:N"], superModes: ["CW"] }
|
|
356
466
|
]
|
|
357
467
|
},
|
|
358
468
|
"4m": {
|
|
359
|
-
mhz: [
|
|
469
|
+
mhz: [69887.5, 70512.5],
|
|
470
|
+
exceptLevels: ["be:C", "be:B", "bg:2", "ch:HB3", "hr:P", "hu:KEZDO", "hu:NOVICE", "nl:N", "no:begrenset", "rs:C", "rs:B"],
|
|
360
471
|
segments: [
|
|
361
472
|
{ name: "Beacons only Reg1", mhz: [70090, 70100], mode: "CW", regions: [1] },
|
|
362
473
|
{ name: "CW Reg1", mhz: [7e4, 70090], mode: "CW", regions: [1] },
|
|
@@ -369,6 +480,7 @@ var bandPlans_default = {
|
|
|
369
480
|
},
|
|
370
481
|
"2m": {
|
|
371
482
|
mhz: [144e3, 148e3],
|
|
483
|
+
exceptLevels: ["us:N"],
|
|
372
484
|
segments: [
|
|
373
485
|
{ name: "CW", mhz: [144e3, 144100], mode: "CW" },
|
|
374
486
|
{ name: "Satellite downlink Reg1", mhz: [144e3, 144025], mode: null, regions: [1] },
|
|
@@ -383,19 +495,26 @@ var bandPlans_default = {
|
|
|
383
495
|
{ name: "Reg1", mhz: [144500, 144794], mode: null, regions: [1] },
|
|
384
496
|
{ name: "FM Satellite Reg1", mhz: [145194, 145206], mode: "FM", regions: [1] },
|
|
385
497
|
{ name: "FM Reg1", mhz: [145206, 145563], mode: "FM", regions: [1] },
|
|
386
|
-
{ name: "Out of band Reg1", mhz: [146e3, 148e3], mode: false, regions: [1] }
|
|
498
|
+
{ name: "Out of band Reg1", mhz: [146e3, 148e3], mode: false, regions: [1] },
|
|
499
|
+
{ name: "HU: CEPT (full) only", mhz: [144400, 144500], exceptLevels: ["hu:KEZDO", "hu:NOVICE"] },
|
|
500
|
+
{ name: "HU: CEPT (full) only", mhz: [145562.5, 145794], exceptLevels: ["hu:KEZDO", "hu:NOVICE"] },
|
|
501
|
+
{ name: "UA: Higher qualification (HAREC) only", mhz: [144e3, 144035], exceptLevels: ["ua:C", "ua:B"] }
|
|
387
502
|
]
|
|
388
503
|
},
|
|
389
504
|
"1.25m": {
|
|
390
|
-
mhz: [
|
|
505
|
+
mhz: [219e3, 225e3],
|
|
506
|
+
exceptLevels: ["cl:ASP"],
|
|
391
507
|
segments: [
|
|
392
508
|
{ name: "CW", mhz: [222e3, 222070], mode: "CW" },
|
|
393
509
|
{ name: "Phone", mhz: [222070, 222150], mode: "SSB", submode: "USB" },
|
|
394
|
-
{ name: "FM", mhz: [222200, 225e3], mode: "FM" }
|
|
510
|
+
{ name: "FM", mhz: [222200, 225e3], mode: "FM" },
|
|
511
|
+
{ name: "AR Novice: DATA only", mhz: [220500, 221e3], levels: ["ar:N"], superModes: ["DATA"] },
|
|
512
|
+
{ name: "US: Technician, General, Advanced, Amateur Extra only", mhz: [219e3, 22e4], regions: [2], exceptLevels: ["us:N"] }
|
|
395
513
|
]
|
|
396
514
|
},
|
|
397
515
|
"70cm": {
|
|
398
516
|
mhz: [42e4, 45e4],
|
|
517
|
+
exceptLevels: ["cl:ASP", "se:insteg", "us:N"],
|
|
399
518
|
segments: [
|
|
400
519
|
{ name: "Out of band Reg1", mhz: [42e4, 43e4], mode: false, regions: [1] },
|
|
401
520
|
{ name: "CW", mhz: [432e3, 432100], mode: "CW" },
|
|
@@ -404,14 +523,90 @@ var bandPlans_default = {
|
|
|
404
523
|
{ name: "Phone", mhz: [432100, 432400], mode: "SSB", submode: "USB", regions: [1] },
|
|
405
524
|
{ name: "FM", mhz: [42e4, 45e4], mode: "FM" },
|
|
406
525
|
{ name: "FM Reg1", mhz: [433400, 433575], mode: "FM", regions: [1] },
|
|
407
|
-
{ name: "Out of band Reg1", mhz: [44e4, 45e4], mode: false, regions: [1] }
|
|
526
|
+
{ name: "Out of band Reg1", mhz: [44e4, 45e4], mode: false, regions: [1] },
|
|
527
|
+
{ name: "HU: CEPT (full) only", mhz: [431975, 432e3], exceptLevels: ["hu:KEZDO", "hu:NOVICE"] },
|
|
528
|
+
{ name: "HU: CEPT (full) only", mhz: [432400, 432500], exceptLevels: ["hu:KEZDO", "hu:NOVICE"] },
|
|
529
|
+
{ name: "HU: CEPT (full) only", mhz: [438e3, 44e4], exceptLevels: ["hu:KEZDO", "hu:NOVICE"] },
|
|
530
|
+
{ name: "UA: Higher qualification (HAREC) only", mhz: [432e3, 432025], exceptLevels: ["ua:C", "ua:B"] }
|
|
408
531
|
]
|
|
409
532
|
},
|
|
410
533
|
"33cm": {
|
|
411
534
|
mhz: [902e3, 928e3],
|
|
412
535
|
segments: [
|
|
413
|
-
{ name: "FM", mhz: [927e3, 928e3], mode: "FM" }
|
|
536
|
+
{ name: "FM", mhz: [927e3, 928e3], mode: "FM" },
|
|
537
|
+
{ name: "US: Technician, General, Advanced, Amateur Extra only", mhz: [902e3, 928e3], regions: [2], exceptLevels: ["us:N"] }
|
|
538
|
+
]
|
|
539
|
+
},
|
|
540
|
+
"23cm": {
|
|
541
|
+
mhz: [124e4, 1325e3],
|
|
542
|
+
exceptLevels: ["at:3", "at:4", "au:F", "be:C", "be:B", "bg:2", "ch:HB3", "cl:ASP", "de:N", "gb:F", "kr:3P", "kr:3T", "my:C", "my:B", "nl:N", "no:begrenset", "rs:C", "rs:B", "se:insteg", "si:N"],
|
|
543
|
+
segments: [
|
|
544
|
+
{ name: "HU: CEPT (full) only", mhz: [124e4, 1290994], exceptLevels: ["hu:KEZDO", "hu:NOVICE"] },
|
|
545
|
+
{ name: "HU Beginner (Kezd\u0151), CEPT Novice: PHONE only", mhz: [1290994, 1291494], levels: ["hu:KEZDO", "hu:NOVICE"], superModes: ["PHONE"] },
|
|
546
|
+
{ name: "HU: CEPT (full) only", mhz: [1291494, 1297494], exceptLevels: ["hu:KEZDO", "hu:NOVICE"] },
|
|
547
|
+
{ name: "HU Beginner (Kezd\u0151), CEPT Novice: PHONE only", mhz: [1297494, 1298e3], levels: ["hu:KEZDO", "hu:NOVICE"], superModes: ["PHONE"] },
|
|
548
|
+
{ name: "HU: CEPT (full) only", mhz: [1298e3, 13e5], exceptLevels: ["hu:KEZDO", "hu:NOVICE"] },
|
|
549
|
+
{ name: "US: Technician, General, Advanced, Amateur Extra only", mhz: [124e4, 127e4], exceptLevels: ["us:N"] },
|
|
550
|
+
{ name: "US: Technician, General, Advanced, Amateur Extra only", mhz: [1295e3, 13e5], exceptLevels: ["us:N"] }
|
|
551
|
+
]
|
|
552
|
+
},
|
|
553
|
+
"13cm": {
|
|
554
|
+
mhz: [23e5, 245e4],
|
|
555
|
+
exceptLevels: ["at:3", "at:4", "au:F", "be:C", "be:B", "ch:HB3", "cl:ASP", "de:N", "dk:D", "hu:KEZDO", "hu:NOVICE", "kr:3P", "kr:3T", "my:C", "my:B", "nl:N", "se:insteg", "si:N", "us:N"],
|
|
556
|
+
segments: [
|
|
557
|
+
{ name: "AU: Advanced only", mhz: [23e5, 2302e3], exceptLevels: ["au:S"] },
|
|
558
|
+
{ name: "GB: Intermediate, Full only", mhz: [231e4, 235e4], exceptLevels: ["gb:F"] },
|
|
559
|
+
{ name: "GB: Intermediate, Full only", mhz: [239e4, 24e5], exceptLevels: ["gb:F"] }
|
|
560
|
+
]
|
|
561
|
+
},
|
|
562
|
+
"9cm": {
|
|
563
|
+
mhz: [33e5, 36e5],
|
|
564
|
+
exceptLevels: ["at:3", "at:4", "au:F", "au:S", "cl:ASP", "cl:N", "cn:A", "de:N", "dk:D", "gb:F", "hr:P", "my:C", "my:B", "nl:N", "no:begrenset", "si:N"],
|
|
565
|
+
segments: []
|
|
566
|
+
},
|
|
567
|
+
"6cm": {
|
|
568
|
+
mhz: [565e4, 5925e3],
|
|
569
|
+
exceptLevels: ["at:3", "at:4", "au:F", "be:C", "be:B", "ch:HB3", "cl:ASP", "cn:A", "de:N", "dk:D", "hu:KEZDO", "hu:NOVICE", "my:C", "my:B", "nl:N", "no:begrenset", "se:insteg", "si:N", "us:N"],
|
|
570
|
+
segments: [
|
|
571
|
+
{ name: "GB: Intermediate, Full only", mhz: [583e4, 585e4], exceptLevels: ["gb:F"] },
|
|
572
|
+
{ name: "UA: Entry level (student), Higher qualification (HAREC) only", mhz: [566e4, 567e4], exceptLevels: ["ua:B"] },
|
|
573
|
+
{ name: "UA: Higher qualification (HAREC) only", mhz: [583e4, 585e4], exceptLevels: ["ua:C", "ua:B"] }
|
|
414
574
|
]
|
|
575
|
+
},
|
|
576
|
+
"3cm": {
|
|
577
|
+
mhz: [1e7, 105e5],
|
|
578
|
+
exceptLevels: ["at:3", "at:4", "au:F", "au:S", "be:C", "be:B", "ch:HB3", "cl:ASP", "cl:N", "cn:A", "de:N", "dk:D", "hu:KEZDO", "hu:NOVICE", "id:SIAGA", "kr:3P", "kr:3T", "my:C", "my:B", "nl:N", "pl:1", "se:insteg", "si:N", "us:N"],
|
|
579
|
+
segments: []
|
|
580
|
+
},
|
|
581
|
+
"1.25cm": {
|
|
582
|
+
mhz: [24e6, 2425e4],
|
|
583
|
+
exceptLevels: ["at:3", "at:4", "au:F", "au:S", "be:C", "be:B", "ch:HB3", "cl:ASP", "cl:N", "cn:A", "de:N", "dk:D", "gb:F", "hu:KEZDO", "hu:NOVICE", "id:SIAGA", "kr:4", "kr:3P", "kr:3T", "my:C", "my:B", "nl:N", "no:begrenset", "se:insteg", "si:N", "us:N"],
|
|
584
|
+
segments: []
|
|
585
|
+
},
|
|
586
|
+
"6mm": {
|
|
587
|
+
mhz: [47e6, 485e5],
|
|
588
|
+
exceptLevels: ["at:3", "at:4", "au:F", "au:S", "be:C", "be:B", "ch:HB3", "cn:A", "de:N", "gb:F", "hu:KEZDO", "hu:NOVICE", "id:SIAGA", "kr:4", "kr:3P", "kr:3T", "my:C", "my:B", "nl:N", "si:N", "us:N"],
|
|
589
|
+
segments: []
|
|
590
|
+
},
|
|
591
|
+
"4mm": {
|
|
592
|
+
mhz: [755e5, 815e5],
|
|
593
|
+
exceptLevels: ["at:3", "at:4", "au:F", "au:S", "be:C", "be:B", "ch:HB3", "cn:A", "de:N", "gb:F", "hu:KEZDO", "hu:NOVICE", "id:SIAGA", "kr:4", "kr:3P", "kr:3T", "my:C", "my:B", "nl:N", "si:N", "us:N"],
|
|
594
|
+
segments: []
|
|
595
|
+
},
|
|
596
|
+
"2.5mm": {
|
|
597
|
+
mhz: [11998e4, 123e6],
|
|
598
|
+
exceptLevels: ["at:3", "at:4", "au:F", "au:S", "be:C", "be:B", "ch:HB3", "de:N", "gb:F", "hu:KEZDO", "hu:NOVICE", "id:SIAGA", "nl:N", "si:N", "us:N"],
|
|
599
|
+
segments: []
|
|
600
|
+
},
|
|
601
|
+
"2mm": {
|
|
602
|
+
mhz: [134e6, 149e6],
|
|
603
|
+
exceptLevels: ["at:3", "at:4", "au:F", "au:S", "be:C", "be:B", "ch:HB3", "cn:A", "de:N", "gb:F", "hu:KEZDO", "hu:NOVICE", "id:SIAGA", "kr:4", "kr:3P", "kr:3T", "nl:N", "si:N", "us:N"],
|
|
604
|
+
segments: []
|
|
605
|
+
},
|
|
606
|
+
"1mm": {
|
|
607
|
+
mhz: [241e6, 25e7],
|
|
608
|
+
exceptLevels: ["at:3", "at:4", "au:F", "au:S", "be:C", "be:B", "ch:HB3", "cn:A", "de:N", "gb:F", "hu:KEZDO", "hu:NOVICE", "kr:4", "kr:3P", "kr:3T", "my:C", "my:B", "nl:N", "si:N", "us:N"],
|
|
609
|
+
segments: []
|
|
415
610
|
}
|
|
416
611
|
}
|
|
417
612
|
};
|
|
@@ -578,9 +773,12 @@ function superModeForMode(mode) {
|
|
|
578
773
|
}
|
|
579
774
|
}
|
|
580
775
|
var bandPlansData = bandPlans_default;
|
|
776
|
+
function isLicenseSegment(segment) {
|
|
777
|
+
return Boolean(segment.exceptLevels || segment.levels);
|
|
778
|
+
}
|
|
581
779
|
var AllSegments = Object.keys(bandPlansData.bands).reduce((segments, band) => {
|
|
582
780
|
return segments.concat(
|
|
583
|
-
bandPlansData.bands[band].segments.map((segment) => {
|
|
781
|
+
bandPlansData.bands[band].segments.filter((segment) => !isLicenseSegment(segment)).map((segment) => {
|
|
584
782
|
const mhz = Array.isArray(segment.mhz) && segment.mhz.length >= 2 ? [segment.mhz[0], segment.mhz[1]] : [0, 0];
|
|
585
783
|
return {
|
|
586
784
|
name: segment.name,
|
|
@@ -623,6 +821,540 @@ function modeForFrequency(frequency, options = {}) {
|
|
|
623
821
|
return sortedSegments[0]?.mode;
|
|
624
822
|
}
|
|
625
823
|
|
|
626
|
-
|
|
824
|
+
// src/data/licenseLevels.json
|
|
825
|
+
var licenseLevels_default = {
|
|
826
|
+
jurisdictions: [
|
|
827
|
+
{
|
|
828
|
+
key: "ar",
|
|
829
|
+
name: "Argentina",
|
|
830
|
+
regulator: "ENACOM",
|
|
831
|
+
rules: "Resoluci\xF3n ENACOM 3635-E/2017 (Reglamento General de Radioaficionados, Anexo A band plan) as amended by Res. ENACOM 1186/2024",
|
|
832
|
+
term: "License Category",
|
|
833
|
+
termLocal: "categor\xEDa",
|
|
834
|
+
entities: ["LU"],
|
|
835
|
+
levels: [
|
|
836
|
+
{ code: "N", name: "Novice", nameLocal: "Novicio", tier: "intermediate", aliases: ["Inicial"], maxPowerW: 200 },
|
|
837
|
+
{ code: "G", name: "General", tier: "intermediate", aliases: ["Intermedia"], maxPowerW: 1e3 },
|
|
838
|
+
{ code: "S", name: "Superior", tier: "full", maxPowerW: 1500 },
|
|
839
|
+
{ code: "E", name: "Special", nameLocal: "Especial", tier: "full", maxPowerW: 1500 }
|
|
840
|
+
]
|
|
841
|
+
},
|
|
842
|
+
{
|
|
843
|
+
key: "at",
|
|
844
|
+
name: "Austria",
|
|
845
|
+
regulator: "Fernmeldeb\xFCros (Fernmeldebeh\xF6rde, Bundesministerium f\xFCr Finanzen)",
|
|
846
|
+
term: "License Class",
|
|
847
|
+
termLocal: "Bewilligungsklasse",
|
|
848
|
+
entities: ["OE"],
|
|
849
|
+
levels: [
|
|
850
|
+
{ code: "3", name: "Class 3", nameLocal: "Bewilligungsklasse 3", tier: "basic", maxPowerW: 100 },
|
|
851
|
+
{ code: "4", name: "Class 4", nameLocal: "Bewilligungsklasse 4", tier: "intermediate", maxPowerW: 100 },
|
|
852
|
+
{ code: "1", name: "Class 1", nameLocal: "Bewilligungsklasse 1", tier: "full", maxPowerW: 1e3 }
|
|
853
|
+
]
|
|
854
|
+
},
|
|
855
|
+
{
|
|
856
|
+
key: "au",
|
|
857
|
+
name: "Australia",
|
|
858
|
+
regulator: "ACMA",
|
|
859
|
+
term: "Licence Level",
|
|
860
|
+
termLocal: "qualification",
|
|
861
|
+
entities: ["VK", "VK9X", "VK9C", "VK9N", "VK9L", "VK9W", "VK9M", "VK0H", "VK0M"],
|
|
862
|
+
levels: [
|
|
863
|
+
{ code: "F", name: "Foundation", nameLocal: "ACMA recognition certificate (Foundation)", tier: "intermediate", maxPowerW: 10 },
|
|
864
|
+
{ code: "S", name: "Standard", nameLocal: "ACMA recognition certificate (Standard)", tier: "intermediate", maxPowerW: 100 },
|
|
865
|
+
{ code: "A", name: "Advanced", nameLocal: "ACMA recognition certificate (Advanced)", tier: "full", maxPowerW: 400 }
|
|
866
|
+
],
|
|
867
|
+
callsigns: [
|
|
868
|
+
{ pattern: "^VK[0-9][A-Z]{2}$", level: "A", entities: ["VK"] }
|
|
869
|
+
]
|
|
870
|
+
},
|
|
871
|
+
{
|
|
872
|
+
key: "be",
|
|
873
|
+
name: "Belgium",
|
|
874
|
+
regulator: "BIPT/IBPT",
|
|
875
|
+
term: "Licence Class",
|
|
876
|
+
termLocal: "certificat d'op\xE9rateur de classe A/B/C",
|
|
877
|
+
entities: ["ON"],
|
|
878
|
+
levels: [
|
|
879
|
+
{ code: "C", name: "Entry (Basic)", nameLocal: "Certificat d'op\xE9rateur de classe C (ex licence de base)", tier: "intermediate", maxPowerW: 25 },
|
|
880
|
+
{ code: "B", name: "Novice", nameLocal: "Certificat d'op\xE9rateur de classe B", tier: "intermediate", maxPowerW: 100 },
|
|
881
|
+
{ code: "A", name: "HAREC", nameLocal: "Certificat d'op\xE9rateur de classe A (ex certificat HAREC)", tier: "full", maxPowerW: 1500 }
|
|
882
|
+
],
|
|
883
|
+
callsigns: [
|
|
884
|
+
{ pattern: "^ON3[A-Z]{2,3}$", level: "C" },
|
|
885
|
+
{ pattern: "^ON2[A-Z]{2,3}$", level: "B", atLeast: true },
|
|
886
|
+
{ pattern: "^ON[14-9][A-Z]{1,3}$", level: "A" }
|
|
887
|
+
]
|
|
888
|
+
},
|
|
889
|
+
{
|
|
890
|
+
key: "bg",
|
|
891
|
+
name: "Bulgaria",
|
|
892
|
+
regulator: "CRC (\u041A\u043E\u043C\u0438\u0441\u0438\u044F \u0437\u0430 \u0440\u0435\u0433\u0443\u043B\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0441\u044A\u043E\u0431\u0449\u0435\u043D\u0438\u044F\u0442\u0430)",
|
|
893
|
+
term: "License Class",
|
|
894
|
+
termLocal: "\u0440\u0430\u0434\u0438\u043E\u043B\u044E\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u0438 \u043A\u043B\u0430\u0441",
|
|
895
|
+
entities: ["LZ"],
|
|
896
|
+
levels: [
|
|
897
|
+
{ code: "2", name: "Class 2", nameLocal: "\u041A\u043B\u0430\u0441 2", tier: "basic", maxPowerW: 5, superModes: ["PHONE", "DATA"] },
|
|
898
|
+
{ code: "1", name: "Class 1", nameLocal: "\u041A\u043B\u0430\u0441 1", tier: "full", maxPowerW: 350 }
|
|
899
|
+
],
|
|
900
|
+
callsigns: [
|
|
901
|
+
{ pattern: "^LZ[0-9][A-Z]{2}$", level: "1" }
|
|
902
|
+
]
|
|
903
|
+
},
|
|
904
|
+
{
|
|
905
|
+
key: "br",
|
|
906
|
+
name: "Brazil",
|
|
907
|
+
regulator: "Anatel",
|
|
908
|
+
rules: "Res. Anatel 777/2025 (RGST) Art. 277 (classes); Ato SOR 926/2024 (bands/power by class); Ato 3448/2026 (operations, exams, callsigns)",
|
|
909
|
+
term: "License Class",
|
|
910
|
+
termLocal: "classe",
|
|
911
|
+
entities: ["PY", "PY0F", "PY0S", "PY0T"],
|
|
912
|
+
levels: [
|
|
913
|
+
{ code: "C", name: "Class C", nameLocal: "Classe C", tier: "intermediate", aliases: ["Classe D"], maxPowerW: 100 },
|
|
914
|
+
{ code: "B", name: "Class B", nameLocal: "Classe B", tier: "intermediate", maxPowerW: 1e3 },
|
|
915
|
+
{ code: "A", name: "Class A", nameLocal: "Classe A", tier: "full", maxPowerW: 1500 }
|
|
916
|
+
],
|
|
917
|
+
callsigns: [
|
|
918
|
+
{ pattern: "^PU[0-9][A-Z]{3}$", level: "C" },
|
|
919
|
+
{ pattern: "^PV2[K-Y][A-Z]{2}$", level: "C" }
|
|
920
|
+
]
|
|
921
|
+
},
|
|
922
|
+
{
|
|
923
|
+
key: "ca",
|
|
924
|
+
name: "Canada",
|
|
925
|
+
regulator: "ISED",
|
|
926
|
+
rules: "RBR-4 Issue 3 (July 2022); RIC-3 Issue 5 (March 2022); Radiocommunication Regulations",
|
|
927
|
+
term: "Qualification",
|
|
928
|
+
termLocal: "qualification",
|
|
929
|
+
entities: ["VE"],
|
|
930
|
+
levels: [
|
|
931
|
+
{ code: "B", name: "Basic", nameLocal: "Basic Qualification / comp\xE9tence de base", tier: "basic", maxPowerW: 560 },
|
|
932
|
+
{ code: "B/H", name: "Basic with Honours", nameLocal: "Basic Qualification with Honours / comp\xE9tence de base re\xE7ue avec distinction", tier: "full", maxPowerW: 560 },
|
|
933
|
+
{ code: "B+5", name: "Basic + Morse (5 wpm)", nameLocal: "Morse Code Qualification / comp\xE9tence en code Morse", tier: "full", maxPowerW: 560 },
|
|
934
|
+
{ code: "B+A", name: "Basic + Advanced", nameLocal: "Advanced Qualification / comp\xE9tence sup\xE9rieure", tier: "full", maxPowerW: 2250 }
|
|
935
|
+
]
|
|
936
|
+
},
|
|
937
|
+
{
|
|
938
|
+
key: "ch",
|
|
939
|
+
name: "Switzerland",
|
|
940
|
+
regulator: "OFCOM/BAKOM",
|
|
941
|
+
term: "Licence Class",
|
|
942
|
+
termLocal: "F\xE4higkeitszeugnis (DE) / certificat de capacit\xE9 (FR); formerly Konzession",
|
|
943
|
+
entities: ["HB"],
|
|
944
|
+
levels: [
|
|
945
|
+
{ code: "HB3", name: "Novice", nameLocal: "Einsteigerausweis f\xFCr Funkamateurinnen und Funkamateure (F\xE4higkeitszeugnis Novice)", tier: "intermediate", maxPowerW: 100 },
|
|
946
|
+
{ code: "HB9", name: "Full (CEPT)", nameLocal: "F\xE4higkeitszeugnis f\xFCr den Amateurfunk (CEPT)", tier: "full", maxPowerW: 1e3 }
|
|
947
|
+
],
|
|
948
|
+
callsigns: [
|
|
949
|
+
{ pattern: "^HB3[A-Z]{3}$", level: "HB3" },
|
|
950
|
+
{ pattern: "^HB9[A-Z]{3}$", level: "HB9" }
|
|
951
|
+
]
|
|
952
|
+
},
|
|
953
|
+
{
|
|
954
|
+
key: "cl",
|
|
955
|
+
name: "Chile",
|
|
956
|
+
regulator: "SUBTEL",
|
|
957
|
+
rules: "DS 523/2006 (Reglamento del Servicio de Aficionados a las Radiocomunicaciones) as amended by DS 213/2012; Res. Exenta 1228/2008 + 175/2014 (callsigns); DS 127/2006 + DS 192/2023 (band plan)",
|
|
958
|
+
term: "License Category",
|
|
959
|
+
termLocal: "categor\xEDa",
|
|
960
|
+
entities: ["CE", "CE0Y", "CE0X", "CE0Z"],
|
|
961
|
+
levels: [
|
|
962
|
+
{ code: "ASP", name: "Aspirant", nameLocal: "Aspirante", tier: "intermediate", maxPowerW: 100 },
|
|
963
|
+
{ code: "N", name: "Novice", nameLocal: "Novicio", tier: "intermediate", maxPowerW: 200 },
|
|
964
|
+
{ code: "G", name: "General", tier: "full", maxPowerW: 1200 },
|
|
965
|
+
{ code: "S", name: "Superior", tier: "full", maxPowerW: 1200 }
|
|
966
|
+
],
|
|
967
|
+
callsigns: [
|
|
968
|
+
{ pattern: "^CD[0-9][A-Z]{3}$", level: "ASP" },
|
|
969
|
+
{ pattern: "^CA[0-9][A-Z]{3}$", level: "N" },
|
|
970
|
+
{ pattern: "^CE[0-9][A-Z]{1,3}$", level: "G", entities: ["CE"] },
|
|
971
|
+
{ pattern: "^XQ[0-9][A-Z]{1,3}$", level: "S" }
|
|
972
|
+
]
|
|
973
|
+
},
|
|
974
|
+
{
|
|
975
|
+
key: "cn",
|
|
976
|
+
name: "China",
|
|
977
|
+
regulator: "MIIT (\u5DE5\u4E1A\u548C\u4FE1\u606F\u5316\u90E8)",
|
|
978
|
+
term: "Operator Class",
|
|
979
|
+
termLocal: "\u4E1A\u4F59\u65E0\u7EBF\u7535\u53F0\u64CD\u4F5C\u6280\u672F\u80FD\u529B\u7C7B\u522B",
|
|
980
|
+
entities: ["BY"],
|
|
981
|
+
levels: [
|
|
982
|
+
{ code: "A", name: "Class A", nameLocal: "A\u7C7B", tier: "basic", maxPowerW: 25 },
|
|
983
|
+
{ code: "B", name: "Class B", nameLocal: "B\u7C7B", tier: "full", maxPowerW: 15 },
|
|
984
|
+
{ code: "B-pre2024", name: "Class B (obtained before 2024-03-01)", nameLocal: "B\u7C7B (2024\u5E743\u67081\u65E5\u524D\u53D6\u5F97)", tier: "full", legacy: true, maxPowerW: 100 },
|
|
985
|
+
{ code: "C", name: "Class C", nameLocal: "C\u7C7B", tier: "full", maxPowerW: 1e3 }
|
|
986
|
+
]
|
|
987
|
+
},
|
|
988
|
+
{
|
|
989
|
+
key: "cz",
|
|
990
|
+
name: "Czech Republic",
|
|
991
|
+
regulator: "\u010CT\xDA (\u010Cesk\xFD telekomunika\u010Dn\xED \xFA\u0159ad)",
|
|
992
|
+
term: "Operator Class",
|
|
993
|
+
termLocal: "t\u0159\xEDda oper\xE1tora",
|
|
994
|
+
entities: ["OK"],
|
|
995
|
+
levels: [
|
|
996
|
+
{ code: "N", name: "Class N (Novice)", nameLocal: "Oper\xE1torsk\xE1 t\u0159\xEDda N", tier: "intermediate", maxPowerW: 10 },
|
|
997
|
+
{ code: "A", name: "Class A", nameLocal: "Oper\xE1torsk\xE1 t\u0159\xEDda A", tier: "full", maxPowerW: 750 }
|
|
998
|
+
],
|
|
999
|
+
callsigns: [
|
|
1000
|
+
{ pattern: "^OK9[A-Z]{3}$", level: "N", atLeast: true },
|
|
1001
|
+
{ pattern: "^OK[1-7][A-Z]{2,3}$", level: "A" }
|
|
1002
|
+
]
|
|
1003
|
+
},
|
|
1004
|
+
{
|
|
1005
|
+
key: "de",
|
|
1006
|
+
name: "Germany",
|
|
1007
|
+
regulator: "BNetzA (Bundesnetzagentur)",
|
|
1008
|
+
term: "License Class",
|
|
1009
|
+
termLocal: "Klasse",
|
|
1010
|
+
entities: ["DL"],
|
|
1011
|
+
levels: [
|
|
1012
|
+
{ code: "N", name: "Class N", nameLocal: "Klasse N", tier: "basic", maxPowerW: 10 },
|
|
1013
|
+
{ code: "E", name: "Class E", nameLocal: "Klasse E", tier: "intermediate", maxPowerW: 100 },
|
|
1014
|
+
{ code: "A", name: "Class A", nameLocal: "Klasse A", tier: "full", maxPowerW: 750 }
|
|
1015
|
+
],
|
|
1016
|
+
callsigns: [
|
|
1017
|
+
{ pattern: "^DN9[A-Z]{2,3}$", level: "N", atLeast: true },
|
|
1018
|
+
{ pattern: "^(DO[1-9]|DA6)[A-Z]{2,3}$", level: "E", atLeast: true },
|
|
1019
|
+
{ pattern: "^(DA[12]|DB[1-9]|DC[0-9]|DD[0-9]|DF[1-9]|DG[0-9]|DH[0-9]|DJ[0-9]|DK[1-9]|DL[1-9]|DM[1-9])[A-Z]{1,3}$", level: "A" }
|
|
1020
|
+
]
|
|
1021
|
+
},
|
|
1022
|
+
{
|
|
1023
|
+
key: "dk",
|
|
1024
|
+
name: "Denmark",
|
|
1025
|
+
regulator: "Digitaliseringsstyrelsen (formerly SDFI)",
|
|
1026
|
+
rules: "BEK nr 499 af 29/05/2026 (in force 2026-07-01), Bilag 4",
|
|
1027
|
+
term: "Certificate category",
|
|
1028
|
+
termLocal: "certifikat, kategori",
|
|
1029
|
+
entities: ["OZ"],
|
|
1030
|
+
levels: [
|
|
1031
|
+
{ code: "D", name: "Category D", nameLocal: "Certifikat kategori D", tier: "basic", maxPowerW: 50 },
|
|
1032
|
+
{ code: "B", name: "Category B", nameLocal: "Certifikat kategori B", tier: "full", maxPowerW: 100 },
|
|
1033
|
+
{ code: "A", name: "Category A", nameLocal: "Certifikat kategori A", tier: "full", aliases: ["Certifikat kategori C"], maxPowerW: 1e3 }
|
|
1034
|
+
]
|
|
1035
|
+
},
|
|
1036
|
+
{
|
|
1037
|
+
key: "gb",
|
|
1038
|
+
name: "United Kingdom",
|
|
1039
|
+
regulator: "Ofcom",
|
|
1040
|
+
term: "Licence Class",
|
|
1041
|
+
termLocal: "licence class",
|
|
1042
|
+
entities: ["G", "GM", "GW", "GI"],
|
|
1043
|
+
levels: [
|
|
1044
|
+
{ code: "F", name: "Foundation", nameLocal: "Foundation Licence", tier: "intermediate", maxPowerW: 25 },
|
|
1045
|
+
{ code: "I", name: "Intermediate", nameLocal: "Intermediate Licence", tier: "intermediate", maxPowerW: 100 },
|
|
1046
|
+
{ code: "FULL", name: "Full", nameLocal: "Full Licence", tier: "full", maxPowerW: 1e3 }
|
|
1047
|
+
],
|
|
1048
|
+
callsigns: [
|
|
1049
|
+
{ pattern: "^M[A-Z]?[367][A-Z]{3}$", level: "F" },
|
|
1050
|
+
{ pattern: "^M[A-Z]?[89][A-Z]{3}$", level: "I" },
|
|
1051
|
+
{ pattern: "^2[A-Z][01][A-Z]{3}$", level: "I" },
|
|
1052
|
+
{ pattern: "^G[A-Z]?[0-8][A-Z]{2,3}$", level: "FULL" },
|
|
1053
|
+
{ pattern: "^M[A-Z]?[015][A-Z]{2,3}$", level: "FULL" }
|
|
1054
|
+
]
|
|
1055
|
+
},
|
|
1056
|
+
{
|
|
1057
|
+
key: "hr",
|
|
1058
|
+
name: "Croatia",
|
|
1059
|
+
regulator: "HAKOM (Hrvatska regulatorna agencija za mre\u017Ene djelatnosti)",
|
|
1060
|
+
term: "Operator Class",
|
|
1061
|
+
termLocal: "radioamaterski razred",
|
|
1062
|
+
entities: ["9A"],
|
|
1063
|
+
levels: [
|
|
1064
|
+
{ code: "P", name: "Class P (Beginner)", nameLocal: "po\u010Detni\u010Dki P razred", tier: "intermediate", maxPowerW: 100 },
|
|
1065
|
+
{ code: "A", name: "Class A", nameLocal: "A razred", tier: "full", maxPowerW: 1500 }
|
|
1066
|
+
]
|
|
1067
|
+
},
|
|
1068
|
+
{
|
|
1069
|
+
key: "hu",
|
|
1070
|
+
name: "Hungary",
|
|
1071
|
+
regulator: "NMHH (Nemzeti M\xE9dia- \xE9s H\xEDrk\xF6zl\xE9si Hat\xF3s\xE1g)",
|
|
1072
|
+
term: "License Grade",
|
|
1073
|
+
termLocal: "enged\xE9ly fokozata",
|
|
1074
|
+
entities: ["HA"],
|
|
1075
|
+
levels: [
|
|
1076
|
+
{ code: "KEZDO", name: "Beginner (Kezd\u0151)", nameLocal: "Kezd\u0151 fokozat\xFA enged\xE9ly", tier: "intermediate", maxPowerW: 100 },
|
|
1077
|
+
{ code: "NOVICE", name: "CEPT Novice", nameLocal: "CEPT Novice fokozat\xFA enged\xE9ly", tier: "intermediate", maxPowerW: 200 },
|
|
1078
|
+
{ code: "CEPT", name: "CEPT (full)", nameLocal: "CEPT fokozat\xFA enged\xE9ly", tier: "full", maxPowerW: 1500 }
|
|
1079
|
+
]
|
|
1080
|
+
},
|
|
1081
|
+
{
|
|
1082
|
+
key: "id",
|
|
1083
|
+
name: "Indonesia",
|
|
1084
|
+
regulator: "Komdigi (formerly Kominfo), Ditjen SDPPI",
|
|
1085
|
+
term: "Licence Level",
|
|
1086
|
+
termLocal: "Tingkat IAR",
|
|
1087
|
+
entities: ["YB"],
|
|
1088
|
+
levels: [
|
|
1089
|
+
{ code: "SIAGA", name: "General", nameLocal: "Tingkat Siaga", tier: "intermediate", maxPowerW: 100 },
|
|
1090
|
+
{ code: "PENGGALANG", name: "Advanced", nameLocal: "Tingkat Penggalang", tier: "intermediate", maxPowerW: 500 },
|
|
1091
|
+
{ code: "PENEGAK", name: "Extra Class", nameLocal: "Tingkat Penegak", tier: "full", maxPowerW: 1e3 }
|
|
1092
|
+
],
|
|
1093
|
+
callsigns: [
|
|
1094
|
+
{ pattern: "^Y[DG][0-9][A-Z]{1,3}$", level: "SIAGA" },
|
|
1095
|
+
{ pattern: "^Y[CF][0-9][A-Z]{1,3}$", level: "PENGGALANG" },
|
|
1096
|
+
{ pattern: "^Y[BE][0-9][A-Z]{1,3}$", level: "PENEGAK" }
|
|
1097
|
+
]
|
|
1098
|
+
},
|
|
1099
|
+
{
|
|
1100
|
+
key: "jp",
|
|
1101
|
+
name: "Japan",
|
|
1102
|
+
regulator: "MIC (\u7DCF\u52D9\u7701)",
|
|
1103
|
+
term: "Operator Class",
|
|
1104
|
+
termLocal: "\u8CC7\u683C / \u7D1A",
|
|
1105
|
+
entities: ["JA", "JD/o", "JD/m"],
|
|
1106
|
+
levels: [
|
|
1107
|
+
{ code: "4", name: "4th Class", nameLocal: "\u7B2C\u56DB\u7D1A\u30A2\u30DE\u30C1\u30E5\u30A2\u7121\u7DDA\u6280\u58EB", tier: "intermediate", maxPowerW: 20, superModes: ["PHONE", "DATA"] },
|
|
1108
|
+
{ code: "3", name: "3rd Class", nameLocal: "\u7B2C\u4E09\u7D1A\u30A2\u30DE\u30C1\u30E5\u30A2\u7121\u7DDA\u6280\u58EB", tier: "intermediate", maxPowerW: 50 },
|
|
1109
|
+
{ code: "2", name: "2nd Class", nameLocal: "\u7B2C\u4E8C\u7D1A\u30A2\u30DE\u30C1\u30E5\u30A2\u7121\u7DDA\u6280\u58EB", tier: "full", maxPowerW: 200 },
|
|
1110
|
+
{ code: "1", name: "1st Class", nameLocal: "\u7B2C\u4E00\u7D1A\u30A2\u30DE\u30C1\u30E5\u30A2\u7121\u7DDA\u6280\u58EB", tier: "full", maxPowerW: 1e3 }
|
|
1111
|
+
]
|
|
1112
|
+
},
|
|
1113
|
+
{
|
|
1114
|
+
key: "kr",
|
|
1115
|
+
name: "Republic of Korea",
|
|
1116
|
+
regulator: "MSIT (\uACFC\uD559\uAE30\uC220\uC815\uBCF4\uD1B5\uC2E0\uBD80) / \uC911\uC559\uC804\uD30C\uAD00\uB9AC\uC18C; exams KCA",
|
|
1117
|
+
term: "Operator Class",
|
|
1118
|
+
termLocal: "\uC544\uB9C8\uCD94\uC5B4\uBB34\uC120\uAE30\uC0AC \uC790\uACA9 \uB4F1\uAE09",
|
|
1119
|
+
entities: ["HL"],
|
|
1120
|
+
levels: [
|
|
1121
|
+
{ code: "4", name: "4th Class", nameLocal: "\uC81C4\uAE09 \uC544\uB9C8\uCD94\uC5B4\uBB34\uC120\uAE30\uC0AC", tier: "basic", maxPowerW: 10, superModes: ["PHONE", "DATA"] },
|
|
1122
|
+
{ code: "3P", name: "3rd Class (Telephony)", nameLocal: "\uC81C3\uAE09 \uC544\uB9C8\uCD94\uC5B4\uBB34\uC120\uAE30\uC0AC(\uC804\uD654\uAE09)", tier: "intermediate", maxPowerW: 100, superModes: ["PHONE", "DATA"] },
|
|
1123
|
+
{ code: "3T", name: "3rd Class (Telegraphy)", nameLocal: "\uC81C3\uAE09 \uC544\uB9C8\uCD94\uC5B4\uBB34\uC120\uAE30\uC0AC(\uC804\uC2E0\uAE09)", tier: "intermediate", maxPowerW: 100 },
|
|
1124
|
+
{ code: "2", name: "2nd Class", nameLocal: "\uC81C2\uAE09 \uC544\uB9C8\uCD94\uC5B4\uBB34\uC120\uAE30\uC0AC", tier: "full", maxPowerW: 200 },
|
|
1125
|
+
{ code: "1", name: "1st Class", nameLocal: "\uC81C1\uAE09 \uC544\uB9C8\uCD94\uC5B4\uBB34\uC120\uAE30\uC0AC", tier: "full", maxPowerW: 1e3 }
|
|
1126
|
+
]
|
|
1127
|
+
},
|
|
1128
|
+
{
|
|
1129
|
+
key: "my",
|
|
1130
|
+
name: "Malaysia",
|
|
1131
|
+
regulator: "MCMC",
|
|
1132
|
+
term: "Licence Class",
|
|
1133
|
+
termLocal: "Kelas",
|
|
1134
|
+
entities: ["9M2", "9M6"],
|
|
1135
|
+
levels: [
|
|
1136
|
+
{ code: "C", name: "Class C", nameLocal: "Kelas C", tier: "basic", maxPowerW: 25, superModes: ["PHONE", "DATA"] },
|
|
1137
|
+
{ code: "B", name: "Class B", nameLocal: "Kelas B", tier: "intermediate", maxPowerW: 50 },
|
|
1138
|
+
{ code: "A", name: "Class A", nameLocal: "Kelas A", tier: "full", maxPowerW: 1e3 }
|
|
1139
|
+
],
|
|
1140
|
+
callsigns: [
|
|
1141
|
+
{ pattern: "^9W3[A-Z]{2,3}$", level: "C" },
|
|
1142
|
+
{ pattern: "^9W[268][A-Z]{2,3}$", level: "B" },
|
|
1143
|
+
{ pattern: "^9M[268][A-Z]{2,3}$", level: "A" }
|
|
1144
|
+
]
|
|
1145
|
+
},
|
|
1146
|
+
{
|
|
1147
|
+
key: "nl",
|
|
1148
|
+
name: "Netherlands",
|
|
1149
|
+
regulator: "RDI (Rijksinspectie Digitale Infrastructuur)",
|
|
1150
|
+
term: "Licence Class",
|
|
1151
|
+
termLocal: "categorie registratie",
|
|
1152
|
+
entities: ["PA"],
|
|
1153
|
+
levels: [
|
|
1154
|
+
{ code: "N", name: "Novice", nameLocal: "N-registratie (beperkte toegang)", tier: "intermediate", maxPowerW: 100 },
|
|
1155
|
+
{ code: "F", name: "Full", nameLocal: "F-registratie (volledige toegang)", tier: "full", maxPowerW: 400 }
|
|
1156
|
+
],
|
|
1157
|
+
callsigns: [
|
|
1158
|
+
{ pattern: "^PD[0-9][A-Z]{2,3}$", level: "N" }
|
|
1159
|
+
]
|
|
1160
|
+
},
|
|
1161
|
+
{
|
|
1162
|
+
key: "no",
|
|
1163
|
+
name: "Norway",
|
|
1164
|
+
regulator: "Nasjonal kommunikasjonsmyndighet (Nkom)",
|
|
1165
|
+
rules: "Forskrift om radioamat\xF8rvirksomhet FOR-2026-03-23-465 (in force 2026-03-23)",
|
|
1166
|
+
term: "Licence class",
|
|
1167
|
+
termLocal: "lisensklasse",
|
|
1168
|
+
entities: ["LA", "JW", "JX", "3Y/b", "3Y/p"],
|
|
1169
|
+
levels: [
|
|
1170
|
+
{ code: "begrenset", name: "Limited licence", nameLocal: "Begrenset lisens", tier: "intermediate", maxPowerW: 10 },
|
|
1171
|
+
{ code: "A", name: "Full licence", nameLocal: "Full lisens (HAREC klasse A)", tier: "full", maxPowerW: 1e3 }
|
|
1172
|
+
],
|
|
1173
|
+
callsigns: [
|
|
1174
|
+
{ pattern: "^L[AB][0-9][A-Z]{1,3}$", level: "A", entities: ["LA"] }
|
|
1175
|
+
]
|
|
1176
|
+
},
|
|
1177
|
+
{
|
|
1178
|
+
key: "pl",
|
|
1179
|
+
name: "Poland",
|
|
1180
|
+
regulator: "UKE (Urz\u0105d Komunikacji Elektronicznej)",
|
|
1181
|
+
term: "License Category",
|
|
1182
|
+
termLocal: "kategoria pozwolenia",
|
|
1183
|
+
entities: ["SP"],
|
|
1184
|
+
levels: [
|
|
1185
|
+
{ code: "3", name: "Category 3", nameLocal: "pozwolenie kategorii 3", tier: "full", maxPowerW: 100 },
|
|
1186
|
+
{ code: "1", name: "Category 1", nameLocal: "pozwolenie kategorii 1", tier: "full", maxPowerW: 500 }
|
|
1187
|
+
]
|
|
1188
|
+
},
|
|
1189
|
+
{
|
|
1190
|
+
key: "ro",
|
|
1191
|
+
name: "Romania",
|
|
1192
|
+
regulator: "ANCOM",
|
|
1193
|
+
term: "License Class",
|
|
1194
|
+
termLocal: "clasa",
|
|
1195
|
+
entities: ["YO"],
|
|
1196
|
+
levels: [
|
|
1197
|
+
{ code: "IV", name: "Class IV", nameLocal: "Clasa a IV-a", tier: "full", maxPowerW: 50 },
|
|
1198
|
+
{ code: "III", name: "Class III", nameLocal: "Clasa a III-a", tier: "full", maxPowerW: 100 },
|
|
1199
|
+
{ code: "II", name: "Class II", nameLocal: "Clasa a II-a", tier: "full", maxPowerW: 200 },
|
|
1200
|
+
{ code: "I", name: "Class I", nameLocal: "Clasa I", tier: "full", maxPowerW: 400 }
|
|
1201
|
+
]
|
|
1202
|
+
},
|
|
1203
|
+
{
|
|
1204
|
+
key: "rs",
|
|
1205
|
+
name: "Serbia",
|
|
1206
|
+
regulator: "RATEL",
|
|
1207
|
+
term: "License Class",
|
|
1208
|
+
termLocal: "\u043A\u043B\u0430\u0441\u0430 \u0440\u0430\u0434\u0438\u043E-\u0430\u043C\u0430\u0442\u0435\u0440\u0430",
|
|
1209
|
+
entities: ["YU"],
|
|
1210
|
+
levels: [
|
|
1211
|
+
{ code: "C", name: "Class C (basic)", nameLocal: "\u041A\u043B\u0430\u0441\u0430 C", tier: "intermediate", maxPowerW: 100 },
|
|
1212
|
+
{ code: "B", name: "Class B (advanced)", nameLocal: "\u041A\u043B\u0430\u0441\u0430 B", tier: "intermediate", maxPowerW: 100 },
|
|
1213
|
+
{ code: "A", name: "Class A", nameLocal: "\u041A\u043B\u0430\u0441\u0430 A", tier: "full", maxPowerW: 1500 }
|
|
1214
|
+
]
|
|
1215
|
+
},
|
|
1216
|
+
{
|
|
1217
|
+
key: "ru",
|
|
1218
|
+
name: "Russia",
|
|
1219
|
+
regulator: "\u0413\u041A\u0420\u0427 / \u041C\u0438\u043D\u0446\u0438\u0444\u0440\u044B \u0420\u043E\u0441\u0441\u0438\u0438 (allocation), \u0420\u043E\u0441\u043A\u043E\u043C\u043D\u0430\u0434\u0437\u043E\u0440 + \u0424\u0413\u0423\u041F \u0413\u0420\u0427\u0426 (registration, callsigns), \u0421\u0420\u0420 (qualification exams)",
|
|
1220
|
+
rules: "\u0420\u0435\u0448\u0435\u043D\u0438\u0435 \u0413\u041A\u0420\u0427 10-07-01 \u0440\u0435\u0434. 18-45-02 (2018-04-16, valid to 2028-04-01); \u041F\u0440\u0438\u043A\u0430\u0437 \u041C\u0438\u043D\u043A\u043E\u043C\u0441\u0432\u044F\u0437\u0438 \u2116184 (2012); \u041F\u0440\u0438\u043A\u0430\u0437 \u21164 (2012) \u0440\u0435\u0434. 2019",
|
|
1221
|
+
term: "Category",
|
|
1222
|
+
termLocal: "\u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044F",
|
|
1223
|
+
entities: ["UA", "UA2", "UA9"],
|
|
1224
|
+
levels: [
|
|
1225
|
+
{ code: "4", name: "Category 4", nameLocal: "4 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044F (\u043D\u0430\u0447\u0430\u043B\u044C\u043D\u0430\u044F \u043A\u0432\u0430\u043B\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F)", tier: "basic", maxPowerW: 5 },
|
|
1226
|
+
{ code: "3", name: "Category 3", nameLocal: "3 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044F (\u043A\u0432\u0430\u043B\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u043D\u043E\u0432\u0438\u0447\u043A\u0430)", tier: "full", maxPowerW: 10 },
|
|
1227
|
+
{ code: "2", name: "Category 2", nameLocal: "2 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044F (\u043E\u0441\u043D\u043E\u0432\u043D\u0430\u044F/\u0431\u0430\u0437\u043E\u0432\u0430\u044F \u043A\u0432\u0430\u043B\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F)", tier: "full", maxPowerW: 1e3 },
|
|
1228
|
+
{ code: "1", name: "Category 1", nameLocal: "1 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044F (\u0432\u044B\u0441\u0448\u0430\u044F \u043A\u0432\u0430\u043B\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F)", tier: "full", maxPowerW: 1e3 }
|
|
1229
|
+
],
|
|
1230
|
+
callsigns: [
|
|
1231
|
+
{ pattern: "^R[0-9][A-Z]{4}$", level: "4" },
|
|
1232
|
+
{ pattern: "^U[BCD][0-9][A-Z]{3}$", level: "3", atLeast: true },
|
|
1233
|
+
{ pattern: "^(R[A-Z]?|U[A-I])[0-9][A-Z]{1,2}$", level: "1" },
|
|
1234
|
+
{ pattern: "^(R[ACDGJ-NOQT-Z]|UA)[0-9][A-Z]{3}$", level: "2", atLeast: true }
|
|
1235
|
+
]
|
|
1236
|
+
},
|
|
1237
|
+
{
|
|
1238
|
+
key: "se",
|
|
1239
|
+
name: "Sweden",
|
|
1240
|
+
regulator: "Post- och telestyrelsen (PTS); certificates/callsigns issued by SSA under delegation",
|
|
1241
|
+
rules: "PTSFS 2025:1 (licence exemption; in force 2025-03-17)",
|
|
1242
|
+
term: "Certificate",
|
|
1243
|
+
termLocal: "certifikat",
|
|
1244
|
+
entities: ["SM"],
|
|
1245
|
+
levels: [
|
|
1246
|
+
{ code: "insteg", name: "Entry-level certificate", nameLocal: "Instegscertifikat f\xF6r amat\xF6rradio", tier: "intermediate", maxPowerW: 25 },
|
|
1247
|
+
{ code: "1", name: "Amateur radio certificate (HAREC)", nameLocal: "Amat\xF6rradiocertifikat", tier: "full", maxPowerW: 200 }
|
|
1248
|
+
],
|
|
1249
|
+
callsigns: [
|
|
1250
|
+
{ pattern: "^SH[0-9][A-Z]{3}$", level: "insteg" },
|
|
1251
|
+
{ pattern: "^S[AM][0-9][A-Z]{1,3}$", level: "1" }
|
|
1252
|
+
]
|
|
1253
|
+
},
|
|
1254
|
+
{
|
|
1255
|
+
key: "si",
|
|
1256
|
+
name: "Slovenia",
|
|
1257
|
+
regulator: "AKOS (Agencija za komunikacijska omre\u017Eja in storitve RS)",
|
|
1258
|
+
term: "Operator Class",
|
|
1259
|
+
termLocal: "razred radioamaterja",
|
|
1260
|
+
entities: ["S5"],
|
|
1261
|
+
levels: [
|
|
1262
|
+
{ code: "N", name: "Class N (Novice)", nameLocal: "razred N", tier: "intermediate", maxPowerW: 100 },
|
|
1263
|
+
{ code: "A", name: "Class A", nameLocal: "razred A", tier: "full", maxPowerW: 1500 }
|
|
1264
|
+
],
|
|
1265
|
+
callsigns: [
|
|
1266
|
+
{ pattern: "^S52[A-XZ][A-Z]{2}$", level: "N", atLeast: true },
|
|
1267
|
+
{ pattern: "^S58[A-X][A-Z]{2}$", level: "N", atLeast: true }
|
|
1268
|
+
]
|
|
1269
|
+
},
|
|
1270
|
+
{
|
|
1271
|
+
key: "ua",
|
|
1272
|
+
name: "Ukraine",
|
|
1273
|
+
regulator: "\u041D\u041A\u0415\u041A (National Commission for State Regulation of Electronic Communications...), \u0423\u0414\u0426\u0420 (callsigns/permits)",
|
|
1274
|
+
rules: "\u0420\u0435\u0433\u043B\u0430\u043C\u0435\u043D\u0442 \u0430\u043C\u0430\u0442\u043E\u0440\u0441\u044C\u043A\u043E\u0433\u043E \u0440\u0430\u0434\u0456\u043E\u0437\u0432'\u044F\u0437\u043A\u0443 \u0423\u043A\u0440\u0430\u0457\u043D\u0438, \u041F\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0430 \u041D\u041A\u0415\u041A 10.05.2023 \u2116173 (\u041C\u042E 29.06.2023 \u21161106/40162), Annex 2 Table 12",
|
|
1275
|
+
term: "Qualification",
|
|
1276
|
+
termLocal: "\u043A\u0432\u0430\u043B\u0456\u0444\u0456\u043A\u0430\u0446\u0456\u044F \u0440\u0430\u0434\u0456\u043E\u0430\u043C\u0430\u0442\u043E\u0440\u0430",
|
|
1277
|
+
entities: ["UR"],
|
|
1278
|
+
levels: [
|
|
1279
|
+
{ code: "C", name: "Entry level (student)", nameLocal: "C \u2014 \u0440\u0430\u0434\u0456\u043E\u0430\u043C\u0430\u0442\u043E\u0440-\u0443\u0447\u0435\u043D\u044C", tier: "intermediate", maxPowerW: 40 },
|
|
1280
|
+
{ code: "B", name: "Novice", nameLocal: "B \u2014 \u0440\u0430\u0434\u0456\u043E\u0430\u043C\u0430\u0442\u043E\u0440-\u043F\u043E\u0447\u0430\u0442\u043A\u0456\u0432\u0435\u0446\u044C", tier: "intermediate", aliases: ["3 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0456\u044F"], maxPowerW: 100 },
|
|
1281
|
+
{ code: "A", name: "Higher qualification (HAREC)", nameLocal: "A \u2014 \u0432\u0438\u0449\u0430 \u043A\u0432\u0430\u043B\u0456\u0444\u0456\u043A\u0430\u0446\u0456\u044F \u0440\u0430\u0434\u0456\u043E\u0430\u043C\u0430\u0442\u043E\u0440\u0430", tier: "full", aliases: ["1 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0456\u044F", "2 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0456\u044F"], maxPowerW: 200 }
|
|
1282
|
+
],
|
|
1283
|
+
callsigns: [
|
|
1284
|
+
{ pattern: "^U[R-Z][0-9][A-Z]{2}$", level: "A" }
|
|
1285
|
+
]
|
|
1286
|
+
},
|
|
1287
|
+
{
|
|
1288
|
+
key: "us",
|
|
1289
|
+
name: "United States",
|
|
1290
|
+
regulator: "FCC",
|
|
1291
|
+
rules: "47 CFR Part 97 (eCFR, current to 2026-10-09)",
|
|
1292
|
+
term: "License Class",
|
|
1293
|
+
termLocal: "operator license class",
|
|
1294
|
+
entities: ["K", "KL", "KH6", "KP4", "KP2", "KP1", "KP5", "KG4", "KH0", "KH1", "KH2", "KH3", "KH4", "KH5", "KH7K", "KH8", "KH8/s", "KH9"],
|
|
1295
|
+
levels: [
|
|
1296
|
+
{ code: "N", name: "Novice", tier: "basic", legacy: true, maxPowerW: 200 },
|
|
1297
|
+
{ code: "T", name: "Technician", tier: "basic", maxPowerW: 1500 },
|
|
1298
|
+
{ code: "G", name: "General", tier: "intermediate", maxPowerW: 1500 },
|
|
1299
|
+
{ code: "A", name: "Advanced", tier: "intermediate", legacy: true, maxPowerW: 1500 },
|
|
1300
|
+
{ code: "E", name: "Amateur Extra", tier: "full", maxPowerW: 1500 }
|
|
1301
|
+
],
|
|
1302
|
+
callsigns: [
|
|
1303
|
+
{ pattern: "^[KNW][0-9][A-Z]{2}$", level: "E", entities: ["K"] },
|
|
1304
|
+
{ pattern: "^[AKNW][A-Z][0-9][A-Z]$", level: "E", entities: ["K"] },
|
|
1305
|
+
{ pattern: "^A[A-K][0-9][A-Z]{2}$", level: "E", entities: ["K"] },
|
|
1306
|
+
{ pattern: "^[KNW][A-Z][0-9][A-Z]{2}$", level: "A", atLeast: true, entities: ["K"] },
|
|
1307
|
+
{ pattern: "^[KNW][0-9][A-Z]{3}$", level: "T", atLeast: true, entities: ["K"] },
|
|
1308
|
+
{ pattern: "^[KNW]P[0-9][A-Z]$", level: "E", entities: ["KP4", "KP2", "KP1", "KP5"] },
|
|
1309
|
+
{ pattern: "^KP[0-9][A-Z]{2}$", level: "A", atLeast: true, entities: ["KP4", "KP2", "KP1", "KP5"] },
|
|
1310
|
+
{ pattern: "^[NW]P[0-9][A-Z]{2}$", level: "T", atLeast: true, entities: ["KP4", "KP2", "KP1", "KP5"] }
|
|
1311
|
+
]
|
|
1312
|
+
}
|
|
1313
|
+
]
|
|
1314
|
+
};
|
|
1315
|
+
|
|
1316
|
+
// src/lib/licenseLevels.ts
|
|
1317
|
+
var LICENSE_LEVELS = licenseLevels_default;
|
|
1318
|
+
var bandPlansData2 = bandPlans_default;
|
|
1319
|
+
function licenseJurisdictionForEntity(entityPrefix) {
|
|
1320
|
+
return LICENSE_LEVELS.jurisdictions.find((jurisdiction) => jurisdiction.entities.includes(entityPrefix));
|
|
1321
|
+
}
|
|
1322
|
+
function licenseLevelKey(jurisdiction, level) {
|
|
1323
|
+
return `${jurisdiction.key}:${level.code}`;
|
|
1324
|
+
}
|
|
1325
|
+
function resolveLicenseLevel(key) {
|
|
1326
|
+
const colon = key.indexOf(":");
|
|
1327
|
+
if (colon <= 0) return void 0;
|
|
1328
|
+
const jurisdiction = LICENSE_LEVELS.jurisdictions.find((j) => j.key === key.slice(0, colon));
|
|
1329
|
+
const level = jurisdiction?.levels.find((l) => l.code === key.slice(colon + 1));
|
|
1330
|
+
return jurisdiction && level ? { jurisdiction, level } : void 0;
|
|
1331
|
+
}
|
|
1332
|
+
function licenseLevelForCallsign(call, entityPrefix) {
|
|
1333
|
+
const jurisdiction = licenseJurisdictionForEntity(entityPrefix);
|
|
1334
|
+
if (!jurisdiction) return void 0;
|
|
1335
|
+
const bare = call.toUpperCase().split("/").reduce((best, part) => part.length > best.length ? part : best, "");
|
|
1336
|
+
const rule = jurisdiction.callsigns?.find((r) => (!r.entities || r.entities.includes(entityPrefix)) && new RegExp(r.pattern).test(bare));
|
|
1337
|
+
const level = rule && jurisdiction.levels.find((l) => l.code === rule.level);
|
|
1338
|
+
return rule && level ? { jurisdiction, level, atLeast: Boolean(rule.atLeast) } : void 0;
|
|
1339
|
+
}
|
|
1340
|
+
function isOutsideLicensePrivileges(khz, options) {
|
|
1341
|
+
const { level: key, entityPrefix, ituRegion, mode } = options;
|
|
1342
|
+
const resolved = resolveLicenseLevel(key);
|
|
1343
|
+
if (!resolved || !resolved.jurisdiction.entities.includes(entityPrefix)) return void 0;
|
|
1344
|
+
const band = Object.values(bandPlansData2.bands).find((b) => b.mhz[0] <= khz && khz <= b.mhz[1]);
|
|
1345
|
+
if (!band) return void 0;
|
|
1346
|
+
if (band.exceptLevels?.includes(key)) return true;
|
|
1347
|
+
let allowed = resolved.level.superModes ?? SUPER_MODES;
|
|
1348
|
+
for (const segment of band.segments) {
|
|
1349
|
+
if (!(segment.mhz[0] < khz && khz < segment.mhz[1])) continue;
|
|
1350
|
+
if (segment.entities && !segment.entities.includes(entityPrefix)) continue;
|
|
1351
|
+
if (segment.regions && !(ituRegion && segment.regions.includes(ituRegion))) continue;
|
|
1352
|
+
if (segment.exceptLevels?.includes(key)) return true;
|
|
1353
|
+
if (segment.levels?.includes(key)) allowed = allowed.filter((m) => segment.superModes?.includes(m));
|
|
1354
|
+
}
|
|
1355
|
+
return mode ? !allowed.includes(superModeForMode(mode)) : false;
|
|
1356
|
+
}
|
|
1357
|
+
|
|
1358
|
+
export { ADIF_MODES, ADIF_MODES_AND_SUBMODES, ADIF_MODE_FOR_SUBMODE, ADIF_SUBMODES, ALL_MODES, BANDS, CONTEST_BANDS, EHF_BANDS, EXTENDED_BANDS, HF_BANDS, LICENSE_LEVELS, MAIN_MODES, PHONE_MODES, POPULAR_BANDS, POPULAR_MODES, SHF_BANDS, SUPER_MODES, UHF_BANDS, VHF_BANDS, adifModeAndSubmodeForMode, bandForExactFrequencyInMHz, bandForFrequency, frequencyForBand, isOutsideLicensePrivileges, licenseJurisdictionForEntity, licenseLevelForCallsign, licenseLevelKey, modeForFrequency, resolveLicenseLevel, superModeForMode };
|
|
627
1359
|
//# sourceMappingURL=index.js.map
|
|
628
1360
|
//# sourceMappingURL=index.js.map
|