View as:

Emmanuel Sérié

S&P Global Xpressfeed — Onboarding Brief

Brief de la tâche "rapatrier les données S&P Global via SFTP + uploader sur Wasabi" — suite à la réception des credentials Xpressfeed par CAL et à la transmission à Wissal (email du 2026-04-13).

Contexte

Paramètres techniques (migration guide v1.7)

ChampValeur
Host (tous feeds sauf GICS)sftp2.spglobal.com
Host (GICS Direct / GICS History)sftp.gicsfiles.com
Port22
Authpassword ou SSH RSA Public Key
Max connexions concurrentes20
Timeout inactivité10 min
Fenêtre maintenanceSam 12:00 UTC \(\to\) Dim 12:00 UTC
Username XpressfeedEcol5648PC (porté par CAL — transférable à Wissal)
Passwordtransmis par téléphone par support.datafeed.mi@spglobal.com

Livrables attendus

1. ~/dev/ESERIE/MaQI-perso/data-upload/justfile — nouvelles cibles

Ajouter les cibles suivantes au justfile existant (le pattern backup / upload est déjà établi pour gdelt/causalitylink/ravenpack/databento).

# --- S&P Global (SFTP pull + Wasabi push) ---

# Configuration
sp_sftp_host := env("SP_SFTP_HOST", "sftp2.spglobal.com")
sp_sftp_user := env("SP_SFTP_USER", "Ecol5648PC")
sp_local    := env("SP_LOCAL", home_directory() / "MaQI - data" / "spglobal")
sp_bucket   := "maqi-spglobal"

# Pré-requis : remote rclone `spglobal:` dans ~/.config/rclone/rclone.conf
# type = sftp, host = sftp2.spglobal.com, user = Ecol5648PC, pass = obscured
# ou key_file pour SSH key auth (recommandé pour production).

# Inventorier ce qui est disponible sur le serveur SFTP
sp-list:
    rclone lsd spglobal: --max-depth 2

# Pull incrémental SFTP → local (idempotent, ne retransfère que les nouveaux)
sp-pull:
    mkdir -p "{{sp_local}}"
    rclone sync spglobal: "{{sp_local}}" \
        --transfers 8 --checkers 16 \
        --progress \
        --log-file="{{log_dir}}/sp-pull-$(date +%Y%m%d-%H%M).log"

# Push local → Wasabi bucket maqi-spglobal (création du bucket si absent)
sp-upload:
    rclone mkdir maqi:{{sp_bucket}} 2>/dev/null || true
    rclone sync "{{sp_local}}" maqi:{{sp_bucket}} \
        --transfers 8 --checkers 16 --fast-list \
        --progress \
        --log-file="{{log_dir}}/sp-upload-$(date +%Y%m%d-%H%M).log"

# Pull + upload en chaîne (cron-friendly)
sp-sync: sp-pull sp-upload

# Vérifier la cohérence local / S3 (counts + sizes)
sp-status:
    #!/usr/bin/env bash
    set -euo pipefail
    echo "=== Local ({{sp_local}}) ==="
    if [ -d "{{sp_local}}" ]; then
        du -sh "{{sp_local}}"
        find "{{sp_local}}" -type f | wc -l | xargs echo "files:"
    else
        echo "NOT DOWNLOADED YET"
    fi
    echo ""
    echo "=== Wasabi (maqi:{{sp_bucket}}) ==="
    rclone size maqi:{{sp_bucket}} 2>/dev/null || echo "bucket empty or missing"

2. ~/.config/rclone/rclone.conf — remote spglobal:

Ajouter (sans commiter le password en clair — utiliser rclone obscure pour chiffrer, ou référencer une clé SSH) :

[spglobal]
type = sftp
host = sftp2.spglobal.com
port = 22
user = Ecol5648PC
# Option A (password) :
pass = <rclone obscure> output
# Option B (SSH key, recommandé pour scripts non-interactifs) :
# key_file = ~/.ssh/spglobal_xpressfeed_ed25519
# key_use_agent = false
disable_hashcheck = false

3. Bucket Wasabi maqi-spglobal

4. Documentation (obligatoire — sprint "on documente bien tout")

FichierContenu
docs/providers/spgmi-compustat.mdFiche Compustat + CIQ PIT (schéma Explore/Validate/Negotiate/Decisions)
docs/providers/spgmi-transcripts.mdIdem pour Transcripts + Machine Readable Filings
docs/providers/spgmi-gicrs.mdIdem pour GICRS (Cross Reference)
docs/providers/spgmi-esg-physical-risk.mdIdem pour ESG Physical Risk
docs/providers/spgmi-panjiva.mdIdem pour Panjiva Supply Chain
docs/providers/catalog.yamloperational_status: validated, detail_doc: providers/<id>.md, last_reviewed: 2026-04-15
docs/providers/cartography.mdMettre les 5 entrées S&P en statut 🟢 (validated)
docs/wasabi/state.mdAjouter ligne maqi-spglobal (+ bucket tree)
docs/wasabi/data-structure.mdSchéma du bucket S&P (arborescence par package, format fichiers, exemple S3 key)
docs/wasabi/sync-history.mdNouvelle entrée "2026-04-15 — S&P Global initial SFTP pull + Wasabi upload"
docs/adr/003-spglobal-sftp-pipeline.mdADR sur le design de la pipeline \(SFTP\to{}Local\to{}Wasabi\) (fenêtre maintenance, rétention, idempotence, séparation credentials)

5. Notebook démo — nouvelle cellule

Dans notebooks/maqi-data-demo.ipynb, ajouter une section 6 (avant le health-check) :

Contraintes

Définition de terminé

Ressources

Séquencement

  1. Sous-tâche 1 — Connexion SFTP (préalable, manuel + worker)

    • Récupérer le password auprès de CAL (il est prêt à le transférer à Wissal).
    • Configurer le remote rclone spglobal: localement.
    • rclone lsd spglobal: pour lister les répertoires.
  2. Sous-tâche 2 — Justfile + pull local (worker)

    • Ajouter les cibles au justfile MaQI-perso.
    • Lancer just sp-pull pour un premier rapatriement.
  3. Sous-tâche 3 — Bucket Wasabi + upload (worker)

    • Créer maqi-spglobal, étendre la policy.
    • just sp-upload.
  4. Sous-tâche 4 — Documentation (worker)

    • Toutes les docs listées ci-dessus.
  5. Sous-tâche 5 — Notebook (worker)

    • Enrichir la démo Colab.

Les sous-tâches 1 et 2 doivent être séquentielles (la 1 débloque la 2). 3 peut tourner en parallèle de 4-5 dès que 2 a rapatrié un échantillon.