¿Qué consideraciones especiales se necesitan al diseñar bases de datos para mantener registros financieros?

15

Espero que esta pregunta no sea demasiado amplia. En el futuro, es posible que deba agregar algunos sistemas de contabilidad y de seguimiento financiero a algunas aplicaciones (en su mayoría aplicaciones basadas en la web, pero mis preguntas también se refieren a las aplicaciones de escritorio).

En teoría, crear un registro simple de transacciones financieras es teóricamente fácil. Una tabla de base de datos con algunas columnas podría hacer el trabajo. Incluso MS Access, Excel o incluso un simple archivo de texto ASCII se pueden usar para almacenar fechas de transacciones, ID de cuentas y montos en dólares. Sin embargo, creo que incluso una tabla SQL con una copia de seguridad frecuente con integridad transaccional puede no ser lo suficientemente robusta para un seguimiento financiero serio.

Escucho términos como "contabilidad de doble entrada", y tengo la sensación de que la mayoría de las aplicaciones de seguimiento financiero (por ejemplo, Mint.com o GnuCash) tienen una estructura de datos o un proceso mucho más complicado para realizar la doble Asegúrese de que todo se integre perfectamente, exactamente como debería, y que nunca se pierdan o corrompan datos.

Mi pregunta es: Al diseñar una aplicación para rastrear transacciones financieras, ¿qué consideraciones especiales de diseño se deben hacer? Parece que podría haber tantos problemas potenciales ... problemas con la precisión de redondeo, paridad controles, algún tipo de proceso de auditoría, copias de seguridad especiales, seguridad / cifrado, formas adicionales de proteger los datos en el caso de un fallo en el ingreso de datos ... Realmente no sé lo que debería preguntar específicamente, pero recibo la sensación de que la industria de la programación tiene un conjunto de mejores prácticas de las que no sé nada. ¿Qué son?

Editar:

Parece que abrí una lata más grande de gusanos de lo que esperaba. Para aclarar, estoy pensando específicamente en dos tipos de aplicaciones:

  1. Aplicaciones de tipo "Verificar registro" como GnuCash o Quicken que mantienen un registro de transacciones individuales para su propio uso.
  2. Aplicaciones que rastrean la facturación / crédito / o "puntos" para proveedores y clientes que tratan con una empresa.

Probablemente no haré banca directa o (AFAIK) cualquier cosa que tenga un montón de regulaciones gubernamentales relacionadas con las finanzas adjuntas.

    
pregunta Joshua Carmody 15.06.2011 - 16:06

7 respuestas

10

Obtendré muchas respuestas a esto Estoy seguro, muchas respuestas idealistas también, solo puedo responder de mi experiencia con las finanzas y lo que realmente sucede.

Ya ha cubierto la mayoría de los problemas.

La precisión de redondeo tiende a no ser realmente un problema en mi experiencia. La mayoría de las grandes organizaciones financieras que no han crecido de la noche a la mañana (es decir, todo excepto los fondos de cobertura) tienen una gran variedad de aplicaciones heredadas que se dividen debido a varios combustibles. Tienden a no redondear la precisión constantemente; en general, un cierto error de ganancias y pérdidas simplemente se acepta para el redondeo. De hecho, muchas horas de trabajo se gastan en lugares donde he trabajado donde los humanos son los mejores selectores de "sí, que están lo suficientemente cerca" cuando se trata de hacer coincidir sumas exactas / esperadas. Recuerde, esta es una respuesta basada en la realidad, no en lo que debería suceder.

Cifrado: no confíe en él con franqueza. Almacene los datos de identificación en un sistema separado física y lógicamente que los datos sin identificación (es decir, el código de cuenta en todas partes, los datos personales por separado).

Generalmente, mientras que las copias de seguridad son necesarias, las copias de seguridad fuera de línea rara vez se activan; las cosas han ido muy mal en ese momento. Generalmente, se requieren copias de producción en caliente, sin embargo, esto dependerá de sus propias necesidades específicas. En la práctica general, tenemos una copia de producción en el sitio de todos los sistemas Y un sitio de recuperación de desastres con su propia producción y copias en caliente. Las copias cálidas tienden a estar unos minutos atrás en la replicación, etc.

La auditoría es la clave de todos los sistemas financieros en los que he trabajado. Tienes 2 requisitos fundamentales. A) ¿Puede hacer un seguimiento de cada cambio realizado en los datos, por quién, cuándo y por qué? B) ¿Puedes probar el estado histórico de tus datos? ¿Que no ha sido manipulado?

Se requiere A) para los equipos de operaciones: su sistema se usará de 100 maneras que nunca esperó, y esta información es vital para la expansión, informes ad-hoc, razones legales y depuración.

B) Vea el caso de AMEX vs. Vee Vinhnee, donde AMEX no pudo cobrar los 40 mil que se les debían, ya que no pudieron probar que sus registros no fueron recuperados. La solución generalmente utilizada para esto es el sello de tiempo de confianza. Las grandes entidades financieras tienen bancos garantes que garantizan las transacciones y, por lo tanto, proporcionan, de manera inherente, un sello de tiempo confiable. Hay proveedores comerciales para esto para otros ámbitos de la vida / escenarios.

    
respondido por el Jonno 15.06.2011 - 16:33
6

