astro-skill 1.1.1__py3-none-any.whl

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.
Files changed (80) hide show
  1. astro/SKILL.md +106 -0
  2. astro/agents/openai.yaml +4 -0
  3. astro/assets/cover_ganesha.png +0 -0
  4. astro/config/defaults.json +12 -0
  5. astro/data/ashtakavarga_data.json +77 -0
  6. astro/data/avakahada_data.json +92 -0
  7. astro/data/compatibility_data.json +56 -0
  8. astro/data/functional_nature.json +183 -0
  9. astro/data/gochar_narrative_data.json +189 -0
  10. astro/data/graha_data.json +284 -0
  11. astro/data/nakshatra_db.json +31 -0
  12. astro/data/personality_ext.json +84 -0
  13. astro/data/phalit_basic.json +60 -0
  14. astro/data/phalit_ext.json +154 -0
  15. astro/data/remedies.json +320 -0
  16. astro/data/remedies_ext.json +76 -0
  17. astro/ephe/README.md +30 -0
  18. astro/ephe/semo_18.se1 +0 -0
  19. astro/ephe/sepl_18.se1 +0 -0
  20. astro/scripts/__init__.py +1 -0
  21. astro/scripts/ashtakavarga.py +44 -0
  22. astro/scripts/aspects.py +57 -0
  23. astro/scripts/avakahada.py +90 -0
  24. astro/scripts/dasha_calculator.py +197 -0
  25. astro/scripts/fonts/NotoSansDevanagari.ttf +0 -0
  26. astro/scripts/gochar_calculator.py +201 -0
  27. astro/scripts/gochar_narrative.py +408 -0
  28. astro/scripts/guna_milan.py +231 -0
  29. astro/scripts/html_pdf_report.py +3438 -0
  30. astro/scripts/kundali_calculator.py +648 -0
  31. astro/scripts/panchang_calculator.py +504 -0
  32. astro/scripts/pdf_report.py +991 -0
  33. astro/scripts/remedies.py +41 -0
  34. astro/scripts/report_generator.py +329 -0
  35. astro/scripts/scoring.py +258 -0
  36. astro/scripts/swe_lock.py +33 -0
  37. astro/scripts/synthesis.py +391 -0
  38. astro/scripts/vargas.py +67 -0
  39. astro/scripts/yoga_detector.py +448 -0
  40. astro/tests/test_ashtakavarga.py +41 -0
  41. astro/tests/test_aspects.py +49 -0
  42. astro/tests/test_astro_mcp_server.py +121 -0
  43. astro/tests/test_astro_mcp_storage.py +164 -0
  44. astro/tests/test_astro_mcp_tools.py +294 -0
  45. astro/tests/test_avakahada.py +71 -0
  46. astro/tests/test_ayanamsa.py +44 -0
  47. astro/tests/test_dasha.py +117 -0
  48. astro/tests/test_dasha_balance_antardasha.py +84 -0
  49. astro/tests/test_gochar.py +74 -0
  50. astro/tests/test_gochar_narrative.py +212 -0
  51. astro/tests/test_guna_milan.py +100 -0
  52. astro/tests/test_kundali.py +158 -0
  53. astro/tests/test_panchang.py +118 -0
  54. astro/tests/test_parse_birth_details_time.py +71 -0
  55. astro/tests/test_pdf_report.py +336 -0
  56. astro/tests/test_pdf_report_escaping.py +67 -0
  57. astro/tests/test_planetary_strength.py +179 -0
  58. astro/tests/test_pratyantardasha.py +59 -0
  59. astro/tests/test_premium_pdf_sections.py +753 -0
  60. astro/tests/test_project_structure.py +114 -0
  61. astro/tests/test_remedies.py +103 -0
  62. astro/tests/test_report.py +205 -0
  63. astro/tests/test_scoring.py +192 -0
  64. astro/tests/test_smoke_mcp_script.py +37 -0
  65. astro/tests/test_synthesis.py +255 -0
  66. astro/tests/test_vargas.py +46 -0
  67. astro/tests/test_yoga.py +347 -0
  68. astro_skill-1.1.1.dist-info/METADATA +254 -0
  69. astro_skill-1.1.1.dist-info/RECORD +80 -0
  70. astro_skill-1.1.1.dist-info/WHEEL +5 -0
  71. astro_skill-1.1.1.dist-info/entry_points.txt +2 -0
  72. astro_skill-1.1.1.dist-info/licenses/LICENSE +21 -0
  73. astro_skill-1.1.1.dist-info/top_level.txt +2 -0
  74. services/__init__.py +0 -0
  75. services/astro_mcp/__init__.py +11 -0
  76. services/astro_mcp/__main__.py +7 -0
  77. services/astro_mcp/models.py +49 -0
  78. services/astro_mcp/server.py +550 -0
  79. services/astro_mcp/storage.py +185 -0
  80. services/astro_mcp/tools.py +471 -0
