// Conceptos y parámetros base del sistema RRHH (Paraguay).
// Se siembran por empresa al activar el módulo o al ejecutar POST /rrhh/seed-defaults.
// Idempotente: usar upsert por (empresa_id, codigo) o (empresa_id, clave, vigencia_desde).

export type ConceptoDefault = {
  codigo: string;
  nombre: string;
  tipo: 'INGRESO' | 'EGRESO';
  categoria: string;
  afecta_base_ips: boolean;
  afecta_base_aguinaldo: boolean;
  es_porcentaje: boolean;
  porcentaje?: number;
  es_fijo: boolean;
  aplica_a: string;
  orden_visualizacion: number;
};

export const CONCEPTOS_SISTEMA: ConceptoDefault[] = [
  {
    codigo: 'SALARIO_BASE',
    nombre: 'Salario base',
    tipo: 'INGRESO',
    categoria: 'SALARIO',
    afecta_base_ips: true,
    afecta_base_aguinaldo: true,
    es_porcentaje: false,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 10,
  },
  {
    codigo: 'SALARIO_PROPORCIONAL',
    nombre: 'Salario proporcional',
    tipo: 'INGRESO',
    categoria: 'SALARIO',
    afecta_base_ips: true,
    afecta_base_aguinaldo: true,
    es_porcentaje: false,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 11,
  },
  {
    codigo: 'HORAS_EXTRA_50',
    nombre: 'Horas extra 50%',
    tipo: 'INGRESO',
    categoria: 'HORA_EXTRA',
    afecta_base_ips: true,
    afecta_base_aguinaldo: true,
    es_porcentaje: true,
    porcentaje: 0.5,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 20,
  },
  {
    codigo: 'HORAS_EXTRA_100',
    nombre: 'Horas extra 100% (feriados)',
    tipo: 'INGRESO',
    categoria: 'HORA_EXTRA',
    afecta_base_ips: true,
    afecta_base_aguinaldo: true,
    es_porcentaje: true,
    porcentaje: 1.0,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 21,
  },
  {
    codigo: 'SUBSIDIO_FAMILIAR',
    nombre: 'Subsidio familiar (5% por hijo menor)',
    tipo: 'INGRESO',
    categoria: 'SUBSIDIO',
    afecta_base_ips: false,
    afecta_base_aguinaldo: false,
    es_porcentaje: true,
    porcentaje: 0.05,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 30,
  },
  {
    codigo: 'COMISION_VENTAS',
    nombre: 'Comisión por ventas',
    tipo: 'INGRESO',
    categoria: 'COMISION',
    afecta_base_ips: true,
    afecta_base_aguinaldo: true,
    es_porcentaje: false,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 40,
  },
  {
    codigo: 'BONO_DESEMPENO',
    nombre: 'Bono por desempeño',
    tipo: 'INGRESO',
    categoria: 'BONO',
    afecta_base_ips: true,
    afecta_base_aguinaldo: true,
    es_porcentaje: false,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 41,
  },
  {
    codigo: 'AGUINALDO',
    nombre: 'Aguinaldo anual (Art. 243 CT)',
    tipo: 'INGRESO',
    categoria: 'AGUINALDO',
    // El aguinaldo NO aporta IPS (Ley 98/92 — está fuera de la base aportable).
    afecta_base_ips: false,
    // Tampoco se acumula consigo mismo para el próximo aguinaldo.
    afecta_base_aguinaldo: false,
    es_porcentaje: false,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 50,
  },
  {
    codigo: 'PAGO_VACACIONES',
    nombre: 'Pago de vacaciones gozadas (Art. 219 CT)',
    tipo: 'INGRESO',
    categoria: 'VACACIONES',
    // El pago de vacaciones es salario: aporta IPS y base aguinaldo.
    afecta_base_ips: true,
    afecta_base_aguinaldo: true,
    es_porcentaje: false,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 51,
  },
  {
    codigo: 'ANTICIPO_QUINCENAL',
    nombre: 'Anticipo quincenal',
    tipo: 'EGRESO',
    categoria: 'ANTICIPO',
    afecta_base_ips: false,
    afecta_base_aguinaldo: false,
    es_porcentaje: false,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 100,
  },
  {
    codigo: 'IPS_OBRERO',
    nombre: 'IPS aporte obrero (9%)',
    tipo: 'EGRESO',
    categoria: 'IPS',
    afecta_base_ips: false,
    afecta_base_aguinaldo: false,
    es_porcentaje: true,
    porcentaje: 0.09,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 110,
  },
  {
    codigo: 'IPS_PATRONAL',
    nombre: 'IPS aporte patronal (16.5%)',
    tipo: 'EGRESO',
    categoria: 'IPS',
    afecta_base_ips: false,
    afecta_base_aguinaldo: false,
    es_porcentaje: true,
    porcentaje: 0.165,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 111,
  },
  {
    codigo: 'IPS_ADMIN',
    nombre: 'IPS aporte administrativo (1%)',
    tipo: 'EGRESO',
    categoria: 'IPS',
    afecta_base_ips: false,
    afecta_base_aguinaldo: false,
    es_porcentaje: true,
    porcentaje: 0.01,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 112,
  },
  {
    codigo: 'CUOTA_PRESTAMO',
    nombre: 'Cuota de préstamo',
    tipo: 'EGRESO',
    categoria: 'DESCUENTO',
    afecta_base_ips: false,
    afecta_base_aguinaldo: false,
    es_porcentaje: false,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 120,
  },
  {
    codigo: 'PAGO_QUINCENAL',
    nombre: 'Pago de quincena (descontado en mensual)',
    tipo: 'EGRESO',
    categoria: 'DESCUENTO',
    afecta_base_ips: false,
    afecta_base_aguinaldo: false,
    es_porcentaje: false,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 105,
  },
  {
    codigo: 'DESCUENTO_AUSENCIA',
    nombre: 'Descuento por ausencia',
    tipo: 'EGRESO',
    categoria: 'DESCUENTO',
    afecta_base_ips: false,
    afecta_base_aguinaldo: false,
    es_porcentaje: false,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 130,
  },
  {
    codigo: 'DESCUENTO_TARDANZA',
    nombre: 'Descuento por tardanza',
    tipo: 'EGRESO',
    categoria: 'DESCUENTO',
    afecta_base_ips: false,
    afecta_base_aguinaldo: false,
    es_porcentaje: false,
    es_fijo: false,
    aplica_a: 'TODOS',
    orden_visualizacion: 131,
  },
];

