CoeveraBlueprints

Blueprint 006 · Numeración

¿Cómo configura una numeración de documentos que resista la producción?

Números de factura, referencias de casos, números de documento. Conseguir que se genere uno es cuestión de cinco minutos. Asegurarse de que siga siendo correcto dentro de dieciocho meses, después de que alguien haya editado el patrón, es el verdadero problema.

Escrito por Publicado 2026-09-23Verificado en un espacio de Coevera en producciónTraducido del original en inglésVersión en Markdown ↓

La respuesta corta

Use un campo Auto number. Su patrón es un constructor de segmentos (texto literal, un token Year (YYYY), un Autocount), y el segmento Autocount incluye un botón de opción para "Reset count every year" frente a "Don't reset count". El reinicio anual es una opción nativa y no hace falta automatización. No se ha observado que el recuento vuelva a 1 en un cambio de año real (véase §7).

Si más adelante cambia el patrón a través de la API, omita el número final. El centro de ayuda no describe esa vía; según este, las opciones no pueden cambiarse después de Save. El ,1 de {#Number4,1} es un índice inicial, no un adorno: dice comenzar esta serie en 1, y hace exactamente eso cada vez que se envía, también en un campo que lleva dos años emitiendo números. Escriba {#Number4} y el recuento continúa donde estaba.

El problema de negocio

Un documento de negocio necesita una referencia de cara a las personas: un número de factura, un número de caso, un número de documento que aparece en los papeles y se cita en correos electrónicos y llamadas telefónicas. Los requisitos son poco vistosos y estrictos:

  • Único, de forma permanente. Que dos documentos compartan número no es un problema estético.
  • Legible y pronunciable: una persona lo lee en voz alta por teléfono.
  • Acotado por año, en la mayoría de las jurisdicciones y de las prácticas contables: la secuencia se reinicia cada enero para que el número lleve su propio periodo.
  • Estable: una vez emitido, no cambia nunca, porque está impreso en documentos que ya han salido de la empresa.

En contextos contables esto no es una mera convención. Una serie de números de documento que repite un valor es una observación de auditoría y, en varias jurisdicciones, un problema de cumplimiento normativo y no una simple molestia.

Por qué falla el enfoque obvio

Construir el número usted mismo, porque le dijeron que tenía que hacerlo

Encontrará consejos que le dicen que construya el número usted mismo. Afirman que los campos de secuencia no se pueden reiniciar por año y que, por tanto, un número de documento con prefijo de año tiene que componerse en un proceso de automatización: un contador simple para el número correlativo y un proceso que le concatena el año.

Ese consejo es erróneo, y se repite lo bastante como para merecer que se señale. La plataforma tiene una opción explícita "Reset count every year" integrada en el editor de patrones. Antes de construir un proceso de composición, abra el editor del campo y compruébelo.

Conviene concretar lo que cuesta ese rodeo innecesario, porque el mismo razonamiento se aplica siempre que se sustituye un mecanismo nativo por automatización:

  • Una segunda fuente de verdad. El contador real y el campo de texto compuesto pueden no coincidir, y nada los concilia.
  • Una condición de carrera. Dos registros creados en el mismo instante pueden componerse con el mismo número, porque la composición no es lo que garantiza la unicidad.
  • Un modo de fallo sin señal. Si el proceso está desactivado, falla o queda excluido por un filtro, los registros se crean con un número de documento vacío y nadie se da cuenta hasta que alguien mira.
  • Mantenimiento continuo de una lógica que la plataforma habría mantenido por usted.

Usar el identificador del registro

Técnicamente único, e inútil. Es un UUID: no es legible, no es pronunciable, no está acotado por año y no le dice nada a un cliente.

El constructor de patrones

En la interfaz, el tipo de campo se llama Auto number. Su patrón se ensambla a partir de segmentos ordenados en lugar de escribirse como una cadena:

SegmentoFinalidad
TextUn prefijo o separador literal: un código de tipo de documento, la inicial de una empresa.
Year (YYYY)El año de cuatro dígitos, resuelto cuando se crea el registro.
AutocountEl número correlativo, con su número de dígitos. Este segmento incluye la elección del reinicio.
TextMás segmentos literales, antes o después de cualquiera de los anteriores.

En el segmento Autocount hay dos opciones mutuamente excluyentes: Reset count every year y Don't reset count. Ese único botón de opción es la respuesta a la pregunta que da nombre a este blueprint.

El editor muestra un ejemplo en vivo del siguiente valor mientras lo construye (Example: TST20260004), lo cual es útil durante la configuración. Trátelo como una comprobación del formato, no como una prueba sobre el contador; eso solo se lo dice un registro creado.

Configuración y forma en la API

Crear uno mediante programación

El patrón se expresa como una cadena de tokens, y el campo lleva un objeto sequence:

sequence: {
  defaultItem: { pattern: "TST{#Year}{#Number4,1}" },
  items: []
}

Primer registro con ese patrón: TST20260001. El recuento de cuatro dígitos se aceptó a través de la API; para un patrón configurado en la interfaz, el centro de ayuda fija para el número un mínimo de cinco dígitos.

La forma de creación y la forma de lectura difieren. El ,1 es el índice inicial («comenzar esta serie en 1»), y se elimina al normalizarse el campo una vez publicado, de modo que al volver a leer el campo se obtiene el {#Number4} depurado.

Esta es la regla para cambiar un patrón más adelante a través de la API: envíelo sin el número final. El centro de ayuda no describe esa vía; según este, las opciones no pueden cambiarse después de Save. El índice inicial es una instrucción, y se obedece cada vez que llega. Cambie TST{#Year}{#Number4,1} por INV{#Year}{#Number4,1} (una edición del prefijo, en apariencia inofensiva) y la serie se reinicia en 1 y vuelve a emitir números que ya había asignado. Cámbielo por INV{#Year}{#Number4} y el contador continúa intacto.

El procedimiento seguro, y el motivo por el que las dos formas difieren: lea el campo, tome su pattern literalmente, cambie solo lo que pretendía cambiar y envíelo de vuelta. Lo que devuelve el campo ya está normalizado, así que nunca lleva un índice inicial. Si genera los payloads a partir de una plantilla guardada y no de una lectura, elimine ,<n> del token del recuento en todo lo que no sea un campo completamente nuevo.

Dos trampas de la API al crear. Una propiedad sequence_pattern en el endpoint REST de campos está obsoleta: la API la rechaza con un mensaje que le indica que use la propiedad sequence en su lugar. Pero enviar el nuevo objeto sequence por ese mismo endpoint REST devuelve un 500. Crear el campo a través de la API de administración funcionó; la vía REST no.

El contador es un estado de tres partes

El campo expone su contador como last_particle, que no es un único entero:

last_particle: { year: 2026, month: 0, sequence_number: 2 }

De ello se derivan dos cosas. El componente del mes se queda en cero cuando el patrón no contiene token de mes, así que su presencia no implica un comportamiento mensual. Y el componente del año es el mecanismo del reinicio anual: el motor guarda el año al que pertenece el recuento, y eso es lo que le permite reconocer un año nuevo y volver a empezar.

Contadores segmentados

El array items, junto a defaultItem, admite entradas que llevan cada una su propio pattern y su propio filtro. Esa es la forma de un mecanismo para varios contadores independientes en un mismo campo, seleccionados por una condición sobre el registro: una serie distinta por tipo de documento o por unidad organizativa.

Su semántica no está verificada; consulte el §6.

Cuándo sigue necesitando automatización

La mayoría de las veces no la necesita, que es precisamente lo que plantea el §2. Hay un caso real en que el campo nativo no puede hacer el trabajo.

El token Year se resuelve a partir de la creación del registro. Si el año de su número de documento debe proceder de una fecha distinta (una fecha de factura, una fecha de documento, un periodo de servicio que puede caer en un año distinto de aquel en que se introdujo el registro), el campo Auto number no puede expresarlo. Además, el contador avanza según el orden de creación, no según el orden de esa fecha.

Ahí, y solo ahí, el enfoque de composición es el correcto: un Auto number nativo que aporta la parte correlativa con unicidad garantizada, y un proceso que ensambla el número de documento visible a partir del año de la fecha elegida más ese número. Acepte de forma explícita que el orden de creación y el orden por fecha de documento pueden entonces divergir, y decida de antemano cuál considera el negocio que prevalece; es mucho más fácil responder a esa pregunta antes de la puesta en marcha que después. Es además un proceso más del que hacerse cargo, así que constrúyalo según las convenciones del Blueprint 011, sobre cómo mantener las automatizaciones de forma sostenible.

Límites y compromisos

La numeración sin huecos no es alcanzable

Un número se emite cuando se crea el registro. Cree un registro y elimínelo, y el número queda gastado: la serie tiene un hueco, y ninguna configuración lo impide. Si su jurisdicción o su auditor exigen una serie ininterrumpida, plantéelo antes de la puesta en marcha, porque la respuesta será un procedimiento de conciliación y no un ajuste.

Fuente. Centro de ayuda de Coevera, Advanced fields & forms — Autonumber fields: «se genera un número nuevo cada vez que se guarda un registro nuevo. No se puede hacer que un número automático se rellene cuando se mueve una Opportunity, por ejemplo; solo al crear el registro».

El año procede de la fecha de creación, y solo de ahí

El token Year se resuelve cuando se crea el registro, y el recuento avanza en orden de creación. Un número cuyo año deba proceder de una fecha distinta (una fecha de factura, una fecha de documento, un periodo de servicio) no se puede expresar con el campo, y el §5 explica la composición que necesita en su lugar. La consecuencia que hay que decidir de antemano es que el orden de creación y el orden por fecha de documento pueden entonces no coincidir.

Una única serie compartida entre varios tipos de registro es el motivo habitual por el que un solo campo tiene que soportar todo el negocio; consulte el Blueprint 001, donde cinco tipos de solicitud comparten una única serie de números de referencia.

Varios contadores en un campo: sin verificar

El array items descrito en el §4 tiene la forma de un mecanismo para series independientes en un mismo campo. No lo hemos probado, y lo decimos en lugar de describir un comportamiento que no hemos observado. Trate una serie por tipo o por unidad como un riesgo de diseño hasta que la haya visto funcionar.

Otras cosas que conviene saber

  • El recuento que informa la operación de publicación no es una señal de éxito. Devolvió cero en todas las llamadas de nuestras pruebas mientras publicaba de forma demostrable.
  • La creación de campos se publica de forma incoherente. La misma llamada de creación devolvió una vez un campo ya publicado y otra vez un borrador sin publicar. Compruebe el estado de publicación; no lo suponga.

Verificación

La numeración es una de esas funciones que parecen correctas hasta que se auditan, así que las comprobaciones se centran en los valores emitidos y no en la configuración.

  • Lea los números de registros creados, no de la configuración del campo. La configuración le dice lo que el motor pretende; solo un número emitido le dice lo que hizo.
  • Cree al menos tres registros y confirme el incremento, en lugar de crear uno y suponer.
  • Vuelva a leer el contador después de cualquier cambio de configuración: los componentes del año y del recuento deben coincidir con el último número emitido. Vuelva a leer también el patrón al mismo tiempo: es la cadena que debe reutilizar en la siguiente edición.
  • Tras cualquier edición del patrón, publique y luego cree un registro y compare su número con el más alto ya emitido. Lleva unos segundos y es la comprobación que detecta un contador que no se ha mantenido.
  • Pruebe la unicidad con una consulta, no como una suposición: agrupe por el campo del número y confirme que ningún valor aparece dos veces. Hágalo tras cada cambio de configuración, y una vez como comprobación programada si los números son relevantes para la auditoría.
  • Si el reinicio anual está activado, verifíquelo frente a un cambio de año real antes de confiar en él. Nosotros no pudimos, y lo decimos en lugar de afirmar un comportamiento que no hemos visto producirse.

Qué indicaría una regresión: cualquier valor duplicado en el campo del número; un contador cuyo componente del año no coincide con los números que se emiten; un registro creado con un número vacío, lo que significa que ha fallado un proceso de composición y no el campo nativo.

Preguntas frecuentes

¿Puede un CRM generar un número de referencia que vuelva a empezar en 1 cada año?

Sí. En Coevera CRM, un campo Auto number se construye a partir de un patrón de segmentos (texto literal, un token Year y un segmento Autocount), y el segmento Autocount incluye una elección explícita entre reiniciar el recuento cada año y no reiniciarlo nunca. No hace falta ninguna automatización. Un patrón de texto más Year más un recuento de cuatro dígitos produce valores como TST20260001; el recuento de cuatro dígitos se aceptó a través de la API, mientras que el centro de ayuda fija para el número un mínimo de cinco dígitos en un patrón configurado en la interfaz. La opción de reinicio anual existe; no se ha observado que el recuento vuelva a 1 en un cambio de año real.

¿Cómo se almacena el contador de un número generado automáticamente?

Como un estado de tres partes: año, mes y número de secuencia. En Coevera se expone en el campo como last_particle. Tras dos registros con un patrón que contiene un token Year pero ningún token de mes, indica año 2026, mes 0, número de secuencia 2: el componente del mes se queda en cero cuando el patrón no lo usa. El componente del año es lo que hace posible el reinicio anual: el motor compara el año almacenado con el actual.

¿Cómo se cambia el patrón de un campo de numeración automática existente?

A través de la API, que el centro de ayuda no describe: según este, las opciones no pueden cambiarse después de Save. Envíe el nuevo patrón sin el índice inicial. El token del recuento puede llevar uno, escrito como una coma y un número dentro del token, por ejemplo Number4 seguido de una coma y 1, y ordena al motor que empiece la serie en ese valor. Se obedece cada vez que se envía, también en un campo que ya ha emitido miles de números, de modo que una edición del patrón que conserva el índice inicial reinicia la serie en ese número y vuelve a emitir valores ya en uso. Escribir el token del recuento sin la coma y el número deja el contador intacto y solo cambia lo que usted pretendía cambiar. Además, el índice inicial se elimina al normalizarse el campo una vez publicado, así que el patrón que un campo devuelve no es el patrón con el que se creó: el procedimiento seguro es leer el campo, tomar su patrón literalmente, editar solo la parte que quiere cambiar y enviar eso. Verifique el resultado a partir de un número emitido en un registro recién creado y no a partir de la configuración del campo.

¿Puede el año de un número de documento proceder de la fecha de factura en lugar de la fecha de creación?

No desde el propio campo Auto number. Su token Year se resuelve a partir del momento en que se crea el registro, y el contador avanza según el orden de creación, así que un número cuyo año deba derivarse de un campo de fecha distinto (una fecha de factura o de documento que puede diferir de la fecha de creación) no se puede producir de forma nativa. Ese caso requiere componer el número visible en un proceso de automatización a partir de un contador simple más el año del campo de fecha elegido, y aceptar que ambos pueden divergir.

Publicado por Coevera · abstraído al patrón, sin datos de clientesBlueprint 006 · publicado 2026-09-23