npm package: @it-healer/human-design-calculator
Description: Human Design bodygraph calculator CLI — calculates type, authority, profile, channels, gates, and generates SVG visualization
Author: PAVLO POPOV
Latest version: 1.0.2

# Human Design Bodygraph Calculator CLI

CLI-инструмент для расчёта бодиграфа Human Design. Принимает дату, время, таймзону и координаты рождения, выдаёт полный JSON со всеми расчётами и опционально генерирует SVG-визуализацию бодиграфа.

## Установка

```bash
npm install
```

## Файлы эфемерид (Swiss Ephemeris)

Для высокоточных расчётов необходимо скачать файлы Swiss Ephemeris (.se1) и поместить их в папку `ephemeris/`.

### Где скачать

Файлы доступны на официальном FTP-сервере Swiss Ephemeris:

**https://www.astro.com/ftp/swisseph/ephe/**

Необходимые файлы (суммарно ~10 MB):

| Файл            | Описание                         | Размер   |
|-----------------|----------------------------------|----------|
| `sepl_18.se1`   | Планеты (от Солнца до Плутона)   | ~3.5 MB  |
| `semo_18.se1`   | Луна                             | ~5.5 MB  |
| `seas_18.se1`   | Астероиды (включая True Node)    | ~0.5 MB  |

Файлы `*_18.se1` покрывают период **600 BC — 2400 AD**, что достаточно для любых расчётов.

### Скачивание одной командой

```bash
cd ephemeris
curl -O https://www.astro.com/ftp/swisseph/ephe/sepl_18.se1
curl -O https://www.astro.com/ftp/swisseph/ephe/semo_18.se1
curl -O https://www.astro.com/ftp/swisseph/ephe/seas_18.se1
```

> **Без файлов эфемерид** инструмент всё равно работает — Swiss Ephemeris автоматически переключается на встроенный алгоритм Moshier (менее точный, но достаточный для Gate/Line/Color).

## Использование

```bash
npm run start -- 15.07.1990 12:00 Europe/London 51.5074 -0.1278 ./chart.svg
```

Или напрямую через `node`:

```bash
node src/index.js 15.07.1990 12:00 Europe/London 51.5074 -0.1278 ./chart.svg
```

### Параметры

| #   | Описание                                   | Пример                             |
|-----|--------------------------------------------|------------------------------------|
| 1   | Дата рождения (DD.MM.YYYY или YYYY-MM-DD) | `15.07.1990`                       |
| 2   | Локальное время рождения (HH:MM)          | `12:00`                            |
| 3   | Таймзона в формате IANA                    | `Europe/London`, `America/New_York` |
| 4   | Широта места рождения                     | `51.5074`                          |
| 5   | Долгота места рождения                    | `-0.1278`                          |
| 6   | Путь для сохранения SVG (опционально)     | `./chart.svg`                      |

Если 6-й параметр не указан, выводится только JSON без генерации SVG.

### Примеры

Только JSON:
```bash
npm run start -- 03.11.1985 09:15 America/New_York 40.7128 -74.006
```

JSON + SVG-визуализация:
```bash
npm run start -- 03.11.1985 09:15 America/New_York 40.7128 -74.006 ./bodygraph.svg
```

## SVG-визуализация

При указании пути для SVG генерируется визуализация бодиграфа:

- 9 центров с цветовой раскраской (определённые/неопределённые)
- 36 каналов (активные выделены)
- 64 гейта с номерами в кружках
- Цветовая кодировка: чёрный — Personality, красный — Design, синий — оба
- Контур человеческой фигуры на фоне

## Выходной JSON

Инструмент выводит JSON со следующими полями:

```
input                  — входные параметры
birthDateUTC           — дата рождения в UTC
designDateUTC          — дата дизайна (88° ретроград Солнца) в UTC
activations            — активации для Personality и Design
  personality/design   — для каждого из 13 тел: gate, line, color, tone, base
    Sun, Earth, Moon, Mercury, Venus, Mars, Jupiter,
    Saturn, Uranus, Neptune, Pluto, NorthNode, SouthNode
type                   — Generator, Manifesting Generator, Projector, Manifestor, Reflector
strategy               — To Respond, To Inform, To Wait for the Invitation, To Wait a Lunar Cycle
signature              — Satisfaction, Peace, Success, Surprise
notSelfTheme           — Frustration, Anger, Bitterness, Disappointment
authority              — Solar Plexus, Sacral, Spleen, Ego, Self Projected, Outer Authority, Lunar
definition             — None, Single, Split, Wide Split, Triple Split, Quad Split
profile                — "Line/Line" (например "1/3")
incarnationCross       — полное название инкарнационного креста
variable               — "P[L/R][L/R] D[L/R][L/R]"
channels               — массив активных каналов ("9-52", "29-46", ...)
activatedGates         — массив всех уникальных активированных гейтов
definedCenters         — массив определённых центров
undefinedCenters       — массив неопределённых центров
centerDefinition       — объект с булевыми флагами для каждого центра
circuitries            — массив контуров (Individual, Tribal, Collective Logic, Collective Abstract)
determination          — Appetite, Taste, Thirst, Touch, Sound, Light
environment            — Caves, Markets, Kitchens, Mountains, Valleys, Shores
view                   — Survival, Possibility, Power, Wanting, Probability, Personal
motivation             — Fear, Hope, Desire, Need, Guilt, Innocence
cognition              — Smell, Taste, Outer Vision, Inner Vision, Feeling, Touch
sense                  — Security, Uncertainty, Action, Meditation, Judgment, Acceptance
```

## Технические детали

- **Node.js** — чистый JavaScript, без TypeScript
- **Swiss Ephemeris** (`swisseph` npm) — астрономические вычисления планетарных позиций
- **Luxon** — конвертация локального времени в UTC с учётом таймзоны
- **Бинарный поиск** для нахождения даты Дизайна (~50 итераций vs 800K+ в линейном подходе)
- 13 небесных тел: Sun, Earth, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto, North Node, South Node
- Полная иерархия активации: Gate → Line → Color → Tone → Base

## Разработчик

**PAVLO POPOV**

- Web: [it-healer.com](https://it-healer.com)
- Telegram / WhatsApp: [+905516294716](https://wa.me/905516294716)