export type ParametroDefault = {
  clave: string;
  nombre: string;
  valor: string;
  tipo_dato: 'NUMERO' | 'PORCENTAJE' | 'TEXTO' | 'BOOLEANO';
  categoria: string;
  editable: boolean;
};

export const PARAMETROS_SISTEMA: ParametroDefault[] = [
  {
    clave: 'IPS_PORCENTAJE_OBRERO',
    nombre: 'IPS — Aporte del obrero',
    valor: '0.09',
    tipo_dato: 'PORCENTAJE',
    categoria: 'IPS',
    editable: false,
  },
  {
    clave: 'IPS_PORCENTAJE_PATRONAL',
    nombre: 'IPS — Aporte patronal',
    valor: '0.165',
    tipo_dato: 'PORCENTAJE',
    categoria: 'IPS',
    editable: false,
  },
  {
    clave: 'IPS_PORCENTAJE_ADMIN',
    nombre: 'IPS — Aporte administrativo',
    valor: '0.01',
    tipo_dato: 'PORCENTAJE',
    categoria: 'IPS',
    editable: false,
  },
  {
    clave: 'SMLV_MENSUAL',
    nombre: 'Salario mínimo legal vigente — mensual (Gs.)',
    valor: '2800000',
    tipo_dato: 'NUMERO',
    categoria: 'SMLV',
    editable: true,
  },
  {
    clave: 'SMLV_DIARIO',
    nombre: 'Salario mínimo legal vigente — diario (Gs.)',
    valor: '93333',
    tipo_dato: 'NUMERO',
    categoria: 'SMLV',
    editable: true,
  },
  {
    clave: 'SUBSIDIO_FAMILIAR_PORCENTAJE',
    nombre: 'Subsidio familiar — % por hijo menor',
    valor: '0.05',
    tipo_dato: 'PORCENTAJE',
    categoria: 'SUBSIDIO',
    editable: false,
  },
  {
    clave: 'HORAS_LABORALES_MES',
    nombre: 'Horas laborales por mes (cálculo de hora extra)',
    valor: '200',
    tipo_dato: 'NUMERO',
    categoria: 'TIEMPO',
    editable: true,
  },
  {
    clave: 'PORCENTAJE_MICROEMPRESA_BASE_IPS',
    nombre: 'Microempresa — % de SMLV como base IPS mínima',
    valor: '0.80',
    tipo_dato: 'PORCENTAJE',
    categoria: 'IPS',
    editable: false,
  },
  {
    clave: 'LIMITE_DESCUENTO_SALARIO',
    nombre: 'Límite máximo de descuentos sobre salario',
    valor: '0.30',
    tipo_dato: 'PORCENTAJE',
    categoria: 'LIMITE',
    editable: false,
  },
  {
    clave: 'LIMITE_EMBARGO_JUDICIAL',
    nombre: 'Límite máximo de embargo judicial sobre salario',
    valor: '0.50',
    tipo_dato: 'PORCENTAJE',
    categoria: 'LIMITE',
    editable: false,
  },
  {
    clave: 'PERMITIR_NETO_NEGATIVO_EXCEPCION',
    nombre: 'Permitir cierre excepcional con neto negativo (requiere motivo y auditoría)',
    valor: 'false',
    tipo_dato: 'BOOLEANO',
    categoria: 'CONTROL',
    editable: true,
  },
  {
    clave: 'DIAS_BASE_LIQUIDACION',
    nombre: 'Días base para liquidación (0 = días reales del calendario; 30 = mes comercial)',
    valor: '0',
    tipo_dato: 'NUMERO',
    categoria: 'CONTROL',
    editable: true,
  },
  {
    clave: 'HEREDAR_DESCUENTOS_MANUALES_MES_CERRADO',
    nombre: 'Arrastrar descuentos manuales desde una planilla ya cerrada (no = solo salario + IPS)',
    valor: 'false',
    tipo_dato: 'BOOLEANO',
    categoria: 'CONTROL',
    editable: true,
  },
  // ────────────────────────────────────────────────────────────────
  // Presentismo (M16-M22) — tolerancias y comportamiento del motor
  // ────────────────────────────────────────────────────────────────
  {
    clave: 'PRESENTISMO_TOLERANCIA_ENTRADA_MIN',
    nombre: 'Presentismo — Tolerancia global de llegada tardía (min)',
    valor: '5',
    tipo_dato: 'NUMERO',
    categoria: 'PRESENTISMO',
    editable: true,
  },
  {
    clave: 'PRESENTISMO_TOLERANCIA_SALIDA_MIN',
    nombre: 'Presentismo — Tolerancia global de salida anticipada (min)',
    valor: '5',
    tipo_dato: 'NUMERO',
    categoria: 'PRESENTISMO',
    editable: true,
  },
  {
    clave: 'PRESENTISMO_GENERAR_NOVEDAD_AUTOMATICA',
    nombre: 'Presentismo — Confirmar novedades automáticamente (false = quedan en BORRADOR)',
    valor: 'true',
    tipo_dato: 'BOOLEANO',
    categoria: 'PRESENTISMO',
    editable: true,
  },
  {
    clave: 'PRESENTISMO_HORAS_AUSENCIA_MEDIA_JORNADA',
    nombre: 'Presentismo — Horas a partir de las cuales una ausencia parcial se considera media jornada',
    valor: '4',
    tipo_dato: 'NUMERO',
    categoria: 'PRESENTISMO',
    editable: true,
  },
  // ────────────────────────────────────────────────────────────────
  // Legajos Digitales (M23-M26) — control de vencimientos y carga
  // ────────────────────────────────────────────────────────────────
  {
    clave: 'LEGAJO_DIAS_ALERTA_VENCIMIENTO',
    nombre: 'Legajos — Días de anticipación para marcar un documento como POR_VENCER',
    valor: '30',
    tipo_dato: 'NUMERO',
    categoria: 'LEGAJOS',
    editable: true,
  },
  {
    clave: 'LEGAJO_TAMANIO_MAX_ARCHIVO_MB',
    nombre: 'Legajos — Tamaño máximo permitido por archivo (MB)',
    valor: '20',
    tipo_dato: 'NUMERO',
    categoria: 'LEGAJOS',
    editable: true,
  },
  {
    clave: 'LEGAJO_MIME_HABILITADOS',
    nombre: 'Legajos — Tipos MIME habilitados (separados por coma)',
    valor:
      'application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,' +
      'application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,' +
      'image/jpeg,image/png,image/gif,image/webp,image/bmp,image/tiff,' +
      'application/zip,application/x-rar-compressed,' +
      'text/plain,text/csv',
    tipo_dato: 'TEXTO',
    categoria: 'LEGAJOS',
    editable: true,
  },
  {
    clave: 'LEGAJO_ALERTAS_EMAIL_HABILITADO',
    nombre: 'Legajos — Enviar alertas por email al responsable de RRHH y supervisor',
    valor: 'true',
    tipo_dato: 'BOOLEANO',
    categoria: 'LEGAJOS',
    editable: true,
  },
  {
    clave: 'LEGAJO_DIAS_ANTICIPACION_EMAIL',
    nombre: 'Legajos — Días antes del vencimiento para envío escalonado de alertas (lista separada por coma)',
    valor: '30,15,7',
    tipo_dato: 'TEXTO',
    categoria: 'LEGAJOS',
    editable: true,
  },
  {
    clave: 'LEGAJO_COMPLETITUD_OBLIGATORIO_BLOQUEA',
    nombre: 'Legajos — Bloquear cierre de desvinculación si faltan documentos obligatorios o están vencidos',
    valor: 'false',
    tipo_dato: 'BOOLEANO',
    categoria: 'LEGAJOS',
    editable: true,
  },
  {
    clave: 'LEGAJO_PRESIGNED_URL_EXPIRY_SEC',
    nombre: 'Legajos — Duración de URLs firmadas de descarga/preview (segundos)',
    valor: '900',
    tipo_dato: 'NUMERO',
    categoria: 'LEGAJOS',
    editable: true,
  },
];
