# Programas y modalidades comerciales

APC-2 permite que un Casino Admin configure un programa primario y ofertas CPA, RevShare sobre NGR o Hybrid versionadas. Cada casino publica como máximo un programa a la vez.

## Recursos

- `affiliate_programs` contiene marca, país, moneda y términos generales.
- `offers` conserva el código e identidad estable de la oferta.
- `offer_versions` guarda modalidad, condiciones económicas, criterio, vigencia y términos; cada fila es inmutable.
- `offer_version_publications` registra una publicación única por versión.
- La Casino Landing copia únicamente campos públicos en un snapshot allowlisted.

## Flujo privado

1. Crear el programa con `POST /api/v1/casino/programs`.
2. Crear la oferta con `POST /api/v1/casino/offers`.
3. Agregar condiciones con `POST /api/v1/casino/offers/{offer_id}/versions`.
4. Publicar la versión con `POST /api/v1/casino/offer-versions/{version_id}/publications`.
5. Publicar la landing mediante `PATCH /api/v1/casino/landing/settings`.

El tenant y el actor siempre se derivan de la sesión. Los payloads privados no aceptan `tenant_id`.

## Modalidades

- `cpa`: exige `cpa_amount_minor` y no acepta porcentaje RevShare.
- `revshare`: exige `revshare_bps` entre 1 y 10000; la base contractual es `ngr`.
- `hybrid`: exige monto CPA y porcentaje RevShare sobre NGR.

APC-2 publica los términos contractuales. Cálculo, reversals, reconciliación y liquidación pertenecen a APC-6.

## Superficie pública

- `GET /api/v1/public/casinos/{casino_slug}/affiliate-program`.
- `GET /api/v1/public/casinos/{casino_slug}/offers`.

Las respuestas públicas no contienen UUID, tenant, actor, membresía, auditoría ni datos de otros partners.

## Continuidad en APC-3

El CTA conserva únicamente `casino` y `offer` validados durante registro o login. El partner autenticado resuelve la versión vigente, revisa los términos y acepta expresamente antes de crear un deal `submitted`.

El deal conserva snapshots del programa, de la oferta y de sus términos. Editar o publicar una versión nueva no cambia una relación existente. Consulta [Aplicaciones y deals](https://convray.com/docs/concepts/relationships).
