Prima variantă a acestui skill genera un Ascendent diferit la fiecare rulare, chiar cu aceleași dată și oră de naștere introduse — pentru că folosea Math.random() în loc de calcul astronomic. Am rulat-o a doua oară, am comparat rezultatele și mi-am dat seama că vindeam autoritate falsă: cifre care arătau precis, dar erau inventate. Am rescris totul de la zero, cu poziții planetare din efemeridele NASA/JPL, geocodare reală și fus orar istoric — și articolul acesta e jurnalul reconstrucției, plus promptul complet, gratuit, ca oricine să-și construiască un skill identic.
Pe scurt:
- Prima variantă calcula semnul lunar și Ascendentul cu
Math.random()— arăta a hartă astrală, dar la aceleași date de intrare dădea rezultate diferite de la o rulare la alta. - Varianta reală calculează poziții planetare din efemeridele JPL DE421 (aceleași folosite de NASA pentru navigația spațială), geocodare reală (OpenStreetMap) și fus orar istoric exact (cu ora de vară aplicată corect pentru anul nașterii).
- Test direct, aceeași dată de naștere: varianta veche dădea Ascendent Leu 5°; varianta reală dă Ascendent Gemeni 21°. Diferența nu e nuanță — sunt două zodii diferite.
- Interpretarea o scrie tot AI-ul, dar din date, nu din șablon — fiecare afirmație despre o persoană trebuie să poată fi urmărită până la un rând concret din calculul astronomic (o poziție, o casă, un aspect), nu la „ești Taur deci ești încăpățânat”.
- Cost: 0 lei. Promptul complet e mai jos, gratuit.
Ce este, de fapt, o hartă natală?
O hartă natală (numită și hartă astrală sau temă natală) arată poziția Soarelui, Lunii și a celorlalte planete pe cer, exact în momentul și locul nașterii tale — plus Ascendentul (semnul care „răsărea” la orizont în acel moment) și cele 12 case, fiecare legată de o zonă a vieții. Zeci de site-uri explică deja ce înseamnă fiecare piesă. Ce nu explică niciunul: cum arată, tehnic, diferența dintre o hartă calculată corect și una generată la întâmplare — care poate arăta la fel de convingătoare pe ecran.
De ce am construit un skill de horoscop, dacă nu cred în predicții astrologice?
Fac parte dintr-un research mai larg despre ce conținut AI atrage publicul feminin din România — și hartă natală/horoscop a ieșit ca a doua cea mai căutată nișă din zonă, cu peste 368.000 de căutări lunare doar pe cuvântul „horoscop”. Nu construiesc instrumentul ca să prezic viitorul cuiva. Îl construiesc ca exercițiu tehnic dur: poți lua un domeniu plin de generatoare de text la întâmplare și îl poți reconstrui pe bază de calcul verificabil? Răspunsul practic contează mai mult decât zodiacul — aceeași disciplină (date reale, nu presupuneri) se aplică și la un instrument de verificat prețuri sau la un dashboard financiar.
Cum arăta prima variantă — și de ce era, de fapt, un joc de-a horoscopul
Prima încercare avea o interfață convingătoare: formular cu dată, oră, oraș, o roată zodiacală desenată pe canvas, tabel de planete, predicții pentru azi/mâine/anul curent. Codul din spate, însă, făcea următoarele:
function getMoonSign(sunDegree, hour) {
const moonShift = (hour / 24) * 12.5;
const moonDegree = (sunDegree + moonShift + (Math.random() * 30 - 15)) % 360;
...
}
function getAscendant(hour, latitude) {
const ascendantDegree = (hour * 15 + latitude / 4 + Math.random() * 45) % 360;
...
}
Math.random() înseamnă exact ce pare: un număr la întâmplare, adăugat peste o formulă aproximativă. Semnul lunar și Ascendentul — două dintre cele mai importante trei elemente ale unei hărți astrale — erau parțial noroc de la un Math.random() la altul. Latitudinea era, de altfel, mereu cea a Bucureștiului, indiferent ce oraș introducea utilizatorul.
Am rulat aceeași dată de naștere (14 mai 1990, ora 07:32, Cluj-Napoca) prin ambele variante, ca test direct:
| Varianta veche (Math.random) | Varianta reală (efemeride JPL) | |
|---|---|---|
| Ascendent | Leu, 5° | Gemeni, 21° |
| Semnul lunar | Leu | Capricorn |
| Sursă latitudine/longitudine | fixă, București | geocodare reală a orașului introdus |
| Rulezi de două ori, aceleași date | rezultat diferit | rezultat identic |

