Расчет Дизайна Человека Рассчитать свой Бодиграф
pip install pyswisseph
import swisseph as swe
from datetime import datetime, timedelta
# Таблица: Ворота в порядке следования по зодиакальному кругу
# Начинаем с 41-х ворот (начало рейв-года, ~21° Козерога)
GATES_ORDER = [
41, 19, 61, 60, 41, 19, 61, 60, 54, 38, 58, 10, 58, 10, 11, 26,
# Примечание: это упрощенная структура. В реальности нужен точный массив
# из 64 значений, сопоставленный с градусами от 0 до 360.
]
def get_gate_and_line(longitude):
"""Переводит долготу планеты (0-360) в номер ворот и линию."""
# Весь круг 360° делим на 64 сектора (ворота)
gate_step = 360 / 64
# Каждый сектор делим на 6 (линии)
line_step = gate_step / 6
# Смещение: Дизайн Человека начинается не с 0° Овна.
# Нужно прибавить смещение, чтобы 0° Овна попадал в нужные ворота (25-е).
offset = 94.21875 # Примерное смещение для выравнивания по колесу
adjusted_long = (longitude + offset) % 360
gate_idx = int(adjusted_long / gate_step)
line_idx = int((adjusted_long % gate_step) / line_step) + 1
return gate_idx, line_idx
def calculate_planets(year, month, day, hour, minute):
"""Расчет координат планет на момент времени."""
# Устанавливаем время в формате Юлианского дня (UTC)
jd = swe.julday(year, month, day, hour + minute/60.0)
planets = {
"Sun": swe.SUN,
"Earth": swe.SUN, # Земля всегда строго напротив Солнца (+180°)
"Moon": swe.MOON,
"North Node": swe.NODES
}
results = {}
for name, code in planets.items():
res, ret = swe.calc_ut(jd, code)
long = res[0]
if name == "Earth":
long = (long + 180) % 360
gate, line = get_gate_and_line(long)
results[name] = {"gate": gate, "line": line, "long": long}
return results
# Пример использования:
data = calculate_planets(1990, 5, 15, 12, 30)
print(f"Данные Личности (Черное): {data}")
# Соответствие: какой канал какие центры соединяет
CHANNELS_MAP = {
"1-8": ["Inspiration", "Throat", "G"],
"2-14": ["The Beat", "G", "Sacral"],
"3-60": ["Mutation", "Sacral", "Root"],
# ... и так далее для всех 36 каналов
}
# Какие ворота относятся к какому центру (для закрашивания ворот)
CENTERS_GATES = {
"Head": [64, 61, 63],
"Ajna": [47, 24, 4, 17, 11, 43],
"Throat": [62, 23, 56, 16, 20, 31, 8, 33, 45, 12, 35],
"G": [7, 1, 13, 25, 46, 2, 15, 10],
"Heart": [21, 40, 26, 51],
"Sacral": [5, 14, 29, 34, 27, 42, 3, 9],
"Spleen": [48, 57, 44, 50, 32, 28, 18],
"Solar_Plexus": [36, 22, 37, 6, 49, 55, 30],
"Root": [53, 60, 52, 19, 39, 41, 58, 38, 54]
}
def determine_type(defined_centers, channels):
# 1. Генератор: если определен Сакральный центр
if "Sacral" in defined_centers:
# Если есть связь мотора с Горлом — Манифестирующий Генератор
return "Manifesting Generator" if is_motor_to_throat(channels) else "Generator"
# 2. Манифестор: Сакрал пуст, но есть связь мотора с Горлом
if is_motor_to_throat(channels):
return "Manifestor"
# 3. Проектор: Есть определенные центры, но нет связи мотора с Горлом и Сакрал пуст
if len(defined_centers) > 0:
return "Projector"
# 4. Рефлектор: ни один центр не определен
return "Reflector"
def find_design_date(birth_jd):
# birth_jd — это Юлианская дата рождения
# 1. Получаем позицию Солнца в момент рождения
res, ret = swe.calc_ut(birth_jd, swe.SUN)
birth_sun_long = res[0]
target_sun_long = (birth_sun_long - 88) % 360
# 2. Идем назад во времени (примерно на 88-90 дней)
# и ищем точку с минимальной погрешностью
check_date = birth_jd - 88
# Здесь используется цикл или метод бисекции для уточнения до секунды
# ...
return design_jd
{
"channels": [
{"id": "1-8", "name": "Вдохновение", "gates": [1, 8], "centers": ["G", "Throat"]},
{"id": "2-14", "name": "Биение", "gates": [2, 14], "centers": ["G", "Sacral"]},
{"id": "3-60", "name": "Мутация", "gates": [3, 60], "centers": ["Sacral", "Root"]},
{"id": "4-63", "name": "Логика", "gates": [4, 63], "centers": ["Ajna", "Head"]},
{"id": "5-15", "name": "Ритм", "gates": [5, 15], "centers": ["Sacral", "G"]},
{"id": "6-59", "name": "Интимность", "gates": [6, 59], "centers": ["Solar Plexus", "Sacral"]},
{"id": "7-31", "name": "Альфа", "gates": [7, 31], "centers": ["G", "Throat"]},
{"id": "9-52", "name": "Концентрация", "gates": [9, 52], "centers": ["Sacral", "Root"]},
{"id": "10-20", "name": "Пробуждение", "gates": [10, 20], "centers": ["G", "Throat"]},
{"id": "10-34", "name": "Исследование", "gates": [10, 34], "centers": ["G", "Sacral"]},
{"id": "10-57", "name": "Совершенная форма", "gates": [10, 57], "centers": ["G", "Spleen"]},
{"id": "11-56", "name": "Любознательность", "gates": [11, 56], "centers": ["Ajna", "Throat"]},
{"id": "12-22", "name": "Открытость", "gates": [12, 22], "centers": ["Throat", "Solar Plexus"]},
{"id": "13-33", "name": "Блудный сын", "gates": [13, 33], "centers": ["G", "Throat"]},
{"id": "16-48", "name": "Длина волны", "gates": [16, 48], "centers": ["Throat", "Spleen"]},
{"id": "17-62", "name": "Принятие", "gates": [17, 62], "centers": ["Ajna", "Throat"]},
{"id": "18-58", "name": "Суждение", "gates": [18, 58], "centers": ["Spleen", "Root"]},
{"id": "19-49", "name": "Синтез", "gates": [19, 49], "centers": ["Root", "Solar Plexus"]},
{"id": "20-34", "name": "Харизма", "gates": [20, 34], "centers": ["Throat", "Sacral"]},
{"id": "20-57", "name": "Озарение", "gates": [20, 57], "centers": ["Throat", "Spleen"]},
{"id": "21-45", "name": "Деньги", "gates": [21, 45], "centers": ["Heart", "Throat"]},
{"id": "23-43", "name": "Структурирование", "gates": [23, 43], "centers": ["Throat", "Ajna"]},
{"id": "24-61", "name": "Осознанность", "gates": [24, 61], "centers": ["Ajna", "Head"]},
{"id": "25-51", "name": "Инициация", "gates": [25, 51], "centers": ["G", "Heart"]},
{"id": "26-44", "name": "Сдача", "gates": [26, 44], "centers": ["Heart", "Spleen"]},
{"id": "27-50", "name": "Сохранение", "gates": [27, 50], "centers": ["Sacral", "Spleen"]},
{"id": "28-38", "name": "Борьба", "gates": [28, 38], "centers": ["Spleen", "Root"]},
{"id": "29-46", "name": "Открытие", "gates": [29, 46], "centers": ["Sacral", "G"]},
{"id": "30-41", "name": "Признание", "gates": [30, 41], "centers": ["Solar Plexus", "Root"]},
{"id": "32-54", "name": "Трансформация", "gates": [32, 54], "centers": ["Spleen", "Root"]},
{"id": "34-57", "name": "Сила", "gates": [34, 57], "centers": ["Sacral", "Spleen"]},
{"id": "35-36", "name": "Мимолетность", "gates": [35, 36], "centers": ["Throat", "Solar Plexus"]},
{"id": "37-40", "name": "Сообщество", "gates": [37, 40], "centers": ["Solar Plexus", "Heart"]},
{"id": "39-55", "name": "Эмоциональность", "gates": [39, 55], "centers": ["Root", "Solar Plexus"]},
{"id": "42-53", "name": "Цикличность", "gates": [42, 53], "centers": ["Sacral", "Root"]},
{"id": "47-64", "name": "Абстракция", "gates": [47, 64], "centers": ["Ajna", "Head"]}
]
}
def get_authority(defined_centers, active_channels):
"""
Определяет Внутренний Авторитет на основе закрашенных центров.
Порядок проверки (иерархия) критически важен.
"""
# 1. Эмоциональный (Солнечное Сплетение)
if "Solar Plexus" in defined_centers:
return "Эмоциональный"
# 2. Сакральный
if "Sacral" in defined_centers:
return "Сакральный"
# 3. Селезеночный (Селезенка)
if "Spleen" in defined_centers:
return "Селезеночный"
# 4. Эго (Сердечный центр)
# Бывает у Манифесторов (канал 21-45) или Проекторов (канал 51-25)
if "Heart" in defined_centers:
return "Эго-манифестируемый" if "Throat" in defined_centers else "Эго-проецируемый"
# 5. Джи (Самопроецируемый) — только у Проекторов
if "G" in defined_centers:
return "Самопроецируемый"
# 6. Ментальный (Окружение) — если определены только Темечко/Аджна/Горло
# При этом Сакрал, Эмоции, Селезенка, Эго и Джи должны быть пустыми
if any(c in defined_centers for c in ["Head", "Ajna", "Throat"]):
return "Ментальный (Внешнее окружение)"
# 7. Лунный — если ни один центр не определен (у Рефлекторов)
return "Лунный цикл"
# Пример использования:
# centers = ["Head", "Ajna", "Throat", "G"]
# print(get_authority(centers, [])) -> Самопроецируемый
import stripe # pip install stripe
stripe.api_key = "ваш_секретный_ключ"
def create_checkout_session(user_email, calculation_id):
# Создаем ссылку на оплату
session = stripe.checkout.Session.create(
payment_method_types=['card'],
customer_email=user_email,
line_items=[{
'price_data': {
'currency': 'usd',
'product_data': {'name': 'Полный расчет Дизайна Человека'},
'unit_amount': 1500, # Цена в центах (15.00$)
},
'quantity': 1,
}],
mode='payment',
success_url="https://your-site.com",
cancel_url="https://your-site.com",
metadata={'calc_id': calculation_id} # Чтобы знать, какой расчет отправлять
)
return session.url
REPORT_TEMPLATES = {
"Generator": "Вы — Генератор. Ваша стратегия — откликаться на жизнь...",
"Projector": "Вы — Проектор. Ваша стратегия — ждать приглашения...",
"Emotional": "Ваш авторитет — Эмоциональный. Не принимайте решений на пике чувств.",
"Sacral": "Ваш авторитет — Сакральный. Доверяйте своему внутреннему 'угу' или 'не-а'."
}
def generate_report(user_data):
"""
user_data: словарь с типом, авторитетом, профилем и т.д.
"""
type_text = REPORT_TEMPLATES.get(user_data['type'], "Описание типа готовится...")
auth_text = REPORT_TEMPLATES.get(user_data['authority'], "Описание авторитета готовится...")
full_report = f"""
Здравствуйте, {user_data['name']}!
Ваш расчет Дизайна Человека готов:
Тип: {user_data['type']}
Авторитет: {user_data['authority']}
ОСНОВНОЙ АНАЛИЗ:
{type_text}
КАК ПРИНИМАТЬ РЕШЕНИЯ:
{auth_text}
"""
return full_report
import smtplib
from email.mime.text import MIMEText
def send_email_report(to_email, report_content):
msg = MIMEText(report_content, 'plain', 'utf-8')
msg['Subject'] = 'Ваш расчет Дизайна Человека'
msg['From'] = 'info@your-hd-site.com'
msg['To'] = to_email
# Настройки вашего почтового сервера (например, Gmail или Mail.ru)
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
server.login("your_login", "your_password")
server.send_message(msg)