Por el lado de control de caja no tengo la gran cosa pero es una idea mas y destinado para negocios relativamente pequeños.
En mi programa, las transacciones de venta al contado, cobro a cliente a cuenta entran también a caja, caja para mi es una sola tabla, la llamo TCA (Transacciones de Caja Actual).
Las transacciones de compra al contado y pago a proveedores también afectan a esta tabla.
En la misma caja también hago operaciones propias de caja como retiro o ingreso de dinero y ademas cambio de moneda.
Cuando implemento por primera vez, inicializo la caja, no tengo ni doy ni pienso dar (al menos no a mi costo) una funcionalidad en la que el usuario inicialice su caja, la inicializo yo en el momento de la implementación, luego el usuario puede hacer ajustes.
Esto es entonces que grabo dos lineas "a mano", dos transacciones con la fecha de inicio de operaciones de caja que suele ser el punto de partida del sistema. Digo dos lineas porque mi pais es bimoneda, esta tabla tiene un campo llamado TCA_MOTIVO donde pongo la glosa: "APERTURA CAJA" con el monto con el cual inician su caja y son las primeras dos transacciones de esa tabla, queda mas o menos asi:

En este ejemplo, el cliente aperturó con cero soles y cero dolares.
Cuando se trata de un ingreso es un valor positivo, cuando se trata de un egreso es un valor negativo, nada mas.
Ahora, para el cierre de caja exijo una condicion, que la caja no puede quedar en negativo, es decir, el sum del campo TCA_MONTO cuando TCA_MMO_ID (moneda) es = 1 (soles) para ese dia debe ser mayor o igual a cero, y lo mismo para TCA_MMO_ID = 2 (dolares). Si uno de ellos es menor a cero la caja no cierra. Esto para exigirles a los clientes a que cuadren su caja y vaya que lo hacen, y por mi lado, para que no me malogren los consolidados.
Ahora, cuando cierran caja grabo 4 lineas en TCA. 4?, si cuatro.
Dos lineas (1 por sol y otra por dolar) que tendrá en TCA_MOTIVO = "CIERRE CAJA" y tendrá el sum en negativo de su respectiva moneda en el campo TCA_MONTO. (No confundir con TCA_MONTO_USD que es un referencial)
Y otras dos lineas mas, también una por cada moneda que tiene los mismos SUMs pero en positivo y con la fecha del dia siguiente, quedando por ejemplo asi:

Fijate que en el ejemplo que te doy, hay transacciones con fecha 25 anterior al cierre de caja que fue para el 24 (fijate en el campo TCA_ID que es el campo llave). Esto quiere decir que este cliente la noche anterior no cerró caja, abrió la tienda al dia siguiente, hizo sus operaciones del dia 25 y quizá para la tarde del 25 terminó de cuadrar las transacciones del dia 24 y con ello ya consiguió sus dos lineas de apertura del dia 25.
Este método también da la posibilidad (a nivel gerencial claro) de abrir cajas borrando todas las lineas que tengan CIERRE CAJA y APERTURA CAJA mayor a una fecha determinada y obligándolo luego a cerrar dia por dia.
Todo esto se traduce a los ojos del cliente a esto: (Arqueo)
Transacciones del dia 24:

Transacciones del dia 25:

Si el cliente tiene alguna duda del monto de venta contado = SOL 1533.60 del dia 24, el hara un clic en ese monto y saldrán todo el detalle de venta que sustenta ese monto en un reporte, lo mismo para la mayoría de las otras transacciones.
Cuando una caja está cerrada, tampoco permito ventas, cobros, pagos, eliminaciones ni nada, Si el cliente cerró la caja es que las cuentas ya estan claras, si aun asi quiere registrar un cobro o eliminar una venta pues entonces deberá reaperturar su caja siempre que tenga los permisos para ello.
Y bueno, la conclusión de uso aceptada y funcional para mis clientes es: El dinero que queda en sistema pasa para el dia siguiente, si siempre quieres que pase lo mismo deberás retirar de sistema lo que fuera necesario para tener el valor que deseas, puedes también retirar todo y dejar la caja en cero, igual la tienes que cerrar, los días que no laboras también la tienes que cerrar asi no hallan transacciones. Insisto, esto esta diseñado a la realidad de mi mercado y quiza halla formas mejores o mas ortodoxas, no lo sé, mas complejas y con mas alcances si las hay eso si, ahora, quizá se pueda mejorar con el concepto de Caja Chica por las aperturas o pagos menos pero esto también lo manejo con un control de conceptos que luego filtro.
Y bueno, en resumen y básicamente eso es todo, espero te sirva.
Saludos.