═══════════════════════════════════════════════════════════════════════════
  PCI DSS PREGUNTA 40 — PAQUETE DE EVIDENCIA
  Generación de datos de prueba + cleanup pre-producción
═══════════════════════════════════════════════════════════════════════════

PCI DSS Q40 (PCI v4 Req 6.5.4 + 6.5.5 + 6.5.6) requiere:
  - Proceso para generar datos de prueba en lower environments
  - Proceso + evidencia para eliminar datos/cuentas de prueba antes de prod
  - Datos de prueba de muestra demostrando que NO se usa PAN en vivo

QSA solicitó: Pantallazos de datos de prueba utilizados antes del paso
              a producción

═══════════════════════════════════════════════════════════════════════════
ARQUITECTURA FINTRIXS PAY
═══════════════════════════════════════════════════════════════════════════

Fintrixs Pay es una PASARELA DE PAGOS PROPIA (no Stripe, no PayU).
El adquirente real es CREDIBANCO (Colombia), que procesa contra las
redes Visa/Mastercard/Amex/Discover.

Cadena: App merchant → Fintrixs Pay → Credibanco → Red de tarjeta → Issuer

En STAGING usamos:
  - Conexión a Credibanco SANDBOX (developer.credibanco.com)
  - PANs públicos estándar ISO (publicados por las propias redes)
  - Estos PANs son aceptados por sandbox Credibanco y rechazados en PROD

═══════════════════════════════════════════════════════════════════════════
PANs DE PRUEBA AUTORIZADOS (12 PANs whitelist)
═══════════════════════════════════════════════════════════════════════════

Red          PAN                  Documentación oficial
─────────────────────────────────────────────────────────────────────
Visa         4111111111111111     developer.visa.com Test Card Numbers
Visa         4012888888881881     developer.visa.com
Visa         4242424242424242     developer.visa.com
Visa         4000000000000002     developer.visa.com (issuer-declined)
Mastercard   5555555555554444     developer.mastercard.com Sandbox
Mastercard   5454545454545454     developer.mastercard.com
Mastercard   5105105105105100     developer.mastercard.com (legacy ISO)
Mastercard   2223003122003222     developer.mastercard.com (2-series)
Amex         378282246310005      developer.americanexpress.com Sandbox
Amex         371449635398431      developer.americanexpress.com
Discover     6011111111111117     Discover Test PAN range
Discover     6011000990139424     Discover Test PAN range

Note: Estos PANs son los estándar ISO publicados por las redes mismas.
      Cualquier sandbox de adquirente (Credibanco, Redeban, etc.) los acepta.
      NUNCA aceptados por la red en producción real.

═══════════════════════════════════════════════════════════════════════════
ARQUITECTURA DEL TEST DATA LIFECYCLE
═══════════════════════════════════════════════════════════════════════════

1. SCHEMA con CHECK constraints (defensa-en-profundidad a nivel DB):
   - merchants.merchant_id MUST LIKE 'TEST-%'
   - customers.email MUST LIKE '%@example.com'
   - cards.pan_token MUST be in 12-PAN ISO/Credibanco whitelist
   - transactions.acquirer MUST LIKE '%-sandbox'
   - *.environment MUST = 'staging'

2. SYNTHETIC SEED (02-synthetic-seed.sql):
   - 30 merchants (TEST-001 .. TEST-030)
   - 50 customers (CUST-0001 .. CUST-0050, all @example.com)
   - 100 cards (random over 12 ISO test PANs)
   - 200 transactions (TXN-STG-*, currency COP, acquirer=credibanco-sandbox)
   - All operations logged to seed_audit table

3. CLEANUP PRE-PROD (03-cleanup-pre-prod.sql):
   - Snapshot row counts → seed_audit
   - TRUNCATE CASCADE all data tables
   - seed_audit preserved (immutable history)
   - Atomic (transactional — todo o nada)

═══════════════════════════════════════════════════════════════════════════
TESTS DE VERIFICACIÓN EJECUTADOS
═══════════════════════════════════════════════════════════════════════════

1. INSERT con PAN real → ERROR pan_is_test_card ✓
2. INSERT con email real (no @example.com) → ERROR customers_email_check ✓
3. INSERT con merchant_id 'PROD-001' → ERROR merchants_merchant_id_check ✓
4. INSERT con environment='production' → ERROR merchants_environment_check ✓
5. INSERT con acquirer='credibanco-prod' → ERROR transactions_acquirer_check ✓

═══════════════════════════════════════════════════════════════════════════
CONTENIDO DEL PAQUETE
═══════════════════════════════════════════════════════════════════════════

  00-README.txt                  (este archivo)
  01-staging-schema.sql          Schema PCI con 12-PAN whitelist + acquirer check
  02-synthetic-seed.sql          Synthetic data generator
  03-cleanup-pre-prod.sql        Cleanup TRUNCATE CASCADE
  10-staging-summary.txt         Counts + PANs únicos seedeados
  11-constraint-tests.txt        Tests CHECK rejecting bad inputs
  12-cleanup-demo.txt            Output del cleanup ejecutado
  13-audit-trail.txt             seed_audit table
  14-schema-with-checks.txt      pg_constraint definitions

═══════════════════════════════════════════════════════════════════════════
Fecha de extracción: 2026-05-27
Extraído por: Gabriel Ureña (CTO Fintrixs SAS)
═══════════════════════════════════════════════════════════════════════════
