The pack (manifests, prelude, runbook, verify-provenance.py PoC) lived only in an ephemeral session scratchpad while erp#41/#42/#43/#44 now reference it as fixtures and the prod replay is still pending. 36/36 provenance checks were green at rehearsal time; PDFs are re-fetchable via arcodange-email-ingest (documented in the pack README). Co-Authored-By: Claude Fable 5 <[email protected]>
65 lines
4.2 KiB
Bash
65 lines
4.2 KiB
Bash
#!/usr/bin/env bash
|
|
# Prélude du replay PROD — reproduit les étapes hors-manifeste répétées avec
|
|
# succès sur la sandbox le 2026-07-11 (fiches, lignes, refs/dates, validations).
|
|
# À exécuter PAR L'HUMAIN, clé prod en main, AVANT les deux promote apply :
|
|
#
|
|
# export DOLIBARR_PROD_WRITE_KEY=... # jamais stockée
|
|
# export ARCO_PROMOTE_CONFIRM=I-UNDERSTAND-THIS-WRITES-PROD
|
|
# bash prod-replay-prelude.sh
|
|
# bin/arcodange promote apply manifest-A-km-payments.json --target prod
|
|
# bin/arcodange promote apply manifest-B-suppliers.json --target prod
|
|
#
|
|
# Chaque étape relit l'objet après écriture. S'arrête au premier écart.
|
|
set -euo pipefail
|
|
|
|
ERP_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
# Adapter si le script n'est pas copié dans le repo erp :
|
|
DPW="${DPW:-$HOME/Work/Arcodange/erp/.claude/skills/dolibarr-sandbox-write/scripts/dol-prod-write.sh}"
|
|
[ -x "$DPW" ] || { echo "dol-prod-write.sh introuvable ($DPW)"; exit 1; }
|
|
|
|
jqv() { jq -r "$1" ; }
|
|
step() { echo; echo "=== $* ==="; }
|
|
|
|
step "0. Pré-vols : les 7 pièces prod dans l'état attendu"
|
|
for i in 14 15 16 17; do "$DPW" GET "/invoices/$i" | jq -e '(.statut=="0")' >/dev/null \
|
|
|| { echo "invoice $i n'est pas en brouillon — STOP (état prod ≠ répétition)"; exit 1; }; done
|
|
for i in 12 14 15; do "$DPW" GET "/supplierinvoices/$i" | jq -e '(.statut=="0")' >/dev/null \
|
|
|| { echo "supplierinvoice $i n'est pas en brouillon — STOP"; exit 1; }; done
|
|
echo "OK — 7 brouillons présents"
|
|
|
|
step "1. Fiches fournisseur : Anthropic (11) + Mistral (12)"
|
|
"$DPW" PUT /thirdparties/11 '{"fournisseur":1,"code_fournisseur":"-1"}' >/dev/null
|
|
"$DPW" PUT /thirdparties/12 '{"fournisseur":1,"code_fournisseur":"-1"}' >/dev/null
|
|
for i in 11 12; do "$DPW" GET "/thirdparties/$i" | jq -r '[.id,.name,.fournisseur,.code_fournisseur]|@tsv'; done
|
|
|
|
step "2. Brouillons fournisseurs : refs, dates, lignes manquantes, paye fantôme"
|
|
EP_ANT=$(python3 -c "import datetime;print(int(datetime.datetime(2026,4,12).timestamp()))")
|
|
EP_MIS=$(python3 -c "import datetime;print(int(datetime.datetime(2026,4,2).timestamp()))")
|
|
"$DPW" PUT /supplierinvoices/12 '{"ref_supplier":"F1046"}' >/dev/null
|
|
"$DPW" PUT /supplierinvoices/14 "{\"ref_supplier\":\"9BF0758D-695749\",\"date\":${EP_ANT}}" >/dev/null
|
|
"$DPW" PUT /supplierinvoices/15 "{\"ref_supplier\":\"MSTRL-API-814045-001\",\"date\":${EP_MIS}}" >/dev/null
|
|
# lignes absentes sur 12 et 14 (constaté identique en sandbox ; re-vérifié ici)
|
|
L12=$("$DPW" GET /supplierinvoices/12 | jq '.lines|length')
|
|
L14=$("$DPW" GET /supplierinvoices/14 | jq '.lines|length')
|
|
[ "$L12" = "0" ] && "$DPW" POST /supplierinvoices/12/lines '{"description":"Apport d affaire Arcodange - Projet — juin 2026 (Hiway F1046)","pu_ht":"219.50","qty":"1","tva_tx":"20","product_type":"1"}' >/dev/null
|
|
[ "$L14" = "0" ] && "$DPW" POST /supplierinvoices/14/lines '{"description":"Claude Pro — abonnement avril 2026 (facture 9BF0758D-695749, autoliquidation UE)","pu_ht":"180.00","qty":"1","tva_tx":"0","product_type":"1"}' >/dev/null
|
|
"$DPW" PUT /supplierinvoices/14 '{"paye":0}' >/dev/null
|
|
"$DPW" PUT /supplierinvoices/15 '{"paye":0}' >/dev/null
|
|
for i in 12 14 15; do "$DPW" GET "/supplierinvoices/$i" | jq -r '[.id,.ref_supplier,(.lines|length),.total_ttc,.paye]|@tsv'; done
|
|
# garde-fou totaux (l'ajout de ligne ne doit PAS doubler)
|
|
"$DPW" GET /supplierinvoices/12 | jq -e '.total_ttc=="263.40000000"' >/dev/null || { echo "total 12 inattendu — STOP"; exit 1; }
|
|
"$DPW" GET /supplierinvoices/14 | jq -e '.total_ttc=="180.00000000"' >/dev/null || { echo "total 14 inattendu — STOP"; exit 1; }
|
|
|
|
step "3. Validation clients — ordre chronologique (mai avant juin)"
|
|
for i in 14 15 16 17; do "$DPW" POST "/invoices/$i/validate" '{"idwarehouse":0,"notrigger":0}' >/dev/null; done
|
|
for i in 14 15 16 17; do "$DPW" GET "/invoices/$i" | jq -r '[.id,.ref,.statut,.total_ttc]|@tsv'; done
|
|
|
|
step "4. Validation fournisseurs"
|
|
for i in 12 14 15; do "$DPW" POST "/supplierinvoices/$i/validate" '{"idwarehouse":0,"notrigger":0}' >/dev/null; done
|
|
for i in 12 14 15; do "$DPW" GET "/supplierinvoices/$i" | jq -r '[.id,.ref,.ref_supplier,.statut]|@tsv'; done
|
|
|
|
echo
|
|
echo "Prélude OK — enchaîner :"
|
|
echo " bin/arcodange promote apply manifest-A-km-payments.json --target prod"
|
|
echo " bin/arcodange promote apply manifest-B-suppliers.json --target prod"
|