SPB Git forge

spb/hfmarketdata

Public

Open high-frequency market data platform — FirstRate full-history downloader, DuckDB/Parquet lake, open REST API and React docs platform (www.hfmarketdata.io)

127commits 1branches 0releases
24.7 MBsize
maindefault branch
11 days agolast push
JavaScript 53.7% Python 38.3% CSS 4.6% TypeScript 3.1%

History of scripts/edgar_reconcile.py · clear filter

  1. Sun, Sep 6, 2026 1

    1. fundamentals: co-déclarants (clé (cik, accn)), poller borné, dictionnaire de couverture
      …
      E1 — edgar_filings : clé primaire composite (cik, accn) + index sur accn. Un numéro
      d'accession est partagé par les co-déclarants (famille Entergy 65984/66901/…) : la PK
      sur accn seule faisait échouer tout _upsert_filings (IntegrityError, 18 entreprises
      jamais ingérées). Migration idempotente (fundamentals/migrations.py) : inline au
      démarrage si ≤ 300 k lignes, sinon avertissement + scripts/migrate_edgar_filings.py à
      lancer avant le déploiement ; l'upsert passe par INSERT … ON CONFLICT DO NOTHING et
      tolère l'ancien schéma pendant la transition. _known_pairs raisonne en paires (cik, accn)
      sans balayer la table ; publish_filing_event produit un événement par co-déclarant.
      
      E2 — poller incrémental : filtre des entrées Atom par TRACKED_FORMS (le flux type=8-K
      renvoie des 8-K/A : Genasys ré-ingéré à chaque cycle pendant 41 h) ; TRACKED_FORMS
      étendu aux amendements et rapports de transition ; garde-fou Redis edgar:seen_accn
      (TTL 7 j) + edgar:failed_accn (3 tentatives) ; companyfacts_404 enregistre quand même
      les dépôts et n'est plus compté comme échec (1 671 « failures » venaient de deux CIK
      sans facts retentés à chaque cycle) ; failure_samples désormais cumulés (plus écrasés
      par un cycle sain) ; index quotidien : jours ouvrables seulement, 403/404 = non publié
      (les master.idx de fin de semaine n'existent pas) ; bulk rebuild seulement si des
      lignes ont changé ; httpx en WARNING dans le script.
      
      E3 — fund_statements.coverage (1,17 Ko × 1,22 M lignes = 1,9 Go) → dictionnaire
      fund_coverage_blob(id, sha1, json) référencé par coverage_id ; lecture hybride
      (JSON inline hérité OU référence) dans service._rows et bulk.build ;
      _replace_statements ne réécrit que si l'empreinte des lignes a changé ;
      scripts/migrate_coverage.py convertit l'existant par lots avec reprise (--vacuum
      optionnel) ; auto_vacuum=INCREMENTAL sur une base jeune + incremental_vacuum dans
      edgar_reconcile.
      
      Tests : tests/test_fundamentals_ingest.py (co-déclarants, boucle du poller, retries,
      échantillons, 403 index, réécriture conditionnelle, dictionnaire, migration).
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 18 days ago · 1 file +5
  2. Fri, Sep 4, 2026 1

    1. Simon-Pierre Boucher committed 20 days ago · 1 file +131