En todos los proyectos que nos toque programar que tengan una facturación, a la hora de programar el número de la factura que se va a generar nos encontraremos con algunos problemas.
En este artículo vamos a detallar algunas de las cosas con la que me he encontrado a lo largo de todos los proyectos en los que me ha tocado programar una numeración de facturas.

Numeración correlativa
Los números que generemos con nuestro programa deben ser correlativos y no puede haber huecos entre ellos, por lo que si hoy generamos la 0001, la siguiente que hagamos tiene que ser obligatoria mente la 0002.
Una factura no puede ser borrada dejando un hueco, por lo que debemos dotar de métodos al usuario para que pueda solucionar una factura generada erróneamente.
Este sistema puede ser generar un abono, con los mismos conceptos que tiene la factura que queremos corregir, con el tiempo me he dado cuenta que es la mejor solución porque nos permite volver a empezar de 0.
Métodos para obtener una numeración continua
He usado varias formas de obtener el número de la factura, pero me quedo con dos que son las que mejor resultado me han dado en estos casos.
Tabla de numeraciones
Consiste en tener una tabla donde vamos a ir llevando la numeración que le corresponde, esto es que le pondremos F0001 y en la siguiente factura actualizaremos el campo a F0002.
Para obtener el número que le corresponde a la factura que vamos a generar, simplemente haremos una consulta a esa tabla y no quedaremos con el último registro.
El último número de factura más uno
Este sistema simplemente tenemos que ir a la última factura que hemos creado anteriormente y sumarle un valor más.
Uno de los mayores problemas que podemos tener en cualquiera de los dos métodos, es que el valor puede no ser un número, por ejemplo F0001.
Cambio de año
Normalmente, aunque no es obligatorio, cada año se cambia la numeración, esto se suele usar si en la numeración de las facturas va implícito el año, por ejemplo F210001.
Como ya imaginaréis si queremos gestionar un cambio de numeración en la factura en el año nuevo, tendremos problemas según la forma que elijamos.
En el primer caso deberíamos cambiar la numeración a mano el día 1 de cada año antes de que se facture nada, o disponer de un proceso o cron que lo haga por nosotros cada día 1 a la hora 1 de cada año.
En el segundo caso lo podemos automatizar con una porción de código, para que detecte que si es la primera factura del año cambie la numeración. Sería algo parecido a esto en python.
if year == today.strftime('%y'):
num = 'F' + str(num_anterior + 1)
else:
num = 'F' + str(today.strftime('%y')) + '0001'
Previamente hemos hecho un split en el numero anterior para sacar la variable year y ponerle el año que viene teniendo esta serie de facturación.
Luego comparamos que coincide con el año en el que estamos hoy para sumarle uno al valor anterior. En caso contrario iniciamos la serie de facturación el año actual y el número 0001.
Cosas a tener en cuenta para una serie de facturación
- El número debe ser correlativo
- No puede haber huecos entre uno y otro.
- La fecha de la factura de la 0002 no puede ser menor que el de la 0001.
- No se puede borrar o modificar una factura que ya se ha enviado o ya está circulando por ahí.
Si sabes alguna cosa más que se me escape, no dudes en comentarlo.