Está en la página 1de 9

Bases de Datos. 2 D.A.I. Turno Tarde I.E.S. Francisco Ayala Dpto.

Informtica (Pepe Cordoba)

ERP COBROS. Pgina 1 de 9

Una fbrica de juguetes nos encarga el anlisis, diseo, desarrollo y puesta en funcionamiento de un ERP que se encargue de todo el proceso de gestin y produccin de dicha empresa. Este ERP estar constituido por varios mdulos, de los cuales, el que ms urge es Mdulo de Cobros. A. Despus de varias entrevistas y recopilar documentacin, la forma de trabajo es, principalmente, la siguiente: Cada vez que se genera una Factura, se generan de forma automtica, una serie de Recibos, excepto en el caso de que la factura sea un Abono al Cliente. El nmero de recibos depende de la Forma de Pago de la Factura. Cada Forma de Pago dispone de una serie de campos relacionados entre s: a. Nmero de Recibos a generar. Debe ser siempre superior a 0. b. Da Fijo de Pago. Este dato debe ser 0, cuando el nmero de recibos a generar sea 1, 2 o 3. Debe ser superior a 0 cuando el nmero de recibos sea superior a 3. En este caso, se generan tanto recibos mensuales como indique el campo anterior: la fecha de Emisin de cada recibo generado ser la fecha de la factura y la fecha de Pago el da del mes indicado en este dato, incrementando los meses (a partir de la fecha de factura ) en tantos como indique cada numero consecutivo de recibo (1,2,3,4). Si la fecha de Pago no existiera se sustituye con el ltimo da del mes. c. Incremento_1 en Das. Si este dato tiene un valor diferente a 0: la fecha de Emisin del primer recibo generado ser la fecha de la factura y la fecha de Pago ser la fecha de la factura incrementada en tantos das como indique este dato. d. Incremento_2 en Das. Tendr valor 0 si Incremento_1 en Das tiene valor 0. Si este dato tiene un valor diferente a 0: debe tener un valor superior a Incremento_1 en Das. Si este dato tiene un valor diferente a 0: la fecha de Emisin del segundo recibo generado ser la fecha de la factura y la fecha de Pago ser la fecha de la factura incrementada en tantos das como indique este dato. e. Incremento_3 en Das. Tendr valor 0 si Incremento_2 en Das tiene valor 0. Si este dato tiene un valor diferente a 0: debe tener un valor superior a Incremento_2 en Das. Si este dato tiene un valor diferente a 0: la fecha de Emisin del tercer recibo generado ser la fecha de la factura y la fecha de Pago ser la fecha de la factura incrementada en tantos das como indique este dato. NOTA: El importe de cada recibo ser: a. Si hay un solo recibo, coincide con el importe de la Factura. b. Si hay ms de uno ( n Recibos) : los n-1 recibos primeros tendrn como importe : el importe de la factura / n ; y el ltimo, el importe de la factura - la suma de los n-1 primeros recibos.

Bases de Datos. 2 D.A.I. Turno Tarde I.E.S. Francisco Ayala Dpto. Informtica (Pepe Cordoba)

ERP COBROS. Pgina 2 de 9

Los datos de cada factura deben ser, como mnimo: a. Abono (S/N) b. Nmero de Factura (identificador de cada factura). Posteriormente, se prev incluir tambin (para identificarla) la Serie de la factura. c. Fecha de la Factura, Cliente, Forma de Pago e Importe. d. Un campo que indique si est Pagada o No. Este campo estar siempre que se cree una factura a No y se cambiar cuando todos los recibos generados sobre dicha factura estn pagados.

