# WAMO Entdeckerlogik - verbindliche Fachregeln

Diese Datei ist die projektinterne Anweisung für die Entdeckerlogik im WAMO Inspector.
Sie dient als Brücke zwischen fachlicher Entscheidung und Codezustand.

## Statuslegende

- `[im Code]` ist bereits umgesetzt.
- `[beschlossen]` ist fachlich entschieden und muss bei der nächsten passenden Codeänderung umgesetzt werden.
- `[prüfen]` ist fachlich plausibel, aber noch nicht endgültig umgesetzt oder getestet.

## Grundprinzip

Der WAMO Inspector ermittelt den `Winner` nicht nur aus der frühesten Beobachtung, sondern aus der frühesten brauchbaren Opposition nach den Discovery-Regeln.
Eine Opposition ist nur dann discovery-fähig, wenn sie die nötige Beobachtungsbasis liefert.
Erst danach wird innerhalb der Gewinner-Opposition die konkrete Gewinnerbeobachtung bestimmt.

## Oppositionen und Nächte

1. `[im Code]` Beobachtungen werden nach Oppositionen gruppiert.

2. `[im Code]` Eine Opposition braucht grundsätzlich mindestens zwei gültige Nächte, um discovery-fähig zu sein.

3. `[im Code]` Eine einzelne Beobachtung einer Station in einer Nacht zählt als eine Nacht.

4. `[im Code]` Zwei oder mehr Beobachtungen derselben Station in derselben Nacht zählen weiterhin nur als eine Nacht.

5. `[im Code]` Aus mehreren Beobachtungen derselben Nacht wird eine Repräsentantin gewählt: zuerst früheste Einsendezeit, bei Gleichstand früheste Beobachtungszeit, danach Stationscode und Eingabezeile.

6. `[im Code]` Zwei verschiedene Stationen in derselben Nacht zählen standardmäßig beim MPC ebenfalls nur als eine Nacht.

7. `[im Code]` Die Option `Zwei verschiedene Stationen in einer Nacht als zwei Nächte zählen` darf das Verhalten testweise ändern, ist aber nicht der MPC-Standard.

8. `[im Code]` Für erdgebundene Stationen soll die Nacht über die lokale Stationslänge bestimmt werden. Wenn kein Längengrad vorhanden ist und die Station nicht erdgebunden ist, wird UTC-Kalenderdatum verwendet.

## Bestimmung der Gewinner-Opposition

1. `[im Code]` Für jede Opposition wird der Zeitpunkt bestimmt, zu dem die Opposition die erforderlichen zwei Nächte erreicht hat.

2. `[im Code]` Die Opposition mit dem frühesten `2-Nächte-fertig`-Zeitpunkt gewinnt den Oppositionsvergleich.

3. `[im Code]` Wenn eine Opposition nur eine gültige Nacht hat, ist sie nicht discovery-fähig.

4. `[im Code]` Spätere Oppositionen können nicht gewinnen, wenn eine frühere Opposition bereits discovery-fähig war.

5. `[im Code]` Beobachtungen mit fehlendem oder ungültigem WAMO-Zeitcode dürfen ersatzweise das Beobachtungsdatum als Einsendedatum verwenden, wenn die WAMO-ID historisch oder unvollständig ist.

6. `[im Code]` Wenn ein maximaler Einsendeverzug eingestellt ist, werden zu spät gemeldete Beobachtungen bei der Winner-Entscheidung entsprechend abgewertet. Standard soll kein Einsendeverzug sein, also Wert `0`.

## Bestimmung der Gewinnerbeobachtung innerhalb der Gewinner-Opposition

1. `[im Code]` Innerhalb der Gewinner-Opposition gewinnt die früheste gültige Einsendezeit.

2. `[im Code]` Wenn Einsendezeiten gleich sind, gewinnt die frühere Beobachtungszeit.

3. `[im Code]` Wenn auch diese gleich ist, folgen stabile technische Tie-Breaker wie Stationscode und Eingabezeile.

4. `[im Code]` Es darf fachlich nur einen blinkenden/aktiven Winner geben.

5. `[im Code]` Falls eine Zeile zwar eine besondere MPC-/Satelliten-Sondersituation erklärt, aber nicht der aktive Winner ist, muss der Grund das ausdrücklich benennen und darf nicht als zweiter aktiver Winner erscheinen.

## Satellitenbeobachtungen

1. `[im Code]` Großes `S` markiert eine Satellitenbeobachtung, die an WAMO geschickt und ausgewertet wird.

2. `[im Code]` Kleines `s` markiert eine Satellitenbeobachtung, die nicht an WAMO geschickt und nicht für die Winner-Logik verwendet wird.

3. `[im Code]` Ein Stern `*` ist kein Satellitenmarker. Ein Stern kann andere Bedeutung haben und darf nicht dazu führen, dass eine Beobachtung als Satellit behandelt wird.

4. `[im Code]` Satelliten haben keine echte lokale Nacht. Daher startet die erste Beobachtung einer Satellitenstation ein künstliches 12-Stunden-Fenster.

5. `[im Code]` Weitere Beobachtungen derselben Satellitenstation innerhalb dieses 12-Stunden-Fensters zählen zur gleichen Satellitennacht.

6. `[im Code]` Erst ab mindestens 12 Stunden nach Beginn des Fensters beginnt die nächste Satellitennacht.

7. `[im Code]` Zwei Beobachtungen derselben Satellitenstation können also nur dann zwei Nächte liefern, wenn sie mindestens 12 Stunden auseinander liegen.

8. `[im Code]` Satellitenbeobachtungen zählen für die Frage, ob eine Opposition die nötigen zwei Nächte erfüllt.

