# Ακρίβεια υπολογισμών

## TL;DR

AstroWay API χρησιμοποιεί **Swiss Ephemeris** (επίσημος C-κώδικας από Astrodienst, 
δημιουργούς astro.com) — τον ίδιο κινητήρα, με τον οποίο οι επαγγελματίες αστρολόγοι 
εργάζονται για 30+ χρόνια στο **Solar Fire ($495), Kepler ($995), Astro Gold ($29.99/μήνα) και Janus**.
Εμείς συναρμολογούμε τον κινητήρα σε WebAssembly και παρουσιάζουμε ένα REST API-στρώμα, 
χωρίς μεσάζοντες. Κάθε βασικό σημείο υπολογισμού καλύπτεται από regression 
snapshot-тест, και η ακρίβεια του κινητήρα επαληθεύεται μέσω **τριγωνομετρίας** με τρία 
ανεξάρτητα μέσα + έναν **NASA 5-Millennium Eclipse Catalog**:

- **Πλανητικές θέσεις**: `< 0.1 arcsec` vs επίσημου swetest CGI Astrodienst
- **Κουπίδες οίκων Placidus**: `0.000"` ακριβής αντιστοιχία
- **Εκλείψεις**: `< 1 λεπτό` vs NASA Eclipse Catalog
- **ACG γραμμές**: `< 1.5 χλμ` στον ισημερινό vs swetest
- **Ανατολή/Δύση Ηλίου**: `< 10 δευτερόλεπτα` vs timeanddate.com
- **Σελήνη VOC, εισόδους, πλανητικές συνδέσεις**: ακρίβεια μέχρι το τμήμα του δευτερολέπτου

## Κινητήρας

| Στοιχείο | Τιμή |
|-----------|----------|
| Βιβλιοθήκη | Swiss Ephemeris C code (aloistr/swisseph) |
| Έκδοση | upstream Astrodienst C code |
| Δέσμες | swisseph-wasm (WebAssembly στο Node.js) |
| Εφημερίδα | DE431 JPL εφημερίδα (μέσω αρχείων .se1) |
| Αναπλήρωση | Moshier αναλυτική (για ημερομηνίες εκτός 1800-2399) |
| Κώδικας κοινής χρήσης | Shared `@/core` με app.astroway.info — ένας κινητήρας, δύο μεταφορείς |

## Μεθοδολογία

Η ακρίβεια ελέγχεται μέσω **τριγωνομετρίας** — σύγκρισης με τρία 
ανεξάρτητα μέσα:

### 1. swetest CGI (πρότυπο)

Επίσημη υλοποίηση αναφοράς Swiss Ephemeris από τους ίδιους τους Astrodienst — 
την ομάδα που δημιούργησε το **Astro.com** και εξυπηρετεί εκατομμύρια αστρολόγους 
σε όλο τον κόσμο. Η πιο авторитетική δημόσια πηγή. Ο κινητήρας μας **ταυτίζεται** 
(0.00–0.07 κωνική δευτερολέπτου διαφορά).

### 2. Kerykeion (Python)

Ανεξάρτητη Python-βιβλιοθήκη χρησιμοποιεί `pyswisseph`-δέσμες αντί για τη δική μας 
WASM. Επιβεβαιώνει ότι το WASM-στρώμα μας δεν στρεβλώνει τα δεδομένα.

### 3. Prokerala API

Απώλεια Swiss Ephemeris API (sidereal Lahiri). Συστηματική διαφορά 8–17 κωνικών 
δευτερολέπτων σχετίζεται με διαφορετικές εκδόσεις της формούλας Lahiri ayanamsa, 
και **όχι** με την ακρίβεια του κινητήρα.

## Αποτελέσματα τριγωνομετρίας

| Χάρτης | έναντι swetest (Astrodienst) | έναντι Kerykeion (Python) | έναντι Prokerala API |
|-------|------------------------------|---------------------------|---------------------|
| Monroe 1926   | **0.00"** | 0.19" | 16.95" (συστηματική) |
| Diana 1961    | **0.00"** | 0.69" | 8.18" (συστηματική)  |
| Einstein 1879 | 0.07"     | LMT-αρτεφάκτο Kerykeion | 14.96" (συστηματική) |

## Συνδυασμός σε επίπεδο τελικών σημείων

Κάθε βασικό σημείο υπολογισμού καλύπτεται από παγωμένα snapshot-тест σε 3 
αναφορικές χάρτες (Monroe / Diana / Einstein) = **{siteMeta.snapshotCount} snapshot**.

Το σύνολο snapshot-πιάτων πιάνει:

- **Σφάλματα χαρτογράφησης εισόδου** — λάθος id πλανήτη, UT, σύστημα οίκων
- **Μετα-επεξεργασία** — στρογγυλοποίηση, μετατροπή μονάδων, απώλεια σημείου
- **Διαφορά προεπιλογών** — μέσο vs αληθινό σημείο, γεωκεντρικό vs τοποκεντρικό
- **Διακύμανση σχήματος** — επικύρωση пропущθέντος λάθους μορφής
- **Παλιός εξοπλισμός** — prod dist δεν αντιστοιχεί στον κώδικα

Ανοχή: `5e-5°` (≈0.18 κωνική δευτερολέπτου) για όλα τα αριθμητικά πεδία.

## Λεπτομερείς αναλύσεις

### Θέσεις πλανητών (τροπικός, έναντι swetest)

| Χάρτης | Ημερομηνία | Μέγιστη διαφορά |
|-------|------|-----------------|
| Marilyn Monroe  | 1926-06-01 | **0.00"** |
| Princess Diana  | 1961-07-01 | **0.00"** |
| Albert Einstein | 1879-03-14 | 0.07"     |

