yo he realizado un par de sistemas (no de facturación), pero donde calcular los datos es costoso y generar el PDF es aun mas costoso, pero obtener los datos de la base no lo es, lo que hago es un hash de los datos (puede convertirlos en un array, serializarlo y posterior generar el hash), así miro si algo cambio y si es necesario generar de nuevo los archivos (mi sistema genera gráficos, hojas de calculo y PDF).
puedes programarlo cuando quieras, que se realize bajo peticion (cuando se actualizando los datos, te ahorras el proceso del hash si estos se actualizan mucho), puedes realizarlo cuando el usuario solicita como tal el documento o factura (aqui entra el tema del hash) o puedes tener un sistema independiente por ejemplo implemente uno con rabbitmq, quedo robusto y rapido.