Clientes. Adems de los datos identificativos de cada cliente (cdigo, nombre, direccin, ), su forma de Pago por defecto y su Agente asociado; se guardan varios datos referentes al Cobro de sus Recibos: a. Primer Da de Pago del mes. Debe tener un valor entre 0 y 31. b. Segundo Da de Pago del mes. Debe tener un valor entre 0 y 31. Tendr valor 0 si Primer Da de Pago del mes tiene valor 0. Si este dato tiene un valor diferente a 0: debe tener un valor superior a Primer Da de Pago del mes. c. Tercer Da de Pago del mes. Debe tener un valor entre 0 y 31. Tendr valor 0 si Segundo Da de Pago del mes tiene valor 0. Si este dato tiene un valor diferente a 0: debe tener un valor superior a Segundo Da de Pago del mes. NOTA: Si alguno de los tres datos anteriores tuviera algn valor, la fecha de Pago del Recibo se incrementar de tal forma que se ajuste al primer valor de los tres anteriores. d. Intervalo de Vacaciones. Es un intervalo de dos fechas, que de existir, no se podr poner como Fecha de Pago de un Recibo cualquier fecha comprendida entre este intervalo. Se incrementar a la siguiente fecha ajustada a la poltica de empresa indicada en los apartados anteriores.

Bancos: esta empresa tiene una serie de Bancos a travs de los cuales se pueden realizar los pagos de los recibos. Cada cliente ha de tener, al menos, una cuenta en alguno de los bancos de la serie anterior. Agentes/Representantes. a. Cada cliente tiene asociado a un agente o representante. b. Cada agente puede un beneficio fijo mensual independientemente de los clientes que tenga asociados y de las facturas que estos hagan. c. Cada agente puede un beneficio fijo mensual por cada factura que haga cada uno de sus clientes asociados. d. Cada agente puede un beneficio porcentual sobre el importe de cada factura mensual PAGADA que haga cada uno de sus clientes asociados. e. Mensualmente se procede a la liquidacin de comisiones a los agentes.

B. Despus de analizar el proceso de cobros, generamos un esquema con las siguientes tablas y restricciones de integridad:

Bases de Datos. 2 D.A.I. Turno Tarde I.E.S. Francisco Ayala Dpto. Informtica (Pepe Cordoba)

ERP COBROS. Pgina 3 de 9

Bases de Datos. 2 D.A.I. Turno Tarde I.E.S. Francisco Ayala Dpto. Informtica (Pepe Cordoba) CONNECT system/manager; CREATE TABLESPACE ts_ERPCOBROS DATAFILE 'C:\df_ERPCOBROS' SIZE 10 M; COMMIT; CREATE USER ERPCOBROS IDENTIFIED BY ERPCOBROS DEFAULT TABLESPACE ts_ERPCOBROS; COMMIT; GRANT CONNECT, RESOURCE TO ERPCOBROS; COMMIT; DISCONNECT; CONNECT ERPCOBROS / ERPCOBROS; CREATE TABLE ERPCOBROS.AGENTES ( cCodAgente VARCHAR2(13) NOT NULL, Nombre VARCHAR2(100) NOT NULL, Direccion VARCHAR2(100), Poblacion VARCHAR2(100), CodPostal VARCHAR2(10) NOT NULL, Provincia VARCHAR2(50), Pais VARCHAR2(50), FecAlta DATE DEFAULT SYSDATE NOT NULL, PagoFijo NUMBER(14,4) DEFAULT 0 NOT NULL, CONSTRAINT PK_AGENTES PRIMARY KEY (cCodAgente ) ); CREATE TABLE ERPCOBROS.FPAGOS ( cCodFPago VARCHAR2(13) NOT NULL, Descripcion VARCHAR2(100) NOT NULL, IncrDia1 NUMBER(2) DEFAULT 0 NOT NULL, IncrDia2 NUMBER(2) DEFAULT 0 NOT NULL, IncrDia3 NUMBER(2) DEFAULT 0 NOT NULL, NRecibos NUMBER(2) DEFAULT 0 NOT NULL, NDiaPago NUMBER(2) DEFAULT 0 NOT NULL, CONSTRAINT PK_FPAGOS PRIMARY KEY (cCodFPago) ); CREATE TABLE ERPCOBROS.CLIENTES ( cCodCliente VARCHAR2(13) NOT NULL, Nombre VARCHAR2(100) NOT NULL, Direccion VARCHAR2(100), Poblacion VARCHAR2(100), CodPostal VARCHAR2(10) NOT NULL, Provincia VARCHAR2(50), Pais VARCHAR2(50), FecAlta DATE DEFAULT SYSDATE NOT NULL, cCodFPago VARCHAR2(13) NOT NULL, cCodAgente VARCHAR2(13) NOT NULL, Dia1Pago NUMBER(2) DEFAULT 0 NOT NULL, Dia2Pago NUMBER(2) DEFAULT 0 NOT NULL, Dia3Pago NUMBER(2) DEFAULT 0 NOT NULL, NoPagoDesde DATE, NoPagoHasta DATE, IdCuenta NUMBER(10) DEFAULT 0 NOT NULL, CONSTRAINT PK_CLIENTES PRIMARY KEY (cCodCliente ) );