Las consideraciones son en su mayoría legales . Si lo observa desde una perspectiva de seguridad / confiabilidad, es posible que una hoja de Excel no sea intrínsecamente menos segura que una hoja de papel en algún cajón. La integridad transaccional del acceso puede ser mejor que la de un empleado que se ve interrumpido por una llamada.

Pero, para que sus clientes puedan usarlo, debe cumplir con las leyes locales. Algunas cosas que encontré (en Alemania)

  • Formatos de documentos para el almacenamiento de información , porque existen leyes que estipulan que las empresas deben conservar sus documentos durante 10 años. En 10 años, tal vez su programa ya no esté disponible. Por lo tanto, debe almacenar los documentos de forma certificada DIN / ISO (.pdf parece ser suficiente en Alemania)
  • Las rutas de auditoría a menudo son necesarias, por ejemplo. Es posible que tenga que presentar diferentes versiones del mismo documento, con fechas de modificación.
  • La ubicación del almacenamiento importa , debido al 'Datenschutz' (privacidad), que puede ser diferente en el país de almacenamiento. Esto hace que los servicios basados en la nube sean un poco difíciles.
  • Algunos documentos deben almacenarse de una manera no mutable . cómo se logra exactamente esto parece depender principalmente de la manipulación legal (un documento es inmutable, un cd es mutable, un cd firmado por un trabajador no lo es)

Definitivamente, debe comunicarse con un abogado, para obtener información específica, o al menos trabajar en estrecha colaboración con un cliente.

    
respondido por el keppla 15.06.2011 - 16:24
3

Los factores de confiabilidad se vuelven increíblemente importantes cuando se trata del dinero de las personas. Si Twitter pierde un tweet, no es un gran problema; Si cobra la tarjeta de crédito de alguien pero pierde su pedido, alguien de su organización recibirá un pago de un cliente enojado. Entonces, dos cosas: 1. No quiere que eso suceda en primer lugar, pero 2. sucederá eventualmente sin importar qué tan cuidadoso sea, así que quiere poner MUCHA energía en el tipo de mecanismos de registro y rastreo. eso le ayudará a regresar y encontrar el orden "perdido" y corregir la situación.

Lo peor es tener, por ejemplo, un cargo en la tarjeta de crédito, pero NINGÚN registro de para qué sirve, a quién pertenece, etc.

Para cuestiones financieras, realmente necesita pensar en los escenarios aparentemente improbables y planificar cómo manejarlos: "Cobramos la tarjeta de crédito, pero el servidor de la base de datos está inactivo antes de poder actualizar el registro correspondiente. " Ok que ahora ¿Anular el cargo? ¿Registrar la transacción en un archivo para que un humano pueda repararlo más tarde? Ok, ¿qué pasa si el disco está lleno y no puede escribir en el archivo? Etc., etc.

    
respondido por el mindcrime 28.10.2011 - 20:04
3

[1] Use tablas de seguridad (no confunda con los usuarios internos de D.B.) para los usuarios y para su aplicación. Módulos, formularios, páginas web:

User = {userID, username, pwd, email1, email2}
Modules = {moduleID, moduleTitle, moduledescription}
ModulesPerUser = {modulesperuser, userID, moduleID}

[2] No elimine registros en su aplicación, use un campo de estado, tal vez entero, quizás booleano o de bits, que indique que el registro se considera "eliminado". Hazte la aplicación. muestra los registros que no se eliminan (marcados como eliminados, en ese campo) y crea algunos formularios de casos especiales, donde se encuentra la aplicación. muestra los registros marcados como eliminados.

anytable = {anytableID, anytablefield1, anytablefield2, ..., bool anytableisdeleted }

Esta función se llama "eliminación virtual". La eliminación real se denomina frecuentemente "eliminación física".

[3] Use los campos en todas las tablas relacionadas con el acceso, almacene el usuario (único) que creó el registro y el (último) usuario que cambió el registro y la fecha y hora, si es posible, agregue el módulo u opción donde cada registro fue modificado:

AnyTable = {anytableID, anytablecreateuserID, anytablecreatedatetime,
anytableupdateuserID, anytableupdatedatetime,
moduleID, anytablefield1, anytablefield2, ..., anytableisdeleted }

[4] En algunos casos, la moneda o los valores monetarios pueden afectar los resultados, cuando se usan varios registros en un detalle y, agregados a un solo valor, en un registro de encabezado.

La mayoría de las marcas de bases de datos admiten, en estos días, un campo de datos de moneda o dinero. Utilízalo

En algunas circunstancias especiales, algunas personas los almacenan en un valor flotante fijo que admite varios dígitos decimales ("decimal") o incluso como valores de cadena.

