# Genauigkeit der Berechnungen

## TL;DR

Die AstroWay API nutzt **Swiss Ephemeris** (den offiziellen C-Code von Astrodienst,
den Schöpfern von astro.com) – dieselbe Engine, auf der professionelle Astrologen seit über 30 Jahren in **Solar Fire ($495), Kepler ($995), Astro Gold ($29.99/Monat) und Janus** arbeiten. Wir haben sie in WebAssembly kompiliert und mit einer REST-API-Schicht versehen, ohne Zwischenhändleraufschläge. Jeder der grundlegenden Berechnungsendpunkte wird durch Regression-Snapshot-Tests abgedeckt; die Genauigkeit der Engine wurde durch **Triangulation** mit drei unabhängigen Quellen verifiziert + gegen den **NASA 5-Millennium Eclipse Catalog**:

- **Planetenpositionen**: `< 0.1 Bogensekunden` vs der offiziellen swetest CGI von Astrodienst
- **Häuserkanten Placidus**: `0.000"` exakter Treffer
- **Finsternisse**: `< 1 Minute` vs NASA Eclipse Catalog
- **Astrogeographische Linien**: `< 1.5 km` am Äquator vs swetest
- **Sonnenauf-/-untergang**: `< 10 Sekunden` vs timeanddate.com
- **Mond VOC, Eintritte, Planetenkonjunktionen**: Genauigkeit bis auf Bruchteile einer Sekunde

## Die Engine

| Komponente | Wert |
|------------|------|
| Bibliothek | Swiss Ephemeris C Code (aloistr/swisseph) |
| Version | Upstream Astrodienst C Code |
| Bindings | swisseph-wasm (WebAssembly in Node.js) |
| Ephemeriden | DE431 JPL Ephemeriden (über .se1-Dateien) |
| Fallback | Moshier-Analytik (für Daten außerhalb 1800–2399) |
| Code-Sharing | Shared `@/core` mit app.astroway.info – eine Engine, zwei Transportwege |

## Methodik

Die Genauigkeit wird durch **Triangulation** überprüft – ein Vergleich mit drei unabhängigen Quellen:

### 1. swetest CGI (Referenz)

Die offizielle Referenz-Implementierung von Swiss Ephemeris direkt von Astrodienst – der Code, der **Astro.com** erschaffen hat und Millionen von Astrologen weltweit bedient. Die maßgebliche öffentliche Quelle. Unsere Engine ist **identisch** (0.00–0.07 Bogensekunden Drift).

### 2. Kerykeion (Python)

Eine unabhängige Python-Bibliothek, die `pyswisseph`-Bindings statt unserer WASM-Schicht nutzt. Bestätigt, dass unsere WASM-Schicht die Daten nicht verfälscht.

### 3. Prokerala API

Eine entfernte Swiss-Ephemeris-API (sidereal Lahiri). Ein systematischer Drift von 8–17 Bogensekunden hängt mit unterschiedlichen Versionen der Lahiri-Ayanamsa-Formel zusammen und **nicht** mit der Genauigkeit der Engine.

## Triangulationsergebnisse

| Karte | vs swetest (Astrodienst) | vs Kerykeion (Python) | vs Prokerala API |
|-------|---------------------------|------------------------|------------------|
| Monroe 1926   | **0.00"** | 0.19" | 16.95" (systematisch) |
| Diana 1961    | **0.00"** | 0.69" | 8.18" (systematisch)  |
| Einstein 1879 | 0.07"     | LMT-Artefakt Kerykeion | 14.96" (systematisch) |

## Regression-Suite auf Endpunktebene

Jeder der grundlegenden Berechnungsendpunkte wird durch eingefrorene Snapshot-Tests an 3 Referenzkarten (Monroe / Diana / Einstein) abgedeckt = **{siteMeta.snapshotCount} Snapshots**.

Die Snapshot-Suite erkennt:

- **Mapping-Fehler der Eingabedaten** – falsche Planeten-ID, UT, Häusersystem
- **Nachbearbeitung** – Rundung, Einheitenumrechnung, Vorzeichenverlust
- **Abweichungen der Standardwerte** – mittlerer vs wahrer Mondknoten, geozentrisch vs topografisch
- **Schema-Drift** – Validierung ließ eine falsche Form durch
- **Veraltete Bereitstellung** – die Produktionsdistribution entspricht nicht dem Code

Toleranz: `5e-5°` (≈0.18 Bogensekunden) standardmäßig für alle numerischen Felder.

## Detaillierte Benchmarks

### Planetenpositionen (tropisch, vs swetest)

| Karte | Datum | Maximaler Drift |
|-------|-------|-----------------|
| Marilyn Monroe  | 1926-06-01 | **0.00"** |
| Prinzessin Diana | 1961-07-01 | **0.00"** |
| Albert Einstein  | 1879-03-14 | 0.07"     |