ERP COBROS. Pgina 4 de 9

Bases de Datos. 2 D.A.I. Turno Tarde I.E.S. Francisco Ayala Dpto. Informtica (Pepe Cordoba) CREATE TABLE ERPCOBROS.COMISIONES ( cCodAgente VARCHAR2(13) NOT NULL, cCodCliente VARCHAR2(13) NOT NULL, Porcentaje NUMBER(5,2) DEFAULT 0 NOT NULL, PagoFijo NUMBER(14,4) DEFAULT 0 NOT NULL, CONSTRAINT PK_COMISIONES PRIMARY KEY (cCodAgente,cCodCliente ) );

ERP COBROS. Pgina 5 de 9

ALTER TABLE ERPCOBROS.COMISIONES ADD CONSTRAINT FK_COMISIONES_AGENTES FOREIGN KEY (CCODAGENTE) REFERENCES ERPCOBROS.AGENTES (CCODAGENTE) ; ALTER TABLE ERPCOBROS.COMISIONES ADD CONSTRAINT FK_COMISIONES_CLIENTES FOREIGN KEY (CCODCLIENTE) REFERENCES ERPCOBROS.CLIENTES (CCODCLIENTE); CREATE TABLE ERPCOBROS.COMISIONES_AGENTE ( cCodAgente VARCHAR2(13) NOT NULL, Anio NUMBER(4,0) DEFAULT 0 NOT NULL, Mes NUMBER(2,0) DEFAULT 0 NOT NULL, Mes_Nombre VARCHAR2(10) NOT NULL, Imp_Porcentaj NUMBER(14,4) DEFAULT 0 NOT NULL, Imp_PagoFijo NUMBER(14,4) DEFAULT 0 NOT NULL, CONSTRAINT PK_COMISIONES_AGENTE PRIMARY KEY (cCodAgente,Anio,Mes) ); ALTER TABLE ERPCOBROS.COMISIONES_AGENTE ADD CONSTRAINT FK_COMISIONES_AGENTE FOREIGN KEY (CCODAGENTE) REFERENCES ERPCOBROS.AGENTES (CCODAGENTE); CREATE TABLE ERPCOBROS.BANCOS ( cCodBanco VARCHAR2(4) NOT NULL, Nombre VARCHAR2(100) NOT NULL, cCodBancoAlt VARCHAR2(20) NOT NULL, CONSTRAINT PK_BANCOS PRIMARY KEY (cCodBanco) ); CREATE TABLE ERPCOBROS.CLIENTES_CUENTAS ( IdCuenta NUMBER(10) NOT NULL, cCodCliente VARCHAR2(13) NOT NULL, cCodBanco VARCHAR2(4) NOT NULL, Sucursal VARCHAR2(4) NOT NULL, CodControl VARCHAR2(2) NOT NULL, NumCuenta VARCHAR2(10) NOT NULL, Cod_Altern VARCHAR2(20) NOT NULL, Direccion VARCHAR2(100), Poblacion VARCHAR2(100), CodPostal VARCHAR2(10) NOT NULL, Provincia VARCHAR2(50), Pais VARCHAR2(50), CONSTRAINT PK_CLIENTES_CUENTAS PRIMARY KEY (cCodCliente,cCodBanco,Sucursal,CodControl,NumCuenta) ); ALTER TABLE ERPCOBROS.CLIENTES_CUENTAS ADD CONSTRAINT FK_CLIENTES_CUENTAS_CLIENTES FOREIGN KEY (CCODCLIENTE) REFERENCES ERPCOBROS.CLIENTES (CCODCLIENTE);

