Numeración de CFE

Numeración de CFE (integradores externos)

Guia breve de como el servicio decide numerar un CFE y que valida antes de aceptar la numeracion.

Flujo general

  • El servicio valida el XML prefirma y verifica que el RUT emisor coincida con la empresa solicitante.
  • Si el IdDoc llega sin Serie o Nro, se usa NumeracionCFESinAsignar (el sistema asigna folio y CAE).
  • Si el IdDoc ya trae Serie y Nro, se usa NumeracionCFEAsignado (se valida que la numeracion y el CAE sean legitimos).
  • En ambos casos puede usarse un uuid externo (o IdDoc.NroInterno) para evitar reprocesos; si ya existe, se rechaza.

Estrategia: Numeracion sin asignar

  1. Busca un rango disponible para la empresa/sucursal/terminal/tipo.
  2. Si no hay, intenta reservar a demanda; si falla, lanza error.
  3. Toma el proximo numero del rango (UsadoHasta + 1 o NumeroDesde) y revisa que no haya saltos.
  4. Marca el rango como usado hasta ese numero y, si corresponde, como totalmente utilizado.
  5. Si el rango no se reservo en esta misma llamada y el tipo es normal (tipoCfe <= 200), revisa stock minimo configurado en punto, sucursal o empresa; si queda por debajo, intenta reservar otro rango.
  6. Asigna Serie y Nro al XML y devuelve el caeId asociado al rango.

Errores frecuentes: sin rango disponible ni posibilidad de reservar, UUID duplicado, o salto de numeracion (solo deja registro y bandera; no bloquea).

Estrategia: Numeracion ya asignada

  1. Valida entrada: idEmpresa > 0, sucursal/terminal, tipoCfe valido, IdDoc presente, Serie no vacia, Nro positivo y, si IdDoc.TipoCFE viene en el XML, debe coincidir.
  2. Valida UUID: si llega o se lee de IdDoc.NroInterno, se rechaza si ya existe el Cfe.
  3. Valida folio unico: rechaza si ya hay un CFE con el mismo tipoCfe + serie + numero.
  4. Obtiene el CAE:
    • Contingencia (tipoCfe > 200): busca constancia y exige que no este anulado, vencido ni fuera de rango.
    • Normal: busca el rango que contenga el numero, marca UsadoHasta, y toma el caeId del rango.
  5. Si el XML trae CAEData, cruza todo contra el registro del CAE: empresa, estado (no anulado/vencido), Serie, rango DNro/HNroCAEID (numero de autorizacion), fecha de vencimiento y, si existen, indicadores y causal de CAE especial.
  6. Para tipos normales vuelve a actualizar el rango con el numero utilizado.

Errores frecuentes: CAE inexistente/anulado/vencido, serie/numero fuera del rango autorizado, datos de CAEData que no coinciden, folio o UUID duplicados, o inconsistencias entre tipoCfe solicitado y el presente en el XML.

Recomendaciones para integradores

  • Si quieren que Bluetech asigne folio y CAE, envien el XML sin IdDoc.Serie ni IdDoc.Nro. Aseguren que haya un UUID (IdDoc.NroInterno) unico por emision para evitar reintentos duplicados.
  • Si numeran ustedes, manden siempre IdDoc.SerieIdDoc.Nro y el CAE vigente para ese rango. Incluyan CAEData completo en el XML para que el control de consistencia pase sin rechazos.
  • Para CFEs de contingencia (tipoCfe > 200), verifiquen que el CAE informado siga vigente y que el numero caiga dentro del rango asignado a esa serie.
  • Manejen las excepciones que devuelva la API: los mensajes vienen descriptivos y ayudan a corregir configuracion, folio o datos de CAE.