// =====================================================
// MÓDULO DE TARJETAS - Esquema en formato DBML
// Pegar directamente en: https://dbdiagram.io/d/
// (no usar Import, pegar en el editor de la izquierda)
// =====================================================

Table tatarlot {
  ctarlot      int          [pk, increment, note: "ID único del lote"]
  xnombre_lote varchar(200) [not null, note: "Nombre descriptivo del lote"]
  ccanalalt    int          [note: "FK: canal de venta (macanalalt)"]
  cproducto    char(40)     [note: "FK: producto/seguro (maproductos)"]
  cusuario     varchar(50)
  fingreso     datetime
}

Table tatarjeta {
  ctarjeta      int         [pk, increment, note: "ID único de tarjeta"]
  nro_tarjeta   varchar(8)  [not null, note: "Número físico de tarjeta (8 dígitos)"]
  xcodigo_unico varchar(8)  [not null, unique, note: "Código de activación (8 caracteres)"]
  ctarlot       int         [not null, ref: > tatarlot.ctarlot, note: "FK -> tatarlot"]
  iestado       int         [note: "1=Generada, 11=Activa"]
  cpoliza       varchar(50)
  cnpoliza      varchar(50)
  fanopol       smallint    [note: "Año de la póliza"]
  fmespol       tinyint     [note: "Mes de la póliza (1-12)"]
  factivacion   datetime    [note: "Fecha de activación"]
  fultmod       datetime
  cusuariomod   varchar(50)
  cusuario      varchar(50)
  fingreso      datetime
}

Table tafactura {
  cfactura         int           [pk, increment, note: "ID único de factura"]
  ccanalt          int           [note: "FK: canal"]
  nfactura         varchar(50)   [not null, note: "Número de factura"]
  ffactura         date          [not null]
  mmonto           decimal(12,2) [note: "Monto total"]
  xarchivo_factura varchar(500)  [note: "Ruta del PDF"]
  iestado          int
  cusuario         varchar(50)
  fingreso         datetime
}

Table tafactura_d {
  cfactura_d        int          [pk, increment]
  cfactura          int          [not null, ref: > tafactura.cfactura, note: "FK -> tafactura"]
  ctarjeta          int          [not null, ref: > tatarjeta.ctarjeta, note: "FK -> tatarjeta"]
  ccedula_cliente   varchar(50)
  xnombre_cliente   varchar(200)
  ntelefono_cliente varchar(20)
  fventa            date
  xsucursal_canal   varchar(250)
  cusuario          varchar(50)
  fingreso          datetime
}

Table taproceso_log {
  ctaproceso_log   bigint       [pk, increment]
  ctarjeta         int          [ref: > tatarjeta.ctarjeta, note: "FK -> tatarjeta"]
  xcodigo_tarjeta  varchar(8)
  ccanal           int
  itipo_accion     varchar(20)  [note: "ACTIVAR, VALIDAR, CONSULTAR..."]
  xestado_proceso  varchar(10)  [note: "OK, ERROR"]
  xendpoint_api    varchar(200)
  xdatos_peticion  varchar(max)
  xdatos_respuesta varchar(max)
  xmensaje_error   varchar(max)
  ncodigo_http     int
  xdireccion_ip    varchar(45)
  fproceso         datetime
}

// =====================================================
// VISTA: vw_inconsistencias_canales
// Detecta inconsistencias entre canales y lotes
// Nota: DBML no soporta vistas nativas, se documenta
//       como tabla de referencia con sus columnas.
// =====================================================

Table vw_inconsistencias_canales [note: "VISTA - Solo lectura. Detecta inconsistencias de canales"] {
  tipo_inconsistencia varchar(50)  [note: "API_SIN_CLIENTE | SIN_CANAL"]
  ccanalalt           int          [ref: > tatarlot.ccanalalt, note: "FK referencial -> tatarlot"]
  xcanalalt           varchar(200) [note: "Nombre del canal"]
  cci_rif             varchar(50)  [note: "RIF del canal en maclient_api"]
  ctipocanal          varchar(20)
  api_estado          int          [note: "Estado en maclient_api"]
  xcliente            varchar(200)
  itipopers           int
  descripcion         varchar(200) [note: "Descripción de la inconsistencia"]
  lotes_afectados     int          [note: "Cantidad de lotes afectados en tatarlot"]
}
