Документ описывает все величины, которые вычисляет ядро astro-core, кроме
самих эклиптических координат небесных тел (их даёт пропатченная Swiss Ephemeris
с точностью ~0.001″ — это первичные данные, не производные). Для каждой
производной величины приводятся формула, описание и обоснование со
ссылкой на школу/источник. Константы в тексте совпадают с кодом
(crates/astro-core/src/{dignities,motion,aspects,analysis,chart}.rs).
Обозначения: λ — эклиптическая долгота (°, [0,360)); v — скорость по долготе
(°/сут, v<0 — ретроградность); sign(λ) = ⌊λ/30⌋ mod 12 — индекс знака 0..11
(0=Овен … 11=Рыбы). Классическая «септенер»: Солнце, Луна, Меркурий, Венера,
Марс, Юпитер, Сатурн. «Десятка»: септенер + Уран, Нептун, Плутон.
sign(λ) = ⌊λ / 30⌋ mod 12
degrees_in_sign = λ mod 30
Обоснование. Тропический зодиак: 12 равных секторов по 30° от точки весеннего равноденствия (0° Овна). Стандарт со времён «Тетрабиблоса» Птолемея.
retrograde = (тело ≠ Солнце, Луна) ∧ (v < 0)
Описание. Видимое попятное движение. Светила не ретроградируют по определению. Обоснование. Общепринято; ретро-статус — вход для правил управления (§4.3).
house_of(λ): найти i, для которого cusp[i] ≤ λ < cusp[i+1] (с переходом через 360°);
вернуть i+1 (1..12)
Обоснование. Дом — сектор между куспидами. Куспиды даёт движок (§2).
Куспиды и углы (ASC, MC, Vertex) вычисляет Swiss Ephemeris по выбранной системе:
Koch (по умолчанию, как в ZET), Placidus, Whole Sign, Equal, Regiomontanus,
Campanus. ASC = куспид I, MC = куспид X; в ответе также DSC = ASC + 180° и
IC = MC + 180° (поля descendant/ic). Обоснование выбора Koch по умолчанию —
доминирующая система в русскоязычной практике и в ZET, на который ориентируется
проект. Это единственный блок, приходящий из движка, а не из формул ядра.
Перехваченные знаки (intercepted_signs): знак перехвачен, если внутри него
нет ни одного куспида.
intercepted = { знак s : ∀i sign(cusp[i]) ≠ s }
Обоснование. Классический признак «запертого» знака в квадрантных системах.
Кармическая карта — дома от заданного ASC (asc_longitude в запросе):
дана целевая долгота ASC (например, Восходящий узел) и широта места
ищем ARMC: асцендент строго монотонен по ARMC → грубое сканирование по 10°
+ бисекция до ~10⁻⁸° (swe_houses_armc: ARMC, широта, ε → куспиды)
дома строятся от найденного ARMC той же системой (Кох/Плацидус осмысленны)
Обоснование. Кармический гороскоп Шестопалова: ASC = Восходящий узел, дома
Коха. Вместо поворота равными долями решается настоящий ARMC для широты — куспиды
квадрантной системы остаются математически честными. Только тропический зодиак;
требуется location (широта формирует куспиды).
Все — статические функции долготы (и, для триплицитета, секты). Таблицы — из «Тетрабиблоса» Птолемея в редакции Уильяма Лилли («Christian Astrology», 1647).
TRAD_RULER[0..11] = [Марс, Венера, Меркурий, Луна, Солнце, Меркурий,
Венера, Марс, Юпитер, Сатурн, Сатурн, Юпитер]
EXALT: Овен→Солнце, Телец→Луна, Дева→Меркурий, Рыбы→Венера,
Козерог→Марс, Рак→Юпитер, Весы→Сатурн (у прочих знаков нет)
dignity(planet, λ): s = sign(λ), opp = (s+6) mod 12
domicile если planet управляет s (традиц. ИЛИ модерн)
exaltation если planet экзальтирует в s
detriment если planet управляет opp
fall если planet экзальтирует в opp
peregrine иначе
Иерархия — сильнейшее из перечисленного (обитель > экзальтация > изгнание > падение > перегринность). Считается только для десятки планет; у математических точек и Хирона — отсутствует (§15). Обоснование. Классическая шкала достоинств (Птолемей, Лилли). Изгнание/падение = достоинство в противоположном знаке (оппозиция обители/экзальтации).
term_ruler(λ): в каждом знаке 5 сегментов (граница°, владыка) — таблица TERMS
5 неравных участков на знак, владелец — одна из септенер (без светил). Полная
таблица в dignities.rs::TERMS. Обоснование. Египетские термы в редакции
Птолемея — наиболее распространённый вариант (альтернатива — термы Птолемея/халдеев).
decan_ruler(λ) = FACE_SEQ[⌊λ/10⌋ mod 7]
FACE_SEQ = [Марс, Солнце, Венера, Меркурий, Луна, Сатурн, Юпитер]
36 деканов по 10°, владыки идут «халдейским рядом» (по убыванию видимой скорости), циклом из 7. Обоснование. Халдейская последовательность деканов — стандарт (Птолемей; Al-Biruni, «Book of Instruction»).
TRIP[element][sect]: огонь →[Солнце,Юпитер], земля →[Венера,Луна],
воздух→[Сатурн,Меркурий], вода →[Марс,Марс]
element = sign mod 4; sect = дневной|ночной (§8)
Обоснование. Схема Дорофея Сидонского (день/ночь), принятая Птолемеем и Лилли.
dignity_school) — отдельная системаПомимо западных достоинств (§3.3, поле dignity), отдаётся параллельная
система достоинств школы Ананда (dignity_school) — самостоятельная и
самосогласованная. Транскрибирована дословно из первоисточника школы (скан,
автор «Anand»).
Таблица обителей/экзальтаций (изгнание = напротив обители, падение = напротив экзальтации; система полностью симметрична):
Тело обитель экзальтация (изгнание) (падение)
Солнце Лев Овен Водолей Весы
Луна Рак Телец Козерог Скорпион
Меркурий Близнецы,Дева Дева Стрелец,Рыбы Рыбы
Венера Телец,Весы Рыбы Скорпион,Овен Дева
Марс Овен,Скорпион Козерог Весы,Телец Рак
Юпитер Стрелец Рак Близнецы Козерог
Сатурн Козерог,Водолей Весы Рак,Лев Овен
Уран Водолей Скорпион Лев Телец
Нептун Рыбы Водолей Дева Лев
Плутон Скорпион Лев Телец Водолей
Прозерпина Дева Близнецы Рыбы Стрелец
Хирон Весы Стрелец Овен Близнецы
Сев. узел Скорпион Близнецы Телец Стрелец
Юж. узел Телец Стрелец Скорпион Близнецы
⚠️ Отличия от западной классики: у высших планет, Хирона, Прозерпины и узлов — одна обитель (не двойная); Юпитер здесь НЕ управляет Рыбами (Рыбы — обитель Нептуна), в отличие от западной традиции. Классическая семёрка (кроме этого пункта по Юпитеру) совпадает с западной.
Родство/вражда/нейтралитет (формула из первоисточника):
родство (score 4): знаки в тригоне к обители планеты (та же стихия)
вражда (score 2): знаки в оппозиции к знакам родства (= тригон к изгнанию)
нейтралитет(score 3): остальные знаки
Балльная шкала: обитель 6 · экзальтация 5 · родство 4 · нейтралитет 3 ·
вражда 2 · падение 1 · изгнание 0. Приоритет разрешения: обитель > экзальтация >
изгнание > падение > родство > вражда > нейтралитет.
Обоснование. Таблица и формула — из учебных материалов школы Ананда
(первоисточник предоставлен владельцем, 2026-07-04). Отдаётся в дополнение
к западной dignity, не заменяя её; две оси не смешиваются (западная классика
кормит альмутен §7, школьная — самостоятельна). Часть исходных таблиц —
эмбеддинг-сканы; кодировались по прямому чтению, не по пересказу.
⚠️ Версия предварительная.
dignity_schoolзакодирован по одному из источников школы («файл определений»: одиночные обители + формула родства/ вражды). Три документа школы (файл определений, сводная таблица «Проявление планет в знаках», doc «Взаимосвязь знаков и планет») противоречат друг другу: ось Овен–Скорпион (Овен→Марс vs Овен→Плутон-старшее), экзальтации Нептуна/Плутона (Лев/Водолей vs наоборот), одиночные vs двойные обители (двойные → оба знака по 6 баллов), вторые изгнания светил (Солнце-Козерог и Луна-Водолей = 1, не нейтралитет). Значения этих ячеек — не финальные; ждут арбитража школы. После вердикта таблица будет приведена к канону разом.
Управитель знака зависит от школы. Параметр запроса rulership_scheme
(traditional | modern | spbaa, по умолчанию modern) определяет sign_rulers,
house_rulers и dispositor. disposition/receptions отдают свои схемы
независимо. Возвращается массив управителей на знак (обычно один; два — на
секта-зависимых двойных обителях modern и осях spbaa).
rulers(s, traditional) = [TRAD_RULER[s]]
Классическая септенер; у каждого знака ровно один владыка. Источник. Птолемей/Лилли.
Секта-зависимые двойные обители. Три знака имеют дневного и ночного владыку; секта карты (§8) выбирает активного/главного (первым в массиве), но обе планеты остаются владыками обители. Дневной столбец совпадает с классической модернизацией, поэтому дневные карты не меняются; без домов (нет секты) берётся дневной порядок.
Скорпион → день [Плутон, Марс] / ночь [Марс, Плутон]
Козерог → день [Сатурн, Уран] / ночь [Уран, Сатурн]
Рыбы → день [Нептун, Юпитер] / ночь [Юпитер, Нептун]
Водолей → [Уран, Сатурн] ФИКСИРОВАННАЯ пара: Уран всегда старший,
Сатурн всегда со-управитель — секта порядок НЕ меняет
(решение школы, 2026-07-11)
прочие → высшая в её знаке, иначе TRAD_RULER[s] (один владыка)
Граница с достоинствами. Секта-двойные обители влияют только на sign_rulers,
dispositor, house_rulers и на disposition/receptions — но НЕ на западное
поле dignity объекта. Поле dignity остаётся одиночным классическим (§3.3,
объединение традиция∪модерн): в частности Уран в Козероге — перегринный, а не в
обители (Козерог классически принадлежит Сатурну; ночное со-управление Урана — это
школьная система dignity_school, а не западная обитель). Скорпион (Марс+Плутон) и
Рыбы (Юпитер+Нептун) уже покрыты объединением традиция∪модерн, поэтому там оба
владыки держат обитель и в dignity. Источник. Западная модернизация после
открытия транссатурновых + двойные обители по секте (решение проекта: ночной
со-владыка Козерога — Уран) — но строго вне поля dignity.
Светила, Меркурий и Венера управляют безусловно (ретро-статус не влияет).
Ось Овен–Скорпион — матрица Сениной (жёсткая передача, единственный владыка):
Марс D, Плутон D → Овен=Плутон, Скорпион=Марс (базовая инверсия)
иначе (любой ретро/оба ретро) → Овен=Марс, Скорпион=Плутон
Оси социальных/высших — двойное управление при ретроградности. Ретро-планета приобретает второй знак своей оси, не теряя свой; директная — только свой:
Стрелец = [Юпитер] (+ Нептун, если Нептун R)
Рыбы = [Нептун] (+ Юпитер, если Юпитер R)
Козерог = [Сатурн] (+ Уран, если Уран R)
Водолей = [Уран] (+ Сатурн, если Сатурн R)
Знак может иметь двух равноправных управителей (Рыбы = [Нептун, Юпитер] при ретро-Юпитере). Оба — полноправные элементы дома для формул событий. Обоснование. Правило ретроградности в редакции Т. Б. Сениной («Предсказательная астрология», «Медицинская астрология», СПбАА). Ось Овен–Скорпион несёт базовую инверсию Плутон/Марс, подтверждённую выверкой по эталонным картам. Отличается от «модерна» тем, что ретро-высшая не теряет знак, а расширяет владение.
Необязательный параметр запроса domicile_rulers передаёт собственную таблицу
обителей с дневным и ночным столбцами. Когда он присутствует, он переопределяет
rulership_scheme для всего низового расчёта:
active(sign) = night[sign] если карта ночная, иначе day[sign] (диспозитор, primary)
rulers(sign) = [active, second] (оба, активный первым; один, если day==night)
rules(sign,b) = day[sign]==b ИЛИ night[sign]==b (ОБА владыки = обитель)
Потребители: поле dignity объекта (оба владыки → обитель; изгнание в противоположном
знаке; экзальтация/падение остаются классическими), dispositor, sign_rulers,
house_rulers, receptions.by_rulership (модерн-проход), disposition.schemes.modern
и by_detriment, а также баллы обители (5) в альмутенах (almuten дома и карты). Схемы
traditional/spbaa в disposition/receptions остаются классическим эталоном, и
дефолт движка (без таблицы) не меняется.
Форматы: полный — {day:[12 тел], night:[12 тел]} (индекс Овен…Рыбы); разреженный
— {"scorpio":{"day":"pluto","night":"mars"}, …}, неуказанные знаки берут современного
одиночного управителя. Обоснование. Внешний интерпретатор (LLM) держит собственную
доктрину управления; движок считает достоинства/диспозиторы/рецепции/альмутены строго по
переданной таблице, оставляя свой дефолт классическим.
effective (правило Андреева)Ранее была схема, где ретро-высшая теряла знак в пользу классического владыки.
Это авторская концепция П. Андреева (LabLife), не относящаяся к Вронскому,
Шестопалову или западной традиции. По решению владельца проекта схема удалена
целиком; дефолтом стал modern. Оставлена здесь только как явная фиксация решения.
Диспозитор планеты — управитель знака, в котором она стоит:
dispositor(p) = primary_ruler(sign(λ_p)) (первый управитель при двойном).
Граф диспозиции — функциональный граф: у каждой планеты ровно одно исходящее ребро «→ её диспозитор». Такой граф в каждой компоненте имеет ровно один цикл, всё прочее — деревья, стекающие в цикл. Отсюда строгие определения:
terminal цикл длины 1 (планета в знаке собственного управления)
loop цикл длины ≥ 2 (длина 2 = взаимная рецепция по управлению)
final_dispositor существует ⟺ во всём графе ровно один терминал и нет петель
chain(p) путь p → dispositor → … до узла-приёмника (терминал/петля)
Отдаётся по схеме modern (эффективная: учитывает domicile_rulers, когда таблица
передана), а также by_detriment (диспозитор = управитель противоположного
знака). Графы traditional и by_exaltation из ответа убраны (2026-07-11): их не
читал ни один потребитель; внутренние расчёты не изменились.
Обоснование. Дерево диспозиторов и «финальный диспозитор» — классический
инструмент (Lilly; в русской школе — цепочки диспозиции). Функционально-графовая
трактовка гарантирует корректность петель/терминалов.
spbaa — мультиграф. При двойном управлении у планеты до двух диспозиторов, что
ломает функциональный граф. В версии 1 отдаются nodes (до двух disposes_to) и
terminals (планета в знаке собственного владения); петли/цепочки помечены
experimental (семантика при мульти-рёбрах ещё уточняется). Для формул событий
критичны именно элементы домов, а не дерево.
Пара планет, каждая из которых стоит в знаке, которым управляет другая:
reception(A,B, схема) ⟺ ruler(sign(A))=B ∧ ruler(sign(B))=A, A≠B
Отдаются by_rulership (схемы traditional и modern, каждая пара помечена схемой),
by_exaltation (по экзальтации), by_face (по декану). При каждой паре — аспект
между телами, если есть (напряжённый аспект в рецепции классически смягчается).
Инвариант: пары by_rulership в схеме S ≡ петли длины 2 диспозиции в схеме S.
Обоснование. Классическая mutual reception (Lilly); рецепция по экзальтации/фасу —
расширение того же принципа на другие достоинства.
Точки (хилегические): Солнце, Луна, ASC, Жребий Фортуны
Для каждой точки в её градусе начисляем баллы владыкам достоинств:
обитель +5 · экзальтация +4 · триплицитет +3 (по секте) · терм +2 · лицо +1
Альмутен = планета (из септенер) с максимальной суммой по всем точкам
tie = true, если максимум делят ≥2 планеты
Ответ содержит полную разбивку scores — результат воспроизводим на бумаге.
Обоснование. Метод Абрахама Ибн Эзры (веса 5-4-3-2-1) — самый распространённый
для альмутена фигуры (ср. Al-Biruni; у Лилли те же баллы достоинств). Прозрачность
разбивки — чтобы устранить «магические» расхождения с ZET (флаг tie явно
сигналит неоднозначность).
sect = дневная, если Солнце над горизонтом (дом ≥ VII); иначе ночная
Обоснование. Дневные/ночные карты — базовое деление эллинистической астрологии (Дорофей, Птолемей); секта переключает владык триплицитета и формулу Фортуны.
день (Солнце над горизонтом): Фортуна = ASC + Луна − Солнце
ночь: Фортуна = ASC + Солнце − Луна
(результат по модулю 360°)
Обоснование. Классический жребий с обращением день/ночь (Птолемей; Paulus Alexandrinus). Обращение по секте — принятая (не «птолемеевская-без-обращения») версия, соответствующая большинству школ.
d = |λ_planet − λ_sun| (свёрнуто в [0,180])
d < 0°17′ (0.2833°) → cazimi («в сердце Солнца»)
d < 8.5° → combust (сожжение)
d < 17° → under_beams (под лучами)
иначе → free
Только для десятки планет (у Солнца — free). Обоснование. Классические пороги (Lilly: казими 17′, сожжение до 8.5°, под лучами до 17°). Считается по эклиптической долготе (упрощение относительно строгого «по телу с широтой»).
speed_class = fast, если |v| ≥ mean_speed(тело); иначе slow
stationary = |v| < 0.10 · mean_speed(тело)
mean_speed (°/сут): Солнце 0.9856, Луна 13.176, Меркурий 1.383, Венера 1.2,
Марс 0.524, Юпитер 0.083, Сатурн 0.0335, Уран 0.0117, Нептун 0.006, Плутон 0.004
Только для физических тел (десятка + Хирон); у математических точек — отсутствует. Обоснование. Сравнение с средним суточным движением тела — стандартная оценка «быстрая/медленная»; порог станции 10% от среднего — практический критерий близости к развороту. Пороги приближённые, не претендуют на школьную догму.
e = (λ_Луна − λ_Солнце) mod 360
waxing (растущая), если e < 180°; иначе waning (убывающая)
Обоснование. Элонгация Луны от Солнца — определение растущей/убывающей Луны.
Определение. Луна «без курса», если до выхода из текущего знака она не образует ни одного мажорного аспекта (0/60/90/120/180°) к классической планете. Метод. Численно: находим момент ингрессии Луны в следующий знак (поиск корня), затем на сетке между «сейчас» и ингрессией ищем смену знака у величин (разделение Луна–планета − точный угол); если ни одна не меняет знак — VoC. Обоснование. Классическое электологическое правило (Lilly; «пустой курс» Луны).
Via Combusta и исключение Спики (Гвидо Бонатти, Клод Дарио):
via_combusta = долгота Луны в [195°, 225°) (15° Весов – 15° Скорпиона)
spica_longitude(jd) = 203.833° (23°50′ Весов, J2000) + 0.013969°·годы (прецессия ~50.3″/год)
spica_exception = |Луна − Спика| ≤ 1° (Луна в соединении со Спикой)
Обоснование. «Сожжённый путь» — зона повреждения Луны; но точное соединение со
Спикой (благотворнейшая неподвижная звезда, внутри Via Combusta) по средневековому
правилу защищает — Луна без курса перестаёт быть слабой, дело разрешается
благополучно. Долгота Спики берётся прецессией от J2000, файл звёзд не нужен.
Отдаётся { void, start?, until, next_sign_at, via_combusta?, spica_exception? } —
start (только при void: true) = момент последнего точного аспекта Луны в знаке
(либо вход в знак, если аспектов в нём не было): начало холостого окна.
moon_void и moon_sequence (§13.1) выводятся из ОДНОГО списка точных аспектов,
поэтому void ⟺ upcoming пуст — инвариант по построению.
moon_sequence)sign_start = вход Луны в текущий знак (последнее пересечение нижней границы до сейчас)
ingress = следующий вход в знак (= moon_void.next_sign_at)
события = точные мажоры Луны к десяти планетам (кроме Луны) в [sign_start, ingress],
через пересечение Луной (планета ± угол) — идентично /v1/aspect-hits
last = последнее событие с exact < datetime_utc; upcoming = будущие до ингрессии
Обоснование. «Что Луна сделает раньше» — сердце хорара; та же методика, что у
/v1/aspect-hits, → воспроизводимо.
planetary_hour)сутки: ВОСХОД→закат (12 неравных дневных часов), закат→след. восход (12 ночных)
восход/закат — верхний край диска, с рефракцией (swe_rise_trans)
владыка дня — день недели ЛОКАЛЬНОГО дня восхода (LMT по долготе):
вс-Солнце пн-Луна вт-Марс ср-Меркурий чт-Юпитер пт-Венера сб-Сатурн
владыка часа — халдейский ряд [Сатурн,Юпитер,Марс,Солнце,Венера,Меркурий,Луна]
циклом; час 1 = владыка дня
Обоснование. Классические планетарные часы (Лилли/Фроули) — фильтр радикальности хорара. За полярным кругом поле опускается; владыка дня по LMT (движок знает только долготу, не таймзону).
lunar_day)новолуние NM = последнее пересечение элонгации Луна−Солнце через 0° (вверх) ≤ момента
день 1 = NM → первый ВОСХОД Луны после NM (в месте карты)
день N = (N−1)-й восход Луны после NM → N-й восход
последний день цикла (29/30) кончается СЛЕДУЮЩИМ новолунием, не восходом
восход Луны — видимый (рефракция, верхний край), как sunrise в planetary_hour
Отдаётся { number 1–30, day_start, day_end, new_moon, moonset? }; moonset —
ближайший заход Луны после момента карты (справочно). За полярным кругом (нет
восхода Луны) блок опускается.
Обоснование. Счёт лунных дней по восходу Луны (Вронский, Величко) —
локация-зависимый: номер дня в Москве и Владивостоке может отличаться. Элонгация
зодиако-независима (айанамша сокращается в разности), поэтому новолуние ищется в
тропической системе. Максимум 30 лунных дней в синодическом месяце (~29.53 сут при
восходах через ~24.8 ч → 28–30 восходных дней).
Аспект угол орб(°)
соединение 0 8
оппозиция 180 8
трин 120 7
квадрат 90 7
секстиль 60 5
квинконс 150 3
aspect_between(λa,λb): d=|λa−λb| (свёрнуто); ближайший аспект с |d−угол| ≤ орб
Один и тот же матчер — для натальных, транзитных, синастрических аспектов и для колеса на фронте (единый источник орбов). Обоснование. Птолемеевы аспекты + квинконс; орбы — умеренные, близкие к практике ZET.
sep = свёрнутое разделение λa,λb в [0,180]
d(sep)/dt по знаку скоростей; applying ⟺ (sep − угол)·d(sep)/dt < 0 (орб сжимается)
Транзиты/прогрессии/возвраты: натальная карта — застывший снимок, натальное тело неподвижно; сходимость определяет только скорость второго (транзитного/ прогрессивного) тела. Поэтому для меж-картных аспектов скорость натальной стороны = 0. Обоснование. Иначе (при учёте натальной скорости) флаг систематически инвертировался — быстрое натальное тело «перебивало» медленное транзитное.
angle_aspects: aspect_between(λ_объекта, {ASC, MC, DSC, IC}) (все четыре угла)
DSC = ASC + 180°, IC = MC + 180° — считаются ПРЯМО, не зеркалом
Каждый хит держит орб по умолчанию своего вида аспекта: 6°-трин к ASC не порождает 6°-секстиль к DSC, если секстильный орб (5°) уже. Поэтому близкие к границе орба конфигурации к DSC/IC могут отсутствовать там, где слепое зеркало их бы дало. Обоснование. Аспекты к угловым точкам — «урожайный» класс значимых конфигураций, часто пропускаемый; прямой расчёт по четырём углам честнее зеркала к сетке орбов.
unaspected(p) ⟺ p (из десятки) не образует ни одного птолемеевского аспекта
(соединение/секстиль/квадрат/трин/оппозиция; квинконс исключён)
ни к одной другой планете десятки
Обоснование. Классически «непитающаяся» планета (feral/unaspected) действует обособленно; квинконс не считается птолемеевским.
Орб ребра фигуры = базовый орб аспекта +1° при участии светила (классика даёт светилам до 8–9°). Каждое ребро проверяется в своём лимите.
grandTrine 3 планеты, попарно трины
tSquare оппозиция + вершина (apex) в квадрате к обоим концам
yod apex в двух квинконсах, основание — секстиль
bisextile apex в двух секстилях, основание — трин
grandCross две оппозиции, связанные четырьмя квадратами
cart прямоугольник: две оппозиции-диагонали, стороны секстиль/трин
trapezoid оппозиция, стянутая цепочкой из трёх секстилей
sail большой трин + 4-я планета (оппозиция к вершине, секстиль к двум)
apex — тело, принимающее оба однотипных аспекта; axis — два полюса тау-квадрата.
Слияние мультиплетов: несколько тау с общим apex и общим телом-хабом на оси
сливаются в один (например, две планеты против одного Сатурна с вершиной Плутон —
один четырёхпланетный тау, а не два). Обоснование. Классические аспектные
фигуры; надбавка орба светилам — общепринятая практика.
stellium = ≥3 планеты (только десятка) в одном ЗНАКЕ (scope=sign) или ДОМЕ (scope=house)
attendants = узлы/Лилит/Хирон/Фортуна в том же знаке/доме (в кворум НЕ входят)
Обоснование. Классическое определение скопления по знаку/дому; точки не считаются планетами (иначе «стеллиум с узлом» вводит в заблуждение). Цепочки соединений — намеренно НЕ стеллиум.
Семь планетарных паттернов Марка Эдмунда Джонса по распределению десяти планет
вокруг круга. Считаем зазоры между соседними планетами (по кругу, сумма 360°),
g1 — наибольший, occupied = 360 − g1; «значимый» зазор ≥ 60° (два знака).
Bundle (связка) occupied ≤ 120° — все в пределах трина
Bowl (чаша) один зазор ≥ 180° — все в полусфере
Locomotive (локомотив) один зазор ≥ 120° — ~240°, пустой трин; ведущая планета после зазора
Bucket (ведро) два значимых зазора, одна группа = одиночная «ручка»
Seesaw (качели) два значимых зазора, обе группы ≥ 2 планет
Splash (веер/разброс) нет зазоров ≥ 60° — планеты по всему кругу
Splay (растопырка) три и более значимых зазора — нерегулярно
Отдаётся { pattern, occupied_arc, largest_gap, leading?, handle? }.
Обоснование. Классификация форм гороскопа М. Э. Джонса («The Guide to
Horoscope Interpretation», 1941) — стандартный анализ общего рисунка карты.
Пороги (120/180/240°, значимый зазор 60°) — общепринятая алгоритмическая версия;
детектор детерминированный.
Соединения ~30 значимых звёзд (4 Королевские + бехенианские + ярчайшие) с десятью планетами и углами карты (ASC/MC/DSC/IC) по эклиптической долготе.
долгота звезды — из движка (swe_fixstar), прецессия учтена на дату карты
орб по величине: mag ≤ 1 → 2°; mag ≤ 2 → 1.5°; иначе 1°
соединение, если |долгота цели − долгота звезды| ≤ орб
Отдаётся star_conjunctions: [{ body?|angle?, star, star_longitude, orb, magnitude }],
сортировка по орбу. Обоснование. Классический учёт неподвижных звёзд —
соединения по долготе (Робсон, «Fixed Stars and Constellations»); орб шире у ярких
звёзд. Параны (Брэйди) — метод по углам, отдельным этапом (пока не реализован).
Дополнительно отдаётся star_positions: [{ star, longitude, magnitude, anchor }] —
весь каталог с долготами (прецессия на дату карты), сортировка по долготе. Это
данные для отрисовки звёзд снаружи круга (как в ZET): веб-колесо и серверный SVG
(natal.svg) ставят маркер звезды за зодиакальным кольцом с подсказкой по
наведению (имя + величина). Тот же каталог и тот же гейт, что у star_conjunctions.
Дециматор шума на колесе. Неподвижная звезда трактуется, только когда она в
соединении с планетой/углом (звезда в пустом градусе не читается). Поэтому
рендереры рисуют звезду, лишь если она якорь (anchor) или входит в
star_conjunctions. Якоря (постоянные ориентиры) — 4 Королевские звезды (Стражи:
Альдебаран, Регул, Антарес, Фомальгаут) плюс Алголь (главная злая) и Спика
(главная благая). Так на ободе обычно 4–10 звёзд вместо всего каталога (~34).
Классический традиционный список — 15 Бехенианских звёзд (Агриппа); полный каталог
остаётся в star_positions для клиентов, которые строят колесо по-своему.
δ — экваториальное склонение (из движка, SEFLG_EQUATORIAL)
parallel |δa − δb| ≤ 1° (одинаковое склонение)
contraparallel |δa + δb| ≤ 1° (равные по модулю, разные полушария)
Обоснование. Параллели/контрпараллели — деклинационные аспекты (соединение/ оппозиция по склонению); орб 1° — стандарт.
Принцип. Потребитель ответа — LLM-интерпретатор; правдоподобно выглядящее, но бессмысленное поле = гарантированная ошибка трактовки («сожжённая Фортуна», «перегринный узел»).
Математические точки: mean_node, true_node, south_node, mean_lilith,
white_moon, selena, proserpina, part_fortune
У них ОПУЩЕНЫ: dignity, solar_status, speed_class, stationary
Оставлены (позиционные): longitude, sign, degrees_in_sign, house,
term_ruler, decan_ruler, dispositor, retrograde
Хирон — физическое тело: speed_class/stationary оставлены; dignity/solar_status —
опущены (классика не определяет достоинство/сожжение для Хирона)
Обоснование. У точек нет физического тела: скорость тождественно постоянна или ноль (детектор станции ложно срабатывал бы всегда), а эссенциальных достоинств у узлов/Лилит нет ни в одной школе.
white_moon и selena — разные точки (расходятся до ~24°), обе считаются по
файлу орбитальных элементов seorbel.txt, который scripts/fetch-ephe.sh при
сборке переписывает для согласования с ZET:
white_moon — элементы «White Moon» рефитятся под ZET (аналог Селены/Белой Луны
с периодом ~7 лет, восходящая средняя орбита)
selena — добавляется строка «ZET Selena» (ipl 70): вариант Селены,
совпадающий с одноимённой точкой ZET
proserpina — добавляется строка «ZET Proserpina» (ipl 71), гипотетическая
транс-плутоновая Прозерпина в редакции ZET
Обоснование. Эталон проекта — ZET: обе версии Селены/Белой Луны существуют в
практике (разные школы фитят разные орбиты), движок отдаёт обе, а выбор ключа —
методологическое решение потребителя. Канонический источник элементов — сам
fetch-ephe.sh (эфемеридные файлы не коммитятся).
Позиции на момент транзита + меж-картные аспекты к наталу (натал фиксирован, §14.2).
Опциональный единый орб ?orb для всех аспектов (для конфликт-индекса Шестопалова
нужен 6°).
Аспекты A×B + наложение домов: a_in_b_houses (планеты A в домах B) и наоборот.
Обоснование. Наложение домов — базовый синастрический приём.
Возврат тела = момент, когда тело возвращается к натальной долготе, ближайший к дате.
Поиск: грубое сканирование + бисекция корня уравнения λ(t) − λ_natal = 0.
Соляр — частный случай (Солнце). Возвраты Луны/Сатурна/узла — та же процедура.
Обоснование. Возвратные карты (returns) — стандарт; корень ищется численно, а не приближается.
age_years = (jd_target − jd_birth) / 365.2422
secondary (вторичные): карта на момент birth + age_years СУТОК (1 сутки = 1 год)
symbolic (символич.): каждая долгота +rate·age_years (1° = 1 год по умолч.)
Обоснование. «День за год» — вторичные прогрессии (Placidus); символические дирекции на 1°/год — дуга Нострадамуса/Птолемея. Дробные сутки обрабатываются точно (без грубого округления до целых суток).
POST /v1/charts/directions/primary. Первичная дирекция — дуга прямого восхождения,
на которую суточное вращение сферы подводит промиссор к кругу положения
сигнификатора; дуга переводится в годы жизни ключом (Naibod 0°59′08″/год по
умолчанию или Ptolemy 1°/год).
Все точки проецируются на эклиптику (широта 0 — зодиакальные дирекции) и
переводятся в экватор (α, δ) через наклон ε. С широтой φ и натальным ARMC
(прямое восхождение MC):
AD = asin(tan φ · tan δ) (разность восхождения)
DSA = 90°+AD, NSA = 90°−AD (дневная/ночная полудуга)
f = MD / SA (доля полудуги: 0 на меридиане, ±1 на горизонте)
MD — меридианное расстояние (от MC над горизонтом, иначе от IC), SA — своя полудуга
Директная дирекция (промиссор ведётся к сигнификатору, полудуга промиссора):
A = MD_промиссор − f_сигнификатор · SA_промиссор (на стороне сигнификатора)
Конверсная — сигнификатор ведётся к промиссору (роли меняются, берётся полудуга
сигнификатора). Формула сводится к классике: к MC A = α_P − ARMC; к Асценденту
A = OA_P − OA_Asc; точка к самой себе A = 0.
Сигнификаторы (по умолчанию): Asc, MC, Солнце, Луна. Промиссоры: десять
планет и их птолемеевы аспекты (☌ ✶ □ △ ☍) как зодиакальные лучи. Возвращаются
события в окне max_years (по умолч. 90), отсортированные по возрасту; директные и
(если converse=true) конверсные. Обоснование. Классический метод Плацидуса «под
полюсом» в форме полудуг; дирекции считаются тропически (экваториально), поэтому
сидерический запрос вычисляется на своих тропических позициях.
Для транзитного тела и диапазона дат — точные моменты каждого мажорного аспекта к
натальным точкам + окна входа/выхода по орбу (по скорости в момент точного аспекта).
Обоснование. Отвечает на вопрос «когда именно», без перебора /transits.
/v1/calendar/global)«Фон года» — небо само по себе, без натала: один пакетный проход по эфемеридам за
диапазон, кэшируется общим на всех. Тот же корневой поиск, что у возвратов и
/aspect-hits (§16.5): грубое сканирование скалярной функции неба → бисекция до
знакоперемены (≈0.1 с). Все exact — UTC-инстанты; раскладку по локальным дням
делает клиент. Луна вне дефолта (её ~146 ингрессий/год — слой 2/скоринг).
Ингрессии (C1) корень lon(t) = граница знака (кратное 30°); шаг ≤1° хода тела,
чтобы ловить ретро-перецепления у станции; каждое пересечение —
отдельная запись; from_sign/sign и retrograde — по сэмплам ±1 мин.
Станции (C2) корень speed_longitude(t) = 0; kind: + → − = retrograde (D→R),
− → + = direct (R→D). Солнце/Луна/узлы исключены (не станцонируют).
Ретро-периоды пара станций R…D; период через край диапазона обрезается и
помечается clipped_start/clipped_end.
Транзит×транзит корень folded(lon_a − lon_b) = угол аспекта (обе цели ±θ);
(C3) до 3 прохождений при ретро; пары по умолчанию — социальные/
внешние между собой + к Солнцу и Марсу (быстрые внутренние — шум).
Фазы Луны (C4) корень элонгации (moon−sun) = {0,90,180,270}; флаг eclipse — по
совпадению сизигии с затмением (new↔solar, full↔lunar, окно ~72 мин).
Затмения (C5) swe_sol_eclipse_when_glob / swe_lun_eclipse_when итерацией по
диапазону; долгота = Солнце (солн.) / Луна (лунн.) в максимуме;
node (north/south) — по близости к истинному узлу.
Обоснование. Единый примитив корневого поиска (§16.5, VoC, возвраты) применён к небу целиком; ничего не берётся «из головы» — каждый факт воспроизводим сэмплами долгот. Кросс-инвариант C4↔C5 (солнечное затмение ⟺ новолуние, лунное ⟺ полнолуние) сходится, т.к. фазы и затмения считаются независимо и совпадают по времени.
Факты, которые раньше досчитывал enrichment-слой на Python (бисекцией поверх HTTP-
снимков), перенесены в ядро — считаются прямо на эфемеридах, один источник для REST
и WASM. Всё опционально и аддитивно: дефолтные aspects/angle_aspects не
меняются (сторож R2.1: angle_aspects только Asc/MC).
Конвенционные орбы (wide_aspects: true). Интерпретатор работает в орбах
«конвенции»: квинконс 3° · к светилам 8° · иначе 6°. Отдаются два блока:
wide_aspects внутрикартные аспекты с орбом ≤ конвенции; derived=true, если
орб больше дефолтного орба API (т.е. только в расширенной полосе).
wide_angle_aspects аспекты ко всем 4 углам: Asc/MC считаются, Dsc/IC — зеркала
(зеркальный тип: ☌↔☍, △↔✶, □→□, квинконс без зеркала), тот же орб,
derived=true. Узлы (Mean/South) и Парс Фортуны исключены.
Тайминги к углам (/v1/aspect-hits, include_angles: true). /aspect-hits
углы не покрывал; теперь для транзитного тела корневым поиском ищутся точные
моменты аспектов к Asc/MC (цели угол ± аспект), с окном enters/leaves по скорости;
Dsc/IC — зеркала (derived). Отдаётся блоком angle_hits.
Календарь Луны (/v1/moon/transit { natal, from, to }).
void_windows окна Луны-без-курса на диапазоне: конец окна — готовый ингресс
(§13, next_sign_at), начало — бисекция по флагу void; via_combusta/
spica (§13) и clipped_start/clipped_end при выходе за края.
house_path путь транзитной Луны по знакам и НАТАЛЬНЫМ домам: долгота Луны
разворачивается монотонно, пересечения натальных куспидов — бисекцией;
сегменты с постоянными (sign, natal_house). Диапазон ≤ ~2 мес.
Обоснование. VoC-конец сегмента house_path совпадает с ингрессией знака (одна
и та же машина §13) — кросс-консистентно. Всё это вычисление, а не текст: словесные
ярлыки, веса «core/secondary» и токен-бюджет остаются в enrichment-слое (доктрина
«код считает, LLM трактует»).
Принцип. Продолжение гигиены точек (§15): под конкретную задачу нужен не весь
ответ, а его срез. Профиль ?profile= отключает и вычисление, и сериализацию
ненужных блоков — это экономия CPU и байтов, а не только фильтр на выходе.
raw — всё; байт-в-байт как без проекции (быстрый путь без Value-обхода)
natal_interp — набор для интерпретации: без per-object speed_longitude/declination,
без disposition.by_detriment,
без star_conjunctions/star_positions; округление 2 знака
horary — только хорарная суть: houses, objects, moon_void, planetary_hour,
moon_sequence, aspects, receptions, sign_rulers; 2 знака
calendar — только objects + houses; 2 знака
?precision=N переопределяет округление; ?fields=+блок,-блок донастраивает
набор блоков поверх профиля (голый список a,b — явный whitelist). Query
побеждает те же поля в теле запроса. Неизвестный профиль — 422 (не молчаливый
raw). Гейтинг вычисления реализован в astro-core (Projection), общий для
REST и WASM; постфильтр/округление — в API-слое.
effective (Андреева) удалена — не признанная школа; дефолт modern.tie,
чтобы результат был воспроизводим и неоднозначность была видна.spbaa (матрица Овен–Скорпион, двойное управление при ретроградности,
правило сохранения градуса).?orb).