Precisão dos cálculos
A API AstroWay utiliza Swiss Ephemeris (código C oficial da Astrodienst, criadores de astro.com) - o mesmo motor que astrólogos profissionais usam há mais de 30 anos em Solar Fire ($495), Kepler ($995), Astro Gold ($29.99/mês) e Janus. Compilámo-lo em WebAssembly e expusemo-lo como uma camada de API REST, sem margem de lucro intermediária. Cada um dos endpoints de cálculo básicos é coberto por testes de snapshot de regressão; a precisão do motor é verificada através de triangulação com três fontes independentes + contra o Catálogo de Eclipses de 5 Milénios da NASA:
- Posições planetárias: mediana
0.0013", máximo0.561"vs swetest CGI oficial da Astrodienst (medido a 29-07-2026 em 130 medições). Detalhes por corpo abaixo - Cúspides das casas Placidus:
0.000"correspondência exata - Eclipses:
< 1 minutovs Catálogo de Eclipses da NASA - Linhas ACG:
< 1.5 kmno equador vs swetest - Nascer/pôr do sol:
< 10 segundosvs timeanddate.com - VOC da Lua, ingressos, conjunções planetárias: precisão até uma fração de segundo
Metodologia: como é medido
Seção intitulada “Metodologia: como é medido”Estes números não são uma estimativa, mas o resultado de uma execução. O script pega em 10 mapas, distribuídos de 1900 a 2050, consulta os mesmos momentos no swetest CGI Astrodienst em tempo real e compara todos os 13 corpos que fornecemos. Total de 130 medições.
| Corpo | Desvio máximo |
|---|---|
| Sol, Vénus, Saturno | 0.001" |
| Mercúrio | 0.002" |
| Nodo verdadeiro | 0.004" |
| Marte | 0.007" |
| Júpiter | 0.009" |
| Lua | 0.022" |
| Urano | 0.083" |
| Plutão | 0.097" |
| Neptuno | 0.223" |
| Quíron | 0.561" |
| Apogeu médio (Lilith) | 0.000" |
Mediana em todas as 130 medições: 0.0013".
Anteriormente, esta página continha uma promessa geral de «< 0.1 arcsec». As medições de 29-07-2026 mostraram que Neptuno, Plutão e Quíron não a mantêm, por isso a promessa foi substituída por números reais. Quíron e os planetas exteriores têm um desvio maior porque as suas posições são retiradas de um conjunto comprimido de efemérides na compilação WASM.
Podes reproduzir isto por ti mesmo: api-calc/scripts/accuracy-vs-swetest.mjs faz
exatamente estas consultas e imprime a mesma tabela.
Verifica por ti mesmo. O script que mediu os números acima está num repositório público sob licença MIT: astroway/astrology-accuracy-benchmark. Não funciona apenas connosco: um adaptador para qualquer outra API são trinta linhas, então as mesmas 130 medições podem ser executadas contra um concorrente e comparadas. Uma chave de sandbox é suficiente.
| Componente | Valor |
|---|---|
| Biblioteca | Swiss Ephemeris C code (aloistr/swisseph) |
| Versão | upstream Astrodienst C code |
| Bindings | swisseph-wasm (WebAssembly em Node.js) |
| Efemérides | DE431 JPL ephemeris (via ficheiros .se1) |
| Alternativa | Moshier analytical (para datas fora de 1800-2399) |
| Partilha de código | Partilhado @/core com app.astroway.info - um motor, dois transportes |
Metodologia
Seção intitulada “Metodologia”A precisão é verificada através de triangulação - comparação com três fontes independentes:
1. swetest CGI (referência)
Seção intitulada “1. swetest CGI (referência)”A implementação de referência oficial do Swiss Ephemeris da própria Astrodienst - a equipa que criou Astro.com e serve milhões de astrólogos em todo o mundo. A fonte pública mais autoritária. O nosso motor é idêntico (0.00–0.07 segundos de arco de desvio).
2. Kerykeion (Python)
Seção intitulada “2. Kerykeion (Python)”Uma biblioteca Python independente que utiliza pyswisseph-bindings em vez do nosso
WASM. Confirma que a nossa camada WASM não distorce os dados.
3. API Prokerala
Seção intitulada “3. API Prokerala”API Swiss Ephemeris remoto (sidéreo Lahiri). O desvio sistémico de 8–17 segundos de arco está relacionado com diferentes versões da fórmula Lahiri ayanamsa, e não com a precisão do motor.
Resultados da triangulação
Seção intitulada “Resultados da triangulação”| Mapa | vs swetest (Astrodienst) | vs Kerykeion (Python) | vs API Prokerala |
|---|---|---|---|
| Monroe 1926 | 0.00” | 0.19” | 16.95” (sistémico) |
| Diana 1961 | 0.00” | 0.69” | 8.18” (sistémico) |
| Einstein 1879 | 0.07” | artefacto LMT Kerykeion | 14.96” (sistémico) |
Conjunto de regressão ao nível dos endpoints
Seção intitulada “Conjunto de regressão ao nível dos endpoints”Cada um dos endpoints de cálculo básicos é coberto por testes de snapshot congelados em 3 mapas de referência (Monroe / Diana / Einstein) = 873 snapshots.
A suite de snapshots deteta:
- Erros de mapeamento de dados de entrada - ID de planeta incorreto, UT, sistema de casas
- Pós-processamento - arredondamento, conversão de unidades, perda de sinal
- Divergência de predefinições - nodo médio vs verdadeiro, geocêntrico vs topocêntrico
- Desvio de esquema - a validação ignorou um formato incorreto
- Deploy desatualizado - a distribuição de produção não corresponde ao código
Tolerância: 5e-5° (≈0.18 segundos de arco) por predefinição para todos os campos numéricos.
Benchmarks detalhados
Seção intitulada “Benchmarks detalhados”Posições planetárias (trópico, vs swetest)
Seção intitulada “Posições planetárias (trópico, vs swetest)”| Mapa | Data | Desvio máximo |
|---|---|---|
| Marilyn Monroe | 1926-06-01 | 0.00” |
| Princess Diana | 1961-07-01 | 0.00” |
| Albert Einstein | 1879-03-14 | 0.07” |
Cúspides das casas Placidus (vs swetest)
Seção intitulada “Cúspides das casas Placidus (vs swetest)”| Mapa | desvio ASC | desvio MC | Desvio máximo da cúspide |
|---|---|---|---|
| Monroe | 0.000” | 0.000” | 0.000” |
| Diana | 0.000” | 0.000” | 0.000” |
Eclipses (vs Catálogo de 5 Milénios da NASA)
Seção intitulada “Eclipses (vs Catálogo de 5 Milénios da NASA)”| Evento | Máximo NASA | Nosso máximo | Desvio |
|---|---|---|---|
| 2025-03-14 Lunar Total | 06:58 UT | 06:58 UT | 0.8 min |
| 2025-03-29 Solar Partial | 10:47 UT | 10:47 UT | 0.5 min |
| 2025-09-07 Lunar Total | 18:11 UT | 18:11 UT | 0.8 min |
| 2025-09-21 Solar Partial | 19:41 UT | 19:42 UT | 1.0 min |
Astrocartografia (vs fórmula RA de swetest)
Seção intitulada “Astrocartografia (vs fórmula RA de swetest)”Todas as linhas MC/IC/ASC/DSC utilizam a fórmula correta longitude = RA − GMST
(padrão Kenneth Bowser). Desvio da referência: < 1.5 km no equador para
todos os planetas.
Nascer / Pôr do Sol (vs timeanddate.com)
Seção intitulada “Nascer / Pôr do Sol (vs timeanddate.com)”| Localização | Data | Parâmetro | Desvio |
|---|---|---|---|
| London | 2026-04-15 | Nascer do Sol | 0.6 s |
| London | 2026-04-15 | Pôr do Sol | 9 s |
Localizações polares (|lat| > 66.5°) retornam automaticamente polarState +
aviso de que as horas planetárias normais não estão definidas.
Orbes de aspetos
Seção intitulada “Orbes de aspetos”AstroWay utiliza orbes variáveis por planeta (regra MIN dos dois planetas), como em ZET9 e astro.com. Orbes predefinidos (para o mapa natal):
| Aspeto | Sol | Lua | Interiores | Júpiter | Exteriores |
|---|---|---|---|---|---|
| Conjunção | 12° | 10° | 5° | 8° | 5° |
| Sextil | 6.5° | 6° | 5° | 5° | 5° |
| Quadratura | 10° | 8° | 5° | 7° | 5° |
| Trígono | 12° | 8° | 5° | 5° | 5° |
| Oposição | 12° | 10° | 5° | 8° | 5° |
Aspetos menores (36°, 40°, 45°, 72°, 108°, 135°, 144°) estão desativados
por predefinição. São ativados explicitamente através de ALL_ASPECTS.
Latitudes polares
Seção intitulada “Latitudes polares”Para |lat| > 66.5°, os sistemas Placidus / Koch / Regiomontanus não estão matematicamente definidos. Nesses casos, o Swiss Ephemeris retorna automaticamente Porphyry, e a nossa API adiciona um aviso:
{ "system": "P", "warning": "Система Placidus не визначена для lat=68.96° (> 66.5°). Swiss Ephemeris підставив Porphyry..."}Verificação contínua
Seção intitulada “Verificação contínua”A regressão é verificada em cada PR via CI:
api-calc/tests/endpoints/- 873 snapshots contra mapas de referência (Monroe / Diana / Einstein) + sinastria / composto / davison.github/workflows/api-accuracy.yml- execução automática em PR- Triangulação contra swetest CGI + Kerykeion - semanalmente
- Monitorização do Swiss Ephemeris upstream via Dependabot
Fiabilidade do MCP - saída tipada
Seção intitulada “Fiabilidade do MCP - saída tipada”A precisão do motor - metade da confiança. A outra metade - o contrato de saída, que um agente (Claude, ChatGPT, Cursor) pode validar. O nosso servidor MCP não retorna «texto bruto, resolvam vocês»:
structuredContenttipado. Mais de 600 ferramentas MCP, e a grande maioria delas publica umoutputSchemarigoroso - o cliente MCP recebe uma estrutura validada, e não uma string que precisa de ser analisada aleatoriamente.- Proteção contra desvio de esquema. O teste CI
openapi-example-driftvalida cada snapshot de regressão contra o esquema derivado do seu próprio exemplo: se a saída real do endpoint divergir do esquema publicado, a compilação falha. É esta classe de divergências que causa o erro MCP-32602 Output validation error. - Erros são erros. Uma falha da ferramenta é sempre retornada com a flag
isErrore um código tipado (UPPER_SNAKE). Nunca fornecemos ao modelo um stack trace bruto ou caminhos internos do servidor como «dados».
Ou seja, a integração via MCP é tão previsível quanto uma chamada REST direta:
o que é descrito em /openapi.json é o que a ferramenta retorna.
Limitações conhecidas
Seção intitulada “Limitações conhecidas”- Datas fora do intervalo (antes de 1800 e depois de 2399): é utilizado o Moshier analytical, precisão ~0.1” (vs < 0.01” para SWIEPH com ficheiros DE431)
- Lilith Verdadeira (id=13) vs Lilith Média (id=12): diferença até 12° -
por predefinição Lilith Média (comportamento estável), Lilith Verdadeira
disponível via
planetIds: [13] - Topocêntrico vs geocêntrico: por predefinição geocêntrico
Ligações
Seção intitulada “Ligações”- Swiss Ephemeris: https://www.astro.com/swisseph/
- swetest CGI: https://www.astro.com/swisseph/swetest.htm
- Catálogo de Eclipses da NASA: https://eclipse.gsfc.nasa.gov/
- Kerykeion: https://github.com/g-battaglia/kerykeion
- Astrodienst: https://www.astro.com/
Contactos
Seção intitulada “Contactos”Para questões de precisão: escreve para support@astroway.info com os dados do mapa e a referência esperada (astro.com ou outra fonte autoritária).