File: //var/www/ai-notam/docs/types.ts
export type SoftEqualString = string; // тип для свободных строк, когда мы не требуем точного совпадение строки
export type CdrValue = (1 | 2 | 3);
// Latitude не может быть E/W, а Longitude N/S
export type CoordinateValueLatitude = `^(00|0?[1-9]|0?[1-9][0-9]|0?1[0-7][0-9]|180)[0-5][0-9]([0-5])?([0-9])?(?:\\.[0-9]+)?(N|S)$`
export type CoordinateValueLongitude = `^(00|0?[1-9]|0?[1-9][0-9]|0?1[0-7][0-9]|180)[0-5][0-9]([0-5])?([0-9])?(?:\\.[0-9]+)?(E|W)$`
export type CustomCoordinate = `^(ARP|THLD)([0-9]{0,2})(R|L|V)?$`
export type DecimalCoordinate = `^[0-9][0-9]*[\.][0-9][0-9]*(N|S|E|W)$`
export type IcaoCode = `^[A-Z]{4}$`
export type LettersAndNumbers = `^[0-9A-Za-z\/]*$`
export type ID = `^[0-9A-Za-z\-\/\ ]*$`
export type WptName = `^[0-9A-Za-z]{1,5}$`
export type NumberRange = `^[0-9]*-[0-9]*$`
export type NumberType = `^[0-9]*$`
export type WeekDayName = `(MON|TUE|WED|THU|FRI|SAT|SUN)`
export type DaysRange = `[0-9]{1,2}-?([0-9]{1,2})?`
export type MonthName = `^(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)$`
export type DateType = `^[0-9]{4}-[0-9]{2}-[0-9]{2}`
export type Time = `^(?:[01][0-9]|2[0-3]):[0-5][0-9](?: *\\(\\+1\\))?$`
export type SunTime = `^(SS|SR)(\ *[-+]\ *([0-9]{2}))?$`
export type Avalability = {
AVLB: boolean,
From?: SoftEqualString,
To?: SoftEqualString,
Other?: SoftEqualString
}
export type Period = {
startDate?: DateType,
startTime: Time | SunTime,
endDate?: DateType | null | 'PERM',
endTime: Time | SunTime
}
export type Day = {
day: NumberType[] | WeekDayName[] | DaysRange[] | ["daily"]
month?: MonthName,
periods: Period[],
}
export type AcftTypes = `^(A124|A140|A148|A158|A19N|A20N|A21N|A21NX|A21NY|A210|A225|A306|A30B|A310|A310|A318|A318|A319|A319|A320|A320|A20F|A321|A321|A21F|A332|A333|A332|A333|A337|A338|A339|A342|A343|A345|A346|A359|A35K|A388|A3ST|A400|A5|A748|AC68|AC90|AJ27|AN12|AN2|AN24|AN26|AN28|AN30|AN32|AN72|AP22|AS32|AS50|AT43|AT45|AT46|AT72|AT73|AT75|AT76|ATL|ATP|B06|B06T|B105|B190|B212|B37M|B38M|B39M|B3XM|B412|B429|B461|B462|B463|B703|B712|B720|B721|B722|B732|B733|B734|B735|B736|B738|B739|B73C|B73E|B73F|B737|B73H|B73J|B73K|B73P|B73U|B73W|B73Y|B741|B741|B742|B742|B742|B743|B743|B744|B744|B744|B748|B748|B74D|B74R|B74R|B74S|B752|B752|B753|B762|B763|B764|B76W|B76X|B76Y|B772|B773|B778|B779|B77L|B77L|B77W|B788|B789|B78X|BA11|BCS1|BCS3|BE40|BE55|BE58|BE99|BELF|BER2|BL8|BLCF|BN2P|C130|C140|C152|C162|C172|C177|C182|C82R|C206|C208|C210|T210|C212|C25A|C25B|C25C|C30J|C310|C46|C500|C510|C525|C550|C560|C56X|C650|C680|C72R|C750|C77R|C919|CH7A|CH7B|CL2T|CL30|CL60|CN35|CONC|CONI|CRJ1|CRJ2|CRJ7|CRJ9|CRJX|CVLP|CVLT|D228|D328|DA40|DA42|DA62|DC10|DC10|DC10|DC10|DC10|DC3|DC6|DC85|DC86|DC87|DC91|DC92|DC93|DC94|DC95|DH2T|DH62|DH64|DH8A|DH8B|DH8C|DH8D|DHC2|DHC3|DHC4|DHC5|DHC6|DHC7|DOVE|E110|E120|E135|E135|E145|E170|E190|E195|E290|E295|E35L|E50P|E545|E550|E55P|E75L|E75S|EA30|EA31|EA32|EA33|EA34|EA50|EC20|EC25|EC30|EC35|EC45|EC55|EC75|ECHO|EV97|EVSS|EXPL|F100|F27|F28|F2TH|F406|F50|F70|F900|FA24|FA50|FA7X|G159|G21|G280|G73T|GA8|GL5T|GLEX|GLF4|GLF5|GLF6|GOLF|H25B|H25C|HDJT|HERN|I114|IL18|IL62|IL76|IL86|IL96|J328|JS31|JS32|JS41|JU52|K35R|L101|L188|L410|LJ35|LJ60|MD11|MD11|MD11|MD81|MD82|MD83|MD87|MD88|MD90|MI24|MI8|MU2|N262|NOMA|P06T|P8|P180|P208|P212|P28A|P28B|P68|PA31|PA44|PA46|PC12|PC6T|PC24|PIPA|PISI|PITA|PIVI|R200|RJ1H|RJ70|RJ85|RV4|S210|S58T|S601|S61|S65C|S76|S92|SB20|SC7|SF34|SF50|SH33|SH36|SIRA|SPIT|SR22|SU95|SW4|T134|T144|T154|T204|TB20|TL20|TRF1|TRIS|TWEN|V22|WW24|Y12|YK40|YK42|YS11|HEL)$`
export type AcftCategory = `^(A|B|C|D|E|F|I|II|III|IV|V|VI|1|2|3|4|5|6|7|8|9|0|10)$`
export type AcftLandCategory = `^(A|B|C|D)$`
export type Direction = `^(full|clock|unticlock)$`
export type ConditionalRoutingDirection = `^(S|N|W|E|NE|NW|SE|SW)$`
export type Direction_awy = `^(both|direct|backward)$`
export type FlLvls = `^(odd|even)$`
export type FLevel_struct = {
FL?: FlLvls, //четные/нечетные эшелоны может быть EVEN/ODD
Range?: NumberRange[] //диапазон высот, числовое значение (135-540)
}
export type RTE_Segment = {
From: WptName, //имя начальной точки
AWY?: SoftEqualString, //имя трассы между точкам
TO: WptName, //имя конечной точки
Direction?: Direction_awy|Direction_awy[]|ConditionalRoutingDirection[], //направленность участка ВТ
FLevel?: FLevel_struct[] //эшелонирование на участке
AVLB: boolean //Используется или нет
}
export type AWY_Segment = { //Участок воздушной трассы
From?: {
WptName?: WptName,//Идентификатор начальной точки участка воздушной трассы,
Coordinate_System?: SoftEqualString,//отображать поле, только если в НОТАМ идет речь о coordinate system, например (КООРДИНАТЫ ПОРОГА (ПЗ-90.11): N592505.41 Е1430329.45),
Coordinates?: {
Latitude?: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate,//Широта,
Longitude?: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate //Долгота
}
},
To?: {
WptName?: WptName,//Идентификатор начальной точки участка воздушной трассы,
Coordinate_System?: SoftEqualString,//отображать поле, только если в НОТАМ идет речь о coordinate system, например (КООРДИНАТЫ ПОРОГА (ПЗ-90.11): N592505.41 Е1430329.45),
Coordinates?: {
Latitude?: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate,//Широта,
Longitude?: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate //Долгота
}
},
Direction?: Direction_awy, //Направление движения (обратное, прямое, двухстороннее),
Width?: ValuePlusUnits, //Ширина участка (число с единицей измерения),
Min_ALT_direct?: ValuePlusUnits | VerticalLimits, //Минимальная высота (прямое направление) (число с единицей измерения),
Min_ALT_backward?: ValuePlusUnits | VerticalLimits, //Минимальная высота (обратное направление) (число с единицей измерения),
Max_ALT?: ValuePlusUnits | VerticalLimits, //Максимальная высота (число с единицей измерения),
Direct_course?: FullDegrees, //Прямой (исходящий) путевой угол участка трассы (число с единицей измерения),
Backward_course?: FullDegrees, //Обратный путевой угол участка трассы (число с единицей измерения),
Times?: Day[], //Повторяет структуру раздела D
AVLB: boolean, //Используется или нет,
Dist?: ValuePlusUnits, //Длина участка воздушной трассы (число с единицей измерения),
new_route?: SoftEqualString[] //предложенный маршрут взамен закрытого участка трассы – массив из трасса-точка-трасс,
Cond_RTE?: boolean,//Conditional route да или нет,
ATC_only?: boolean,//Участок трассы доступен только по согласованию с диспетчером, true/false,
RNAV?: LettersAndNumbers, //Значение RNAV (число с единицей измерения)
cdr_value?: CdrValue[]|[null],
Other?: SoftEqualString//другая информация по трассе, для которой нет полей
}
export type AreaType = "Unknown" | "Restricted" | "Prohibited" | "Military" | "Alert" | "Caution" | "Danger" | "Nat_secur" | "Training" | "TSA" | "TRA" | "closed" | "uav"
export type MoreOrLessVal = {
value: ValuePlusUnits,
more_less: string
}
export type AcftTypeObject = {
AC_type: AcftTypes[],
Code_more_less?: string
}
export type MoreOrLessObject = {
limited_to: boolean,
types: MoreOrLessVal
}
export type ValuePlusUnits = (number | string)[]
export type VerticalLimits = (string)[] // `^(SFC|GND|UNL|AGL|AMSL)$`
export type Slope = `^([0-9]*(\.?)[0-9])*(%){1}$`
export type FullDegrees = `^([0-9]{1,3})(\.?)[0-9]{0,2}°$`
export type MagVar = `^([0-9]{4})(E|W|e|w)$`
export type DegreesMin = `^([0-8][0-9]|90)°([0-4][0-9]|59)'$`
export type Pcn = `^[0-9]*\/[A-Z]\/[A-Z]\/[A-Z]\/[A-Z]$`
export type AppCat = "I" | "II" | "IIIA" | "IIIB" | "IIIC" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "0" | "10"
export type Coordinate =
{
Latitude: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, //Широта,
Longitude: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate //Долгота
}
export type CoordinateWithType =
({
type: 'point', //тип соединяющего участка,
Latitude: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, //Широта,
Longitude: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate //Долгота
} |
{
type: 'line', //тип соединяющего участка,
Latitude: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, //Широта,
Longitude: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate //Долгота
} |
{
type: 'arc', //тип соединяющего участка,
direction?: Direction, //направление участка между точками,
Latitude_cntr: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, //Широта центра,
Longitude_cntr: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate, // Долгота центра,
radius: ValuePlusUnits, // Радиус,
Latitude?: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, // Широта,
Longitude?: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate // Долгота
} |
{
type: 'state_border', // тип соединяющего участка,
direction?: Direction, //направление участка между точками,
state?: SoftEqualString, //Страна1/Страна2,
Latitude: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, //Широта,
Longitude: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate //Долгота
} |
{
type: 'FIR_border', // тип соединяющего участка,
direction?: Direction, //направление участка между точками,
FIR?: IcaoCode, //ICAO код FIR,
Latitude: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, //Широта,
Longitude: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate //Долгота
} |
{
type: 'polar_point', // тип соединяющего участка
From?: LettersAndNumbers, //опорная точка,
Coordinate_System?: SoftEqualString, //отображать поле, только если в НОТАМ идет речь о coordinate system, например (КООРДИНАТЫ ПОРОГА (ПЗ-90.11): N592505.41 Е1430329.45),
Latitude?: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, // Широта,
Longitude?: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate, // Долгота,
DIST?: ValuePlusUnits, // Дальность,
RAD?: FullDegrees//радиал (число в градусах),
})
export type ACFT = {
limited_to: boolean, //означает, что по смыслу НОТАМ на АП допущены ТОЛЬКО такие типы ВС (если true) и, например, с 01.10.2024 аэропорт принимает еще и ВС типа МС-21 (если false).
types?: AcftTypeObject | AcftTypes[], //перечень типов ВС предоставлялся в виде списка excel в чате 02.08.2024
cat?: AcftCategory[], //текстовое или числовое значение (A, B, C, D, E или I, II, III, IV, V, VI)
wing_span?: MoreOrLessVal, //числовое значение (с сохранением единиц измерения) (31,7M, 198,0FT, 15,0M)
Other?: SoftEqualString,
fuselage_width?: MoreOrLessVal,
}
export type RFFS = {
RFFS_CAT?: NumberType,
Times?: Day[]
}
export type Aerodrome = {
Name?: SoftEqualString, //WALSINGHAM / CEILIDH
Code: IcaoCode, //ICAO код аэродрома
Day_only?: boolean,
UTC?: SoftEqualString, //UTC+/-N,
AVLB: boolean, //открыт или нет
AVLB_AS_ALT?: boolean, //доступность аэродрома в качестве запасного
RFFS?: RFFS[], // цифровое значение, поэтому тип может быть Number. целые значения от 1 до 10 (5, 8, 10)
ACFT_allow?: ACFT[], //перечень типов ВС предоставлялся в виде списка excel в чате 02.08.2024
ACFT_proh?: ACFT[], //перечень типов ВС предоставлялся в виде списка excel в чате 02.08.2024
Transition_FL?: ValuePlusUnits|null, //цифровое значение поэтому оставляем строку, можно использовать регулярное выражение,(с сохранением единиц измерения) (null 19000ft 19000fl 1200m "byATC")
Transition_ALT?: ValuePlusUnits|null, //цифровое значение (с сохранением единиц измерения), (null 19000ft QNE, 1200m QNH, "byATC")
Elevation?: ValuePlusUnits|null, //цифровое значение(с сохранением единиц измерения), (815ft)
Latitude?: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, //все варианты были указаны отдельно в чате 30.09.2024
Longitude?: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate, //все варианты были указаны отдельно в чате 30.09.2024
MagVar?: MagVar, //в пояснении указано, что в градусах числовое значение EAST/WEST +/-, (4°54’E)
Times?: Day[], //Повторяет структуру раздела D
Fuel?: SoftEqualString, //Информация по топливу в АП
Other?: SoftEqualString //текстовое и/или числовое поле в свободном формате
}
export type Helipad = {
Name?: SoftEqualString[], //Название вертолетной площадки
Code: IcaoCode[], //ICAO код вертолетной площадки
AVLB: boolean,
Coordinates?: Coordinate[],//Координаты вертолетной площадки (от 1ой до 4х)
Elevation?: ValuePlusUnits, //Превышение вертолетной площадки
PCN?: Pcn, //Прочность PCN вертолетной площадки
PCR?: Pcn, //Прочность PCR вертолетной площадки
ACFT_allow?: ACFT[], //Допущенные ВС
ACFT_proh?: ACFT[], //Запрещенные ВС
RFFS?: RFFS[], // цифровое значение, поэтому тип может быть Number. целые значения от 1 до 10 (5, 8, 10)
Day_only?: boolean,
UTC?: SoftEqualString, //UTC+/-N,
Transition_FL?: ValuePlusUnits|null, //цифровое значение поэтому оставляем строку, можно использовать регулярное выражение,(с сохранением единиц измерения) (null 19000ft 19000fl 1200m "byATC")
Transition_ALT?: ValuePlusUnits|null, //цифровое значение (с сохранением единиц измерения), (null 19000ft QNE, 1200m QNH, "byATC")
Latitude?: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, //все варианты были указаны отдельно в чате 30.09.2024
Longitude?: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate, //все варианты были указаны отдельно в чате 30.09.2024
MagVar?: MagVar, //в пояснении указано, что в градусах числовое значение EAST/WEST +/-, (4°54’E)
Times?: Day[], //Повторяет структуру раздела D
Fuel?: SoftEqualString, //Информация по топливу в АП
Other?: SoftEqualString //Прочая информация по площадке
}
export type Stand = {
Stand_Number: SoftEqualString[], //Массив из ID стендов, объединенных одним статусом
AVLB: boolean, //доступно или нет
Coordinates?: {
Coordinate_system?: SoftEqualString, //отображать поле, только если в НОТАМ идет речь о coordinate system, например (КООРДИНАТЫ ПОРОГА (ПЗ-90.11): N592505.41 Е1430329.45)
Latitude?: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, //все варианты были указаны отдельно в чате 30.09.2024
Longitude?: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate //все варианты были указаны отдельно в чате 30.09.2024
},
PCN?: Pcn, //XXX/Y/Y/Y/Y. где X числа, Y буквы латинского алфавита("51/F/B/X/T")
PCR?: Pcn,
ACFT_allow?: ACFT[], //перечень типов ВС предоставлялся в виде списка excel в чате 02.08.2024
ACFT_proh?: ACFT[], //перечень типов ВС предоставлялся в виде списка excel в чате 02.08.2024
Times?: Day[], //Повторяет структуру раздела D
Other?: SoftEqualString //текстовое и/или числовое поле в свободном формате
}
export type Runway = {
RWY: SoftEqualString[], //Массив из ID RWY, объединенных одним статусом
AVLB: boolean,
LDG?: Avalability,
TAX?: Avalability,
TKOF?: Avalability,
From?: SoftEqualString, //От точки
To?: SoftEqualString, //До точки
Dimensions?: { //размер взлётно-посадочной полосы
Length?: ValuePlusUnits, //Длина (числовое значение с единицей измерения)
Width?: ValuePlusUnits, //Ширина (числовое значение с единицей измерения)
},
STRP_Dimensions?: { //размеры лётного поля
Length?: ValuePlusUnits //Длина (числовое значение с единицей измерения),
Width?: ValuePlusUnits // Ширина (числовое значение с единицей измерения)
},
Threshold?: Threshold[],
PCN?: Pcn, //XXX/Y/Y/Y/Y. где X числа, Y буквы латинского алфавита("51/F/B/X/T")
PCR?: Pcn,
ACFT_allow?: ACFT[], //перечень типов ВС предоставлялся в виде списка excel в чате 02.08.2024
ACFT_proh?: ACFT[], //перечень типов ВС предоставлялся в виде списка excel в чате 02.08.2024
Times?: Day[], //Повторяет структуру раздела D
Other?: SoftEqualString //текстовое и/или числовое поле в свободном формате
}
export type Threshold = {
Thld: SoftEqualString[], //Массив из ID THR, объединенных одним статусом
Displaced?: boolean, //Является смещенным
Displaced_by?: ValuePlusUnits, //Величина смещения порога ВПП (цифровое значение с единицей измерения)
AVLB: boolean, //Допустимо ли использование порога
LDG?: Avalability,
TAX?: Avalability,
TKOF?: Avalability,
PCN?: Pcn,
PCR?: Pcn,
Day_Marking?: boolean //Присутствует ли разметка?
Mag_Azimuth?: FullDegrees, //Магнитный азимут (магнитное направление ВПП). Числовое значение,
Rwy_Slope?: Slope, //Уклон ВПП (числовое значение %),
RWY_centerline_mark?: boolean, //Присутствует ли маркировка осевой линии ВПП, true/false,
RWY_App_light?: boolean, //Присутствуют ли огни приближения, true/false,
RWY_Thld_light?: boolean, //Присутствуют ли огни порога, true/false,
RWY_End_light?: boolean, //Присутствуют ли ограничительные огни ВПП, true/false,
RWY_Edge_light?: boolean, //Присутствуют ли посадочные огни ВПП, true/false,
SWY_Light?: boolean, //Присутствуют ли огни концевой полосы торможения, true/false,
PAPI_light?: boolean, //Присутствуют ли система визуальной индикации глиссады, true/false,
Obstacle_Lights?: boolean, //Присутствуют ли огни препятствий, true/false,
Thld_Coord?: { //Координаты порога
Coordinate_System?: SoftEqualString, //отображать поле, только если в НОТАМ идет речь о coordinate system, например (КООРДИНАТЫ ПОРОГА (ПЗ-90.11): N592505.41 Е1430329.45),
Latitude?: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, //Широта, все варианты были указаны отдельно в чате 30.09.2024
Longitude?: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate //Долгота, все варианты были указаны отдельно в чате 30.09.2024
},
Thld_Elevation?: ValuePlusUnits | VerticalLimits, //Высота порога относительно уровня моря,
RWY_end_coordinates?: { //Координаты конца ВПП
Coordinate_System?: SoftEqualString, //отображать поле, только если в НОТАМ идет речь о coordinate system, например (КООРДИНАТЫ ПОРОГА (ПЗ-90.11): N592505.41 Е1430329.45),
Latitude?: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, //Широта, все варианты были указаны отдельно в чате 30.09.2024
Longitude?: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate //Долгота, все варианты были указаны отдельно в чате 30.09.2024
},
RWY_end_elevation?: ValuePlusUnits | VerticalLimits, //Высота конца порога относительно уровня моря,
Taxiing?: SoftEqualString, //информация о рулении,
Declared_Distances?: { //Объявленные дистанции для операции взлёта и посадки
TODA?: ValuePlusUnits, //располагаемая дистанция взлёта (цифровое значение с единицей измерения),
TORA?: ValuePlusUnits, //располагаемая дистанция разбега (цифровое значение с единицей измерения),
SWY?: ValuePlusUnits, //располагаемая дистанция прерванного взлёта (цифровое значение с единицей измерения),
ASDA?: ValuePlusUnits, //располагаемая дистанция прерванного взлёта (цифровое значение с единицей измерения),
LDA?: ValuePlusUnits, //располагаемая посадочная дистанция (цифровое значение с единицей измерения),
CW_Length?: ValuePlusUnits, //Длина свободной зоны (в конце ВПП (цифровое значение с единицей измерения)),
CW_Width?: ValuePlusUnits, //Ширина свободной зоны (в конце ВПП (цифровое значение с единицей измерения))
},
Other?: SoftEqualString //Другая информация по порогу ВПП, для которой нет полей
}
export type ILS = { // Точная система захода на посадку
Thld: SoftEqualString[], //Массив из ID THR, объединенных одним статусом
AVLB: boolean, //Работает или нет,
CALL_SIGN?: LettersAndNumbers, //Позывной (Латинские буквы),
FREQ_GS?: ValuePlusUnits, //частота глиссадного радио-маяк (Числовое значение с единицей измерения),
FREQ_CS?: ValuePlusUnits, //частота курсового радио-маяк (Числовое значение с единицей измерения),
MagVar?: MagVar, //установленное магнитное склонение (числовое значение (EAST/WEST +/-)),
Course?: FullDegrees, //Курс захода на посадку,
Back_course?: boolean, //Применимость обратного курса, true/false,
G_slope?: FullDegrees, //Угол наклона глиссады (Числовое значение double),
CAT?: AppCat, //Категория инструментальной системы захода на посадку (берётся из NOTAM)
Times?: Day[], //Повторяет структуру раздела D
Other?: SoftEqualString, //Другая информация по точной системе захода на посадку, для которой нет полей
}
export type GLS = { // Точная система захода на посадку по спутнику
Thld: SoftEqualString[], //Массив из ID THR, объединенных одним статусом
AVLB: boolean, //Работает или нет,
CALL_SIGN?: LettersAndNumbers, //Позывной (латинские буквы с цифрами),
CANAL?: LettersAndNumbers, //Номер канала для настройки бортового оборудования (числовое значение),
CAT?: AppCat, //Категория системы захода на посадку по спутнику (берётся из NOTAM),
MagVar?: MagVar, //Магнитное склонение (числовое значение (EAST/WEST +/-)),
G_slope?: FullDegrees, //Угол наклона глиссады (Числовое значение double)
Times?: Day[], //Повторяет структуру раздела D
Other?: SoftEqualString, //Другая информация по точной системе захода на посадку по спутнику, для которой нет полей
}
export type Departure = { //Вылеты
RWY?: SoftEqualString[], //Порог взлёта (берётся из NOTAM),
ID?: SoftEqualString[], //Идентификатор процедуры (берётся из NOTAM),
AVLB: boolean, //Используется или нет,
Other?: SoftEqualString //другая информация по вылету, для которой нет полей
}
export type Arrival = { //Прибытие
RWY?: SoftEqualString[], //Порог прибытия (берётся из NOTAM),
ID?: SoftEqualString[], //Идентификатор процедуры (берётся из NOTAM),
AVLB: boolean, //Используется или нет,
Other?: SoftEqualString //другая информация по прибытию, для которой нет полей
}
export type Approach = { //Заход на посадку
RWY?: SoftEqualString[], //Порог захода на посадку (берётся из NOTAM),
ID?: SoftEqualString[], //Идентификатор процедуры (берётся из NOTAM),
"OCA(A)"?: ValuePlusUnits,// высота пролета препятствий абсолютная для САТ А,
"OCH(A)"?: ValuePlusUnits,// высота пролета препятствий относительная для САТ А,
"OCA(B)"?: ValuePlusUnits,// высота пролета препятствий абсолютная для САТ B,
"OCH(B)"?: ValuePlusUnits,// высота пролета препятствий относительная для СBТ В,
"OCA(C)"?: ValuePlusUnits,// высота пролета препятствий абсолютная для САТ С,
"OCH(C)"?: ValuePlusUnits,// высота пролета препятствий относительная для САТ С,
"OCA(D)"?: ValuePlusUnits,// высота пролета препятствий абсолютная для САТ D,
"OCH(D)"?: ValuePlusUnits,// высота пролета препятствий относительная для САТ D,
"OCA(DL)"?: ValuePlusUnits,// высота пролета препятствий абсолютная для САТ DL,
"OCH(DL)"?: ValuePlusUnits // высота пролета препятствий относительная для CAT DL
"OCA(H)"?: ValuePlusUnits,// высота пролета препятствий абсолютная для САТ H,
"OCH(H)"?: ValuePlusUnits,// высота пролета препятствий относительная для САТ H
AVLB: boolean, //Используется или нет,
Times?: Day[], //Повторяет структуру раздела D
Other?: SoftEqualString //другая информация по заходу на посадку, для которой нет полей
}
export type Procedures = { //Процедуры вылет/прилёт. Установленные маршруты следования воздушных судов
Departures?: Departure[],
Arrivals?: Arrival[],
Approach?: Approach[],
Times?: Day[], //Повторяет структуру раздела D
}
export type Apron = { //Перрон (все стоянки)
AVLB: boolean, //Открыт или нет,
ID: SoftEqualString[], //Идентификатор перрона (берётся из NOTAM),
From?: SoftEqualString, //От точки
To?: SoftEqualString, //До точки
Elevation?: ValuePlusUnits | VerticalLimits, //Превышение над уровнем моря (числовое значение с единицей измерения),
PCN?: Pcn, //XXX/Y/Y/Y/Y. где X числа, Y буквы латинского алфавита("51/F/B/X/T")
PCR?: Pcn,
Times?: Day[], //Повторяет структуру раздела D
Other?: SoftEqualString //другая информация по перрону, для которой нет полей
}
export type Taxiway = {
TWY: SoftEqualString[], // Массив из ID стендов, объединенных одним статусом
AVLB: boolean, //доступна или нет
From?: SoftEqualString, //От точки
To?: SoftEqualString, //До точки
Width?: ValuePlusUnits, // Ширина рулёжной дорожки (число + единица измерения)
ACFT_allow?: ACFT[], //перечень типов ВС предоставлялся в виде списка excel в чате 02.08.2024
ACFT_proh?: ACFT[], //перечень типов ВС предоставлялся в виде списка excel в чате 02.08.2024
PCN?: Pcn, //XXX/Y/Y/Y/Y. где X числа, Y буквы латинского алфавита("51/F/B/X/T")
PCR?: Pcn,
Declared_Distances?: { // Объявленные дистанции после выруливания с дорожки (не от начала ВПП)
Thld: SoftEqualString,//Порог,
TODA?: ValuePlusUnits, //располагаемая дистанция взлёта (цифровое значение с единицей измерения),
TORA?: ValuePlusUnits, //располагаемая дистанция разбега (цифровое значение с единицей измерения),
SWY?: ValuePlusUnits, //располагаемая дистанция прерванного взлёта (цифровое значение с единицей измерения),
ASDA?: ValuePlusUnits, //располагаемая дистанция прерванного взлёта (цифровое значение с единицей измерения),
LDA?: ValuePlusUnits, //располагаемая посадочная дистанция (цифровое значение с единицей измерения)
},
Times?: Day[], //Повторяет структуру раздела D
Other?: SoftEqualString //текстовое и/или числовое поле в свободном формате
}
export type FIR = {//Район полётной информации
FIR_code: IcaoCode[], //Идентификатор FIR (берётся из NOTAM),
Name?: SoftEqualString[], //Наименование FIR (берётся из NOTAM),
Flight_rules?: SoftEqualString, //Правила полетов (берётся из NOTAM),
Min_alt?: ValuePlusUnits | VerticalLimits, //Нижняя граница (числовое значение значение с единицей измерения),
Max_alt?: ValuePlusUnits | VerticalLimits, //Верхняя граница (числовое значение значение с единицей измерения),
CPDLC?: boolean, //Система текстовой связи между диспетчером и пилотом
CPDLC_Logon?: IcaoCode, //Адрес для логина в системе,
ADSC?: boolean, //Присутствует ли автоматическое зависимое наблюдение,
Times?: Day[], //Повторяет структуру раздела D
Other?: SoftEqualString //текстовое и/или числовое поле в свободном формате
}
export type Radio = { // Система радио связи между диспетчером и пилотом,
Call_Sign: ID[], //Позывной (текст),
Freq?: ValuePlusUnits,//Частота передачи (число с единицей изменения),
AVLB: boolean, //используется или нет,
Times?: Day[], //Повторяет структуру раздела D
Other?: SoftEqualString //другая информация
}
export type Area = {
Area_name?: SoftEqualString[], //Наименование (берётся из NOTAM),
Type?: AreaType, //Тип ограничения,
Activated: boolean, //статус активности,
No_Fly: boolean, //запрещен полет или нет,
Coordinate_System?: SoftEqualString //отображать поле, только если в НОТАМ идет речь о coordinate system, например (КООРДИНАТЫ ПОРОГА (ПЗ-90.11): N592505.41 Е1430329.45),
Coordinates?: CoordinateWithType[],
Coordinates_excl?: CoordinateWithType[],
Width?: ValuePlusUnits, //ширина зоны в обе стороны,
Lower_limit?: ValuePlusUnits | VerticalLimits, //нижняя граница (число с единицей измерения),
Upper_limit?: ValuePlusUnits | VerticalLimits, //верхняя граница (число с единицей измерения),
Times?: Day[], //Повторяет структуру раздела D
Other?: SoftEqualString //другая информация по зоне, для которой нет полей
}
export type Airway = { // воздушная трасса
Airway_ID: LettersAndNumbers[], //Идентификатор воздушной трассы (берётся из NOTAM),
AVLB: boolean, //Используется или нет,
Other?: SoftEqualString, //другая информация, для которой нет полей,
Times?: Day[], //Повторяет структуру раздела D
AWY_Segments?: AWY_Segment[]
}
export type Waypoint = { //Точка маршрута трассы
Name: WptName[], //Наименование точки,
AVLB: boolean, //Используется или нет,
Coordinate_System?: SoftEqualString, //отображать поле, только если в НОТАМ идет речь о coordinate system, например (КООРДИНАТЫ ПОРОГА (ПЗ-90.11): N592505.41 Е1430329.45),
Coordinates?: { //Координаты
Latitude?: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, //широта,
Longitude?: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate //долгота
},
MagVar?: MagVar, //в пояснении указано, что в градусах числовое значение EAST/WEST +/-, (4°54’E)
Times?: Day[], //Повторяет структуру раздела D
Other?: SoftEqualString //другая информация по трассе, для которой нет полей
}
export type Navaid = {
Name: LettersAndNumbers[] //Наименование навигационного средства,
Type?: LettersAndNumbers[] //Тип навигационного средства,
Frequency?: ValuePlusUnits, //Частота настройки этого навигационного средства (число с единицей измерения),
Channel?: LettersAndNumbers, //канал настройки этого навигационного средства (число с единицей измерения),
AVLB: boolean, //Используется или нет
Coordinate_System?: SoftEqualString, //отображать поле, только если в НОТАМ идет речь о coordinate system, например (КООРДИНАТЫ ПОРОГА (ПЗ-90.11): N592505.41 Е1430329.45),
Coordinates?: {
Latitude?: CoordinateValueLatitude | CustomCoordinate | DecimalCoordinate, //широта,
Longitude?: CoordinateValueLongitude | CustomCoordinate | DecimalCoordinate //долгота
},
MagVar?: MagVar, //в пояснении указано, что в градусах числовое значение EAST/WEST +/-, (4°54’E)
Times?: Day[], //Повторяет структуру раздела D
Other?: SoftEqualString //другая информация по трассе, для которой нет полей
}
export type Route = {
RTE_Segments?: RTE_Segment[]
}
export type Conditional_Routing = { //условная маршрутизация
Condition_from?: { //начальное направление для условия
Direction?: ConditionalRoutingDirection[],
FIR?: IcaoCode[], //район полётной информации,
AP?: IcaoCode[],//аэропорт вылета
WPT?: WptName[] //начальная точка,
}
Condition_to?: {//конечное направление для условия
Direction?: ConditionalRoutingDirection[],
FIR?: IcaoCode[], //район полётной информации,
AP?: IcaoCode[], //аэропорт вылета
WPT?: WptName[] //начальная точка,
}
Routes?: Route[],
Times?: Day[], //Повторяет структуру раздела D
Other?: SoftEqualString //другая информация по трассе, для которой нет полей
}
export type Obstacle = { //Препятствия
Active?: boolean,
ID?: ID, //Идентификатор препятствия,
Name?: SoftEqualString, //Наименование (EN),
Coordinate_System?: SoftEqualString, //Отображать поле, только если в НОТАМ идет речь о coordinate system, например (КООРДИНАТЫ ПОРОГА (ПЗ-90.11): N592505.41 Е1430329.45),
Coordinates?: CoordinateWithType[], // Задаются координаты аналогично разделу Area, но в данном случае фигура может не замыкаться (например линия электропередач)
Elevation?: ValuePlusUnits | VerticalLimits, //Превышение препятствия от уровня моря (число + единица измерения),
Height?: ValuePlusUnits | VerticalLimits, //Высота над землей (число + единица измерения),
Radius?: ValuePlusUnits, //Радиус препятствия + единицы измерения
Marking?: boolean, //Наличие маркировки, true/false,
Light_mark?: boolean, //Наличие светового ограждения (подсвечено препятствие или нет?)
Times?: Day[], //Повторяет структуру раздела D
Other?: SoftEqualString
}
export type FlightNumber = SoftEqualString;
export type ExemptionType = "ARR" | "DEP" | "FLT_NUMB" | "SCHEDULED_FLTS" | "CHARTER_FLTS" | "DOMESTIC_FLTS" | "VIP_FLTS" | "INTERNATIONAL_FLTS" | "TWO-WAY COMM"
export type ExemptionCondition = "ALL" | "VIA_ATS_ROUTES"
export type Exemption = {
type: ExemptionType,
condition?: ExemptionCondition,
airports?: IcaoCode[],
numbers?: FlightNumber[]
}
export type E_Line = {
Aerodromes?: Aerodrome[],
Helipads?: Helipad[],
Stands?: Stand[],
Taxiways?: Taxiway[],
Obstacles?: Obstacle[],
Runways?: Runway[],
ILSs?: ILS[],
GLSs?: GLS[],
Procedures?: Procedures[],
Aprons?: Apron[],
FIRs?: FIR,
Areas?: Area[],
Radios?: Radio[],
Airways?: Airway[],
Waypoints?: Waypoint[],
Navaids?: Navaid[],
References?: SoftEqualString,
Conditional_Routings?: Conditional_Routing[],
exemptions?: Exemption[],
Other?: SoftEqualString
}
export interface NotamObject {
A_Line?: SoftEqualString|null,
B_Line?: SoftEqualString,
C_Line?: SoftEqualString,
D_Line?: Day[]|null,
E_Line?: E_Line|null,
F_Line?: ValuePlusUnits | null,
G_Line?: ValuePlusUnits | null,
FIR?: SoftEqualString,
FIRs?: SoftEqualString,
N_STATUS?: SoftEqualString,
N_status?: SoftEqualString,
QCode?: SoftEqualString,
REF_NOTAM?: SoftEqualString,
altitudeMax?: SoftEqualString,
altitudeMin?: SoftEqualString,
area?: SoftEqualString,
coordinatesLat?: SoftEqualString,
coordinatesLon?: SoftEqualString,
entity?: SoftEqualString,
id?: SoftEqualString,
radius?: SoftEqualString,
siteIndexA?: SoftEqualString,
status?: SoftEqualString,
text?: SoftEqualString,
title?: SoftEqualString,
traffic?: SoftEqualString,
type?: SoftEqualString,
TYPE?: SoftEqualString,
cycle?: NumberType,
AltitudeMax?: SoftEqualString,
AltitudeMin?: SoftEqualString,
Area?: SoftEqualString,
CoordinatesLat?: SoftEqualString,
CoordinatesLon?: SoftEqualString,
Entity?: SoftEqualString,
Id?: SoftEqualString,
ID?: SoftEqualString,
Radius?: SoftEqualString,
SiteIndexA?: SoftEqualString,
Status?: SoftEqualString,
Text?: SoftEqualString,
Title?: SoftEqualString,
Traffic?: SoftEqualString,
Type?: SoftEqualString,
Cycle?: NumberType,
CheckNeeded: boolean
}