Bogatsze sygnifikatory: faseta "w domu" obok "w znaku" (LOG-15/16)

Most horoskop -> sygnifikatory generuje teraz dla każdego obiektu dwie fasety:
- "w znaku": planeta + token znaku ([Su + [Tau)
- "w domu":  planeta + token domu ([Su + 11th H.) — używa domów z LOG-05

- significators.build_report: przyjmuje pozycje z build_chart (z numerami domów),
  generuje fasety znak/dom, filtruje szum. Ordinal helper (1st..12th).
- /chart/report: używa build_chart (pozycje z domami).
- Prezentacja /interpret: render faset (znak/dom) per obiekt.

Aspekty ([conj/[sq/[opp) na później — wymagają policzenia aspektów (LOG-06).

Zweryfikowano na realnym main_base.xlsx (53969 wierszy), 30.04.1984:
Mars w 5. domu 10 dopasowań ("[Sa or [Ma in the 5th H." -> "abortion/miscarriage"),
Neptune w 7. domu 6, Uranus w 6. domu 4. 7 testów przechodzi.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-01 15:37:20 +02:00
parent cea6907f84
commit 0e74566a78
6 changed files with 114 additions and 71 deletions
+5 -4
View File
@@ -87,16 +87,17 @@ class ReportRequest(BaseModel):
@app.post("/chart/report")
def chart_report(req: ReportRequest) -> dict:
"""Wynik obliczeń szukany w bazie: z pozycji generuje sygnifikatory i pyta
warstwę danych o pasujące interpretacje (pierwsza wersja przepływu)."""
"""Wynik obliczeń szukany w bazie: z pozycji + domów generuje sygnifikatory
(fasety znak/dom) i pyta warstwę danych o pasujące interpretacje."""
from app.engine.chart import build_chart
from app.engine.models import ChartMoment
from app.significators import build_report
engine = get_engine()
moment = ChartMoment(when_utc=req.when_utc, lat=req.lat, lon=req.lon)
positions = engine.positions(moment)
chart = build_chart(engine, moment) # pozycje z numerami domów
try:
report = build_report(positions, DataClient(), per_object_limit=req.limit)
report = build_report(chart["positions"], DataClient(), per_object_limit=req.limit)
except httpx.HTTPError as e:
return {"engine": engine.name, "objects": [], "data_error": f"Warstwa danych niedostępna: {e}"}
return {"engine": engine.name, **report}