Ultima linie e cea care contează: o hartă astrală calculată corect e determinism pur — aceleași coordonate cerești, la fel de reproductibile ca o adunare. Dacă rulezi codul de două ori și iese diferit, nu ai un calcul, ai un joc.
Ce înseamnă, de fapt, un calcul astronomic real
Varianta reconstruită are două scripturi Python separate — unul calculează, celălalt scrie raportul — și fiecare pas înlocuiește o aproximare din varianta veche cu o sursă verificabilă:
| Ce calculează | Cum, în varianta reală | Cum, în varianta veche |
|---|---|---|
| Poziția planetelor | efemeride JPL DE421 (skyfield) — aceleași folosite pentru navigația sondelor spațiale, valabile 1900–2050 | formulă liniară din ziua calendaristică, plus offset arbitrar per planetă |
| Orașul nașterii | geocodare reală prin Nominatim (OpenStreetMap) | ignorat — latitudine fixă de București |
| Fusul orar | fusul orar istoric exact al locației, cu ora de vară aplicată corect pentru anul respectiv | ignorat |
| Ascendent și Mijlocul Cerului | formule standard de astronomie de poziție (timp sideral → unghi orar → Ascendent) | oră × 15 + latitudine/4 + Math.random() × 45 |
| Casele | sistemul caselor egale, pornind de la Ascendentul real | index fix per planetă, indiferent de Ascendent |
| Aspectele dintre planete | unghiul real dintre fiecare pereche, verificat cu o marjă de eroare (orb) pentru cinci tipuri de aspect | inexistente — varianta veche nu calcula deloc relații între planete |
Rezultatul se vede direct în roata desenată — fiecare linie din interior chiar înseamnă ceva (un aspect real, cu unghiul lui exact), nu e decor:


Capturile sunt dintr-o hartă de test (nu a unei persoane reale, doar o dată de naștere folosită ca exemplu în documentația skill-ului) — arată exact ce vede oricine își calculează harta cu instrumentul.
Cinci corecturi până la un rezultat de încredere
- Ascendentul nu se aproximează cu „ora ori 15″. Formula corectă trece prin timpul sideral (GMST), unghiul orar local și obliquitatea eclipticii la data respectivă — trei calcule intermediare, nu o singură înmulțire. Ascendentul se mișcă aproximativ 1° la fiecare 4 minute; o eroare de rotunjire la oră schimbă rezultatul vizibil.
- Planetele mari se calculează ca baricentru, nu ca planeta însăși. Skyfield oferă „jupiter barycenter” separat de „jupiter” — diferența e sub o secundă de arc, dar dacă nu știi să alegi varianta corectă, rezultatul pare bun și e totuși greșit la niște zecimale care contează pentru cazuri de graniță.
- Un aspect cu orb mic trebuie arătat vizual diferit de unul cu orb mare. Prima versiune a roții desena toate liniile de aspect la fel — corect matematic, dar înșelător: un trigon la 0,1° distanță de exact e mult mai „activ” decât unul la 6,9°. Am legat grosimea și opacitatea liniei de mărimea orbului, ca diferența să se vadă, nu doar să existe într-un tabel.
- Interpretarea trebuie forțată să citeze un rând din date, nu un șablon pe semn. Regula pe care am impus-o skill-ului: orice afirmație despre o persoană trebuie legată explicit de o poziție, o casă sau un aspect din JSON-ul calculat. „Ești Taur deci ești încăpățânat” nu trece testul; „Soarele tău e în Taur, în Casa 12, în trigon cu Saturn — de aceea disciplina vine fără efort, în liniște” trece, pentru că poți verifica fiecare bucată în date.
- Scanarea evenimentelor anuale trebuie să excludă planetele rapide. Prima idee a fost să arăt toate tranzitele active pe parcursul unui an — a scos zeci de intrări nesemnificative, pentru că Luna sau Mercur formează un aspect nou aproape în fiecare zi. Am limitat scanarea anuală la Marte și planetele lente (Jupiter–Pluto) — ele dau temele care chiar contează, pentru că stau luni întregi în același aspect.


