/* Módulo de fraccionamientos, trámites, ventas y pagos. Este archivo se ejecuta después de Esquema_BD_AguaHillo.sql. Nombres reemplazados: Des_Desarrolladoras -> Clientes Des_Desarrollos -> Fraccionamientos Des_EtapasDesarrollo -> FraccionamientosEtapas Des_Lotes -> FraccionamientosLotes Sis_Users -> Sis_Usuarios Regla del fondo inicial: - Se registra una Venta con TipoDocto = 'Ant'. - La venta usa un producto genérico de ProductosServicios, por ejemplo "Fondo inicial". - El detalle del fondo no se relaciona con una solicitud específica. - Sólo el dinero efectivamente registrado en Vta_Pagos queda disponible. - Vta_AplicacionesSaldoFavor distribuye ese dinero entre trámites posteriores. - Ventas, pagos y aplicaciones pueden generar su propia Conta_PrePoliza. */ SET ANSI_NULLS ON; GO SET QUOTED_IDENTIFIER ON; GO SET XACT_ABORT ON; GO /* ==================== FRACCIONAMIENTOS ==================== */ CREATE TABLE [dbo].[Fraccionamientos] ( [CveFraccionamiento] int IDENTITY(1,1) NOT NULL, [CveCliente] int NOT NULL, [Fraccionamiento] varchar(200) COLLATE Modern_Spanish_CS_AS NOT NULL, [Hectareas] decimal(18,4) NULL, [Ubicacion] varchar(500) COLLATE Modern_Spanish_CS_AS NULL, [Estatus] varchar(50) COLLATE Modern_Spanish_CS_AS NULL, [EsActivo] bit CONSTRAINT [DF_Fraccionamientos_EsActivo] DEFAULT ((1)) NOT NULL, [FechaAlta] datetime CONSTRAINT [DF_Fraccionamientos_FechaAlta] DEFAULT (GETDATE()) NOT NULL, [FechaModificacion] datetime NULL, [CveUsuario] int NOT NULL, CONSTRAINT [PK_Fraccionamientos] PRIMARY KEY CLUSTERED ([CveFraccionamiento]), CONSTRAINT [UQ_Fraccionamientos_Cliente_Nombre] UNIQUE NONCLUSTERED ([CveCliente], [Fraccionamiento]), CONSTRAINT [UQ_Fraccionamientos_Cliente] UNIQUE NONCLUSTERED ([CveFraccionamiento], [CveCliente]), CONSTRAINT [CK_Fraccionamientos_Hectareas] CHECK ([Hectareas] IS NULL OR [Hectareas] >= (0)) ); GO CREATE TABLE [dbo].[FraccionamientosEtapas] ( [CveFraccionamientoEtapa] int IDENTITY(1,1) NOT NULL, [CveFraccionamiento] int NOT NULL, [Etapa] varchar(150) COLLATE Modern_Spanish_CS_AS NOT NULL, [Hectareas] decimal(18,4) NULL, [Orden] int CONSTRAINT [DF_FraccionamientosEtapas_Orden] DEFAULT ((0)) NOT NULL, [EsActivo] bit CONSTRAINT [DF_FraccionamientosEtapas_EsActivo] DEFAULT ((1)) NOT NULL, [FechaAlta] datetime CONSTRAINT [DF_FraccionamientosEtapas_FechaAlta] DEFAULT (GETDATE()) NOT NULL, [FechaModificacion] datetime NULL, [CveUsuario] int NOT NULL, CONSTRAINT [PK_FraccionamientosEtapas] PRIMARY KEY CLUSTERED ([CveFraccionamientoEtapa]), CONSTRAINT [UQ_FraccionamientosEtapas_Fraccionamiento_Etapa] UNIQUE NONCLUSTERED ([CveFraccionamiento], [Etapa]), CONSTRAINT [UQ_FraccionamientosEtapas_Fraccionamiento] UNIQUE NONCLUSTERED ([CveFraccionamientoEtapa], [CveFraccionamiento]), CONSTRAINT [CK_FraccionamientosEtapas_Hectareas] CHECK ([Hectareas] IS NULL OR [Hectareas] >= (0)) ); GO CREATE TABLE [dbo].[FraccionamientosLotes] ( [CveFraccionamientoLote] int IDENTITY(1,1) NOT NULL, [CveFraccionamientoEtapa] int NOT NULL, [Tipo] varchar(100) COLLATE Modern_Spanish_CS_AS NULL, [Calle] varchar(200) COLLATE Modern_Spanish_CS_AS NULL, [Catastro] varchar(100) COLLATE Modern_Spanish_CS_AS NULL, [MetrosCuadrados] decimal(18,4) NULL, [Numero] varchar(50) COLLATE Modern_Spanish_CS_AS NULL, [Duplicador] varchar(50) COLLATE Modern_Spanish_CS_AS NULL, [EsActivo] bit CONSTRAINT [DF_FraccionamientosLotes_EsActivo] DEFAULT ((1)) NOT NULL, [FechaAlta] datetime CONSTRAINT [DF_FraccionamientosLotes_FechaAlta] DEFAULT (GETDATE()) NOT NULL, [FechaModificacion] datetime NULL, [CveUsuario] int NOT NULL, CONSTRAINT [PK_FraccionamientosLotes] PRIMARY KEY CLUSTERED ([CveFraccionamientoLote]), CONSTRAINT [CK_FraccionamientosLotes_MetrosCuadrados] CHECK ([MetrosCuadrados] IS NULL OR [MetrosCuadrados] >= (0)) ); GO /* ==================== CATÁLOGOS DE TRÁMITES ==================== */ CREATE TABLE [dbo].[Tra_TiposTramite] ( [CveTipoTramite] int IDENTITY(1,1) NOT NULL, [Codigo] varchar(50) COLLATE Modern_Spanish_CI_AS NOT NULL, [TipoTramite] varchar(200) COLLATE Modern_Spanish_CS_AS NOT NULL, [Descripcion] varchar(500) COLLATE Modern_Spanish_CS_AS NULL, [Orden] int CONSTRAINT [DF_Tra_TiposTramite_Orden] DEFAULT ((0)) NOT NULL, [EsActivo] bit CONSTRAINT [DF_Tra_TiposTramite_EsActivo] DEFAULT ((1)) NOT NULL, [FechaAlta] datetime CONSTRAINT [DF_Tra_TiposTramite_FechaAlta] DEFAULT (GETDATE()) NOT NULL, [FechaModificacion] datetime NULL, [CveUsuario] int NOT NULL, CONSTRAINT [PK_Tra_TiposTramite] PRIMARY KEY CLUSTERED ([CveTipoTramite]), CONSTRAINT [UQ_Tra_TiposTramite_Codigo] UNIQUE NONCLUSTERED ([Codigo]) ); GO CREATE TABLE [dbo].[Tra_EstatusSolicitud] ( [CveEstatusSolicitud] int IDENTITY(1,1) NOT NULL, [Codigo] varchar(50) COLLATE Modern_Spanish_CI_AS NOT NULL, [EstatusSolicitud] varchar(100) COLLATE Modern_Spanish_CS_AS NOT NULL, [Orden] int CONSTRAINT [DF_Tra_EstatusSolicitud_Orden] DEFAULT ((0)) NOT NULL, [EsFinal] bit CONSTRAINT [DF_Tra_EstatusSolicitud_EsFinal] DEFAULT ((0)) NOT NULL, [EsActivo] bit CONSTRAINT [DF_Tra_EstatusSolicitud_EsActivo] DEFAULT ((1)) NOT NULL, CONSTRAINT [PK_Tra_EstatusSolicitud] PRIMARY KEY CLUSTERED ([CveEstatusSolicitud]), CONSTRAINT [UQ_Tra_EstatusSolicitud_Codigo] UNIQUE NONCLUSTERED ([Codigo]) ); GO CREATE TABLE [dbo].[Tra_TiposDocumento] ( [CveTipoDocumento] int IDENTITY(1,1) NOT NULL, [TipoDocumento] varchar(200) COLLATE Modern_Spanish_CS_AS NOT NULL, [Descripcion] varchar(500) COLLATE Modern_Spanish_CS_AS NULL, [ExtensionesPermitidas] varchar(200) COLLATE Modern_Spanish_CS_AS NULL, [TamanoMaximoMb] int NULL, [EsActivo] bit CONSTRAINT [DF_Tra_TiposDocumento_EsActivo] DEFAULT ((1)) NOT NULL, [FechaAlta] datetime CONSTRAINT [DF_Tra_TiposDocumento_FechaAlta] DEFAULT (GETDATE()) NOT NULL, [FechaModificacion] datetime NULL, [CveUsuario] int NOT NULL, CONSTRAINT [PK_Tra_TiposDocumento] PRIMARY KEY CLUSTERED ([CveTipoDocumento]), CONSTRAINT [UQ_Tra_TiposDocumento_Nombre] UNIQUE NONCLUSTERED ([TipoDocumento]), CONSTRAINT [CK_Tra_TiposDocumento_Tamano] CHECK ([TamanoMaximoMb] IS NULL OR [TamanoMaximoMb] > (0)) ); GO CREATE TABLE [dbo].[Tra_TiposPregunta] ( [CveTipoPregunta] int IDENTITY(1,1) NOT NULL, [Codigo] varchar(50) COLLATE Modern_Spanish_CI_AS NOT NULL, [TipoPregunta] varchar(100) COLLATE Modern_Spanish_CS_AS NOT NULL, [EsActivo] bit CONSTRAINT [DF_Tra_TiposPregunta_EsActivo] DEFAULT ((1)) NOT NULL, CONSTRAINT [PK_Tra_TiposPregunta] PRIMARY KEY CLUSTERED ([CveTipoPregunta]), CONSTRAINT [UQ_Tra_TiposPregunta_Codigo] UNIQUE NONCLUSTERED ([Codigo]) ); GO CREATE TABLE [dbo].[Tra_Preguntas] ( [CvePregunta] int IDENTITY(1,1) NOT NULL, [CveTipoPregunta] int NOT NULL, [Pregunta] varchar(500) COLLATE Modern_Spanish_CS_AS NOT NULL, [Descripcion] varchar(1000) COLLATE Modern_Spanish_CS_AS NULL, [EsRequerida] bit CONSTRAINT [DF_Tra_Preguntas_EsRequerida] DEFAULT ((0)) NOT NULL, [Orden] int CONSTRAINT [DF_Tra_Preguntas_Orden] DEFAULT ((0)) NOT NULL, [EsActivo] bit CONSTRAINT [DF_Tra_Preguntas_EsActivo] DEFAULT ((1)) NOT NULL, [FechaAlta] datetime CONSTRAINT [DF_Tra_Preguntas_FechaAlta] DEFAULT (GETDATE()) NOT NULL, [FechaModificacion] datetime NULL, [CveUsuario] int NOT NULL, CONSTRAINT [PK_Tra_Preguntas] PRIMARY KEY CLUSTERED ([CvePregunta]) ); GO CREATE TABLE [dbo].[Tra_OpcionesPregunta] ( [CveOpcionPregunta] int IDENTITY(1,1) NOT NULL, [CvePregunta] int NOT NULL, [TextoOpcion] varchar(300) COLLATE Modern_Spanish_CS_AS NOT NULL, [ValorOpcion] varchar(300) COLLATE Modern_Spanish_CS_AS NULL, [Orden] int CONSTRAINT [DF_Tra_OpcionesPregunta_Orden] DEFAULT ((0)) NOT NULL, [EsActivo] bit CONSTRAINT [DF_Tra_OpcionesPregunta_EsActivo] DEFAULT ((1)) NOT NULL, CONSTRAINT [PK_Tra_OpcionesPregunta] PRIMARY KEY CLUSTERED ([CveOpcionPregunta]), CONSTRAINT [UQ_Tra_OpcionesPregunta_Pregunta_Texto] UNIQUE NONCLUSTERED ([CvePregunta], [TextoOpcion]) ); GO /* ==================== SOLICITUDES Y FLUJO ==================== */ CREATE TABLE [dbo].[Tra_Solicitudes] ( [CveSolicitud] int IDENTITY(1,1) NOT NULL, [Folio] varchar(50) COLLATE Modern_Spanish_CS_AS NOT NULL, [CveCliente] int NOT NULL, [CveFraccionamiento] int NOT NULL, [CveFraccionamientoEtapa] int NOT NULL, [CveTipoTramite] int NOT NULL, [CveEstatusSolicitud] int NOT NULL, [CveUsuarioSolicita] int NULL, [FechaInicio] datetime NULL, [FechaEnvio] datetime NULL, [FechaAutorizacion] datetime NULL, [FechaRechazo] datetime NULL, [ComentariosCliente] varchar(max) COLLATE Modern_Spanish_CS_AS NULL, [ComentariosAdministrativos] varchar(max) COLLATE Modern_Spanish_CS_AS NULL, [FechaAlta] datetime CONSTRAINT [DF_Tra_Solicitudes_FechaAlta] DEFAULT (GETDATE()) NOT NULL, [FechaModificacion] datetime NULL, CONSTRAINT [PK_Tra_Solicitudes] PRIMARY KEY CLUSTERED ([CveSolicitud]), CONSTRAINT [UQ_Tra_Solicitudes_Folio] UNIQUE NONCLUSTERED ([Folio]), CONSTRAINT [UQ_Tra_Solicitudes_Etapa_TipoTramite] UNIQUE NONCLUSTERED ([CveFraccionamientoEtapa], [CveTipoTramite]) ); GO CREATE TABLE [dbo].[Tra_SolicitudesDependencias] ( [CveSolicitudDependencia] int IDENTITY(1,1) NOT NULL, [CveSolicitud] int NOT NULL, [CveSolicitudRequerida] int NOT NULL, [EsObligatoria] bit CONSTRAINT [DF_Tra_SolicitudesDependencias_EsObligatoria] DEFAULT ((1)) NOT NULL, [Condicion] varchar(500) COLLATE Modern_Spanish_CS_AS NULL, [FechaAlta] datetime CONSTRAINT [DF_Tra_SolicitudesDependencias_FechaAlta] DEFAULT (GETDATE()) NOT NULL, [CveUsuario] int NOT NULL, CONSTRAINT [PK_Tra_SolicitudesDependencias] PRIMARY KEY CLUSTERED ([CveSolicitudDependencia]), CONSTRAINT [UQ_Tra_SolicitudesDependencias] UNIQUE NONCLUSTERED ([CveSolicitud], [CveSolicitudRequerida]), CONSTRAINT [CK_Tra_SolicitudesDependencias_Diferentes] CHECK ([CveSolicitud] <> [CveSolicitudRequerida]) ); GO CREATE TABLE [dbo].[Tra_HistorialEstatusSolicitud] ( [CveHistorialEstatusSolicitud] int IDENTITY(1,1) NOT NULL, [CveSolicitud] int NOT NULL, [CveEstatusSolicitud] int NOT NULL, [CveUsuario] int NULL, [Comentarios] varchar(1000) COLLATE Modern_Spanish_CS_AS NULL, [FechaAlta] datetime CONSTRAINT [DF_Tra_HistorialEstatusSolicitud_FechaAlta] DEFAULT (GETDATE()) NOT NULL, CONSTRAINT [PK_Tra_HistorialEstatusSolicitud] PRIMARY KEY CLUSTERED ([CveHistorialEstatusSolicitud]) ); GO CREATE TABLE [dbo].[Tra_DocumentosRequeridos] ( [CveDocumentoRequerido] int IDENTITY(1,1) NOT NULL, [CveTipoTramite] int NOT NULL, [CveTipoDocumento] int NOT NULL, [EsRequerido] bit CONSTRAINT [DF_Tra_DocumentosRequeridos_EsRequerido] DEFAULT ((1)) NOT NULL, [Orden] int CONSTRAINT [DF_Tra_DocumentosRequeridos_Orden] DEFAULT ((0)) NOT NULL, [EsActivo] bit CONSTRAINT [DF_Tra_DocumentosRequeridos_EsActivo] DEFAULT ((1)) NOT NULL, CONSTRAINT [PK_Tra_DocumentosRequeridos] PRIMARY KEY CLUSTERED ([CveDocumentoRequerido]), CONSTRAINT [UQ_Tra_DocumentosRequeridos] UNIQUE NONCLUSTERED ([CveTipoTramite], [CveTipoDocumento]) ); GO CREATE TABLE [dbo].[Tra_DocumentosSolicitud] ( [CveDocumentoSolicitud] int IDENTITY(1,1) NOT NULL, [CveSolicitud] int NOT NULL, [CveTipoDocumento] int NOT NULL, [NombreArchivo] varchar(255) COLLATE Modern_Spanish_CS_AS NOT NULL, [NombreArchivoFisico] varchar(255) COLLATE Modern_Spanish_CS_AS NOT NULL, [RutaArchivo] varchar(1000) COLLATE Modern_Spanish_CS_AS NOT NULL, [ContentType] varchar(100) COLLATE Modern_Spanish_CS_AS NULL, [TamanoBytes] bigint NULL, [ComentarioCliente] varchar(1000) COLLATE Modern_Spanish_CS_AS NULL, [ComentarioAdministrativo] varchar(1000) COLLATE Modern_Spanish_CS_AS NULL, [EsAprobado] bit NULL, [CveUsuarioCarga] int NULL, [CveUsuarioRevisa] int NULL, [FechaRevision] datetime NULL, [FechaAlta] datetime CONSTRAINT [DF_Tra_DocumentosSolicitud_FechaAlta] DEFAULT (GETDATE()) NOT NULL, CONSTRAINT [PK_Tra_DocumentosSolicitud] PRIMARY KEY CLUSTERED ([CveDocumentoSolicitud]), CONSTRAINT [CK_Tra_DocumentosSolicitud_Tamano] CHECK ([TamanoBytes] IS NULL OR [TamanoBytes] >= (0)) ); GO CREATE TABLE [dbo].[Tra_PreguntasTramite] ( [CvePreguntaTramite] int IDENTITY(1,1) NOT NULL, [CveTipoTramite] int NOT NULL, [CvePregunta] int NOT NULL, [EsRequerida] bit CONSTRAINT [DF_Tra_PreguntasTramite_EsRequerida] DEFAULT ((0)) NOT NULL, [Orden] int CONSTRAINT [DF_Tra_PreguntasTramite_Orden] DEFAULT ((0)) NOT NULL, [EsActivo] bit CONSTRAINT [DF_Tra_PreguntasTramite_EsActivo] DEFAULT ((1)) NOT NULL, CONSTRAINT [PK_Tra_PreguntasTramite] PRIMARY KEY CLUSTERED ([CvePreguntaTramite]), CONSTRAINT [UQ_Tra_PreguntasTramite] UNIQUE NONCLUSTERED ([CveTipoTramite], [CvePregunta]) ); GO CREATE TABLE [dbo].[Tra_RespuestasSolicitud] ( [CveRespuestaSolicitud] int IDENTITY(1,1) NOT NULL, [CveSolicitud] int NOT NULL, [CvePregunta] int NOT NULL, [CveOpcionPregunta] int NULL, [Valor] varchar(max) COLLATE Modern_Spanish_CS_AS NULL, [FechaAlta] datetime CONSTRAINT [DF_Tra_RespuestasSolicitud_FechaAlta] DEFAULT (GETDATE()) NOT NULL, [FechaModificacion] datetime NULL, [CveUsuario] int NULL, CONSTRAINT [PK_Tra_RespuestasSolicitud] PRIMARY KEY CLUSTERED ([CveRespuestaSolicitud]), CONSTRAINT [CK_Tra_RespuestasSolicitud_Valor] CHECK ([CveOpcionPregunta] IS NOT NULL OR [Valor] IS NOT NULL) ); GO CREATE TABLE [dbo].[Tra_CostosTramite] ( [CveCostoTramite] int IDENTITY(1,1) NOT NULL, [CveTipoTramite] int NOT NULL, [CvePS] int NOT NULL, [CveMoneda] int NOT NULL, [Descripcion] varchar(300) COLLATE Modern_Spanish_CS_AS NOT NULL, [Importe] decimal(18,2) CONSTRAINT [DF_Tra_CostosTramite_Importe] DEFAULT ((0)) NOT NULL, [FechaInicioVigencia] date NULL, [FechaFinVigencia] date NULL, [EsActivo] bit CONSTRAINT [DF_Tra_CostosTramite_EsActivo] DEFAULT ((1)) NOT NULL, [FechaAlta] datetime CONSTRAINT [DF_Tra_CostosTramite_FechaAlta] DEFAULT (GETDATE()) NOT NULL, [FechaModificacion] datetime NULL, [CveUsuario] int NOT NULL, CONSTRAINT [PK_Tra_CostosTramite] PRIMARY KEY CLUSTERED ([CveCostoTramite]), CONSTRAINT [UQ_Tra_CostosTramite_Tipo_Producto_Inicio] UNIQUE NONCLUSTERED ([CveTipoTramite], [CvePS], [FechaInicioVigencia]), CONSTRAINT [CK_Tra_CostosTramite_Importe] CHECK ([Importe] >= (0)), CONSTRAINT [CK_Tra_CostosTramite_Vigencia] CHECK ([FechaFinVigencia] IS NULL OR [FechaInicioVigencia] IS NULL OR [FechaFinVigencia] >= [FechaInicioVigencia]) ); GO CREATE TABLE [dbo].[Tra_NotasSolicitud] ( [CveNotaSolicitud] int IDENTITY(1,1) NOT NULL, [CveSolicitud] int NOT NULL, [CveUsuario] int NULL, [TipoNota] varchar(50) COLLATE Modern_Spanish_CS_AS CONSTRAINT [DF_Tra_NotasSolicitud_TipoNota] DEFAULT ('General') NOT NULL, [Comentario] varchar(max) COLLATE Modern_Spanish_CS_AS NOT NULL, [EsVisibleParaCliente] bit CONSTRAINT [DF_Tra_NotasSolicitud_Visible] DEFAULT ((1)) NOT NULL, [FechaAlta] datetime CONSTRAINT [DF_Tra_NotasSolicitud_FechaAlta] DEFAULT (GETDATE()) NOT NULL, CONSTRAINT [PK_Tra_NotasSolicitud] PRIMARY KEY CLUSTERED ([CveNotaSolicitud]) ); GO /* ==================== VENTAS, PAGOS Y SALDO A FAVOR ==================== */ CREATE TABLE [dbo].[VentasDetalle] ( [CveVentaDetalle] int IDENTITY(1,1) NOT NULL, [CveVenta] int NOT NULL, [CvePS] int NOT NULL, [CveSolicitud] int NULL, [CveCostoTramite] int NULL, [Cantidad] decimal(18,4) CONSTRAINT [DF_VentasDetalle_Cantidad] DEFAULT ((1)) NOT NULL, [PrecioUnitario] decimal(18,2) CONSTRAINT [DF_VentasDetalle_PrecioUnitario] DEFAULT ((0)) NOT NULL, [Descuento] decimal(18,2) CONSTRAINT [DF_VentasDetalle_Descuento] DEFAULT ((0)) NOT NULL, [IVA] decimal(18,2) CONSTRAINT [DF_VentasDetalle_IVA] DEFAULT ((0)) NOT NULL, [Importe] decimal(18,2) CONSTRAINT [DF_VentasDetalle_Importe] DEFAULT ((0)) NOT NULL, [EsFondoInicial] bit CONSTRAINT [DF_VentasDetalle_EsFondoInicial] DEFAULT ((0)) NOT NULL, [FechaAlta] datetime CONSTRAINT [DF_VentasDetalle_FechaAlta] DEFAULT (GETDATE()) NOT NULL, [CveUsuario] int NOT NULL, CONSTRAINT [PK_VentasDetalle] PRIMARY KEY CLUSTERED ([CveVentaDetalle]), CONSTRAINT [CK_VentasDetalle_Importes] CHECK ([Cantidad] > (0) AND [PrecioUnitario] >= (0) AND [Descuento] >= (0) AND [IVA] >= (0) AND [Importe] >= (0)), CONSTRAINT [CK_VentasDetalle_FondoInicial] CHECK ([EsFondoInicial] = (0) OR ([CveSolicitud] IS NULL AND [CveCostoTramite] IS NULL)) ); GO CREATE TABLE [dbo].[Vta_Pagos] ( [CvePago] int IDENTITY(1,1) NOT NULL, [CveCliente] int NOT NULL, [CveVenta] int NOT NULL, [CveSolicitud] int NULL, [CveFormaPago] tinyint NOT NULL, [CveMoneda] int NOT NULL, [CvePrePoliza] int NULL, [FechaPago] datetime NOT NULL, [Importe] decimal(18,2) NOT NULL, [Referencia] varchar(200) COLLATE Modern_Spanish_CS_AS NULL, [EsSaldoFavor] bit CONSTRAINT [DF_Vta_Pagos_EsSaldoFavor] DEFAULT ((0)) NOT NULL, [EsActivo] bit CONSTRAINT [DF_Vta_Pagos_EsActivo] DEFAULT ((1)) NOT NULL, [FechaAlta] datetime CONSTRAINT [DF_Vta_Pagos_FechaAlta] DEFAULT (GETDATE()) NOT NULL, [CveUsuario] int NOT NULL, CONSTRAINT [PK_Vta_Pagos] PRIMARY KEY CLUSTERED ([CvePago]), CONSTRAINT [CK_Vta_Pagos_Importe] CHECK ([Importe] > (0)), CONSTRAINT [CK_Vta_Pagos_SaldoFavor] CHECK ([EsSaldoFavor] = (0) OR [CveSolicitud] IS NULL) ); GO CREATE TABLE [dbo].[Vta_AplicacionesSaldoFavor] ( [CveAplicacionSaldoFavor] int IDENTITY(1,1) NOT NULL, [CvePagoOrigen] int NOT NULL, [CveVentaDestino] int NOT NULL, [CveVentaDetalleDestino] int NULL, [CveSolicitud] int NOT NULL, [CvePrePoliza] int NULL, [Importe] decimal(18,2) NOT NULL, [FechaAplicacion] datetime CONSTRAINT [DF_Vta_AplicacionesSaldoFavor_Fecha] DEFAULT (GETDATE()) NOT NULL, [EsActivo] bit CONSTRAINT [DF_Vta_AplicacionesSaldoFavor_EsActivo] DEFAULT ((1)) NOT NULL, [CveUsuario] int NOT NULL, CONSTRAINT [PK_Vta_AplicacionesSaldoFavor] PRIMARY KEY CLUSTERED ([CveAplicacionSaldoFavor]), CONSTRAINT [CK_Vta_AplicacionesSaldoFavor_Importe] CHECK ([Importe] > (0)) ); GO /* Relación exacta entre los renglones contables y el movimiento que los originó. */ ALTER TABLE [dbo].[Conta_PrePolizasDetalle] ADD [CveSolicitud] int NULL, [CvePago] int NULL, [CveAplicacionSaldoFavor] int NULL; GO /* ==================== LLAVES FORÁNEAS ==================== */ ALTER TABLE [dbo].[Fraccionamientos] ADD CONSTRAINT [FK_Fraccionamientos_Clientes] FOREIGN KEY ([CveCliente]) REFERENCES [dbo].[Clientes] ([CveCliente]); GO ALTER TABLE [dbo].[Fraccionamientos] ADD CONSTRAINT [FK_Fraccionamientos_Sis_Usuarios] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[FraccionamientosEtapas] ADD CONSTRAINT [FK_FraccionamientosEtapas_Fraccionamientos] FOREIGN KEY ([CveFraccionamiento]) REFERENCES [dbo].[Fraccionamientos] ([CveFraccionamiento]); GO ALTER TABLE [dbo].[FraccionamientosEtapas] ADD CONSTRAINT [FK_FraccionamientosEtapas_Sis_Usuarios] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[FraccionamientosLotes] ADD CONSTRAINT [FK_FraccionamientosLotes_FraccionamientosEtapas] FOREIGN KEY ([CveFraccionamientoEtapa]) REFERENCES [dbo].[FraccionamientosEtapas] ([CveFraccionamientoEtapa]); GO ALTER TABLE [dbo].[FraccionamientosLotes] ADD CONSTRAINT [FK_FraccionamientosLotes_Sis_Usuarios] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[Tra_TiposTramite] ADD CONSTRAINT [FK_Tra_TiposTramite_Sis_Usuarios] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[Tra_TiposDocumento] ADD CONSTRAINT [FK_Tra_TiposDocumento_Sis_Usuarios] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[Tra_Preguntas] ADD CONSTRAINT [FK_Tra_Preguntas_Tra_TiposPregunta] FOREIGN KEY ([CveTipoPregunta]) REFERENCES [dbo].[Tra_TiposPregunta] ([CveTipoPregunta]); GO ALTER TABLE [dbo].[Tra_Preguntas] ADD CONSTRAINT [FK_Tra_Preguntas_Sis_Usuarios] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[Tra_OpcionesPregunta] ADD CONSTRAINT [FK_Tra_OpcionesPregunta_Tra_Preguntas] FOREIGN KEY ([CvePregunta]) REFERENCES [dbo].[Tra_Preguntas] ([CvePregunta]); GO ALTER TABLE [dbo].[Tra_Solicitudes] ADD CONSTRAINT [FK_Tra_Solicitudes_Clientes] FOREIGN KEY ([CveCliente]) REFERENCES [dbo].[Clientes] ([CveCliente]); GO ALTER TABLE [dbo].[Tra_Solicitudes] ADD CONSTRAINT [FK_Tra_Solicitudes_Fraccionamientos_Cliente] FOREIGN KEY ([CveFraccionamiento], [CveCliente]) REFERENCES [dbo].[Fraccionamientos] ([CveFraccionamiento], [CveCliente]); GO ALTER TABLE [dbo].[Tra_Solicitudes] ADD CONSTRAINT [FK_Tra_Solicitudes_FraccionamientosEtapas] FOREIGN KEY ([CveFraccionamientoEtapa], [CveFraccionamiento]) REFERENCES [dbo].[FraccionamientosEtapas] ([CveFraccionamientoEtapa], [CveFraccionamiento]); GO ALTER TABLE [dbo].[Tra_Solicitudes] ADD CONSTRAINT [FK_Tra_Solicitudes_Tra_TiposTramite] FOREIGN KEY ([CveTipoTramite]) REFERENCES [dbo].[Tra_TiposTramite] ([CveTipoTramite]); GO ALTER TABLE [dbo].[Tra_Solicitudes] ADD CONSTRAINT [FK_Tra_Solicitudes_Tra_EstatusSolicitud] FOREIGN KEY ([CveEstatusSolicitud]) REFERENCES [dbo].[Tra_EstatusSolicitud] ([CveEstatusSolicitud]); GO ALTER TABLE [dbo].[Tra_Solicitudes] ADD CONSTRAINT [FK_Tra_Solicitudes_Sis_Usuarios] FOREIGN KEY ([CveUsuarioSolicita]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[Tra_SolicitudesDependencias] ADD CONSTRAINT [FK_Tra_SolicitudesDependencias_Solicitud] FOREIGN KEY ([CveSolicitud]) REFERENCES [dbo].[Tra_Solicitudes] ([CveSolicitud]); GO ALTER TABLE [dbo].[Tra_SolicitudesDependencias] ADD CONSTRAINT [FK_Tra_SolicitudesDependencias_Requerida] FOREIGN KEY ([CveSolicitudRequerida]) REFERENCES [dbo].[Tra_Solicitudes] ([CveSolicitud]); GO ALTER TABLE [dbo].[Tra_SolicitudesDependencias] ADD CONSTRAINT [FK_Tra_SolicitudesDependencias_Sis_Usuarios] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[Tra_HistorialEstatusSolicitud] ADD CONSTRAINT [FK_Tra_HistorialEstatusSolicitud_Solicitudes] FOREIGN KEY ([CveSolicitud]) REFERENCES [dbo].[Tra_Solicitudes] ([CveSolicitud]); GO ALTER TABLE [dbo].[Tra_HistorialEstatusSolicitud] ADD CONSTRAINT [FK_Tra_HistorialEstatusSolicitud_Estatus] FOREIGN KEY ([CveEstatusSolicitud]) REFERENCES [dbo].[Tra_EstatusSolicitud] ([CveEstatusSolicitud]); GO ALTER TABLE [dbo].[Tra_HistorialEstatusSolicitud] ADD CONSTRAINT [FK_Tra_HistorialEstatusSolicitud_Sis_Usuarios] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[Tra_DocumentosRequeridos] ADD CONSTRAINT [FK_Tra_DocumentosRequeridos_TiposTramite] FOREIGN KEY ([CveTipoTramite]) REFERENCES [dbo].[Tra_TiposTramite] ([CveTipoTramite]); GO ALTER TABLE [dbo].[Tra_DocumentosRequeridos] ADD CONSTRAINT [FK_Tra_DocumentosRequeridos_TiposDocumento] FOREIGN KEY ([CveTipoDocumento]) REFERENCES [dbo].[Tra_TiposDocumento] ([CveTipoDocumento]); GO ALTER TABLE [dbo].[Tra_DocumentosSolicitud] ADD CONSTRAINT [FK_Tra_DocumentosSolicitud_Solicitudes] FOREIGN KEY ([CveSolicitud]) REFERENCES [dbo].[Tra_Solicitudes] ([CveSolicitud]); GO ALTER TABLE [dbo].[Tra_DocumentosSolicitud] ADD CONSTRAINT [FK_Tra_DocumentosSolicitud_TiposDocumento] FOREIGN KEY ([CveTipoDocumento]) REFERENCES [dbo].[Tra_TiposDocumento] ([CveTipoDocumento]); GO ALTER TABLE [dbo].[Tra_DocumentosSolicitud] ADD CONSTRAINT [FK_Tra_DocumentosSolicitud_UsuarioCarga] FOREIGN KEY ([CveUsuarioCarga]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[Tra_DocumentosSolicitud] ADD CONSTRAINT [FK_Tra_DocumentosSolicitud_UsuarioRevisa] FOREIGN KEY ([CveUsuarioRevisa]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[Tra_PreguntasTramite] ADD CONSTRAINT [FK_Tra_PreguntasTramite_TiposTramite] FOREIGN KEY ([CveTipoTramite]) REFERENCES [dbo].[Tra_TiposTramite] ([CveTipoTramite]); GO ALTER TABLE [dbo].[Tra_PreguntasTramite] ADD CONSTRAINT [FK_Tra_PreguntasTramite_Preguntas] FOREIGN KEY ([CvePregunta]) REFERENCES [dbo].[Tra_Preguntas] ([CvePregunta]); GO ALTER TABLE [dbo].[Tra_RespuestasSolicitud] ADD CONSTRAINT [FK_Tra_RespuestasSolicitud_Solicitudes] FOREIGN KEY ([CveSolicitud]) REFERENCES [dbo].[Tra_Solicitudes] ([CveSolicitud]); GO ALTER TABLE [dbo].[Tra_RespuestasSolicitud] ADD CONSTRAINT [FK_Tra_RespuestasSolicitud_Preguntas] FOREIGN KEY ([CvePregunta]) REFERENCES [dbo].[Tra_Preguntas] ([CvePregunta]); GO ALTER TABLE [dbo].[Tra_RespuestasSolicitud] ADD CONSTRAINT [FK_Tra_RespuestasSolicitud_Opciones] FOREIGN KEY ([CveOpcionPregunta]) REFERENCES [dbo].[Tra_OpcionesPregunta] ([CveOpcionPregunta]); GO ALTER TABLE [dbo].[Tra_RespuestasSolicitud] ADD CONSTRAINT [FK_Tra_RespuestasSolicitud_Sis_Usuarios] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[Tra_CostosTramite] ADD CONSTRAINT [FK_Tra_CostosTramite_TiposTramite] FOREIGN KEY ([CveTipoTramite]) REFERENCES [dbo].[Tra_TiposTramite] ([CveTipoTramite]); GO ALTER TABLE [dbo].[Tra_CostosTramite] ADD CONSTRAINT [FK_Tra_CostosTramite_ProductosServicios] FOREIGN KEY ([CvePS]) REFERENCES [dbo].[ProductosServicios] ([CvePS]); GO ALTER TABLE [dbo].[Tra_CostosTramite] ADD CONSTRAINT [FK_Tra_CostosTramite_Gral_Monedas] FOREIGN KEY ([CveMoneda]) REFERENCES [dbo].[Gral_Monedas] ([CveMoneda]); GO ALTER TABLE [dbo].[Tra_CostosTramite] ADD CONSTRAINT [FK_Tra_CostosTramite_Sis_Usuarios] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[Tra_NotasSolicitud] ADD CONSTRAINT [FK_Tra_NotasSolicitud_Solicitudes] FOREIGN KEY ([CveSolicitud]) REFERENCES [dbo].[Tra_Solicitudes] ([CveSolicitud]); GO ALTER TABLE [dbo].[Tra_NotasSolicitud] ADD CONSTRAINT [FK_Tra_NotasSolicitud_Sis_Usuarios] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[VentasDetalle] ADD CONSTRAINT [FK_VentasDetalle_Ventas] FOREIGN KEY ([CveVenta]) REFERENCES [dbo].[Ventas] ([CveVenta]); GO ALTER TABLE [dbo].[VentasDetalle] ADD CONSTRAINT [FK_VentasDetalle_ProductosServicios] FOREIGN KEY ([CvePS]) REFERENCES [dbo].[ProductosServicios] ([CvePS]); GO ALTER TABLE [dbo].[VentasDetalle] ADD CONSTRAINT [FK_VentasDetalle_Tra_Solicitudes] FOREIGN KEY ([CveSolicitud]) REFERENCES [dbo].[Tra_Solicitudes] ([CveSolicitud]); GO ALTER TABLE [dbo].[VentasDetalle] ADD CONSTRAINT [FK_VentasDetalle_Tra_CostosTramite] FOREIGN KEY ([CveCostoTramite]) REFERENCES [dbo].[Tra_CostosTramite] ([CveCostoTramite]); GO ALTER TABLE [dbo].[VentasDetalle] ADD CONSTRAINT [FK_VentasDetalle_Sis_Usuarios] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[Vta_Pagos] ADD CONSTRAINT [FK_Vta_Pagos_Clientes] FOREIGN KEY ([CveCliente]) REFERENCES [dbo].[Clientes] ([CveCliente]); GO ALTER TABLE [dbo].[Vta_Pagos] ADD CONSTRAINT [FK_Vta_Pagos_Ventas] FOREIGN KEY ([CveVenta]) REFERENCES [dbo].[Ventas] ([CveVenta]); GO ALTER TABLE [dbo].[Vta_Pagos] ADD CONSTRAINT [FK_Vta_Pagos_Tra_Solicitudes] FOREIGN KEY ([CveSolicitud]) REFERENCES [dbo].[Tra_Solicitudes] ([CveSolicitud]); GO ALTER TABLE [dbo].[Vta_Pagos] ADD CONSTRAINT [FK_Vta_Pagos_Vta_FormaPago] FOREIGN KEY ([CveFormaPago]) REFERENCES [dbo].[Vta_FormaPago] ([CveFormaPago]); GO ALTER TABLE [dbo].[Vta_Pagos] ADD CONSTRAINT [FK_Vta_Pagos_Gral_Monedas] FOREIGN KEY ([CveMoneda]) REFERENCES [dbo].[Gral_Monedas] ([CveMoneda]); GO ALTER TABLE [dbo].[Vta_Pagos] ADD CONSTRAINT [FK_Vta_Pagos_Conta_PrePolizas] FOREIGN KEY ([CvePrePoliza]) REFERENCES [dbo].[Conta_PrePolizas] ([CvePrePoliza]); GO ALTER TABLE [dbo].[Vta_Pagos] ADD CONSTRAINT [FK_Vta_Pagos_Sis_Usuarios] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[Vta_AplicacionesSaldoFavor] ADD CONSTRAINT [FK_Vta_AplicacionesSaldoFavor_PagoOrigen] FOREIGN KEY ([CvePagoOrigen]) REFERENCES [dbo].[Vta_Pagos] ([CvePago]); GO ALTER TABLE [dbo].[Vta_AplicacionesSaldoFavor] ADD CONSTRAINT [FK_Vta_AplicacionesSaldoFavor_VentaDestino] FOREIGN KEY ([CveVentaDestino]) REFERENCES [dbo].[Ventas] ([CveVenta]); GO ALTER TABLE [dbo].[Vta_AplicacionesSaldoFavor] ADD CONSTRAINT [FK_Vta_AplicacionesSaldoFavor_DetalleDestino] FOREIGN KEY ([CveVentaDetalleDestino]) REFERENCES [dbo].[VentasDetalle] ([CveVentaDetalle]); GO ALTER TABLE [dbo].[Vta_AplicacionesSaldoFavor] ADD CONSTRAINT [FK_Vta_AplicacionesSaldoFavor_Solicitud] FOREIGN KEY ([CveSolicitud]) REFERENCES [dbo].[Tra_Solicitudes] ([CveSolicitud]); GO ALTER TABLE [dbo].[Vta_AplicacionesSaldoFavor] ADD CONSTRAINT [FK_Vta_AplicacionesSaldoFavor_PrePoliza] FOREIGN KEY ([CvePrePoliza]) REFERENCES [dbo].[Conta_PrePolizas] ([CvePrePoliza]); GO ALTER TABLE [dbo].[Vta_AplicacionesSaldoFavor] ADD CONSTRAINT [FK_Vta_AplicacionesSaldoFavor_Sis_Usuarios] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]); GO ALTER TABLE [dbo].[Conta_PrePolizasDetalle] ADD CONSTRAINT [FK_Conta_PrePolizasDetalle_Tra_Solicitudes] FOREIGN KEY ([CveSolicitud]) REFERENCES [dbo].[Tra_Solicitudes] ([CveSolicitud]); GO ALTER TABLE [dbo].[Conta_PrePolizasDetalle] ADD CONSTRAINT [FK_Conta_PrePolizasDetalle_Vta_Pagos] FOREIGN KEY ([CvePago]) REFERENCES [dbo].[Vta_Pagos] ([CvePago]); GO ALTER TABLE [dbo].[Conta_PrePolizasDetalle] ADD CONSTRAINT [FK_Conta_PrePolizasDetalle_Vta_AplicacionesSaldoFavor] FOREIGN KEY ([CveAplicacionSaldoFavor]) REFERENCES [dbo].[Vta_AplicacionesSaldoFavor] ([CveAplicacionSaldoFavor]); GO /* ==================== ÍNDICES DE OPERACIÓN ==================== */ CREATE NONCLUSTERED INDEX [IX_Tra_Solicitudes_Cliente_Fraccionamiento_Etapa] ON [dbo].[Tra_Solicitudes] ([CveCliente], [CveFraccionamiento], [CveFraccionamientoEtapa]); GO CREATE NONCLUSTERED INDEX [IX_Tra_Solicitudes_Estatus] ON [dbo].[Tra_Solicitudes] ([CveEstatusSolicitud], [FechaAlta]); GO CREATE NONCLUSTERED INDEX [IX_Tra_HistorialEstatusSolicitud_Solicitud_Fecha] ON [dbo].[Tra_HistorialEstatusSolicitud] ([CveSolicitud], [FechaAlta]); GO CREATE NONCLUSTERED INDEX [IX_VentasDetalle_Solicitud] ON [dbo].[VentasDetalle] ([CveSolicitud]) INCLUDE ([CveVenta], [CvePS], [Importe]); GO CREATE NONCLUSTERED INDEX [IX_Vta_Pagos_Cliente_Venta] ON [dbo].[Vta_Pagos] ([CveCliente], [CveVenta], [EsActivo]); GO CREATE NONCLUSTERED INDEX [IX_Vta_AplicacionesSaldoFavor_PagoOrigen] ON [dbo].[Vta_AplicacionesSaldoFavor] ([CvePagoOrigen], [EsActivo]) INCLUDE ([Importe], [CveSolicitud]); GO /* El saldo nunca se almacena: se calcula del pago recibido menos sus aplicaciones activas. */ CREATE VIEW [dbo].[Vta_SaldosFavor] AS SELECT P.[CvePago], P.[CveCliente], P.[CveVenta], P.[CveMoneda], P.[Importe] AS [ImporteRecibido], ISNULL(SUM(CASE WHEN A.[EsActivo] = (1) THEN A.[Importe] ELSE (0) END), (0)) AS [ImporteAplicado], P.[Importe] - ISNULL(SUM(CASE WHEN A.[EsActivo] = (1) THEN A.[Importe] ELSE (0) END), (0)) AS [SaldoDisponible] FROM [dbo].[Vta_Pagos] AS P LEFT JOIN [dbo].[Vta_AplicacionesSaldoFavor] AS A ON A.[CvePagoOrigen] = P.[CvePago] WHERE P.[EsSaldoFavor] = (1) AND P.[EsActivo] = (1) GROUP BY P.[CvePago], P.[CveCliente], P.[CveVenta], P.[CveMoneda], P.[Importe]; GO