### Häuserskanten Placidus (vs swetest)

| Karte | Drift ASC | Drift MC | Maximaler Drift der Häuserkante |
|-------|-----------|----------|---------------------------------|
| Monroe | 0.000" | 0.000" | 0.000" |
| Diana  | 0.000" | 0.000" | 0.000" |

### Finsternisse (vs NASA 5-Millennium Catalog)

| Ereignis | NASA-Maximum | Unser Maximum | Drift |
|----------|--------------|---------------|-------|
| 2025-03-14 Totale Mondfinsternis  | 06:58 UT | 06:58 UT | 0.8 Min. |
| 2025-03-29 Partielle Sonnenfinsternis | 10:47 UT | 10:47 UT | 0.5 Min. |
| 2025-09-07 Totale Mondfinsternis  | 18:11 UT | 18:11 UT | 0.8 Min. |
| 2025-09-21 Partielle Sonnenfinsternis | 19:41 UT | 19:42 UT | 1.0 Min. |

### Astrogeografie (vs RA-Formel von swetest)

Alle Linien MC/IC/ASC/DSC nutzen die korrekte Formel `longitude = RA − GMST` (Standard nach Kenneth Bowser). Drift zum Referenzwert: **< 1.5 km** am Äquator für alle Planeten.

### Sonnenauf-/-untergang (vs timeanddate.com)

| Standort | Datum | Parameter | Drift |
|----------|-------|-----------|-------|
| London | 2026-04-15 | Sonnenaufgang | 0.6 s |
| London | 2026-04-15 | Sonnenuntergang  | 9 s   |

**Polare Standorte** (|Breite| > 66.5°) liefern automatisch `polarState` + eine Warnung, dass gewöhnliche Planetenstunden nicht definiert sind.

### Aspektorbis

AstroWay nutzt **variable Orbis pro Planet** (MIN-Regel zweier Planeten), wie bei ZET9 und astro.com. Standard-Orbis (für Geburtskarten):

| Aspekt | Sonne | Mond | Innere | Jupiter | Äußere |
|--------|-------|------|---------|---------|--------|
| Konjunktion | 12°  | 10° | 5° | 8° | 5° |
| Sextil     | 6.5° | 6°  | 5° | 5° | 5° |
| Quadrat     | 10°  | 8°  | 5° | 7° | 5° |
| Trigon      | 12°  | 8°  | 5° | 5° | 5° |
| Opposition  | 12°  | 10° | 5° | 8° | 5° |

Minor-Aspekte (36°, 40°, 45°, 72°, 108°, 135°, 144°) sind **standardmäßig deaktiviert**. Sie werden explizit über `ALL_ASPECTS` aktiviert.

## Polare Breiten

Für |Breite| > 66.5° sind die Systeme Placidus / Koch / Regiomontanus mathematisch undefiniert. In solchen Fällen liefert Swiss Ephemeris automatisch Porphyrius, und unsere API fügt eine Warnung hinzu:

```json
{
  "system": "P",
  "warning": "Das Placidus-System ist für Breite=68.96° (> 66.5°) undefiniert. Swiss Ephemeris hat Porphyrius verwendet..."
}
```

## Kontinuierliche Überprüfung

Regression wird **bei jedem PR** durch CI überprüft:

- `api-calc/tests/endpoints/` – {siteMeta.snapshotCount} Snapshots gegen Referenzkarten (Monroe / Diana / Einstein) + Synastrie / Composite / Davison
- `.github/workflows/api-accuracy.yml` – automatischer Start bei PR
- Triangulation gegen swetest CGI + Kerykeion – wöchentlich
- Überwachung von upstream Swiss Ephemeris über Dependabot

## Bekannte Einschränkungen

- **Daten außerhalb des Bereichs** (vor 1800 und nach 2399): Es wird die Moshier-Analytik genutzt, Genauigkeit ~0.1" (vs < 0.01" für SWIEPH mit DE431-Dateien)
- **Wahre Lilith (id=13) vs mittlere Lilith (id=12)**: Unterschied bis zu 12° – standardmäßig wird mittlere Lilith genutzt (stabile Berechnung), wahre Lilith ist über `planetIds: [13]` verfügbar
- **Topografisch vs geozentrisch**: Standardmäßig geozentrisch

## Links

- Swiss Ephemeris: https://www.astro.com/swisseph/
- swetest CGI: https://www.astro.com/swisseph/swetest.htm
- NASA-Eclipsenkatalog: https://eclipse.gsfc.nasa.gov/
- Kerykeion: https://github.com/g-battaglia/kerykeion
- Astrodienst: https://www.astro.com/

## Kontakt

Bei Fragen zur Genauigkeit: Schreib uns an support@astroway.info mit den Kartendaten und der erwarteten Referenz (astro.com oder eine andere maßgebliche Quelle).