Bases de Datos. 2 D.A.I. Turno Tarde I.E.S. Francisco Ayala Dpto. Informtica (Pepe Cordoba)

ERP COBROS. Pgina 6 de 9

ALTER TABLE ERPCOBROS.CLIENTES_CUENTAS ADD CONSTRAINT FK_CLIENTES_CUENTAS_BANCOS FOREIGN KEY (CCODBANCO) REFERENCES ERPCOBROS.BANCOS (CCODBANCO); CREATE TABLE ERPCOBROS.FACTURAS ( Abono VARCHAR2(1) DEFAULT 'N' NOT NULL, nFactura NUMBER(10) NOT NULL, Fecha DATE DEFAULT SYSDATE NOT NULL, cCodCliente VARCHAR2(13) NOT NULL, cCodFPago VARCHAR2(13) NOT NULL, Importe NUMBER(14,4) DEFAULT 0 NOT NULL, Pagada VARCHAR2(1) DEFAULT 'N' NOT NULL, CONSTRAINT PK_FACTURAS PRIMARY KEY (nFactura) ); ALTER TABLE ERPCOBROS.FACTURAS ADD CONSTRAINT FK_FACTURAS_CLIENTES FOREIGN KEY (CCODCLIENTE) REFERENCES ERPCOBROS.CLIENTES (CCODCLIENTE); ALTER TABLE ERPCOBROS.FACTURAS ADD CONSTRAINT FK_FACTURAS_FPAGOS FOREIGN KEY (CCODFPAGO) REFERENCES ERPCOBROS.FPAGOS (CCODFPAGO); ALTER TABLE ERPCOBROS.FACTURAS ADD CONSTRAINT CK_FACTURAS_ABONO CHECK (Abono IN ('N','S')); ALTER TABLE ERPCOBROS.FACTURAS ADD CONSTRAINT CK_FACTURAS_PAGADA CHECK (Pagada IN ('N','S')); CREATE TABLE ERPCOBROS.RECIBOS ( nFactura NUMBER(10) NOT NULL, nRecibo NUMBER(10) NOT NULL, FechaEmis DATE NOT NULL, FechaPago DATE NOT NULL, Importe NUMBER(14,4) DEFAULT 0 NOT NULL, Pagado VARCHAR2(1) NOT NULL, cCodCliente VARCHAR2(13) NOT NULL, cCodBanco VARCHAR2(4) NOT NULL, Sucursal VARCHAR2(4) NOT NULL, CodControl VARCHAR2(2) NOT NULL, NumCuenta VARCHAR2(10) NOT NULL, CONSTRAINT PK_RECIBOS PRIMARY KEY (nFactura,nRecibo) ); ALTER TABLE ERPCOBROS.RECIBOS ADD CONSTRAINT FK_RECIBOS_FACTURAS FOREIGN KEY (NFACTURA) REFERENCES ERPCOBROS.FACTURAS (NFACTURA); ALTER TABLE ERPCOBROS.RECIBOS ADD CONSTRAINT CK_RECIBOS_PAGADO CHECK (Pagado IN ('N','S')); INSERT INTO ERPCOBROS.FPAGOS VALUES (0000,PAGO AL CONTADO,0,0,0,1,0); COMMIT;

Bases de Datos. 2 D.A.I. Turno Tarde I.E.S. Francisco Ayala Dpto. Informtica (Pepe Cordoba)

ERP COBROS. Pgina 7 de 9

Realizar las siguientes operaciones para instalar las Polticas de Empresa: 1. Trigger sobre Clientes ( Alta y Modificacin ) a. b. c. d. e. Control de existencia de Forma de Pago y Agente Se ha de generar un registro para las Comisiones del Agente para este Cliente, con valores 0 por defecto para los campos numricos. Si a un cliente se le cambia su agente asignado, se actualizar la tabla de comisiones. Cdigo Postal ha de ser un nmero Los campos NoPagoDesde y NoPagoHasta pueden ser nulos o no nulos (ambos) e indican un periodo de tiempo en el que no se le pueden generar recibos al cliente. Controlar en caso de no ser nulos que el intervalo sea correcto. Dia1Pago indica el primer da del mes en el que un cliente realiza el pago de recibos. Puede ser 0 o no. En el caso de que sea mayor que cero, controlar que sea menor que 30. Dia2Pago indica el segundo da del mes en el que un cliente realiza el pago de recibos. Puede ser 0 o no. En el caso de que sea mayor que cero, controlar que sea mayor que Dia1Pago y menor que 31. Dia3Pago indica el tercer da del mes en el que un cliente realiza el pago de recibos. Puede ser 0 o no. En el caso de que sea mayor que cero, controlar que sea mayor que Dia2Pago y menor que 31. Cuando se da de alta un cliente la IdCuenta por defecto ser 0. Cuando este dato se modifique, solo podr admitir valores de IdCuenta asociados a este cliente, es decir, cuentas bancarias pertenecientes a este cliente.