### Κουπίδες οίκων Placidus (ενάντια swetest)

| Χάρτης | διαφορά ASC | διαφορά MC | Μέγιστη διαφορά κουπίδας |
|-------|-----------|----------|-------------------------|
| Monroe | 0.000" | 0.000" | 0.000" |
| Diana  | 0.000" | 0.000" | 0.000" |

### Εκλείψεις (ενάντια NASA 5-Millennium Catalog)

| Γεγονός | Μέγιστη NASA | Η μέγιστη μας | Διαφορά |
|-------|----------------|--------------|-------|
| 2025-03-14 Lunar Total  | 06:58 UT | 06:58 UT | 0.8 λεπτά |
| 2025-03-29 Solar Partial | 10:47 UT | 10:47 UT | 0.5 λεπτά |
| 2025-09-07 Lunar Total  | 18:11 UT | 18:11 UT | 0.8 λεπτά |
| 2025-09-21 Solar Partial | 19:41 UT | 19:42 UT | 1.0 λεπτό |

### Αστροχαρτογράφηση (ενάντια формуλάς RA από swetest)

Όλες οι γραμμές MC/IC/ASC/DSC χρησιμοποιούν τη σωστή формуλά `longitude = RA − GMST` 
(πρότυπο Kenneth Bowser). Διαφορά από το πρότυπο: **< 1.5 χλμ** στον ισημερινό για 
όλους τους πλανήτες.

### Ανατολή/Δύση Ηλίου (ενάντια timeanddate.com)

| Τοποθεσία | Ημερομηνία | Παράμετρος | Διαφορά |
|---------|------|----------|-------|
| London | 2026-04-15 | Ανατολή | 0.6 δευτερόλεπτα |
| London | 2026-04-15 | Δύση  | 9 δευτερόλεπτα   |

**Πολικές τοποθεσίες** (|lat| > 66.5°) επιστρέφουν αυτόματα `polarState` + 
πρόβλεψη ότι οι συνήθεις πλανητικές ώρες δεν ορίζονται.

### Περιφέρειες ασπектών

AstroWay χρησιμοποιεί **μεταβλητές περιφέρειες** per-planet (κανόνα MIN δύο πλανητών), 
όπως στο ZET9 και astro.com. Περιφέρειες για προεπιλογή (για γενέθλια χάρτη):

| Ασπект | Ήλιος | Σελήνη | Εσωτερικός | Δίας | Εξωτερικός |
|--------|-----|------|-------|---------|-------|
| Σύνοδος | 12°  | 10° | 5° | 8° | 5° |
| Εξάγωνο     | 6.5° | 6°  | 5° | 5° | 5° |
| Τετράγωνο  | 10°  | 8°  | 5° | 7° | 5° |
| Τρίγωνο    | 12°  | 8°  | 5° | 5° | 5° |
| Αντιπαράθεση  | 12°  | 10° | 5° | 8° | 5° |

Μικροί ασπектί (36°, 40°, 45°, 72°, 108°, 135°, 144°) **για προεπιλογή 
απενεργοποιούνται**. Ενεργοποιούνται ρητά μέσω `ALL_ASPECTS`.

## Πολικές γεωγραφικές πλάτη

Για |lat| > 66.5°, οι συστήματα Placidus / Koch / Regiomontanus δεν ορίζονται 
μαθηματικά. Σε τέτοιες περιπτώσεις, ο Swiss Ephemeris επιστρέφει αυτόματα Porphyry, 
και η API μας προσθέτει μια πρόβλεψη:

```json
{
  "system": "P",
  "warning": "Το σύστημα Placidus δεν ορίζεται για lat=68.96° (> 66.5°). Ο Swiss Ephemeris αντικατέστησε με Porphyry..."
}
```

## Συνεχής έλεγχος

Regression ελέγχεται **σε κάθε PR** μέσω CI:

- `api-calc/tests/endpoints/` — {siteMeta.snapshotCount} snapshot-πιάτων έναντι 
αναφορικών χαρτών (Monroe / Diana / Einstein) + synastry / composite / davison
- `.github/workflows/api-accuracy.yml` — αυτοεκτέλεση σε PR
- Τριγωνομετρία έναντι swetest CGI + Kerykeion — κάθε εβδομάδα
- Παρακολούθηση upstream Swiss Ephemeris μέσω Dependabot

## Γνωστά περιορισμένα

- **Ημερομηνίες εκτός εύρους** (πριν από 1800 και μετά 2399): χρησιμοποιείται Moshier 
  αναλυτική, ακρίβεια ~0.1" (ενάντια < 0.01" για SWIEPH με αρχεία DE431)
- **Αληθινή Λίλιθ (id=13) vs Μέση Λίλιθ (id=12)**: διαφορά μέχρι 12° — για προεπιλογή 
  Μέση Λίλιθ (σταθερή συμπεριφορά), Αληθινή Λίλιθ διαθέσιμη μέσω `planetIds: [13]`
- **Τοποκεντρικό vs γεωκεντρικό**: για προεπιλογή γεωκεντρικό

## Σύνδεσμοι

- Swiss Ephemeris: https://www.astro.com/swisseph/
- swetest CGI: https://www.astro.com/swisseph/swetest.htm
- Κατάλογος εκλείψεων NASA: https://eclipse.gsfc.nasa.gov/
- Kerykeion: https://github.com/g-battaglia/kerykeion
- Astrodienst: https://www.astro.com/

## Επικοινωνία

Για ερωτήσεις ακρίβειας: γράψτε στο support@astroway.info με τα δεδομένα του χάρτη 
και το αναμενόμενο πρότυπο (astro.com ή άλλο авторитетικό μέσο).
