DROP SCHEMA FacturacionComercio CASCADE;
DROP SCHEMA ProcesoImportacion CASCADE;

CREATE SCHEMA FacturacionComercio;
CREATE SCHEMA ProcesoImportacion;

-- -----------------------------------------------------
-- Table TipoProcesoComercio
-- -----------------------------------------------------
CREATE TABLE FacturacionComercio.TipoProcesoComercio (
  id SERIAL NOT NULL,
  nombre VARCHAR(45) NOT NULL,
  enum VARCHAR(45) NULL,
  PRIMARY KEY (id));


-- -----------------------------------------------------
-- Table ProcesoComercio
-- -----------------------------------------------------
CREATE TABLE FacturacionComercio.ProcesoComercio (
  id SERIAL NOT NULL,
  idMarca INT NOT NULL,
  idTipoProcesoComercio INT NOT NULL,
  idPersonalRegistro INT NOT NULL,
  idPersonalEdicion INT NULL,
  frecuencia INT NOT NULL,
  version VARCHAR(45) NOT NULL DEFAULT '1.0',
  fechaInicio DATE NOT NULL,
  activo BOOLEAN NOT NULL DEFAULT TRUE,
  fechaRegistro TIMESTAMP NOT NULL,
  fechaEdicion TIMESTAMP NULL,
  ultimoProceso TIMESTAMP NULL,
  siguienteProceso TIMESTAMP NULL,
  ultimoRegistroConocido DATE NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_procesoComercio_marca
    FOREIGN KEY (idMarca)
    REFERENCES Marca (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_procesoComercio_personal1
    FOREIGN KEY (idPersonalRegistro)
    REFERENCES Personal (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_procesoComercio_personal2
    FOREIGN KEY (idPersonalEdicion)
    REFERENCES Personal (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_ProcesoComercio_TipoProcesoComercio1
    FOREIGN KEY (idTipoProcesoComercio)
    REFERENCES FacturacionComercio.TipoProcesoComercio (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_procesoComercio_marca_idx ON FacturacionComercio.ProcesoComercio (idMarca ASC);

CREATE INDEX fk_procesoComercio_personal1_idx ON FacturacionComercio.ProcesoComercio (idPersonalRegistro ASC);

CREATE INDEX fk_procesoComercio_personal2_idx ON FacturacionComercio.ProcesoComercio (idPersonalEdicion ASC);

CREATE INDEX fk_ProcesoComercio_TipoProcesoComercio1_idx ON FacturacionComercio.ProcesoComercio (idTipoProcesoComercio ASC);


-- -----------------------------------------------------
-- Table ContactoProcesoComercio
-- -----------------------------------------------------
CREATE TABLE FacturacionComercio.ContactoProcesoComercio (
  id SERIAL NOT NULL,
  idProcesoComercio INT NOT NULL,
  idPersonalRegistro INT NOT NULL,
  idPersonalEdicion INT NULL,
  nombre VARCHAR(250) NOT NULL,
  telefono VARCHAR(250) NOT NULL,
  mail VARCHAR(250) NOT NULL,
  idPlataformaRemota VARCHAR(45) NULL,
  passPlataformaRemota VARCHAR(45) NULL,
  notas VARCHAR(45) NULL,
  fechaRegistro TIMESTAMP NOT NULL,
  fechaEdicion TIMESTAMP NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_contactoProcesoComercio_procesoComercio1
    FOREIGN KEY (idProcesoComercio)
    REFERENCES FacturacionComercio.ProcesoComercio (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_ContactoProcesoComercio_Personal1
    FOREIGN KEY (idPersonalRegistro)
    REFERENCES Personal (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_ContactoProcesoComercio_Personal2
    FOREIGN KEY (idPersonalEdicion)
    REFERENCES Personal (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_contactoProcesoComercio_procesoComercio1_idx ON FacturacionComercio.ContactoProcesoComercio (idProcesoComercio ASC);

CREATE INDEX fk_ContactoProcesoComercio_Personal1_idx ON FacturacionComercio.ContactoProcesoComercio (idPersonalRegistro ASC);

CREATE INDEX fk_ContactoProcesoComercio_Personal2_idx ON FacturacionComercio.ContactoProcesoComercio (idPersonalEdicion ASC);


-- -----------------------------------------------------
-- Table EstadoEjecucionProceso
-- -----------------------------------------------------
CREATE TABLE FacturacionComercio.EstadoEjecucionProceso (
  id SERIAL NOT NULL,
  nombre VARCHAR(45) NOT NULL,
  enum VARCHAR(45) NOT NULL,
  PRIMARY KEY (id));


-- -----------------------------------------------------
-- Table EjecucionProcesoComercio
-- -----------------------------------------------------
CREATE TABLE FacturacionComercio.EjecucionProcesoComercio (
  id SERIAL NOT NULL,
  idProcesoComercio INT NOT NULL,
  idEstadoEjecucionProceso INT NOT NULL,
  idResponsableEjecucion INT NULL,
  fechaProgramada DATE NOT NULL,
  fechaInicioEjecucion TIMESTAMP NULL,
  fechaFinEjecucion TIMESTAMP NULL,
  duracionEjecucion FLOAT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_EjecucionProcesoComercio_ProcesoComercio1
    FOREIGN KEY (idProcesoComercio)
    REFERENCES FacturacionComercio.ProcesoComercio (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_EjecucionProcesoComercio_Personal1
    FOREIGN KEY (idResponsableEjecucion)
    REFERENCES Personal (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_EjecucionProcesoComercio_EstadoEjecucionProceso1
    FOREIGN KEY (idEstadoEjecucionProceso)
    REFERENCES FacturacionComercio.EstadoEjecucionProceso (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_EjecucionProcesoComercio_ProcesoComercio1_idx ON FacturacionComercio.EjecucionProcesoComercio (idProcesoComercio ASC);

CREATE INDEX fk_EjecucionProcesoComercio_Personal1_idx ON FacturacionComercio.EjecucionProcesoComercio (idResponsableEjecucion ASC);

CREATE INDEX fk_EjecucionProcesoComercio_EstadoEjecucionProceso1_idx ON FacturacionComercio.EjecucionProcesoComercio (idEstadoEjecucionProceso ASC);


-- -----------------------------------------------------
-- Table ResumenProcesoComercio
-- -----------------------------------------------------
CREATE TABLE FacturacionComercio.ResumenProcesoComercio (
  id SERIAL NOT NULL,
  idEjecucionProcesoComercio INT NOT NULL,
  registrosProcesados INT NOT NULL DEFAULT 0,
  dineroAsociado NUMERIC(15,3) NOT NULL DEFAULT 0,
  fechaMenorRegistro DATE NULL,
  fechaMayorRegistro DATE NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_ResumenProcesoComercio_EjecucionProcesoComercio1
    FOREIGN KEY (idEjecucionProcesoComercio)
    REFERENCES FacturacionComercio.EjecucionProcesoComercio (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_ResumenProcesoComercio_EjecucionProcesoComercio1_idx ON FacturacionComercio.ResumenProcesoComercio (idEjecucionProcesoComercio ASC);


-- -----------------------------------------------------
-- Table FacturaComercio
-- -----------------------------------------------------
CREATE TABLE FacturacionComercio.FacturaComercio (
  id SERIAL NOT NULL,
  idProcesoComercio INT NOT NULL,
  idPersonalRegistro INT NOT NULL,
  idPersonalEdicion INT NULL,
  fechaFactura DATE NOT NULL,
  horaFactura TIME NULL,
  numeroFactura VARCHAR(45) NULL,
  subTotal NUMERIC(15,3) NOT NULL DEFAULT 0,
  valorImpuesto NUMERIC(15,3) NULL,
  total NUMERIC(15,3) NULL,
  notaFactura VARCHAR(45) NULL,
  fechaRegistro TIMESTAMP NOT NULL,
  fechaEdicion TIMESTAMP NULL,
  documentoCliente VARCHAR(50) NULL,
  nombreCliente VARCHAR(500) NULL,
  emailCliente VARCHAR(500) NULL,
  telefonoCliente VARCHAR(200) NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_FacturaComercio_ProcesoComercio1
    FOREIGN KEY (idProcesoComercio)
    REFERENCES FacturacionComercio.ProcesoComercio (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_FacturaComercio_Personal1
    FOREIGN KEY (idPersonalRegistro)
    REFERENCES Personal (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_FacturaComercio_Personal2
    FOREIGN KEY (idPersonalEdicion)
    REFERENCES Personal (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_FacturaComercio_ProcesoComercio1_idx ON FacturacionComercio.FacturaComercio (idProcesoComercio ASC);

CREATE INDEX fk_FacturaComercio_Personal1_idx ON FacturacionComercio.FacturaComercio (idPersonalRegistro ASC);

CREATE INDEX fk_FacturaComercio_Personal2_idx ON FacturacionComercio.FacturaComercio (idPersonalEdicion ASC);


-- -----------------------------------------------------
-- Table TipoPagoFactura
-- -----------------------------------------------------
CREATE TABLE FacturacionComercio.TipoPagoFactura (
  id SERIAL NOT NULL,
  nombre VARCHAR(45) NOT NULL,
  enum VARCHAR(45) NOT NULL,
  PRIMARY KEY (id));


-- -----------------------------------------------------
-- Table PagoFacturaComercio
-- -----------------------------------------------------
CREATE TABLE FacturacionComercio.PagoFacturaComercio (
  id SERIAL NOT NULL,
  idFacturaComercio INT NOT NULL,
  idTipoPagoFactura INT NOT NULL,
  valorPago NUMERIC(15,3) NOT NULL DEFAULT 0,
  valorPagoImpuesto NUMERIC(15,3) NOT NULL DEFAULT 0,
  valorPagoTotal NUMERIC(15,3) NOT NULL DEFAULT 0,
  PRIMARY KEY (id),
  CONSTRAINT fk_pagoFacturaComercio_facturaComercio1
    FOREIGN KEY (idFacturaComercio)
    REFERENCES FacturacionComercio.FacturaComercio (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_PagoFacturaComercio_TipoPagoFactura1
    FOREIGN KEY (idTipoPagoFactura)
    REFERENCES FacturacionComercio.TipoPagoFactura (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_pagoFacturaComercio_facturaComercio1_idx ON FacturacionComercio.PagoFacturaComercio (idFacturaComercio ASC);

CREATE INDEX fk_PagoFacturaComercio_TipoPagoFactura1_idx ON FacturacionComercio.PagoFacturaComercio (idTipoPagoFactura ASC);


-- -----------------------------------------------------
-- Table EncodingArchivo
-- -----------------------------------------------------
CREATE TABLE ProcesoImportacion.EncodingArchivo (
  id SERIAL NOT NULL,
  nombre VARCHAR(45) NOT NULL,
  enum VARCHAR(45) NOT NULL,
  PRIMARY KEY (id));


-- -----------------------------------------------------
-- Table PlantillaImportacion
-- -----------------------------------------------------
CREATE TABLE ProcesoImportacion.PlantillaImportacion (
  id SERIAL NOT NULL,
  nombre VARCHAR(250) NOT NULL,
  enum VARCHAR(45) NOT NULL,
  PRIMARY KEY (id));


-- -----------------------------------------------------
-- Table ArchivoImportacion
-- -----------------------------------------------------
CREATE TABLE ProcesoImportacion.ArchivoImportacion (
  id SERIAL NOT NULL,
  idPlantillaImportacion INT NOT NULL,
  idEncodingArchivo INT NOT NULL,
  nombre VARCHAR(250) NOT NULL,
  delimitador VARCHAR(45) NOT NULL,
  filaTitulo INT NOT NULL DEFAULT 1,
  PRIMARY KEY (id),
  CONSTRAINT fk_ArchivoImportacion_EncodingArchivo1
    FOREIGN KEY (idEncodingArchivo)
    REFERENCES ProcesoImportacion.EncodingArchivo (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_ArchivoImportacion_PlantillaArchivoImportacion1
    FOREIGN KEY (idPlantillaImportacion)
    REFERENCES ProcesoImportacion.PlantillaImportacion (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_ArchivoImportacion_EncodingArchivo1_idx ON ProcesoImportacion.ArchivoImportacion (idEncodingArchivo ASC);

CREATE INDEX fk_ArchivoImportacion_PlantillaArchivoImportacion1_idx ON ProcesoImportacion.ArchivoImportacion (idPlantillaImportacion ASC);


-- -----------------------------------------------------
-- Table TipoCampoPlantilla
-- -----------------------------------------------------
CREATE TABLE ProcesoImportacion.TipoCampoPlantilla (
  id SERIAL NOT NULL,
  nombre VARCHAR(250) NULL,
  enum VARCHAR(45) NULL,
  PRIMARY KEY (id));


-- -----------------------------------------------------
-- Table CampoPlantillaImportacion
-- -----------------------------------------------------
CREATE TABLE ProcesoImportacion.CampoPlantillaImportacion (
  id SERIAL NOT NULL,
  idPlantillaImportacion INT NOT NULL,
  idTipoCampoPlantilla INT NOT NULL,
  nombre VARCHAR(250) NOT NULL,
  obligatorio BOOLEAN NOT NULL DEFAULT FALSE,
  valorDefecto VARCHAR(250) NULL,
  formatoCampo VARCHAR(250) NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_CampoPlantillaArchivoImportacion_PlantillaArchivoImportaci1
    FOREIGN KEY (idPlantillaImportacion)
    REFERENCES ProcesoImportacion.PlantillaImportacion (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_CampoPlantillaArchivoImportacion_TipoCampoPlantilla1
    FOREIGN KEY (idTipoCampoPlantilla)
    REFERENCES ProcesoImportacion.TipoCampoPlantilla (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_CampoPlantillaArchivoImportacion_PlantillaArchivoImporta_idx ON ProcesoImportacion.CampoPlantillaImportacion (idPlantillaImportacion ASC);

CREATE INDEX fk_CampoPlantillaArchivoImportacion_TipoCampoPlantilla1_idx ON ProcesoImportacion.CampoPlantillaImportacion (idTipoCampoPlantilla ASC);


-- -----------------------------------------------------
-- Table CampoArchivoImportacion
-- -----------------------------------------------------
CREATE TABLE ProcesoImportacion.CampoArchivoImportacion (
  id SERIAL NOT NULL,
  idArchivoImportacion INT NOT NULL,
  idCampoPlantillaImportacion INT NULL,
  nombreColumna VARCHAR(250) NOT NULL,
  valorDefecto VARCHAR(250) NULL,
  procesarCampo BOOLEAN NOT NULL DEFAULT TRUE,
  formatoCampo VARCHAR(100) NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_CampoArchivoImportacion_ArchivoImportacion1
    FOREIGN KEY (idArchivoImportacion)
    REFERENCES ProcesoImportacion.ArchivoImportacion (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_CampoArchivoImportacion_CampoPlantillaArchivoImportacion1
    FOREIGN KEY (idCampoPlantillaImportacion)
    REFERENCES ProcesoImportacion.CampoPlantillaImportacion (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_CampoArchivoImportacion_ArchivoImportacion1_idx ON ProcesoImportacion.CampoArchivoImportacion (idArchivoImportacion ASC);

CREATE INDEX fk_CampoArchivoImportacion_CampoPlantillaArchivoImportacion_idx ON ProcesoImportacion.CampoArchivoImportacion (idCampoPlantillaImportacion ASC);


-- -----------------------------------------------------
-- Table TipoServicioImportacion
-- -----------------------------------------------------
CREATE TABLE ProcesoImportacion.TipoServicioImportacion (
  id SERIAL NOT NULL,
  nombre VARCHAR(250) NOT NULL,
  enum VARCHAR(45) NOT NULL,
  PRIMARY KEY (id));

-- -----------------------------------------------------
-- Table ServicioImportacion
-- -----------------------------------------------------
CREATE TABLE ProcesoImportacion.ServicioImportacion (
  id SERIAL NOT NULL,
  idPlantillaImportacion INT NOT NULL,
  idTipoServicioImportacion INT NOT NULL,
  nombre VARCHAR(250) NOT NULL,
  url VARCHAR(1000) NOT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_ServicioImportacion_PlantillaImportacion1
    FOREIGN KEY (idPlantillaImportacion)
    REFERENCES ProcesoImportacion.PlantillaImportacion (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_ServicioImportacion_TipoServicioImportacion1
    FOREIGN KEY (idTipoServicioImportacion)
    REFERENCES ProcesoImportacion.TipoServicioImportacion (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT
    );

CREATE INDEX fk_ServicioImportacion_PlantillaImportacion1_idx ON ProcesoImportacion.ServicioImportacion (idPlantillaImportacion ASC);
CREATE INDEX fk_ServicioImportacion_TipoServicioImportacion1_idx ON ProcesoImportacion.ServicioImportacion (idTipoServicioImportacion ASC);


-- -----------------------------------------------------
-- Table ArchivoImportacionProceso
-- -----------------------------------------------------
CREATE TABLE FacturacionComercio.ArchivoImportacionProceso (
  id INT NOT NULL,
  idProcesoComercio INT NOT NULL,
  idArchivoImportacion INT NULL,
  idServicioImportacion INT NULL,
  activo BOOLEAN NOT NULL DEFAULT TRUE,
  PRIMARY KEY (id),
  CONSTRAINT fk_ArchivoImportacionProceso_ProcesoComercio1
    FOREIGN KEY (idProcesoComercio)
    REFERENCES FacturacionComercio.ProcesoComercio (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_ArchivoImportacionProceso_ArchivoImportacion1
    FOREIGN KEY (idArchivoImportacion)
    REFERENCES ProcesoImportacion.ArchivoImportacion (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_ArchivoImportacionProceso_ServicioImportacion1
    FOREIGN KEY (idServicioImportacion)
    REFERENCES ProcesoImportacion.ServicioImportacion (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_ArchivoImportacionProceso_ProcesoComercio1_idx ON FacturacionComercio.ArchivoImportacionProceso (idProcesoComercio ASC);

CREATE INDEX fk_ArchivoImportacionProceso_ArchivoImportacion1_idx ON FacturacionComercio.ArchivoImportacionProceso (idArchivoImportacion ASC);

CREATE INDEX fk_ArchivoImportacionProceso_ServicioImportacion1_idx ON FacturacionComercio.ArchivoImportacionProceso (idServicioImportacion ASC);

-- -----------------------------------------------------
-- Table FacturaComercioDetalle
-- -----------------------------------------------------
CREATE TABLE FacturacionComercio.FacturaComercioDetalle (
  id SERIAL NOT NULL,
  idFacturaComercio INT NOT NULL,
  indice INT NULL,
  linea VARCHAR(250) NULL,
  codigoItem VARCHAR(250) NULL,
  referencia VARCHAR(250) NULL,
  item VARCHAR(250) NULL,
  cantidad NUMERIC(15,3) NULL,
  unidadMedida VARCHAR(250) NULL,
  valorUnitario NUMERIC(15,3) NULL,
  subTotal NUMERIC(15,3) NOT NULL,
  valorImpuesto NUMERIC(15,3) NULL,
  total NUMERIC(15,3) NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_FacturaComercioDetalle_FacturaComercio1
    FOREIGN KEY (idFacturaComercio)
    REFERENCES FacturacionComercio.FacturaComercio (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_FacturaComercioDetalle_FacturaComercio1_idx ON FacturacionComercio.FacturaComercioDetalle (idFacturaComercio ASC);


-- -----------------------------------------------------
-- Table ValorAceptadoCampoPlantilla
-- -----------------------------------------------------
CREATE TABLE ProcesoImportacion.ValorAceptadoCampoPlantilla (
  id SERIAL NOT NULL,
  idCampoPlantillaImportacion INT NOT NULL,
  valor VARCHAR(250) NOT NULL,
  enum VARCHAR(45) NOT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_ValorAceptadoCampo_CampoPlantillaArchivoImportacion1
    FOREIGN KEY (idCampoPlantillaImportacion)
    REFERENCES ProcesoImportacion.CampoPlantillaImportacion (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_ValorAceptadoCampo_CampoPlantillaArchivoImportacion1_idx ON ProcesoImportacion.ValorAceptadoCampoPlantilla (idCampoPlantillaImportacion ASC);


-- -----------------------------------------------------
-- Table ValorAceptadoCampoArchivo
-- -----------------------------------------------------
CREATE TABLE ProcesoImportacion.ValorAceptadoCampoArchivo (
  id SERIAL NOT NULL,
  idCampoArchivoImportacion INT NOT NULL,
  idValorAceptadoCampoPlantilla INT NOT NULL,
  valor VARCHAR(250) NOT NULL,
  enum VARCHAR(45) NOT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_ValorAceptadoCampoArchivo_ValorAceptadoCampoPlantilla1
    FOREIGN KEY (idValorAceptadoCampoPlantilla)
    REFERENCES ProcesoImportacion.ValorAceptadoCampoPlantilla (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_ValorAceptadoCampoArchivo_CampoArchivoImportacion1
    FOREIGN KEY (idCampoArchivoImportacion)
    REFERENCES ProcesoImportacion.CampoArchivoImportacion (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_ValorAceptadoCampoArchivo_ValorAceptadoCampoPlantilla1_idx ON ProcesoImportacion.ValorAceptadoCampoArchivo (idValorAceptadoCampoPlantilla ASC);

CREATE INDEX fk_ValorAceptadoCampoArchivo_CampoArchivoImportacion1_idx ON ProcesoImportacion.ValorAceptadoCampoArchivo (idCampoArchivoImportacion ASC);



-- -----------------------------------------------------
-- Table ServicioImportacionAutenticacion
-- -----------------------------------------------------
CREATE TABLE ProcesoImportacion.ServicioImportacionAutenticacion (
  id SERIAL NOT NULL,
  idServicioImportacion INT NOT NULL,
  usuario VARCHAR(250) NULL,
  pass VARCHAR(250) NULL,
  token VARCHAR(250) NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_ServicioImportacionAutenticacion_ServicioImportacion1
    FOREIGN KEY (idServicioImportacion)
    REFERENCES ProcesoImportacion.ServicioImportacion (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_ServicioImportacionAutenticacion_ServicioImportacion1_idx ON ProcesoImportacion.ServicioImportacionAutenticacion (idServicioImportacion ASC);


-- -----------------------------------------------------
-- Table CampoServicioImportacion
-- -----------------------------------------------------
CREATE TABLE ProcesoImportacion.CampoServicioImportacion (
  id SERIAL NOT NULL,
  idServicioImportacion INT NOT NULL,
  idCampoPlantillaImportacion INT NOT NULL,
  nombreAtributo VARCHAR(250) NOT NULL,
  valorDefecto VARCHAR(250) NULL,
  procesarCampo BOOLEAN NOT NULL DEFAULT TRUE,
  formatoCampo VARCHAR(250) NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_CampoServicioImportacion_ServicioImportacion1
    FOREIGN KEY (idServicioImportacion)
    REFERENCES ProcesoImportacion.ServicioImportacion (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_CampoServicioImportacion_CampoPlantillaImportacion1
    FOREIGN KEY (idCampoPlantillaImportacion)
    REFERENCES ProcesoImportacion.CampoPlantillaImportacion (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_CampoServicioImportacion_ServicioImportacion1_idx ON ProcesoImportacion.CampoServicioImportacion (idServicioImportacion ASC);

CREATE INDEX fk_CampoServicioImportacion_CampoPlantillaImportacion1_idx ON ProcesoImportacion.CampoServicioImportacion (idCampoPlantillaImportacion ASC);


-- -----------------------------------------------------
-- Table ValorAceptadoCampoServicio
-- -----------------------------------------------------
CREATE TABLE ProcesoImportacion.ValorAceptadoCampoServicio (
  id INT NOT NULL,
  idCampoServicioImportacion INT NOT NULL,
  idValorAceptadoCampoPlantilla INT NOT NULL,
  valor VARCHAR(250) NOT NULL,
  enum VARCHAR(45) NOT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_ValorAceptadoCampoServicio_CampoServicioImportacion1
    FOREIGN KEY (idCampoServicioImportacion)
    REFERENCES ProcesoImportacion.CampoServicioImportacion (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_ValorAceptadoCampoServicio_ValorAceptadoCampoPlantilla1
    FOREIGN KEY (idValorAceptadoCampoPlantilla)
    REFERENCES ProcesoImportacion.ValorAceptadoCampoPlantilla (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_ValorAceptadoCampoServicio_CampoServicioImportacion1_idx ON ProcesoImportacion.ValorAceptadoCampoServicio (idCampoServicioImportacion ASC);

CREATE INDEX fk_ValorAceptadoCampoServicio_ValorAceptadoCampoPlantilla1_idx ON ProcesoImportacion.ValorAceptadoCampoServicio (idValorAceptadoCampoPlantilla ASC);

CREATE TABLE facturacioncomercio.TipoDiaEspecial (
  id INT NOT NULL,
  nombre VARCHAR(250) NOT NULL,
  enum VARCHAR(50) NOT NULL,
  PRIMARY KEY (id));

ALTER TABLE FacturacionComercio.TipoDiaEspecial OWNER TO mantum;
GRANT ALL PRIVILEGES ON FacturacionComercio.TipoDiaEspecial  TO usuarios;


CREATE TABLE FacturacionComercio.DiaEspecial (
  id SERIAL NOT NULL,
  idTipoDiaEspecial INT NOT NULL,
  fecha DATE NOT NULL,
  comentario VARCHAR(500) NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_DiaEspecial_TipoDiaEspecial1
    FOREIGN KEY (idTipoDiaEspecial)
    REFERENCES facturacioncomercio.TipoDiaEspecial (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE UNIQUE INDEX uq_DiaEspecial_fecha1_idx ON FacturacionComercio.DiaEspecial(fecha ASC);

CREATE INDEX fk_DiaEspecial_TipoDiaEspecial1_idx ON FacturacionComercio.DiaEspecial(idTipoDiaEspecial ASC);

ALTER TABLE FacturacionComercio.DiaEspecial OWNER TO mantum;
GRANT ALL PRIVILEGES ON FacturacionComercio.DiaEspecial  TO usuarios;

CREATE TABLE FacturacionComercio.TipoLogProceso (
  id SERIAL NOT NULL,
  nombre VARCHAR(250) NOT NULL,
  enum VARCHAR(45) NOT NULL,
  PRIMARY KEY (id));

ALTER TABLE FacturacionComercio.TipoLogProceso OWNER TO mantum;
GRANT ALL PRIVILEGES ON FacturacionComercio.TipoLogProceso  TO usuarios;


CREATE TABLE FacturacionComercio.LogEjecucionProcesoComercio (
  id SERIAL NOT NULL,
  idEjecucionProcesoComercio INT NOT NULL,
  idTipoLogProceso INT NOT NULL,
  cantidad INT NOT NULL DEFAULT 0,
  mensaje VARCHAR(250) NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_LogEjecucionProcesoComercio_EjecucionProcesoComercio1
    FOREIGN KEY (idEjecucionProcesoComercio)
    REFERENCES FacturacionComercio.EjecucionProcesoComercio (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT,
  CONSTRAINT fk_LogEjecucionProcesoComercio_TipoLogProceso1
    FOREIGN KEY (idTipoLogProceso)
    REFERENCES FacturacionComercio.TipoLogProceso (id)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

CREATE INDEX fk_LogEjecucionProcesoComercio_EjecucionProcesoComercio1_idx ON FacturacionComercio.LogEjecucionProcesoComercio (idEjecucionProcesoComercio ASC);
CREATE INDEX fk_LogEjecucionProcesoComercio_TipoLogProceso1_idx ON FacturacionComercio.LogEjecucionProcesoComercio (idTipoLogProceso ASC);

ALTER TABLE FacturacionComercio.LogEjecucionProcesoComercio OWNER TO mantum;
GRANT ALL PRIVILEGES ON FacturacionComercio.LogEjecucionProcesoComercio  TO usuarios;


ALTER SCHEMA FacturacionComercio OWNER TO mantum;
ALTER SCHEMA ProcesoImportacion OWNER TO mantum;
ALTER TABLE FacturacionComercio.TipoProcesoComercio OWNER TO mantum;
ALTER TABLE FacturacionComercio.ProcesoComercio OWNER TO mantum;
ALTER TABLE FacturacionComercio.ContactoProcesoComercio OWNER TO mantum;
ALTER TABLE FacturacionComercio.EstadoEjecucionProceso OWNER TO mantum;
ALTER TABLE FacturacionComercio.EjecucionProcesoComercio OWNER TO mantum;
ALTER TABLE FacturacionComercio.ResumenProcesoComercio OWNER TO mantum;
ALTER TABLE FacturacionComercio.FacturaComercio OWNER TO mantum;
ALTER TABLE FacturacionComercio.TipoPagoFactura OWNER TO mantum;
ALTER TABLE FacturacionComercio.PagoFacturaComercio OWNER TO mantum;
ALTER TABLE ProcesoImportacion.EncodingArchivo OWNER TO mantum;
ALTER TABLE ProcesoImportacion.PlantillaImportacion OWNER TO mantum;
ALTER TABLE ProcesoImportacion.ArchivoImportacion OWNER TO mantum;
ALTER TABLE ProcesoImportacion.TipoCampoPlantilla OWNER TO mantum;
ALTER TABLE ProcesoImportacion.CampoPlantillaImportacion OWNER TO mantum;
ALTER TABLE ProcesoImportacion.CampoArchivoImportacion OWNER TO mantum;
ALTER TABLE ProcesoImportacion.TipoServicioImportacion OWNER TO mantum;
ALTER TABLE ProcesoImportacion.ServicioImportacion OWNER TO mantum;
ALTER TABLE FacturacionComercio.ArchivoImportacionProceso OWNER TO mantum;
ALTER TABLE FacturacionComercio.FacturaComercioDetalle OWNER TO mantum;
ALTER TABLE ProcesoImportacion.ValorAceptadoCampoPlantilla OWNER TO mantum;
ALTER TABLE ProcesoImportacion.ValorAceptadoCampoArchivo OWNER TO mantum;
ALTER TABLE ProcesoImportacion.ServicioImportacionAutenticacion OWNER TO mantum;
ALTER TABLE ProcesoImportacion.CampoServicioImportacion OWNER TO mantum;
ALTER TABLE ProcesoImportacion.ValorAceptadoCampoServicio OWNER TO mantum;

GRANT USAGE ON SCHEMA FacturacionComercio TO usuarios;
GRANT USAGE ON SCHEMA ProcesoImportacion TO usuarios;
GRANT ALL PRIVILEGES ON FacturacionComercio TO usuarios;
GRANT ALL PRIVILEGES ON ProcesoImportacion TO usuarios;
GRANT ALL PRIVILEGES ON FacturacionComercio.TipoProcesoComercio  TO usuarios;
GRANT ALL PRIVILEGES ON FacturacionComercio.ProcesoComercio  TO usuarios;
GRANT ALL PRIVILEGES ON FacturacionComercio.ContactoProcesoComercio  TO usuarios;
GRANT ALL PRIVILEGES ON FacturacionComercio.EstadoEjecucionProceso  TO usuarios;
GRANT ALL PRIVILEGES ON FacturacionComercio.EjecucionProcesoComercio  TO usuarios;
GRANT ALL PRIVILEGES ON FacturacionComercio.ResumenProcesoComercio  TO usuarios;
GRANT ALL PRIVILEGES ON FacturacionComercio.FacturaComercio  TO usuarios;
GRANT ALL PRIVILEGES ON FacturacionComercio.TipoPagoFactura  TO usuarios;
GRANT ALL PRIVILEGES ON FacturacionComercio.PagoFacturaComercio  TO usuarios;
GRANT ALL PRIVILEGES ON ProcesoImportacion.EncodingArchivo  TO usuarios;
GRANT ALL PRIVILEGES ON ProcesoImportacion.PlantillaImportacion  TO usuarios;
GRANT ALL PRIVILEGES ON ProcesoImportacion.ArchivoImportacion  TO usuarios;
GRANT ALL PRIVILEGES ON ProcesoImportacion.TipoCampoPlantilla  TO usuarios;
GRANT ALL PRIVILEGES ON ProcesoImportacion.CampoPlantillaImportacion  TO usuarios;
GRANT ALL PRIVILEGES ON ProcesoImportacion.CampoArchivoImportacion  TO usuarios;
GRANT ALL PRIVILEGES ON ProcesoImportacion.TipoServicioImportacion  TO usuarios;
GRANT ALL PRIVILEGES ON ProcesoImportacion.ServicioImportacion  TO usuarios;
GRANT ALL PRIVILEGES ON FacturacionComercio.ArchivoImportacionProceso  TO usuarios;
GRANT ALL PRIVILEGES ON FacturacionComercio.FacturaComercioDetalle  TO usuarios;
GRANT ALL PRIVILEGES ON ProcesoImportacion.ValorAceptadoCampoPlantilla  TO usuarios;
GRANT ALL PRIVILEGES ON ProcesoImportacion.ValorAceptadoCampoArchivo  TO usuarios;
GRANT ALL PRIVILEGES ON ProcesoImportacion.ServicioImportacionAutenticacion  TO usuarios;
GRANT ALL PRIVILEGES ON ProcesoImportacion.CampoServicioImportacion  TO usuarios;
GRANT ALL PRIVILEGES ON ProcesoImportacion.ValorAceptadoCampoServicio  TO usuarios;




CREATE SEQUENCE facturacioncomercio.archivoimportacionproceso_id_seq;
ALTER SEQUENCE facturacioncomercio.archivoimportacionproceso_id_seq
    OWNER TO mantum;
GRANT ALL ON SEQUENCE facturacioncomercio.archivoimportacionproceso_id_seq TO mantum;
GRANT ALL ON SEQUENCE facturacioncomercio.archivoimportacionproceso_id_seq TO usuarios;

ALTER TABLE facturacioncomercio.archivoimportacionproceso 
ALTER COLUMN ID SET DEFAULT nextval('facturacioncomercio.archivoimportacionproceso_id_seq'::regclass);