f.

g.

h.

i.

2.

Trigger sobre Clientes ( Baja ) a. b. No se puede borrar un cliente que tenga facturas. Al borrar un cliente, se borraran todas sus cuentas bancarias.

3.

Trigger para Formas de Pago ( Alta y Modificacin ) a. b. NRecibos indica el nmero de recibos que se generan por cada factura. Ha de ser 1 como mnimo. IncrDia1 indica el nmero de das que hay que incrementar la Fecha de Emisin del primer recibo para calcular su Fecha de Pago ( posteriormente la Fecha de Pago se ajustar a los Das de Pago del Cliente ). Si el nmero de recibos es superior a 3 este dato debe ser 0. IncrDia2 indica el nmero de das que hay que incrementar la Fecha de Emisin del segundo recibo para calcular su Fecha de Pago ( posteriormente la Fecha de Pago se ajustar a los Das de Pago del Cliente ). Si el nmero de recibos es superior a 3 este dato debe ser 0. Si este dato es superior a 0, IncrDia1 debe ser superior a 0 y IncrDia2 debe ser superior a IncrDia1. IncrDia3 indica el nmero de das que hay que incrementar la Fecha de Emisin del tercer recibo para calcular su Fecha de Pago ( posteriormente la Fecha de Pago se ajustar a los Das de Pago del Cliente ). Si el nmero de recibos es superior a 3 este dato debe ser 0. Si este dato es superior a 0, IncrDia2 debe ser superior a 0 y IncrDia3 debe ser superior a IncrDia2. Si IncrDia1 es superior a 0 e IncrDia2 es 0, el nmero de recibos ha de ser 1. Si IncrDia2 es superior a 0 e IncrDia3 es 0, el nmero de recibos ha de ser 2. Si IncrDia3 es superior a 0, el nmero de recibos ha de ser 1. NDiaPago indica el da del mes ( del 1 a 30 ) de la Fecha de Pago del Recibo Mensual (posteriormente la Fecha de Pago se ajustar a los Das de Pago del Cliente ). Si el nmero de recibos es superior a 3 este dato debe ser superior a 0.

c.

d.

e. f. g. h.

Bases de Datos. 2 D.A.I. Turno Tarde I.E.S. Francisco Ayala Dpto. Informtica (Pepe Cordoba) 4. Trigger sobre Formas de Pago ( Baja ) a. No se pueden borrar las Formas de Pago.

ERP COBROS. Pgina 8 de 9

5.

Trigger sobre Facturas ( Alta ). a. b. c. El importe ha de ser siempre superior a 0. Si la Factura es un Abono no se genera ningn recibo. Si la Forma de Pago es AL CONTADO la factura se tiene que dar como pagada y se genera un solo recibo numerado como 1, que tambin se da como pagado, con fecha de emisin y fecha de pago la fecha de la factura, con el mismo importe y cliente que la factura y con datos bancarios vacios. En cualquier otra forma de pago, la factura debe estar no pagada y se generarn tantos recibos mensuales como indique la forma de pago, todos ellos no pagados. En caso de que el numero de recibos ( n ) sea superior a 1, el importe de cada uno de los n-1 primeros recibos ser el resultado de: ( Total_Factura / n ) redondeado a 2 decimales y el importe del ltimo recibo ser: Total_Factura (Suma importes de los n-1 primeros recibos) e. f. La Fecha de Emisin de cada recibo coincidir con la fecha de la factura. La Fecha de Pago de cada recibo se calcular mediante la frmula indicada en la forma de pago redondendola al alza con respecto a los das de pago del cliente y teniendo en cuenta el periodo de no pago de este ltimo. Por ejemplo: Si la factura tiene fecha de pago : 01/01/2010 La forma de pago genera un solo recibo con IncrDia1 = 20 El cliente tiene como das de pago el 1 y el 15 de cada mes. o La primera Fecha de Pago sera 01/01/2010 + 20 das, es decir, el 21/01/2010, pero como el cliente tiene das de pago, hay que ajustar la fecha de pago al siguiente da que el cliente pueda afrontar el pago, es decir, el 01/02/2010.