Esta técnica es una espada de doble filo. Si su aplicación requiere ese tipo de prescripción, busque en la web un tutorial sobre cómo implementarlo adecuadamente.

Saludos. [No te olvides de darle una lata de atún al gatito, o anímalo a favor de votar]

    
respondido por el umlcat 15.06.2011 - 23:05
2

Has etiquetado tu pregunta con security , pero en general estás hablando de consistencia y confiabilidad, así que intentaré responder esa parte de la ecuación:

  • Utilice las transacciones de la base de datos para garantizar la integridad de las operaciones por lotes. El ejemplo más básico es una transferencia entre dos cuentas: a una cuenta se le deduce la cantidad y a la otra se le abona. Use las transacciones para asegurarse de que una transferencia parcial nunca ocurra (solo se cambia un lado).
  • Para mayor precisión, use el tipo DECIMAL en lugar de flotadores. Los cálculos son mucho más lentos, pero no deberías sentirlo, ya que la mayoría de los cálculos financieros son muy básicos
  • Use la replicación para el tiempo de actividad y las copias de seguridad para la copia de seguridad. También debe consultar instantáneas de LVM para la recuperación
respondido por el Eran Galperin 15.06.2011 - 16:43
2

Algunas de las consideraciones que veo son que debes tener en cuenta los controles internos. Esto significa que todos los accesos para acciones contra tablas (Insertar / eliminar / actualizar) deben realizarse a través de procesos almacenados (y no SQl dinámico) para que ninguna tabla permita la escritura o eliminación de derechos directamente sobre la mesa a nadie, excepto a un administrador del sistema. También debe tener en cuenta los controles internos que no permiten que alguien cree una nueva compañía y luego le cobre artículos a esa compañía (una ruta para el fraude). Acciones como esa siempre requerirán que las personas en dos roles diferentes sean aprobadas. Además, los cheques no deben cortarse a menos que una persona ingrese los datos y otra apruebe el gasto.

Todas las tablas deben tener activadores que creen registros de auditoría. Está buscando prevenir el fraude y si sucede para determinar exactamente quién tomó las medidas y cuándo.

En las aplicaciones financieras, está mucho más preocupado por una gran cantidad de procesos de back-end que nunca se ven en la interfaz de usuario. Su primera preocupación es prevenir el fraude y, por lo tanto, muchos controles que nadie conoce se hacen en el backend.

No abordaría una aplicación financiera de ningún tipo sin leer los PCGA (en los EE. UU., otros países tienen sus propias normas contables) a fondo y tener un CPA como consultor, ya que las prácticas contables incorrectas pueden llevar a la cárcel. Este es un campo altamente técnico y alguien sin el conocimiento necesario no tiene ningún negocio intentando crear software en esta área.

    
respondido por el HLGEM 28.10.2011 - 20:52
1

La contabilidad es a menudo sobre la verificación. Mientras recuerdes esto y entiendas la relación entre cada entidad, es bastante difícil hacerlo mal.

Intentaré enumerar tantos cheques como pueda, pero invariablemente perderé algunos, espero que sea suficiente para que comiences a realizar tu propia excavación.

Débitos Totales == Créditos Totales, esto es cierto ya sea que esté hablando sobre el conjunto ENTERO de cuentas o solo una transacción aislada. Si no se cuenta, se perdió al menos una publicación en algún lugar. Así es como se equilibra el libro mayor.

Cuentas por cobrar (débitos netos a la cuenta de control) == Total facturado (suma total de todos los montos por facturar) - Total recibido (suma total de todos los pagos recibidos). Este es un ejemplo de cómo los totales de la transacción en términos FÍSICOS y de documentos tangibles reales deben equilibrarse con el Libro mayor (entrada doble).

Saldo bancario (según su estado de cuenta bancario) == Su total del Libro mayor para esa cuenta + cualquier cheque recibido que no se haya depositado: cualquier cheque emitido que no se haya depositado. Este es un ejemplo de cómo las cuentas bancarias / en efectivo cuentan con el libro mayor.

Como puede ver, cada transacción, sub libro mayor, incluso acciones, se vincula directamente al libro mayor.

Si está realizando pruebas unitarias, es bastante fácil ejecutar pruebas que aseguren que existan estos saldos cada vez que inserte / actualice transacciones siempre que sepa qué debe verificar.

Por supuesto, hay más saldos para verificar / contar, pero debe obtener la esencia del trabajo requerido. Esencialmente, todo se equilibra con todo lo demás, ya sean documentos físicos, elementos del libro mayor, estados de cuenta bancarios. Se supone que es un equilibrio perfecto, o en los casos en los que es perezoso tratar con el redondeo, casi perfecto.

Cuanto más controles puedas realizar mientras lo estás desarrollando, menos posibilidades tienes de que algo salga mal.

Por cierto, cuando se trata de redondear, trate de usar decimales en lugar de flotadores, le ahorrará muchos dolores de cabeza en el camino. : P

    
respondido por el Permas 28.10.2011 - 17:59

Lea otras preguntas en las etiquetas