尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Curvas de Mercado Interpolada
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Produção: — Vercel (time diegogozers-projects, projeto project-c9zq2 reaproveitado) + Supabase Postgres (curvas-b3, sa-east-1). O deploy foi feito por upload de arquivos (o token da integração não cria projetos); cron diário registrado em vercel.json roda ~21h30 (São Paulo) em dias úteis. Diagnóstico de captura: GET /api/debug/b3?secret=$CRON_SECRET&date=AAAA-MM-DD. Dashboard de curvas de juros com todas as Taxas Referenciais publicadas pela B3 (página oficial): DI x pré, cupom cambial, DI x IPCA, DI x IGP-M, Selic x pré, TR, cupons de moeda e as demais.檢視完整 README ↗
Produção: https://project-c9zq2.vercel.app — Vercel (time
diegogozers-projects, projetoproject-c9zq2reaproveitado) + Supabase Postgres (curvas-b3, sa-east-1). O deploy foi feito por upload de arquivos (o token da integração não cria projetos); cron diário registrado emvercel.jsonroda ~21h30 (São Paulo) em dias úteis. Diagnóstico de captura:GET /api/debug/b3?secret=$CRON_SECRET&date=AAAA-MM-DD.
Dashboard de curvas de juros com todas as Taxas Referenciais publicadas pela B3 (página oficial): DI x pré, cupom cambial, DI x IPCA, DI x IGP-M, Selic x pré, TR, cupons de moeda e as demais.
┌────────────┐ cron diário / CLI ┌──────────────┐
│ B3 (site) │ ◄───────────────────── │ Ingestão │──► Postgres (RateType,
│ Taxas │ on-demand (retro) │ src/lib/ │ CurvePoint, FetchLog)
│ Referen. │ ◄───────────────────── │ ingest.ts │ │
└────────────┘ └──────────────┘ ▼
API (Next.js routes)
│
▼
Dashboard (React)
A fonte é o endpoint público de Taxas Referenciais BM&F
(www2.bmf.com.br/pages/portal/bmfbovespa/lumis/lum-taxas-referenciais-bmf-ptBR.asp),
que aceita qualquer data histórica (Data=DD/MM/AAAA, Data1=AAAAMMDD, slcTaxa=CODIGO)
— é o mesmo dataset exibido na página nova de Taxas de Referência da B3.
O parser (src/lib/b3/parse.ts) é defensivo contra variações do HTML antigo
(tabelas aninhadas, cabeçalhos com rowspan, decimais pt-BR, latin1) e classifica cada captura em
OK, EMPTY (feriado/sem publicação — mensagem oficial da B3) ou ERROR (re-tentável).
Requisitos: Node 20.19+, Docker (para o Postgres local).
cp .env.example .env # ajuste se necessário
npm install # roda prisma generate no postinstall
npm run db:up # Postgres via docker compose
npm run db:migrate # aplica as migrações
npm run dev # http://localhost:3000
Na primeira visita a UI já funciona: a lista de taxas é semeada e a curva do último dia útil é buscada da B3 na hora. Para popular o histórico:
# captura o dia atual + últimos 5 dias úteis de todas as taxas
npm run job:daily
# preenche um período (reexecutável; datas já capturadas são puladas)
npm run job:backfill -- --from=2024-01-02 --to=2024-12-30
npm run job:backfill -- --from=2015-01-02 --rates=PRE,DIC,DOC # só algumas taxas
Diagnóstico da comunicação com a B3 (não grava nada):
npm run probe -- --date=2024-06-14 --rate=PRE --save=pagina.html
No Vercel (recomendado): o vercel.json já define o cron 30 0 * * *
(00:30 UTC = 21:30 em São Paulo, após a publicação das taxas do dia) chamando
/api/cron/daily. Configure as variáveis:
| Variável | Valor |
|---|---|
DATABASE_URL | Postgres (Supabase/Neon; com Supabase use o pooler em modo transação, porta 6543) |
CRON_SECRET | segredo forte — o Vercel envia Authorization: Bearer $CRON_SECRET automaticamente |
O job é idempotente e incremental: reprocessa apenas (taxa × data) pendentes dos
últimos JOB_CATCHUP_BDAYS (padrão 5) dias úteis, então execuções interrompidas ou
duplicadas convergem sozinhas. No plano Hobby a duração de função é limitada — se a
primeira execução não concluir, as seguintes continuam de onde parou (ou rode
npm run job:daily uma vez para aquecer).
Fora do Vercel: agende npm run job:daily (cron do sistema, systemd timer,
GitHub Actions etc.) num ambiente com DATABASE_URL. Exemplo de crontab:
30 21 * * 1-5 cd /app/curvas && npm run job:daily >> /var/log/curvas.log 2>&1
| Endpoint | Descrição |
|---|---|
GET /api/rates | Taxas conhecidas + cobertura no banco (de/até, nº de datas) |
GET /api/curves?rate=PRE&date=2020-05-15 | Curva da taxa na data; se faltar no banco, busca na B3 e grava (fetch=0 desativa) |
GET /api/curves/compare?rate=PRE&dates=2024-01-15,2020-01-15 | Até 6 datas da mesma taxa |
GET /api/history?rate=PRE&days=365&from=…&to=… | Série temporal de um prazo fixo (interpolação linear; só usa o banco) |
GET /api/cron/daily | Dispara o job (exige Authorization: Bearer CRON_SECRET ou ?secret=) |
Respostas de curva incluem status (OK/EMPTY/ERROR), source (db/b3) e,
quando vazio, nearestAvailable (data mais próxima com dados).
RateType — código slcTaxa (PK), nome exibido na B3, active, primeiro/último avistamento.CurvePoint — PK composta (rateCode, date, days); rate252 e rate360
em DECIMAL(12,6) (% a.a.), nulos quando a curva não publica a base.FetchLog — resultado de cada captura (taxa × data): status, nº de pontos, mensagem.
É o que torna jobs/backfills reexecutáveis e evita re-consultar feriados antigos.npm test # parser (fixtures do HTML da B3), calendário B3, interpolação, concorrência
npm run lint
npm run build
User-Agent de navegador já é enviado). B3_TR_URL permite apontar para um mirror/proxy.ERROR (re-tentáveis, visíveis no
FetchLog) em vez de gravar dados errados; use npm run probe para inspecionar e ajustar o parser.active=false e o
histórico permanece consultável.