[
  {
    "id": "chg-20260909-header-version-invalido",
    "fecha": "2026-09-09",
    "tipo": "corregido",
    "descripcion": "Un valor no reconocido en el header Crol-Api-Version ya no provoca un error 400 en endpoints que no participan en el versionado de la API; ahora se ignora, como si el header no se hubiera enviado."
  },
  {
    "id": "chg-20260909-versionado-endpoints",
    "fecha": "2026-09-09",
    "tipo": "info",
    "descripcion": "Se habilita un mecanismo de versionado de endpoints por fecha: los endpoints pueden aceptar el header Crol-Api-Version con una fecha (formato aaaa-mm) o el alias current para pedir siempre la version vigente. Ningun endpoint existente tiene todavia mas de una version, asi que el comportamiento actual no cambia con o sin este header."
  },
  {
    "id": "chg-20260903-agencia-viaje-booking-cancelar",
    "fecha": "2026-09-03",
    "tipo": "breaking",
    "endpoint": "DELETE /api/AgenciaViaje/BookingCancelar/{id}",
    "descripcion": "Se retira el endpoint para cancelar un booking de agencia de viajes.",
    "accionRequerida": "Deja de invocar este endpoint; la cancelación de bookings ya no está disponible a través de la API."
  },
  {
    "id": "chg-20260903-cotizaciones-cliente-objid",
    "fecha": "2026-09-03",
    "tipo": "breaking",
    "endpoint": "GET /api/Cotizaciones/Cliente",
    "descripcion": "Se retira el parámetro objId del listado de cotizaciones de cliente; el listado ahora incluye únicamente cotizaciones de venta y ya no es posible filtrar por tipo de objeto.",
    "accionRequerida": "Deja de enviar el parámetro objId en la consulta; si se envía, se ignora."
  },
  {
    "id": "chg-20260903-cotizaciones-cliente-referencia",
    "fecha": "2026-09-03",
    "tipo": "mejorado",
    "endpoint": "GET /api/Cotizaciones/Cliente",
    "descripcion": "Cada cotización del listado de cotizaciones de cliente ahora incluye la referencia externa del documento."
  },
  {
    "id": "chg-20260903-devolucion-ruta-vendedor",
    "fecha": "2026-09-03",
    "tipo": "mejorado",
    "endpoint": "GET /api/Ruta/Devoluciones",
    "descripcion": "El listado de devoluciones de ruta ahora permite filtrar por vendedor y cada registro incluye el identificador del vendedor."
  },
  {
    "id": "chg-20260902-clasificadores-costo-organizacion",
    "fecha": "2026-09-02",
    "tipo": "nuevo",
    "endpoint": "GET /api/ClasificadoresCosto/PorOrganizacion",
    "descripcion": "Nuevo endpoint que devuelve el catálogo completo de clasificadores de costo y gasto activos de la organización, sin limitarse al subconjunto asignado a un usuario en particular. Admite filtro opcional por clasificador y por texto de búsqueda."
  },
  {
    "id": "chg-20260902-cotizaciones-cliente",
    "fecha": "2026-09-02",
    "tipo": "nuevo",
    "endpoint": "GET /api/Cotizaciones/Cliente",
    "descripcion": "Nuevo endpoint para listar las cotizaciones de cliente con paginación y filtros por sucursal, cliente y cotización específica; cada registro incluye el encabezado con importes e impuestos, las partidas, los archivos adjuntos y los documentos relacionados."
  },
  {
    "id": "chg-20260902-devolucion-ruta-listado",
    "fecha": "2026-09-02",
    "tipo": "nuevo",
    "descripcion": "Nuevos endpoints para consultar las devoluciones de ruta: listado paginado por sucursal con filtros por tipo de operación, rango de fechas y búsqueda por folio o vendedor, y detalle de una devolución con sus partidas de productos y empaques con existencia, conteo, diferencia y totales."
  },
  {
    "id": "chg-20260901-proyectos-crear-actualizar",
    "fecha": "2026-09-01",
    "tipo": "breaking",
    "descripcion": "Crear y actualizar un proyecto (división de negocio) ahora son operaciones separadas: POST /api/Proyecto solo crea proyectos nuevos y ya no acepta divisionId en el cuerpo; para actualizar un proyecto existente se agrega PUT /api/Proyecto/{id}, donde el identificador va en la ruta.",
    "accionRequerida": "Si actualizabas un proyecto enviando divisionId en el cuerpo de POST /api/Proyecto, cambia a PUT /api/Proyecto/{id} con el identificador en la ruta y el resto de los datos en el cuerpo."
  },
  {
    "id": "chg-20260831-consumidores-api",
    "fecha": "2026-08-31",
    "tipo": "nuevo",
    "descripcion": "Se agrega el catálogo de Consumidores de API, donde se registra qué organización y tipo de integración corresponde a cada API key, como base para futuros avisos de cambios en la API."
  },
  {
    "id": "chg-20260828-contactos-adicionales",
    "fecha": "2026-08-28",
    "tipo": "mejorado",
    "endpoint": "GET /api/Contactos/{entidadId}",
    "descripcion": "La consulta de un contacto ahora incluye la lista de contactos adicionales de la entidad y el nombre de su contacto principal."
  },
  {
    "id": "chg-20260827-conceptos-egreso",
    "fecha": "2026-08-27",
    "tipo": "nuevo",
    "endpoint": "GET /api/Bancos/ConceptosEgreso",
    "descripcion": "Nuevo endpoint para consultar el catálogo de conceptos que se pueden utilizar al capturar una partida de Registrar Egreso por concepto directo, sin documento por pagar asociado, permitiendo filtrar por cuenta bancaria, contacto y texto de búsqueda."
  },
  {
    "id": "chg-20260826-egreso-asignar-documentos",
    "fecha": "2026-08-26",
    "tipo": "mejorado",
    "endpoint": "POST /api/Bancos/EgresoAgregar",
    "descripcion": "Registrar Egreso ahora permite asignar documentos de cuentas por pagar a un egreso ya existente, sin crear uno nuevo."
  },
  {
    "id": "chg-20260826-egreso-beneficiario-id",
    "fecha": "2026-08-26",
    "tipo": "corregido",
    "endpoint": "POST /api/Bancos/EgresoAgregar",
    "descripcion": "Registrar Egreso ahora guarda correctamente el identificador del beneficiario del egreso; antes se registraba siempre en cero sin importar el valor enviado."
  },
  {
    "id": "chg-20260826-egreso-detalle-simplificado",
    "fecha": "2026-08-26",
    "tipo": "breaking",
    "endpoint": "POST /api/Bancos/EgresoAgregar",
    "descripcion": "El detalle de Registrar Egreso simplifica sus campos: las partidas renombran el importe, la nota y el documento relacionado, y ya no reciben impuestos individuales porque el servidor los calcula automáticamente según el concepto contable.",
    "accionRequerida": "En cada partida del detalle, envía importeAbono en vez de importe, notas en vez de comentario, y transaccionIdCompra en vez de transaccionId2. Deja de enviar los campos de impuesto por partida y por encabezado (impuesto, impuesto2, impuesto3, impuesto4 y sus retenciones, iva, subtotal): el servidor los calcula automáticamente."
  },
  {
    "id": "chg-20260826-egreso-override-sucursal",
    "fecha": "2026-08-26",
    "tipo": "mejorado",
    "endpoint": "POST /api/Bancos/EgresoAgregar",
    "descripcion": "Registrar Egreso ahora permite indicar explícitamente la sucursal, el centro de costo y la división del egreso; si se omiten (o se envían en cero), se usa el valor de la sesión del usuario autenticado, igual que antes."
  },
  {
    "id": "chg-20260826-egreso-validaciones-silenciosas",
    "fecha": "2026-08-26",
    "tipo": "corregido",
    "endpoint": "POST /api/Bancos/EgresoAgregar",
    "descripcion": "Registrar Egreso ahora rechaza explícitamente los egresos sin sucursal resuelta o con conceptos de partida inválidos, en vez de registrarlos de forma incompleta sin avisar."
  },
  {
    "id": "chg-20260825-transacciones-verificar-archivo",
    "fecha": "2026-08-25",
    "tipo": "nuevo",
    "endpoint": "POST /api/Transacciones/VerificarArchivo",
    "descripcion": "Se agrega el endpoint para verificar una transacción, que recibe transaccionId como parámetro de consulta y devuelve un código de resultado junto con un mensaje descriptivo de la verificación."
  },
  {
    "id": "chg-20260824-bancos-monedas-catalogo-global",
    "fecha": "2026-08-24",
    "tipo": "corregido",
    "endpoint": "GET /api/Bancos/GetMonedas",
    "descripcion": "Se corrige el listado general de monedas para que siempre devuelva el catálogo global, sin importar la organización que realice la consulta."
  },
  {
    "id": "chg-20260824-iva-retenido-por-pagar",
    "fecha": "2026-08-24",
    "tipo": "corregido",
    "endpoint": "GET /api/Contabilidad/AnalisisIVARetenidoPorPagar",
    "descripcion": "Se corrigen inconsistencias en el cálculo del Análisis de IVA Retenido por Pagar que podían omitir o calcular mal ciertos registros."
  },
  {
    "id": "chg-20260824-organizacion-monedas",
    "fecha": "2026-08-24",
    "tipo": "nuevo",
    "endpoint": "GET /api/Bancos/OrganizacionMonedas",
    "descripcion": "Se agrega el endpoint Listado de monedas por organización, que devuelve el catálogo de monedas propio de la organización que realiza la consulta."
  },
  {
    "id": "chg-20260824-registro-gasto-referencia",
    "fecha": "2026-08-24",
    "tipo": "mejorado",
    "endpoint": "POST /api/AgenciaViaje/RegistrarGasto",
    "descripcion": "El registro de gasto ahora incluye en la respuesta el campo transaccionIdCROLReferencia con la transacción de CROL relacionada."
  },
  {
    "id": "chg-20260824-iva-cobrado-tasas-8porciento",
    "fecha": "2026-08-24",
    "tipo": "breaking",
    "endpoint": "GET /api/Contabilidad/IVAcobradoTasas",
    "descripcion": "El Análisis de IVA cobrado por tasa corrige el desglose de la tasa fronteriza: los campos subtotal11 e impuesto11 (que en realidad calculaban la tasa vigente del 8%, no una tasa del 11% que ya no existe) se renombran a subtotal8 e impuesto8.",
    "accionRequerida": "Deja de leer subtotal11 e impuesto11 y usa en su lugar subtotal8 e impuesto8."
  },
  {
    "id": "chg-20260824-iva-cobrado-tasas-division-cero",
    "fecha": "2026-08-24",
    "tipo": "corregido",
    "endpoint": "GET /api/Contabilidad/IVAcobradoTasas",
    "descripcion": "Se corrige un error interno (500) del Análisis de IVA cobrado por tasa que ocurría al consultar organizaciones con ciertos movimientos bancarios de honorarios al extranjero registrados con tasa 0%, exenta o no afecta."
  },
  {
    "id": "chg-20260824-registrar-gasto-fechas",
    "fecha": "2026-08-24",
    "tipo": "breaking",
    "endpoint": "POST /api/AgenciaViaje/RegistrarGasto",
    "descripcion": "En Registra gasto, los campos de fecha de los pagos y de los proveedores dejan de aceptar cualquier texto y ahora se validan como una fecha en formato dd/MM/yyyy.",
    "accionRequerida": "Envía fechaPago y fecha con el formato dd/MM/yyyy; un valor que no sea una fecha válida en ese formato hará que la solicitud sea rechazada."
  },
  {
    "id": "chg-20260824-registrar-gasto-moneda-default",
    "fecha": "2026-08-24",
    "tipo": "mejorado",
    "endpoint": "POST /api/AgenciaViaje/RegistrarGasto",
    "descripcion": "En Registra gasto, si no se envía la moneda de un pago, ahora se asume la moneda nacional (MXN) en lugar de un identificador de moneda sin asignar."
  },
  {
    "id": "chg-20260820-pedido-cliente-promocion-opcional",
    "fecha": "2026-08-20",
    "tipo": "corregido",
    "endpoint": "POST /api/PedidoCliente",
    "descripcion": "Se corrige el detalle de Pedido de Cliente: el campo promocion ya no es obligatorio, ya que su valor predeterminado es 0."
  },
  {
    "id": "chg-20260819-iva-cobrado-tasas-parametros",
    "fecha": "2026-08-19",
    "tipo": "breaking",
    "endpoint": "GET /api/Contabilidad/IVAcobradoTasas",
    "descripcion": "El Análisis de IVA cobrado por tasa renombra los parámetros de consulta fecha1 y fecha2 a fechaInicial y fechaFinal, y cambia su formato de fecha de yyyy-MM-dd a dd/MM/yyyy.",
    "accionRequerida": "Envía fechaInicial y fechaFinal (en lugar de fecha1 y fecha2) con formato dd/MM/yyyy."
  },
  {
    "id": "chg-20260819-producto-imagen",
    "fecha": "2026-08-19",
    "tipo": "breaking",
    "endpoint": "GET /api/Productos/ProductoImagen/{id}",
    "descripcion": "La imagen de un producto ahora se devuelve envuelta en el formato estándar de la API en lugar del objeto directo.",
    "accionRequerida": "Lee la imagen desde el campo data de la respuesta (data.foto, data.url); ya no se devuelve el objeto directamente en la raíz del body."
  },
  {
    "id": "chg-20260819-pedido-cliente-promocion",
    "fecha": "2026-08-19",
    "tipo": "breaking",
    "endpoint": "POST /api/PedidoCliente",
    "descripcion": "Cada partida de un Pedido de Cliente ahora requiere el campo promocion con el importe de la promoción aplicada al producto o servicio.",
    "accionRequerida": "Envía promocion en cada partida del detalle; si no aplica promoción, envía 0."
  },
  {
    "id": "chg-20260819-pedido-cliente-campos-vacios",
    "fecha": "2026-08-19",
    "tipo": "mejorado",
    "endpoint": "GET /api/PedidoCliente/{id}",
    "descripcion": "Los campos de texto de un Pedido de Cliente (cliente, entregaFecha, fecha, folio, moneda, notas, vigenciaFecha) ya no se devuelven como null; se devuelve cadena vacía cuando no tienen valor."
  },
  {
    "id": "chg-20260819-factura-venta-consulta",
    "fecha": "2026-08-19",
    "tipo": "corregido",
    "endpoint": "GET /api/FacturaVenta/{id}",
    "descripcion": "Se corrige la consulta de una Factura de Venta que reportaba un error genérico al no encontrar la factura, en lugar de devolver un resultado exitoso vacío."
  },
  {
    "id": "chg-20260819-formas-pago-bancos",
    "fecha": "2026-08-19",
    "tipo": "breaking",
    "endpoint": "GET /api/Bancos/FormasPago",
    "descripcion": "El catálogo de Formas de Pago de Bancos renombra el campo formaNombre a nombre y agrega datos adicionales de cada forma de pago: moneda, referencia, comentario, generación de consecutivo, estado activo y las claves SAT correspondientes.",
    "accionRequerida": "Deja de leer el campo formaNombre; usa nombre en su lugar y actualiza tu integración para tolerar los campos nuevos en la respuesta (maneja_cheques, monedaId, referencia, comentario, generaConsecutivo, activo, claveSAT, claveContabilidadElectronica, claveSAT33)."
  },
  {
    "id": "chg-20260818-objetos-formato-respuesta",
    "fecha": "2026-08-18",
    "tipo": "breaking",
    "descripcion": "El catálogo de Objetos (GET /api/Objetos) ahora envuelve la respuesta en el formato estándar de la API en lugar de devolver el arreglo directamente.",
    "accionRequerida": "Lee el listado desde el campo data de la respuesta; ya no se devuelve un arreglo en la raíz del body."
  },
  {
    "id": "chg-20260818-paginacion-limite-100",
    "fecha": "2026-08-18",
    "tipo": "mejorado",
    "descripcion": "Se incrementa a 100 el límite y valor por defecto de registros por página en Pedidos de Cliente y en la consulta de Saldos de Clientes."
  },
  {
    "id": "chg-20260818-egreso-sucursalid-requerido",
    "fecha": "2026-08-18",
    "tipo": "breaking",
    "descripcion": "El registro de Egresos ahora requiere el campo sucursalId dentro de encabezado en el cuerpo de la solicitud.",
    "accionRequerida": "Envía encabezado.sucursalId explícitamente en el cuerpo de la solicitud; ya no se infiere automáticamente de la sesión del usuario."
  },
  {
    "id": "chg-20260818-facturas-uuid-impuestos-partida",
    "fecha": "2026-08-18",
    "tipo": "mejorado",
    "descripcion": "Los documentos de Factura de Venta, Factura de Compra y Nota de Remisión ahora incluyen uuid y fecha de timbrado en el encabezado, y clave de producto/servicio, clave de unidad e impuestos detallados por partida."
  },
  {
    "id": "chg-20260818-listados-paginados-formato",
    "fecha": "2026-08-18",
    "tipo": "corregido",
    "descripcion": "Se unifica el formato de respuesta de los listados paginados y se corrige un error que impedía obtener correctamente resultados vacíos en varios módulos (Agencia de Viaje, Compras, Ventas, Contactos, Depósitos bancarios y Clasificadores)."
  },
  {
    "id": "chg-20260816-conceptos-compra",
    "fecha": "2026-08-16",
    "tipo": "corregido",
    "endpoint": "GET /api/ConceptosCompra",
    "descripcion": "El endpoint de Conceptos de Compra vuelve a devolver el listado paginado correctamente."
  },
  {
    "id": "chg-20260813-unidades-medida",
    "fecha": "2026-08-13",
    "tipo": "corregido",
    "descripcion": "Se unifica el formato de respuesta en Unidades de Medida y se corrige un caso de resultado vacío en Ventas."
  },
  {
    "id": "chg-20260812-balanza-comprobacion",
    "fecha": "2026-08-12",
    "tipo": "nuevo",
    "descripcion": "Balanza de Comprobación ahora incluye la jerarquía contable (cuentas padre/hijo) en la respuesta."
  },
  {
    "id": "chg-20260805-notas-devolucion-cliente",
    "fecha": "2026-08-05",
    "tipo": "nuevo",
    "descripcion": "Endpoint para crear Notas de Devolución de Cliente."
  },
  {
    "id": "chg-20260803-promociones-pos",
    "fecha": "2026-08-03",
    "tipo": "nuevo",
    "descripcion": "Endpoint de promociones cruzadas para punto de venta (POS)."
  },
  {
    "id": "chg-20260803-cancelar-pagos-especie",
    "fecha": "2026-08-03",
    "tipo": "nuevo",
    "descripcion": "Endpoint para cancelar pagos en especie, compensación o permuta."
  },
  {
    "id": "chg-20260803-formas-pago-egresos",
    "fecha": "2026-08-03",
    "tipo": "nuevo",
    "descripcion": "Endpoint de formas de pago para egresos bancarios."
  },
  {
    "id": "chg-20260803-ordenes-trabajo-vendedor",
    "fecha": "2026-08-03",
    "tipo": "mejorado",
    "descripcion": "El listado de Órdenes de Trabajo ahora incluye el vendedor."
  },
  {
    "id": "chg-20260803-producto-componentes",
    "fecha": "2026-08-03",
    "tipo": "mejorado",
    "descripcion": "El recurso Producto ahora incluye sus componentes."
  },
  {
    "id": "chg-20260803-articulo-costo-promedio",
    "fecha": "2026-08-03",
    "tipo": "breaking",
    "descripcion": "Se retira el campo costoPromedio, que había dejado de estar disponible, del recurso Artículo.",
    "accionRequerida": "Deja de leer este campo en tus integraciones; ya no se calcula ni se envía."
  },
  {
    "id": "chg-20260731-clasificadores-costo",
    "fecha": "2026-07-31",
    "tipo": "nuevo",
    "descripcion": "Endpoints para crear y actualizar Clasificadores de Costo."
  },
  {
    "id": "chg-20260731-factura-compra-tipocontacto",
    "fecha": "2026-07-31",
    "tipo": "breaking",
    "descripcion": "Se elimina el campo obsoleto tipoContacto de Factura de Compra.",
    "accionRequerida": "Quita las referencias a este campo; ya no forma parte de la respuesta."
  },
  {
    "id": "chg-20260730-contactos-productos",
    "fecha": "2026-07-30",
    "tipo": "corregido",
    "descripcion": "Se unifica el formato de respuesta y se corrige la paginación en Contactos y Productos."
  },
  {
    "id": "chg-20260730-bancos-ventas",
    "fecha": "2026-07-30",
    "tipo": "corregido",
    "descripcion": "Se unifica el formato de respuesta y se corrigen filtros de listados en Bancos y Ventas."
  },
  {
    "id": "chg-20260728-retencion-iva",
    "fecha": "2026-07-28",
    "tipo": "nuevo",
    "descripcion": "Reporte de Análisis de Retención de IVA por Pagar."
  },
  {
    "id": "chg-20260728-pedidos-cliente-fechas",
    "fecha": "2026-07-28",
    "tipo": "corregido",
    "descripcion": "El listado de Pedidos de Cliente y el filtrado por fechas ya funcionan correctamente vía el cuerpo de la solicitud (JSON)."
  },
  {
    "id": "chg-20260728-pedido-cliente-estructura",
    "fecha": "2026-07-28",
    "tipo": "corregido",
    "descripcion": "Ajustes en la estructura de respuesta del Pedido de Cliente."
  },
  {
    "id": "chg-20260728-autorizacion-pagos",
    "fecha": "2026-07-28",
    "tipo": "corregido",
    "descripcion": "Autorización de solicitudes de pago y registro de egresos."
  },
  {
    "id": "chg-20260728-antiguedad-saldos-redondeo",
    "fecha": "2026-07-28",
    "tipo": "corregido",
    "descripcion": "Los totales del reporte de Antigüedad de Saldos de Clientes ahora se redondean a 2 decimales."
  },
  {
    "id": "chg-20260715-estado-cuenta",
    "fecha": "2026-07-15",
    "tipo": "corregido",
    "descripcion": "Se simplifican los filtros y la respuesta del Estado de Cuenta de clientes y proveedores."
  },
  {
    "id": "chg-20260715-paginacion-ventas-compras",
    "fecha": "2026-07-15",
    "tipo": "corregido",
    "descripcion": "Se ajusta la paginación y los filtros en los endpoints de Ventas y Compras."
  },
  {
    "id": "chg-20260707-notas-devolucion-listado",
    "fecha": "2026-07-07",
    "tipo": "nuevo",
    "descripcion": "Endpoints de listado y detalle de Notas de Devolución de Cliente."
  },
  {
    "id": "chg-20260707-saldos-clientes-proveedores",
    "fecha": "2026-07-07",
    "tipo": "nuevo",
    "descripcion": "Reporte de Saldos de Clientes y Proveedores."
  },
  {
    "id": "chg-20260707-saldo-cuentas-bancarias",
    "fecha": "2026-07-07",
    "tipo": "nuevo",
    "descripcion": "Reporte de Saldo de Cuentas Bancarias."
  },
  {
    "id": "chg-20260707-transaccionid-ruta",
    "fecha": "2026-07-07",
    "tipo": "breaking",
    "descripcion": "transaccionId ahora se recibe como parámetro de ruta en Notas de Devolución (antes se enviaba en el cuerpo).",
    "accionRequerida": "Envía transaccionId como parte de la URL, no en el body de la solicitud."
  },
  {
    "id": "chg-20260707-limpieza-parametros",
    "fecha": "2026-07-07",
    "tipo": "corregido",
    "descripcion": "Limpieza de parámetros no utilizados en varios endpoints de reportes."
  },
  {
    "id": "chg-20260707-redireccion-raiz",
    "fecha": "2026-07-07",
    "tipo": "info",
    "descripcion": "En ambiente de producción, la raíz del API (/) redirige a la documentación pública."
  },
  {
    "id": "chg-20260630-login-mcp",
    "fecha": "2026-06-30",
    "tipo": "nuevo",
    "descripcion": "Endpoint de autenticación (login) para integraciones MCP vía Azure B2C."
  },
  {
    "id": "chg-20260630-reportes-devolucion-credito",
    "fecha": "2026-06-30",
    "tipo": "nuevo",
    "descripcion": "Reportes de Notas de Devolución a Proveedor y de Notas de Crédito detallada."
  }
]