astro/SKILL.md ADDED
@@ -0,0 +1,106 @@
1
+ ---
2
+ name: astro
3
+ description: Vedic astrology calculation skill for kundali, dasha, panchang, gochar transits, guna milan, structured report JSON, and Hindi PDF reports. Use when an agent needs deterministic astrology from birth details, date, time, and location.
4
+ ---
5
+
6
+ # Astro Skill
7
+
8
+ Use this skill to calculate and explain Vedic astrology outputs. Keep responses practical, respectful, and grounded in computed data. Do not predict death, accidents, medical diagnoses, or unavoidable harm.
9
+
10
+ ## Defaults
11
+
12
+ - Ayanamsa: Lahiri Chitrapaksha.
13
+ - House system: whole sign.
14
+ - Default language: Hinglish (`hin`), with Hindi (`hi`) and English (`en`) supported by callers.
15
+ - Default location for non-birth daily work: Delhi, India.
16
+
17
+ ## Required Inputs
18
+
19
+ - Kundali: date of birth, time of birth, place, latitude, longitude, timezone.
20
+ - Dasha: kundali output from `kundali_calculator.py`.
21
+ - Panchang: local date, place, latitude, longitude, timezone.
22
+ - Basic report: kundali JSON, with optional dasha JSON and panchang JSON.
23
+ - PDF report: kundali JSON plus optional dasha and panchang JSON; dasha is recommended for the timeline chart.
24
+ - Gochar (transits): kundali JSON plus a local calendar date (and optional place for location-sensitive work).
25
+ - Guna Milan: two complete kundali JSON files (both people need full birth details).
26
+ - Muhurta and other advanced modules may require purpose plus date range when implemented.
27
+
28
+ ## Phase 1 Workflow
29
+
30
+ 1. Run `scripts/kundali_calculator.py` with birth details and `--json`.
31
+ 2. Inspect `lagna`, `rashi`, `nakshatra`, `nakshatra_pada`, `planets`, `houses`, and `dasha_seed`.
32
+ 3. Run `scripts/dasha_calculator.py --kundali-json <path> --json` when dasha timing is needed.
33
+ 4. Explain the output in the user's preferred language/tone. Mention calculations and practical meaning; avoid mystical filler.
34
+
35
+ ## Phase 2 Workflow
36
+
37
+ 1. Run `scripts/panchang_calculator.py` with local date, place, latitude, longitude, timezone, and `--json`.
38
+ 2. Inspect `vara`, `tithi`, `paksha`, `nakshatra`, `yoga`, `karana`, `sunrise`, and `sunset`.
39
+ 3. Use the Panchang output as calculation data for daily guidance or later muhurta work. Do not convert it into muhurta recommendations unless a muhurta module is available.
40
+ 4. If sunrise or sunset is `null`, check the `warnings` array and explain that the rest of the Panchang fields still came from computed solar/lunar positions.
41
+
42
+ ## Tier 2 Workflow (Gochar & Guna Milan)
43
+
44
+ Use these after Phase 1 kundali JSON exists. Outputs are calculation-backed; keep interpretation conservative and avoid certainty claims.
45
+
46
+ ### Gochar (transit snapshot)
47
+
48
+ 1. Run `scripts/kundali_calculator.py` for the native chart and save `--json` output.
49
+ 2. Run `scripts/gochar_calculator.py --kundali-json <chart.json> --date YYYY-MM-DD --json`.
50
+ 3. Explain which grahas are transiting which rashis/houses relative to the natal lagna. Mention retrograde flags when present.
51
+ 4. Do not treat gochar as fate prediction; frame as timing context for operator review.
52
+
53
+ ### Guna Milan (Ashtakoot compatibility score)
54
+
55
+ 1. Build kundali JSON for person A and person B (full DOB, TOB, place, lat, lon, timezone).
56
+ 2. Run `scripts/guna_milan.py --kundali-a-json <a.json> --kundali-b-json <b.json> --json`.
57
+ 3. Present the scored breakdown (guna table, total, dosha flags) from JSON only.
58
+ 4. Compatibility scores are heuristic drafts, not relationship verdicts. An astrologer remains the final authority.
59
+
60
+ ## Phase 3 Workflow
61
+
62
+ 1. Generate or load kundali JSON. Optionally generate dasha JSON and daily panchang JSON.
63
+ 2. Run `scripts/report_generator.py --kundali-json <chart.json> --dasha-json <dasha.json> --panchang-json <panchang.json> --json`.
64
+ 3. Use the structured report as an astrologer/operator draft: birth chart facts, current dasha, daily Panchang, and safety notes.
65
+ 4. Keep interpretation clearly separated from calculation. The reviewing astrologer or operator remains the final authority.
66
+
67
+ ## Phase 4 Workflow
68
+
69
+ 1. Generate or load kundali JSON. Generate dasha JSON when the PDF should include a dasha timeline chart.
70
+ 2. Run `scripts/pdf_report.py --kundali-json <chart.json> --dasha-json <dasha.json> --panchang-json <panchang.json> --output output/pdf/<name>.pdf --renderer html`.
71
+ The default `--renderer html` uses Chromium via Playwright and is the
72
+ preferred path for Hindi/Devanagari polish. Use `--renderer reportlab` to
73
+ fall back to the legacy in-process renderer (lower-quality maatra
74
+ shaping, but no browser dependency).
75
+ 3. Install the browser once with `python -m playwright install chromium` if
76
+ the HTML renderer reports it is missing.
77
+ 4. Check the PDF text or rendered pages before sharing. The PDF includes a planet/house chart, planet table, dasha timeline, Panchang section, and safety notes when those inputs are present.
78
+ 5. Keep PDF content calculation-first. Treat it as a formatted working draft for astrologer/operator review.
79
+
80
+ ## Command Examples
81
+
82
+ ```bash
83
+ python scripts/kundali_calculator.py --dob 26/12/2019 --tob 09:15 --place Delhi --lat 28.6139 --lon 77.2090 --timezone Asia/Kolkata --json
84
+ python scripts/dasha_calculator.py --kundali-json chart.json --json
85
+ python scripts/gochar_calculator.py --kundali-json chart.json --date 2026-07-01 --json
86
+ python scripts/guna_milan.py --kundali-a-json bride.json --kundali-b-json groom.json --json
87
+ python scripts/panchang_calculator.py --date 2026-05-21 --place Delhi --lat 28.6139 --lon 77.209 --timezone Asia/Kolkata --json
88
+ python scripts/report_generator.py --kundali-json chart.json --dasha-json dasha.json --panchang-json panchang.json --json
89
+ python scripts/pdf_report.py --kundali-json chart.json --dasha-json dasha.json --panchang-json panchang.json --output output/pdf/report.pdf
90
+ ```
91
+
92
+ ## Dependency Handling
93
+
94
+ The calculator requires `pyswisseph` for Swiss Ephemeris. If it is missing, install the project dependencies or install `pyswisseph` directly. Do not silently approximate kundali positions without an ephemeris.
95
+
96
+ PDF generation supports two renderers:
97
+
98
+ - `html` (default, preferred) — uses `playwright` + a Chromium binary for
99
+ print-CSS-styled output with proper Devanagari shaping. Install the
100
+ browser once with `python -m playwright install chromium`. If Chromium is
101
+ missing the renderer raises a clear `RuntimeError` with the install
102
+ command.
103
+ - `reportlab` (fallback) — uses `reportlab` in-process. No browser needed,
104
+ but Devanagari maatras are not perfectly shaped.
105
+
106
+ PDF test extraction uses `pypdf` in the development environment.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Astro"
3
+ short_description: "Calculate Vedic kundali and Vimshottari dasha."
4
+ default_prompt: "Calculate a Vedic astrology chart from birth details."
Binary file
@@ -0,0 +1,12 @@
1
+ {
2
+ "ayanamsa": "lahiri",
3
+ "house_system": "whole_sign",
4
+ "default_timezone": "Asia/Kolkata",
5
+ "default_location": "Delhi",
6
+ "default_lat": 28.6139,
7
+ "default_lon": 77.209,
8
+ "default_geoname_id": "1273294",
9
+ "language": "hin",
10
+ "report_format": "markdown",
11
+ "dasha_system": "vimshottari"
12
+ }
@@ -0,0 +1,77 @@
1
+ {
2
+ "_note": "Parashari (BPHS) Ashtakavarga benefic places. For planet P and reference R, P gains a bindu in the house(s) listed (counted from R's sign). Each planet's houses sum to its fixed bhinna total; the 8-fold Sarva total is always 337 (checksum-validated in tests). Auditable here.",
3
+ "references": ["Surya", "Chandra", "Mangal", "Budh", "Guru", "Shukra", "Shani", "Lagna"],
4
+ "bhinna_totals": {"Surya": 48, "Chandra": 49, "Mangal": 39, "Budh": 54, "Guru": 56, "Shukra": 52, "Shani": 39},
5
+ "benefic_houses": {
6
+ "Surya": {
7
+ "Surya": [1, 2, 4, 7, 8, 9, 10, 11],
8
+ "Chandra": [3, 6, 10, 11],
9
+ "Mangal": [1, 2, 4, 7, 8, 9, 10, 11],
10
+ "Budh": [3, 5, 6, 9, 10, 11, 12],
11
+ "Guru": [5, 6, 9, 11],
12
+ "Shukra": [6, 7, 12],
13
+ "Shani": [1, 2, 4, 7, 8, 9, 10, 11],
14
+ "Lagna": [3, 4, 6, 10, 11, 12]
15
+ },
16
+ "Chandra": {
17
+ "Surya": [3, 6, 7, 8, 10, 11],
18
+ "Chandra": [1, 3, 6, 7, 10, 11],
19
+ "Mangal": [2, 3, 5, 6, 9, 10, 11],
20
+ "Budh": [1, 3, 4, 5, 7, 8, 10, 11],
21
+ "Guru": [1, 4, 7, 8, 10, 11, 12],
22
+ "Shukra": [3, 4, 5, 7, 9, 10, 11],
23
+ "Shani": [3, 5, 6, 11],
24
+ "Lagna": [3, 6, 10, 11]
25
+ },
26
+ "Mangal": {
27
+ "Surya": [3, 5, 6, 10, 11],
28
+ "Chandra": [3, 6, 11],
29
+ "Mangal": [1, 2, 4, 7, 8, 10, 11],
30
+ "Budh": [3, 5, 6, 11],
31
+ "Guru": [6, 10, 11, 12],
32
+ "Shukra": [6, 8, 11, 12],
33
+ "Shani": [1, 4, 7, 8, 9, 10, 11],
34
+ "Lagna": [1, 3, 6, 10, 11]
35
+ },
36
+ "Budh": {
37
+ "Surya": [5, 6, 9, 11, 12],
38
+ "Chandra": [2, 4, 6, 8, 10, 11],
39
+ "Mangal": [1, 2, 4, 7, 8, 9, 10, 11],
40
+ "Budh": [1, 3, 5, 6, 9, 10, 11, 12],
41
+ "Guru": [6, 8, 11, 12],
42
+ "Shukra": [1, 2, 3, 4, 5, 8, 9, 11],
43
+ "Shani": [1, 2, 4, 7, 8, 9, 10, 11],
44
+ "Lagna": [1, 2, 4, 6, 8, 10, 11]
45
+ },
46
+ "Guru": {
47
+ "Surya": [1, 2, 3, 4, 7, 8, 9, 10, 11],
48
+ "Chandra": [2, 5, 7, 9, 11],
49
+ "Mangal": [1, 2, 4, 7, 8, 10, 11],
50
+ "Budh": [1, 2, 4, 5, 6, 9, 10, 11],
51
+ "Guru": [1, 2, 3, 4, 7, 8, 10, 11],
52
+ "Shukra": [2, 5, 6, 9, 10, 11],
53
+ "Shani": [3, 5, 6, 12],
54
+ "Lagna": [1, 2, 4, 5, 6, 7, 9, 10, 11]
55
+ },
56
+ "Shukra": {
57
+ "Surya": [8, 11, 12],
58
+ "Chandra": [1, 2, 3, 4, 5, 8, 9, 11, 12],
59
+ "Mangal": [3, 5, 6, 9, 11, 12],
60
+ "Budh": [3, 5, 6, 9, 11],
61
+ "Guru": [5, 8, 9, 10, 11],
62
+ "Shukra": [1, 2, 3, 4, 5, 8, 9, 10, 11],
63
+ "Shani": [3, 4, 5, 8, 9, 10, 11],
64
+ "Lagna": [1, 2, 3, 4, 5, 8, 9, 11]
65
+ },
66
+ "Shani": {
67
+ "Surya": [1, 2, 4, 7, 8, 10, 11],
68
+ "Chandra": [3, 6, 11],
69
+ "Mangal": [3, 5, 6, 10, 11, 12],
70
+ "Budh": [6, 8, 9, 10, 11, 12],
71
+ "Guru": [5, 6, 11, 12],
72
+ "Shukra": [6, 11, 12],
73
+ "Shani": [3, 5, 6, 11],
74
+ "Lagna": [1, 3, 4, 6, 10, 11]
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,92 @@
1
+ {
2
+ "_comment": "Classical Avakahada Chakra lookup tables. Nakshatra order: Ashwini(1)..Revati(27). Sources: standard Jataka tables as printed in traditional janma patrikas.",
3
+ "gan": {
4
+ "Ashwini": "देव", "Bharani": "मनुष्य", "Krittika": "राक्षस", "Rohini": "मनुष्य",
5
+ "Mrigashira": "देव", "Ardra": "मनुष्य", "Punarvasu": "देव", "Pushya": "देव",
6
+ "Ashlesha": "राक्षस", "Magha": "राक्षस", "Purva Phalguni": "मनुष्य",
7
+ "Uttara Phalguni": "मनुष्य", "Hasta": "देव", "Chitra": "राक्षस", "Swati": "देव",
8
+ "Vishakha": "राक्षस", "Anuradha": "देव", "Jyeshtha": "राक्षस", "Mula": "राक्षस",
9
+ "Purva Ashadha": "मनुष्य", "Uttara Ashadha": "मनुष्य", "Shravana": "देव",
10
+ "Dhanishta": "राक्षस", "Shatabhisha": "राक्षस", "Purva Bhadrapada": "मनुष्य",
11
+ "Uttara Bhadrapada": "मनुष्य", "Revati": "देव"
12
+ },
13
+ "yoni": {
14
+ "Ashwini": "अश्व", "Bharani": "गज", "Krittika": "मेष", "Rohini": "सर्प",
15
+ "Mrigashira": "सर्प", "Ardra": "श्वान", "Punarvasu": "मार्जार", "Pushya": "मेष",
16
+ "Ashlesha": "मार्जार", "Magha": "मूषक", "Purva Phalguni": "मूषक",
17
+ "Uttara Phalguni": "गौ", "Hasta": "महिष", "Chitra": "व्याघ्र", "Swati": "महिष",
18
+ "Vishakha": "व्याघ्र", "Anuradha": "मृग", "Jyeshtha": "मृग", "Mula": "श्वान",
19
+ "Purva Ashadha": "वानर", "Uttara Ashadha": "नकुल", "Shravana": "वानर",
20
+ "Dhanishta": "सिंह", "Shatabhisha": "अश्व", "Purva Bhadrapada": "सिंह",
21
+ "Uttara Bhadrapada": "गौ", "Revati": "गज"
22
+ },
23
+ "nadi": {
24
+ "Ashwini": "आदि", "Ardra": "आदि", "Punarvasu": "आदि", "Uttara Phalguni": "आदि",
25
+ "Hasta": "आदि", "Jyeshtha": "आदि", "Mula": "आदि", "Shatabhisha": "आदि",
26
+ "Purva Bhadrapada": "आदि",
27
+ "Bharani": "मध्य", "Mrigashira": "मध्य", "Pushya": "मध्य", "Purva Phalguni": "मध्य",
28
+ "Chitra": "मध्य", "Anuradha": "मध्य", "Purva Ashadha": "मध्य", "Dhanishta": "मध्य",
29
+ "Uttara Bhadrapada": "मध्य",
30
+ "Krittika": "अंत्य", "Rohini": "अंत्य", "Ashlesha": "अंत्य", "Magha": "अंत्य",
31
+ "Swati": "अंत्य", "Vishakha": "अंत्य", "Uttara Ashadha": "अंत्य",
32
+ "Shravana": "अंत्य", "Revati": "अंत्य"
33
+ },
34
+ "namakshar": {
35
+ "Ashwini": ["चू", "चे", "चो", "ला"],
36
+ "Bharani": ["ली", "लू", "ले", "लो"],
37
+ "Krittika": ["अ", "ई", "उ", "ए"],
38
+ "Rohini": ["ओ", "वा", "वी", "वू"],
39
+ "Mrigashira": ["वे", "वो", "का", "की"],
40
+ "Ardra": ["कू", "घ", "ङ", "छ"],
41
+ "Punarvasu": ["के", "को", "हा", "ही"],
42
+ "Pushya": ["हू", "हे", "हो", "डा"],
43
+ "Ashlesha": ["डी", "डू", "डे", "डो"],
44
+ "Magha": ["मा", "मी", "मू", "मे"],
45
+ "Purva Phalguni": ["मो", "टा", "टी", "टू"],
46
+ "Uttara Phalguni": ["टे", "टो", "पा", "पी"],
47
+ "Hasta": ["पू", "ष", "ण", "ठ"],
48
+ "Chitra": ["पे", "पो", "रा", "री"],
49
+ "Swati": ["रू", "रे", "रो", "ता"],
50
+ "Vishakha": ["ती", "तू", "ते", "तो"],
51
+ "Anuradha": ["ना", "नी", "नू", "ने"],
52
+ "Jyeshtha": ["नो", "या", "यी", "यू"],
53
+ "Mula": ["ये", "यो", "भा", "भी"],
54
+ "Purva Ashadha": ["भू", "धा", "फा", "ढा"],
55
+ "Uttara Ashadha": ["भे", "भो", "जा", "जी"],
56
+ "Shravana": ["खी", "खू", "खे", "खो"],
57
+ "Dhanishta": ["गा", "गी", "गू", "गे"],
58
+ "Shatabhisha": ["गो", "सा", "सी", "सू"],
59
+ "Purva Bhadrapada": ["से", "सो", "दा", "दी"],
60
+ "Uttara Bhadrapada": ["दू", "थ", "झ", "ञ"],
61
+ "Revati": ["दे", "दो", "चा", "ची"]
62
+ },
63
+ "varna": {
64
+ "Mesha": "क्षत्रिय", "Simha": "क्षत्रिय", "Dhanu": "क्षत्रिय",
65
+ "Vrishabha": "वैश्य", "Kanya": "वैश्य", "Makara": "वैश्य",
66
+ "Mithuna": "शूद्र", "Tula": "शूद्र", "Kumbha": "शूद्र",
67
+ "Karka": "ब्राह्मण", "Vrischika": "ब्राह्मण", "Meena": "ब्राह्मण"
68
+ },
69
+ "vashya": {
70
+ "Mesha": "चतुष्पाद", "Vrishabha": "चतुष्पाद", "Mithuna": "मानव",
71
+ "Karka": "जलचर", "Simha": "वनचर", "Kanya": "मानव",
72
+ "Tula": "मानव", "Vrischika": "कीट", "Dhanu": "चतुष्पाद",
73
+ "Makara": "जलचर", "Kumbha": "मानव", "Meena": "जलचर"
74
+ },
75
+ "tatva": {
76
+ "Mesha": "अग्नि", "Simha": "अग्नि", "Dhanu": "अग्नि",
77
+ "Vrishabha": "पृथ्वी", "Kanya": "पृथ्वी", "Makara": "पृथ्वी",
78
+ "Mithuna": "वायु", "Tula": "वायु", "Kumbha": "वायु",
79
+ "Karka": "जल", "Vrischika": "जल", "Meena": "जल"
80
+ },
81
+ "sign_lords": {
82
+ "Mesha": "Mangal", "Vrishabha": "Shukra", "Mithuna": "Budh", "Karka": "Chandra",
83
+ "Simha": "Surya", "Kanya": "Budh", "Tula": "Shukra", "Vrischika": "Mangal",
84
+ "Dhanu": "Guru", "Makara": "Shani", "Kumbha": "Shani", "Meena": "Guru"
85
+ },
86
+ "paya_by_moon_house": {
87
+ "1": "स्वर्ण", "6": "स्वर्ण", "11": "स्वर्ण",
88
+ "2": "रजत", "5": "रजत", "9": "रजत",
89
+ "3": "ताम्र", "7": "ताम्र", "10": "ताम्र",
90
+ "4": "लौह", "8": "लौह", "12": "लौह"
91
+ }
92
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "_note": "Standard Ashtakoot (Guna Milan) reference tables. Auditable and adjustable here. Yoni uses a same/enemy/neutral tier (4/0/2); gana is symmetric. Nakshatra gana/yoni come from nakshatra_db.json; nadi is defined below by nakshatra index (0-26).",
3
+ "element_varna": {"Water": 4, "Fire": 3, "Earth": 2, "Air": 1},
4
+ "nadi_by_index": {
5
+ "Aadi": [0, 5, 6, 11, 12, 17, 18, 23, 24],
6
+ "Madhya":[1, 4, 7, 10, 13, 16, 19, 22, 25],
7
+ "Antya": [2, 3, 8, 9, 14, 15, 20, 21, 26]
8
+ },
9
+ "yoni_enemies": [
10
+ ["Cow", "Tiger"],
11
+ ["Elephant", "Lion"],
12
+ ["Horse", "Buffalo"],
13
+ ["Sheep", "Monkey"],
14
+ ["Serpent", "Mongoose"],
15
+ ["Dog", "Deer"],
16
+ ["Cat", "Rat"]
17
+ ],
18
+ "gana_points": {"same": 6, "Deva|Manushya": 5, "Deva|Rakshasa": 1, "Manushya|Rakshasa": 0},
19
+ "vashya_controls": {
20
+ "Mesha": ["Simha", "Vrischika"],
21
+ "Vrishabha": ["Karka", "Tula"],
22
+ "Mithuna": ["Kanya"],
23
+ "Karka": ["Vrischika", "Dhanu"],
24
+ "Simha": ["Tula"],
25
+ "Kanya": ["Mithuna", "Meena"],
26
+ "Tula": ["Makara", "Kanya"],
27
+ "Vrischika": ["Karka"],
28
+ "Dhanu": ["Meena"],
29
+ "Makara": ["Kumbha", "Mesha"],
30
+ "Kumbha": ["Mesha"],
31
+ "Meena": ["Makara"]
32
+ },
33
+ "planet_friends": {
34
+ "Surya": {"friends": ["Chandra", "Mangal", "Guru"], "enemies": ["Shukra", "Shani"]},
35
+ "Chandra": {"friends": ["Surya", "Budh"], "enemies": []},
36
+ "Mangal": {"friends": ["Surya", "Chandra", "Guru"], "enemies": ["Budh"]},
37
+ "Budh": {"friends": ["Surya", "Shukra"], "enemies": ["Chandra"]},
38
+ "Guru": {"friends": ["Surya", "Chandra", "Mangal"], "enemies": ["Budh", "Shukra"]},
39
+ "Shukra": {"friends": ["Budh", "Shani"], "enemies": ["Surya", "Chandra"]},
40
+ "Shani": {"friends": ["Budh", "Shukra"], "enemies": ["Surya", "Chandra", "Mangal"]}
41
+ },
42
+ "graha_maitri_points": {
43
+ "friend|friend": 5,
44
+ "friend|neutral": 4,
45
+ "neutral|neutral": 3,
46
+ "enemy|friend": 1,
47
+ "enemy|neutral": 0.5,
48
+ "enemy|enemy": 0
49
+ },
50
+ "verdict_bands": [
51
+ {"min": 33, "label": "excellent"},
52
+ {"min": 25, "label": "good"},
53
+ {"min": 18, "label": "average"},
54
+ {"min": 0, "label": "not recommended"}
55
+ ]
56
+ }
@@ -0,0 +1,183 @@
1
+ {
2
+ "_source": "BPHS convention",
3
+ "lagnas": {
4
+ "Mesha": {
5
+ "benefic": [
6
+ "Surya",
7
+ "Chandra",
8
+ "Mangal",
9
+ "Guru"
10
+ ],
11
+ "malefic": [
12
+ "Budh",
13
+ "Shukra",
14
+ "Shani"
15
+ ],
16
+ "neutral": []
17
+ },
18
+ "Vrishabha": {
19
+ "benefic": [
20
+ "Surya",
21
+ "Budh",
22
+ "Shani"
23
+ ],
24
+ "malefic": [
25
+ "Chandra",
26
+ "Mangal",
27
+ "Guru",
28
+ "Shukra"
29
+ ],
30
+ "neutral": []
31
+ },
32
+ "Mithuna": {
33
+ "benefic": [
34
+ "Shukra"
35
+ ],
36
+ "malefic": [
37
+ "Surya",
38
+ "Mangal",
39
+ "Guru"
40
+ ],
41
+ "neutral": [
42
+ "Chandra",
43
+ "Budh",
44
+ "Shani"
45
+ ]
46
+ },
47
+ "Karka": {
48
+ "benefic": [
49
+ "Chandra",
50
+ "Mangal",
51
+ "Guru"
52
+ ],
53
+ "malefic": [
54
+ "Budh",
55
+ "Shukra",
56
+ "Shani"
57
+ ],
58
+ "neutral": [
59
+ "Surya"
60
+ ]
61
+ },
62
+ "Simha": {
63
+ "benefic": [
64
+ "Surya",
65
+ "Mangal",
66
+ "Guru"
67
+ ],
68
+ "malefic": [
69
+ "Budh",
70
+ "Shukra",
71
+ "Shani"
72
+ ],
73
+ "neutral": [
74
+ "Chandra"
75
+ ]
76
+ },
77
+ "Kanya": {
78
+ "benefic": [
79
+ "Shukra"
80
+ ],
81
+ "malefic": [
82
+ "Chandra",
83
+ "Mangal",
84
+ "Guru"
85
+ ],
86
+ "neutral": [
87
+ "Surya",
88
+ "Budh",
89
+ "Shani"
90
+ ]
91
+ },
92
+ "Tula": {
93
+ "benefic": [
94
+ "Budh",
95
+ "Shukra",
96
+ "Shani"
97
+ ],
98
+ "malefic": [
99
+ "Surya",
100
+ "Mangal",
101
+ "Guru"
102
+ ],
103
+ "neutral": [
104
+ "Chandra"
105
+ ]
106
+ },
107
+ "Vrischika": {
108
+ "benefic": [
109
+ "Surya",
110
+ "Chandra",
111
+ "Guru"
112
+ ],
113
+ "malefic": [
114
+ "Budh",
115
+ "Shukra",
116
+ "Shani"
117
+ ],
118
+ "neutral": [
119
+ "Mangal"
120
+ ]
121
+ },
122
+ "Dhanu": {
123
+ "benefic": [
124
+ "Surya",
125
+ "Mangal"
126
+ ],
127
+ "malefic": [
128
+ "Budh",
129
+ "Shukra",
130
+ "Shani"
131
+ ],
132
+ "neutral": [
133
+ "Chandra",
134
+ "Guru"
135
+ ]
136
+ },
137
+ "Makara": {
138
+ "benefic": [
139
+ "Budh",
140
+ "Shukra",
141
+ "Shani"
142
+ ],
143
+ "malefic": [
144
+ "Chandra",
145
+ "Mangal",
146
+ "Guru"
147
+ ],
148
+ "neutral": [
149
+ "Surya"
150
+ ]
151
+ },
152
+ "Kumbha": {
153
+ "benefic": [
154
+ "Shukra",
155
+ "Shani"
156
+ ],
157
+ "malefic": [
158
+ "Chandra",
159
+ "Mangal",
160
+ "Guru"
161
+ ],
162
+ "neutral": [
163
+ "Surya",
164
+ "Budh"
165
+ ]
166
+ },
167
+ "Meena": {
168
+ "benefic": [
169
+ "Chandra",
170
+ "Mangal"
171
+ ],
172
+ "malefic": [
173
+ "Surya",
174
+ "Budh",
175
+ "Shukra",
176
+ "Shani"
177
+ ],
178
+ "neutral": [
179
+ "Guru"
180
+ ]
181
+ }
182
+ }
183
+ }