d.

g.

Pero si el cliente tuviera como periodo de No Pago el comprendido entre el 01/02/2010 y el 10/02/2010, la fecha de pago habra que pasarla al 15/02/2010. Los datos bancarios del recibo, sern los datos bancarios del Cliente que tenga asociados en su ficha por defecto. En caso de que no tenga ninguno, el primer dato de la tabla Cuenta asociado a este cliente.

6.

Trigger sobre Facturas ( Modificacin ). a. b. c. Una factura solo se puede modificar si no est pagada, y adems, todos los recibos asociados a ella tampoco estn pagados. De una factura solo se pueden modificar los datos: Fecha, Forma de Pago e Importe. Cuando se modifiquen los campos Forma de Pago o Importe, se deben borrar todos los recibos asociados a esa factura y volver a generarlos.

7.

Trigger sobre Facturas ( Baja ). a. Una factura solo se puede borrar si no est pagada, y adems, todos los recibos asociados a ella tampoco estn pagados.

Bases de Datos. 2 D.A.I. Turno Tarde I.E.S. Francisco Ayala Dpto. Informtica (Pepe Cordoba) b. 8.

ERP COBROS. Pgina 9 de 9

Cuando se borre una factura se deben borrar todos los recibos asociados a esa factura.

Trigger sobre Recibos ( Modificacin) a. b. c. Si un recibo est pagado no se puede modificar. Solo se pueden modificar los datos de Pagado (S/N), Fecha de Pago y los datos bancarios. Si se modifican los datos bancarios, hay que controlar que pertenezcan al cliente sobre el cual se emiti el recibo.

9.

Trigger sobre Cuentas Bancarias Clientes ( Alta ). a. b. c. d. IdCuenta tendr como valor una unidad ms que el ltimo valor introducido cCodBanco y Sucursal deben estar formados por 4 dgitos. CodControl deben estar formados por 2 dgitos. NumCuenta deben estar formados por 10 dgitos.

10. Trigger sobre Cuentas Bancarias Clientes ( Modificacin ). a. Solo se pueden modificar los campos de Direccin, Poblacin, CodPostal, Provincia y Pas.

11. Procedimiento de Generacin de Comisiones. A este procedimiento se le pasan como entrada dos parmetros: Ao y Mes y se trata de generar un registro de la tabla COMISIONES_AGENTE por cada Agente para ese Ao y Mes. En ese registro se han de calcular dos valores: a. Imp_PagoFijo. Es la suma de: Importe fijo mensual que cobra cada agente (AGENTES. PagoFijo) , mas la suma de los importes fijos que cobra cada Agente por cada Cliente Asociado (COMISIONES. PagoFijo), siempre que ese cliente tenga recibos pagados con fecha de pago coincidente en mes y ao a los parmetros que se le pasa al procedimiento.

b.

Imp_Porcentaj. Es la suma de: las sumas de los importes de los recibos pagados con fecha de pago coincidente en mes y ao a los parmetros que se le pasa al procedimiento por cada cliente y calculando el porcentaje de ese agente para ese cliente (COMISIONES.Porcentaje)

12. Procedimiento de Incremento de Fechas de No Pago de Clientes. Es un procedimiento al que no se pasa ningn parmetro de entrada y que a las fechas de No Pago de todos los clientes les incrementa un ao. 13. Procedimiento de Impresin de Recibos. A este procedimiento se le pasan como entrada dos parmetros: numero de factura y numero de recibo e imprime un recibo con el formato siguiente:

También podría gustarte