Promptul, gata de copiat: construiește-ți propriul skill de hartă natală
Mai jos e promptul complet cu care oricine își poate reconstrui acest skill, pentru orice dată de naștere. Îl dai unui agent AI care scrie și rulează cod pe calculatorul tău — eu am folosit Claude Code, cu skill-urile lui native. Îți trebuie Python instalat; prima rulare descarcă automat un fișier de ~17 MB cu efemeride NASA, o singură dată.
Fișier de descărcat: prompt-skill-harta-cerului.txt.
Vezi promptul — skill AI de hartă natală cu calcul astronomic real
Construiește-mi un skill în două scripturi Python care calculează o hartă astrală REALĂ (nu simulată) dintr-o dată, oră, oraș și țară de naștere, apoi generează un raport HTML cu ea. Scriptul 1 — harta.py — calculul astronomic: Argumente: --nume (obligatoriu, folosit doar pentru numele fișierelor), --data (YYYY-MM-DD), --ora (HH:MM, 24h), --oras, --tara, --output (cale fișier JSON de ieșire). Pasul 1 — geocodare reală: interoghează API-ul public Nominatim (OpenStreetMap, nominatim.openstreetmap.org/search) ca să obții latitudine/longitudine din oraș+țară, cu un User-Agent identificabil. Pasul 2 — fus orar istoric real: folosește pachetul timezonefinder ca să afli fusul orar exact al locației, apoi convertește data+ora locală în UTC cu zoneinfo. Pasul 3 — poziții planetare: folosește skyfield cu efemeridele JPL DE421 (se descarcă automat la prima rulare) ca să calculezi longitudinea ecliptică reală a Soarelui, Lunii și celorlalte 7 planete, plus dacă fiecare e retrogradă (compară longitudinea cu o zi înainte). Pasul 4 — Ascendent și Mijlocul Cerului: formulele standard din astronomia de poziție (GMST → RAMC → Ascendent/MC, cu obliquitatea eclipticii la data respectivă) — nu aproximări. Pasul 5 — case: sistemul caselor egale (fiecare casă = 30° pornind de la Ascendent). Pasul 6 — Nodul Nord: formula Meeus pentru Nodul Nord mediu. Pasul 7 — aspectele natale: pentru fiecare pereche de planete, unghiul dintre ele și dacă se încadrează într-un orb pentru conjuncție (0°, orb 8°), sextil (60°, orb 4°), pătrat (90°, orb 7°), trigon (120°, orb 7°) sau opoziție (180°, orb 8°). Păstrează unghiul real și orbul exact. Pasul 8 — tranzitele de azi: recalculează pozițiile planetare pentru momentul curent și găsește aspectele lor către harta natală. Pasul 9 — evenimentele anului: scanează următoarele 366 de zile (vectorizat cu numpy) pentru perioadele în care Marte sau o planetă lentă (Jupiter–Pluto) formează un aspect cu un punct natal. Exclude Soare/Mercur/Venus/Lună — se mișcă prea repede, ar genera zeci de intrări nesemnificative. Salvează pentru fiecare perioadă data de început, vârf (orb minim) și sfârșit. Ieșire: un singur JSON cu toate datele de mai sus. NU scrie nicio interpretare aici — interpretarea e sarcina separată a unui agent AI, strict din acest JSON, ca fiecare afirmație să poată fi verificată într-un rând concret de date, nu într-un șablon generic pe semn zodiacal. Scriptul 2 — raport.py — raportul HTML: Argumente: --chart (JSON-ul de la scriptul 1), --text (JSON cu interpretarea în proză), --output. text.json are cheile: nume (opțional), misiune_viata, lume_emotionala, lectie_karmica, zona_abundenta, relatii_actiune_gandire, predictie_azi, predictie_an. Raportul combină cele două JSON-uri într-o pagină HTML cu: o roată astrologică ca SVG inline (inelul zodiacal, liniile caselor, liniile de aspect colorate și cu grosime proporțională cu strânsoarea orbului, glifele planetelor departate automat ca să nu se suprapună), carduri de profil (Soare, Lună, Ascendent, MC, element și calitate dominante), secțiunile de interpretare ca proză simplă, și tabele complete (în elemente, pliate) cu toate planetele, aspectele, casele, tranzitele și evenimentele anului, ca orice afirmație să poată fi verificată. Design: fond alb, indigo închis + auriu ca accente, font serif pentru titluri, dark mode automat din prefers-color-scheme. Fără librării externe de grafice — totul e SVG generat în Python. Reconfigurează ieșirea consolei pe UTF-8 la începutul ambelor scripturi.
Ce NU face acest skill
- Nu prezice viitorul. Astrologia rămâne o pseudo-știință — raportul o spune explicit, în josul paginii. Ce face skill-ul e determinist și verificabil: pozițiile planetare la un moment dat, calculate corect. Ce înseamnă ele rămâne interpretare, nu fapt.
- Nu garantează precizia Ascendentului și a caselor fără ora exactă de naștere. O eroare de câteva minute poate schimba Ascendentul cu un grad întreg. Fără ora exactă, skill-ul avertizează explicit utilizatorul, nu ascunde limitarea.
- Folosește un sistem de case diferit de cel mai răspândit comercial. Casele egale (implementate aici) diferă de Placidus — pot apărea diferențe de o casă la planetele aproape de un cusp, față de alte softuri.
- Nu înlocuiește o decizie financiară, medicală sau psihologică. E un instrument de reflecție, cu date reale în spate — nu un substitut pentru un specialist.
Ce legătură are cu firma ta?
Aceeași disciplină aplicată aici — nu inventa un rezultat, calculează-l din surse verificabile, și arată clar unde se termină certitudinea — e regula pe care o aplic la orice automatizare pe care o construiesc pentru o firmă: instrumentul de verificare CUI interoghează direct registrul public al ANAF, nu presupune. Dacă vrei o automatizare construită cu aceeași regulă — surse reale, limitări spuse explicit — pornesc de la sub 400 €, gata în 2–5 zile lucrătoare. Iar dacă vrei să înveți să construiești singur(ă) astfel de instrumente, cursul de AI pentru firme predă exact acest drum: 4 ședințe a câte 2 ore, grupe de maximum 8, 95 € de persoană, cu garanția banilor înapoi după primele două ședințe.
Întrebări frecvente
Ce diferență e, de fapt, între o hartă astrală „reală” și una generată aleatoriu?
O hartă reală calculează poziția planetelor din efemeride astronomice — aceleași date folosite pentru navigația spațială — și dă mereu același rezultat pentru aceeași dată, oră și loc de naștere. O hartă generată aleatoriu (cazul primei variante din acest articol) folosește formule aproximative cu un factor de întâmplare adăugat — arată plauzibil, dar dă rezultate diferite la fiecare rulare, chiar cu aceleași date de intrare.
De ce contează ora exactă a nașterii?
Ascendentul — unul dintre cele trei elemente centrale ale unei hărți astrale — se mișcă aproximativ 1° la fiecare 4 minute. O oră aproximativă (ex. „pe la prânz”) poate schimba Ascendentul cu un semn întreg. Semnele planetelor (Soare, Lună etc.) rămân valabile chiar și fără ora exactă, pentru că se schimbă mult mai rar.
Ce sunt efemeridele JPL DE421?
Un set de date astronomice publicate de Jet Propulsion Laboratory (NASA/Caltech) cu pozițiile precise ale corpurilor din sistemul solar, valabile pentru perioada 1900–2050. Sunt folosite pentru navigația sondelor spațiale și, în acest skill, pentru calculul pozițiilor planetare la momentul nașterii.
Pot să-mi construiesc și eu un instrument ca acesta, fără să fiu programator?
Da — promptul din articol e scris exact pentru acest scop: îl copiezi într-un agent AI care scrie și rulează cod, iar cele cinci corecturi din articol sunt deja incluse în instrucțiuni. Partea grea nu e sintaxa Python, ci deciziile: ce formulă e corectă din punct de vedere astronomic și cum recunoști un rezultat greșit care arată bine.
Instrumentul funcționează pentru orice dată de naștere, oriunde în lume?
Da, pentru orice oraș pe care Nominatim (OpenStreetMap) îl poate geocodifica și pentru orice dată între 1900 și 2050 (limita efemeridelor DE421). Fusul orar istoric se determină automat din coordonate.
Surse
- Skyfield — documentația oficială — biblioteca Python pentru calcule astronomice folosită de acest skill.
- JPL Planetary and Lunar Ephemerides DE421 — NASA/Jet Propulsion Laboratory.
- Nominatim Usage Policy — OpenStreetMap Foundation.



