Tablas y campos propuestos
General
Todas las tablas podrían tener:
- usuarioCreado
- nombre de usuario que lo ha creado
- momentoCreado
- fecha/hora cuando se ha creado
- usuarioModificado
- nombre usuario última modificación
- momentoModificado
- fecha / hora última modificación
Son algunos de los campos que utiliza Dublin Core de Zope/CMF. Más adelante puede estuadiarse llevar un seguimiento más exhaustivo, por ejemplo, mediante triggers, o si sería mejor usar un analizador de LOGs para postgresql
Tabla "PAF": Presupuestos / Pedidos / Albaranes / Facturas / Facturas proformas, etc.
- PAFId
- (primary key. Tipo serial o mejor con nuestro propio nº hi_id-low_id): campo interno que se usa para enlazar esta tabla con PAFLineas
- Tipo
- Indica si es presupuesto, pedido, albarán, factura, etc.
- Numero
- Identificador/Referencia para los usuarios. Suele ser un nº único, dentro del mismo TD, así que se puede establer una restricción de unicidad entre los campos TipoDocumento+NumeroDocumento. En SICE se ha utilizado el esquema '[empresa+][Serie-]año/número', siendo año de 4 dígitos (podría pasarse a 2) y un número de longitud fija (ej, 00001), pero parametrizable para cada tipo de documento. En las búsquedas se permiten abreviaturas por comodidad del usuario (ej. al buscar un nº automáticamente busca añoActual/numeroExpandidoA5Digitos)
- PersonaId
- cliente, proveedor, etc. queda por determinar si es un nº interno o identificador del usuario para las personas. En general, los usuarios se adaptan al sistema de información. Históricamente, tenían tablas diferentes para clientes y proveedores, con lo que tenían contadores/identificadores diferentes. Los usuarios suelen memorizar una veintena de códigos de los clientes más frecuentes, los demás lo buscan por nombre. Inicialmente, recomendaría el uso de la clave interna, con una vista definida en la BD para que sea más fácil localizar los clientes, y una buena pantalla de selección.
- Fecha
- fecha del documento, que no es la misma de la fecha de creación.
- Estado
- estado actual del documento. Depende del TipoDocumento. No tengo tan claro cómo tratar / almacenarlo. El estado representa hasta qué punto el documento ha sido procesado hacia su próximo paso. En caso de Pedidos: no servido, parc. servido, servido, cancelado, terminado. Si se permite facturar pedido, realmente haría falta otro estado. O se usan estados diferentes, o se usa un array de estados, o se puede usar un campo de texto genérico que se rellena con una lista de tipo diccionario o algo parecido. El ciclo de los documentos y estados se deriva del modelo workflow. Dibujar el workflow puede ayudar al comprender esta parte.
- DireccionDestino
- (domicilio, C.P., Munipio, Provincia, Pais): es interesante que se copie del cliente al documento, porque así es más fácil modificarlo o personalizarlo. En la pantalla tendrá que existir una mandera fácil de elegir la dirección del cliente.
- FormaEnvio
- un valor sacado de una lista de valores. Más adelante, puede a lo mejor definirse si va a portes debidos / pagados, agencia transporte, etc.
- FormaPago
- un valor sacado de una lista de valores. Indica cómo han de crearse los cobros asociados al documento. Más adelante se asocia a una tabla que indica cómo han de crearse los cobros/pagos (fechas emisión / vencimientos e importes)
- ImporteBruto
- suma importes líneas sin aplicar impuestos
- ImporteImpuestos
- suma de los importes de los impuestos en las líneas
- ImporteTotal
- ImporteBruto+ImporteImpuestos
- ImportePagado
- Importe cobrado o pagado hasta el momento.
PAFLineas
- PAFLineaId
- (primary key, lo mismo que antes respecto high_id, low_id) sirve para identificar internamente la línea.
- PAFId
- (llave externa a PAF.Id)
- ArticuloId
- (llave externa a Productos.Id)
- Linea
- numero de la linea, util para ordenaciones personalizadas
- DescripcionAdicional
- en Sice encontramos la necesidad de permitir que los usarios puedan poner datos / comentarios adicionales a los artículos. En la pantalla y los impresos han de visualizarse ambos. En nuestras instalaciones suele haber algún artículo que no tiene nombre con lo que sólo se visualizaría esta descripción. Otra posibilidad sería la de copiar la descripción del artículo cada vez. Aunque más flexible, puede complicar el tratamiento posterior y ocupa mucho más espacio.
- Referencia
- para determinadas aplicaciones, es bueno, permitir una segunda referencia para poder distinguir artículos del mismo tipo, pero que tengan acabados diferentes. Mientras que el código del artículo es un dato que la empresa establece, la referencia se estable el cliente o nostros junto con el él.
- Unidades
- Nº de unidades del artículo indicado. No es el nº usado para calcular el importe total de la línea.
- Peso
- el peso en kilos de la mercancía. puede servir tanto para transporte o para calcular el importe
- Bultos
- usado en transporte
- Precio
- precio por unidad ("veáse PAFLineas v2":#PAFLineasV2)
- Descuento
- % dcto
- ImporteDescuento
- importe del dcto
- ImporteImpuestos
- importe de los impuestos, normalmente IVA
- PorcentajeImpuesto
- porcentaje de impuesto de este articulo
- ImporteBruto
- el importe de la línea sin aplicar descuentos o Impuestos. Normalmente es Unidades*Precio ("veáse PAFLineas v2":#PAFLineasV2)
- ImporteTotal
- importe neto, todos los datos aplicados.
Valores predefinidos:
En la tabla PAF hay valores que se repiten continuamente y se toman de una conjunto previamente establecido. Ejemplos son Series, Estado, Forma de Pago y Forma de Envio. Tambien el campo RegimenImpuesto de la tabla Persona (ver mas adelante)
Aqui tenemos dos tablas. En la principal se indican los campos para los que se van a establecer valores y en la segunda vienen especificados los valores en si.
Definidos:
- Campo
- nombre del campo que tendra estos valores
- Descripcion
- descripcion que se muestra al usuario en la pantalla de modificacion de definidos.
DefinidosValores:
- Campo
- nombre del campo (enlaza con Definidos)
- Valor
- posible valor que puede tomar este campo
- Orden
- el orden en el que le aparece al usuario
Tipos de Documentos
Por otro lado tenemos otra tabla para especificar los tipos de documentos.
- Nombre
- nombre de este documento
- Descripcion
- descripcion
PAFLineas v2:
- Medidas
- dependen del artículo. Algunos artículos se miden en longitud, otros en peso, alto y ancho, largo, grosor, etc. O se opta por poner campos fijos, o se usa un array o algo parecido. En este caso, sería bueno tener una consulta (vista) con todos los datos ya traducidos (kilos, alto, ancho, largo, etc.) Se usan habitualmente para calcular la CantidadFacturable.
- CantidadFacturable
- en caso normal = Unidades, pero en caso que el precio por metro, metro cuadrado, etc. este dato se calcula a partir de las medidas. No queda claro si es más interesante poner CantidadFacturable por Unidad, o ya multiplicado por las unidades. La fórmula que indica cómo se calcula está indicada en el artículo.
- FormulaCantidadFacturable
- fórmula para calcular la CantidadFacturable a partir de las medidas
- FormulaPrecio
- fórmula para calcular el precio a partir de las medidas u otro acabdo.
- FormulaImporte
- fórmula para calcular el importe, normalmente: CantidadFacturable*PrecioTarifa
Personas:
- PersonaId
- codigo autonumerico
- Nombre
- nombre y apellidos
- NIF
- numero de identificacion fiscal
- RegimenImpuesto
- Exento, normal, intracomunitario
PersonasDirecciones:
- DireccionId
- codigo autonumerico interno
- PersonaId
- codigo que enlaza con Personas
- Orden
- sirve para ordenar varias direcciones de una persona (la primera suele ser la direccion predeterminada)
- Domicilio
- trivial
- Poblacion
- trivial
- Provincia
- trivial
- CodigoPostal
- trivial
- Pais
- trivial
- Telefono
- trivial
- trivial
- Notas
- para lo que no encaje en ninguno de los campos anteriores
Articulos:
- ArticuloId
- autonumerico interno
- Referencia
- codigo para el usuario
- Nombre
- nombre del articulo
- Descripcion
- descripcion del articulo
- PrecioCompra
- trivial
- PrecioVenta
- trivial
- TipoImpuestoCompra
- trivial
- TipoImpuestoVenta
- trivial