9. `[im Code]` Satelliten haben keinen pauschalen Nachrang gegenüber erdgebundenen Beobachtungen. Wenn sie nach 2-Nächte-/Timetag-Reihenfolge vorne liegen, dürfen sie auch in gemischten Oppositionen Winner werden.

10. `[im Code]` Wenn eine Opposition ausschließlich aus Satellitenbeobachtungen besteht, dürfen Satellitenbeobachtungen ebenfalls Winner werden.

11. `[im Code]` Das Entdeckungsdatum bleibt bei Satelliten der UTC-Zeitpunkt der Gewinnerbeobachtung, nicht das künstliche 12-Stunden-Fenster.

12. `[im Code]` Bei Gleichstand nach allen Kriterien gewinnt die frühere Beobachtung.

13. `[im Code]` `xYYYY`-Beobachtungen werden vorerst nicht an WAMO geschickt und nicht in die Winner-Logik übernommen. Sie werden eindeutig in `reports/wamo_xyyyy_observations.txt` gesammelt, damit ihre Bedeutung später geprüft werden kann.

14. `[im Code]` OBS80-Zeilen mit einem echten Beobachtungsdatum in der Zukunft werden nicht an WAMO geschickt. Sie werden dedupliziert in `reports/wamo_future_observations.txt` gesammelt; die WAMO-GUI warnt beim Start mit dem Hinweis, den Programmierer zu kontaktieren.

15. `[im Code]` Die Jahreszahl einer OBS80-Zeile darf nicht aus Dezimalbruch- oder Bruchteilfeldern gelesen werden. Zusätze vor dem Beobachtungstyp wie `**C2006` sind gültig und müssen als Jahr 2006 verarbeitet werden.

## Kometen

1. `[im Code]` Für Kometen sollen dieselben rechnerischen Discovery-Regeln angewendet werden, damit die Tabelle konsistent ausgewertet werden kann.

2. `[im Code]` Bei Kometen muss aber erkennbar darauf hingewiesen werden, dass die formale MPC-Entdeckerlogik für Kometen anders bewertet werden kann.

## MPEC und nachgeladene Daten

1. `[im Code]` MPEC-Beobachtungen dürfen zusammen mit nachgeladenen MPC-Objektdaten betrachtet werden, wenn der Nutzer das bestätigt.

2. `[im Code]` Beim Nachladen zu einem MPEC kann der Nutzer entscheiden, ob alle Beobachtungen als ein Objekt behandelt werden sollen.

3. `[im Code]` Doppelte Beobachtungen sollen erkannt und die unteren/späteren Dubletten ausgeblendet werden.

4. `[im Code]` Bei MPEC-Daten wird die MPEC-Issue-Zeit separat angezeigt und kann für Differenzangaben verwendet werden.

## Ausgabe- und Prüfregeln

1. `[im Code]` Der aktive Winner wird orange markiert und blinkt.

2. `[im Code]` Die aktuelle Zeile wird blau markiert.

3. `[im Code]` Oppositionen erhalten unterscheidbare Hintergrundfarben; die Legende soll das Oppositionsjahr enthalten.

4. `[im Code]` Knappe Verlierer werden über die Verliererdistanz erklärt. Null-Sekunden-Verlierer derselben Station sollen nicht als knappe Verlierer hervorgehoben werden.

5. `[im Code]` Der Rückwärtsaudit soll MPC, WAMO und bei Unterschieden SBX vergleichen. SBX wird nur bei Unterschieden geladen.

6. `[im Code]` Bei MPC-Discovery-Parsing zählt der Stationscode aus der Beobachtungszeile am Discovery-Tag, nicht nur der frei formulierte Observatoriumsname.

7. `[im Code]` Wenn MPC-Entdeckungsdatum/-Station und WAMO-Winnerdatum/-Stationscode nicht übereinstimmen, blinkt die untere Entdeckungszeile rot im 2-Sekunden-Rhythmus und wechselt zwischen MPC- und WAMO-Annahme. Der Hover erklärt beide Werte und die MPC-Vergleichsbasis.

## Noch in Code einzuarbeiten

- Bedeutung und spätere Behandlung von `xYYYY`-Beobachtungen fachlich prüfen.

## Pflegeanweisung

Wenn eine der `[beschlossen]`-Regeln in den Code eingearbeitet wurde, muss diese Datei im selben Arbeitsschritt aktualisiert werden:

1. Status von `[beschlossen]` auf `[im Code]` ändern.
2. Falls nötig eine kurze Präzisierung ergänzen.
3. Falls Tests oder Problemobjekte verwendet wurden, diese im Abschnitt `Testanker` ergänzen.

## Testanker

- `889765`: Stern `*` darf nicht als Satellitenmarker gelten; Station `290` ist erdgebunden.
- `890282`: Es darf nur einen aktiven Winner geben; bei gleicher Submission Time gewinnt nach den Tie-Breakern die frühere Beobachtung.
- `893515`: Satellitenfall mit C51 und langen Zeiträumen.
- `888868`: Satellitenfall, bei dem die neue 12-Stunden-Regel den Winner ändern kann.
- `888853`: Satellitenfall, bei dem die neue 12-Stunden-Regel den Winner ändern kann.
- `888834`: Satellitenfall, bei dem die neue 12-Stunden-Regel den Winner ändern kann.
- `888814`: Satellitenfall, bei dem die neue 12-Stunden-Regel den Winner ändern kann.
- `888775`: Satellitenfall mit mehreren weit getrennten C51-Zeitfenstern.
- `887698`: Kontrollfall für doppelte Sterne vor `C2006`; darf nicht als Jahr 2050 gelesen werden.
- `888653`: Kontrollfall ohne S/s-Satellitenmarker.
