-- =====================================================================
-- InmoCore v2.2 — SQL maestro completo (production-ready)
-- Incluye: sistema completo + proyectos, manzanas, lotes numericos y datos demo
--          + logotipo por proyecto + balances independientes por proyecto
--          + modulo de apartados previos a vinculacion + demo actualizada
--          + finanzas, contratos, pagos, caja chica, roles, integraciones y auditoria
--
-- Compatible con MySQL 5.7+ / MariaDB 10.3+ / MySQL 8.x
-- Charset: utf8mb4 / utf8mb4_unicode_ci
-- =====================================================================

-- Importa este archivo dentro de la base de datos que creaste en tu hosting.
-- No incluye CREATE DATABASE ni USE para evitar instalarlo en una BD incorrecta.

SET SESSION sql_mode='';

-- Drop en orden inverso de dependencias
-- (FOREIGN_KEY_CHECKS se reactiva hasta el final del archivo, despues de crear
--  todas las tablas e insertar los datos, para evitar errores por orden de FK.)

-- =====================================================================
-- LARAVEL FRAMEWORK
-- =====================================================================

CREATE TABLE migrations (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  migration VARCHAR(255) NOT NULL,
  batch INT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE sessions (
  id VARCHAR(191) PRIMARY KEY,
  user_id BIGINT UNSIGNED NULL,
  ip_address VARCHAR(45) NULL,
  user_agent TEXT NULL,
  payload LONGTEXT NOT NULL,
  last_activity INT NOT NULL,
  INDEX sessions_user_id_index (user_id),
  INDEX sessions_last_activity_index (last_activity)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE cache (
  `key` VARCHAR(191) PRIMARY KEY,
  value MEDIUMTEXT NOT NULL,
  expiration INT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE jobs (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  queue VARCHAR(191) NOT NULL,
  payload LONGTEXT NOT NULL,
  attempts TINYINT UNSIGNED NOT NULL,
  reserved_at INT UNSIGNED NULL,
  available_at INT UNSIGNED NOT NULL,
  created_at INT UNSIGNED NOT NULL,
  INDEX jobs_queue_index (queue)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE failed_jobs (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  uuid VARCHAR(191) NOT NULL UNIQUE,
  connection TEXT NOT NULL,
  queue TEXT NOT NULL,
  payload LONGTEXT NOT NULL,
  exception LONGTEXT NOT NULL,
  failed_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =====================================================================
-- MULTI-TENANCY + BRANDING + ROLES
-- =====================================================================

CREATE TABLE tenants (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(120) NOT NULL,
  slug VARCHAR(80) NOT NULL UNIQUE,
  subdomain VARCHAR(80) NULL UNIQUE,
  logo_path VARCHAR(255) NULL,
  accent_color VARCHAR(20) NOT NULL DEFAULT '#c9a84c',
  contact_email VARCHAR(160) NULL,
  contact_phone VARCHAR(30) NULL,
  rfc VARCHAR(13) NULL,
  plan VARCHAR(40) NOT NULL DEFAULT 'starter',
  is_active TINYINT(1) NOT NULL DEFAULT 1,
  trial_ends_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE roles (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(80) NOT NULL UNIQUE,
  display_name VARCHAR(120) NOT NULL,
  description VARCHAR(250) NULL,
  color VARCHAR(20) NOT NULL DEFAULT '#c9a84c',
  permissions LONGTEXT NULL,
  is_system TINYINT(1) NOT NULL DEFAULT 0,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =====================================================================
-- NUCLEO INMOBILIARIO
-- =====================================================================

CREATE TABLE advisors (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  name VARCHAR(191) NOT NULL,
  email VARCHAR(191) NULL,
  phone VARCHAR(30) NULL,
  role VARCHAR(80) NOT NULL DEFAULT 'Asesor',
  status VARCHAR(80) NOT NULL DEFAULT 'En linea',
  monthly_goal DECIMAL(14,2) NOT NULL DEFAULT 0,
  sales_count INT UNSIGNED NOT NULL DEFAULT 0,
  generated_amount DECIMAL(14,2) NOT NULL DEFAULT 0,
  rating DECIMAL(3,1) NOT NULL DEFAULT 0,
  deleted_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX advisors_tenant_id_index (tenant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE projects (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  name VARCHAR(191) NOT NULL,
  depositario VARCHAR(200) NULL,
  depositario_puesto_id BIGINT UNSIGNED NULL,
  location VARCHAR(191) NULL,
  logo_path VARCHAR(500) NULL,
  manzanas INT UNSIGNED NOT NULL DEFAULT 0,
  lotes INT UNSIGNED NOT NULL DEFAULT 0,
  status VARCHAR(80) NOT NULL DEFAULT 'Activo',
  investment DECIMAL(14,2) NOT NULL DEFAULT 0,
  sold_amount DECIMAL(14,2) NOT NULL DEFAULT 0,
  units_total INT UNSIGNED NOT NULL DEFAULT 0,
  units_sold INT UNSIGNED NOT NULL DEFAULT 0,
  starts_on DATE NULL,
  ends_on DATE NULL,
  description TEXT NULL,
  deleted_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX projects_tenant_id_index (tenant_id),
  INDEX projects_depositario_puesto_id_index (depositario_puesto_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE clients (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  advisor_id BIGINT UNSIGNED NULL,
  name VARCHAR(191) NOT NULL,
  nombres VARCHAR(160) NULL,
  primer_apellido VARCHAR(120) NULL,
  segundo_apellido VARCHAR(120) NULL,
  genero VARCHAR(40) NULL,
  lugar_nacimiento VARCHAR(160) NULL,
  fecha_nacimiento DATE NULL,
  phone VARCHAR(30) NULL,
  email VARCHAR(191) NULL,
  rfc VARCHAR(20) NULL,
  curp VARCHAR(18) NULL,
  estado_civil VARCHAR(40) NULL,
  ocupacion VARCHAR(120) NULL,
  domicilio VARCHAR(255) NULL,
  calle VARCHAR(160) NULL,
  numero VARCHAR(40) NULL,
  colonia VARCHAR(120) NULL,
  codigo_postal VARCHAR(10) NULL,
  municipio VARCHAR(120) NULL,
  estado VARCHAR(120) NULL,
  source VARCHAR(100) NULL,
  interest VARCHAR(191) NULL,
  status VARCHAR(80) NOT NULL DEFAULT 'Prospecto',
  notes TEXT NULL,
  last_contact_at TIMESTAMP NULL,
  deleted_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX clients_advisor_id_index (advisor_id),
  INDEX clients_tenant_id_index (tenant_id),
  CONSTRAINT clients_advisor_id_fk FOREIGN KEY (advisor_id) REFERENCES advisors(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE properties (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  project_id BIGINT UNSIGNED NULL,
  advisor_id BIGINT UNSIGNED NULL,
  name VARCHAR(191) NOT NULL,
  slug VARCHAR(160) NULL,
  type VARCHAR(80) NOT NULL DEFAULT 'Casa',
  location VARCHAR(191) NULL,
  latitude DECIMAL(10,7) NULL,
  longitude DECIMAL(10,7) NULL,
  price DECIMAL(14,2) NOT NULL DEFAULT 0,
  area_m2 DECIMAL(10,2) NOT NULL DEFAULT 0,
  bedrooms TINYINT UNSIGNED NULL,
  bathrooms DECIMAL(3,1) NULL,
  parking_spaces TINYINT UNSIGNED NULL,
  year_built SMALLINT UNSIGNED NULL,
  status VARCHAR(80) NOT NULL DEFAULT 'Disponible',
  stage VARCHAR(80) NOT NULL DEFAULT 'Disponible',
  description TEXT NULL,
  video_url VARCHAR(500) NULL,
  tour_360_url VARCHAR(500) NULL,
  amenities LONGTEXT NULL,
  featured TINYINT(1) NOT NULL DEFAULT 0,
  landing_views INT UNSIGNED NOT NULL DEFAULT 0,
  deleted_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  UNIQUE KEY properties_slug_unique (slug),
  INDEX properties_project_id_index (project_id),
  INDEX properties_advisor_id_index (advisor_id),
  INDEX properties_tenant_id_index (tenant_id),
  CONSTRAINT properties_project_id_fk FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE customer_accounts (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  client_id BIGINT UNSIGNED NOT NULL,
  property_id BIGINT UNSIGNED NULL,
  lote_id BIGINT UNSIGNED NULL,
  payment_type VARCHAR(20) NULL,
  total_price DECIMAL(14,2) NOT NULL DEFAULT 0,
  term_months SMALLINT UNSIGNED NULL,
  monthly_payment DECIMAL(14,2) NULL,
  plan_type VARCHAR(30) NULL,
  annuity_amount DECIMAL(14,2) NULL,
  annuity_due_date DATE NULL,
  reservation_expires_on DATE NULL,
  paid_amount DECIMAL(14,2) NOT NULL DEFAULT 0,
  next_payment_amount DECIMAL(14,2) NULL,
  next_payment_due_on DATE NULL,
  status VARCHAR(80) NOT NULL DEFAULT 'Al corriente',
  deleted_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX customer_accounts_client_id_index (client_id),
  INDEX customer_accounts_property_id_index (property_id),
  INDEX customer_accounts_lote_id_index (lote_id),
  INDEX customer_accounts_tenant_id_index (tenant_id),
  CONSTRAINT customer_accounts_client_id_fk FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE CASCADE,
  CONSTRAINT customer_accounts_property_id_fk FOREIGN KEY (property_id) REFERENCES properties(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE payments (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  customer_account_id BIGINT UNSIGNED NOT NULL,
  amount DECIMAL(14,2) NOT NULL,
  payment_date DATE NOT NULL,
  method VARCHAR(80) NOT NULL DEFAULT 'Transferencia',
  reference VARCHAR(120) NULL,
  concept VARCHAR(160) NULL,
  status VARCHAR(80) NOT NULL DEFAULT 'Aplicado',
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX payments_customer_account_id_index (customer_account_id),
  INDEX payments_tenant_id_index (tenant_id),
  CONSTRAINT payments_customer_account_id_fk FOREIGN KEY (customer_account_id) REFERENCES customer_accounts(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE transactions (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  type ENUM('income','expense') NOT NULL,
  amount DECIMAL(14,2) NOT NULL,
  date DATE NOT NULL,
  category VARCHAR(120) NOT NULL,
  description VARCHAR(191) NOT NULL,
  advisor_id BIGINT UNSIGNED NULL,
  client_id BIGINT UNSIGNED NULL,
  property_id BIGINT UNSIGNED NULL,
  project_id BIGINT UNSIGNED NULL,
  lote_id BIGINT UNSIGNED NULL,
  deleted_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX transactions_tenant_id_index (tenant_id),
  INDEX transactions_date_index (date),
  INDEX transactions_project_id_index (project_id),
  INDEX transactions_lote_id_index (lote_id),
  CONSTRAINT transactions_advisor_id_fk FOREIGN KEY (advisor_id) REFERENCES advisors(id) ON DELETE SET NULL,
  CONSTRAINT transactions_client_id_fk FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE SET NULL,
  CONSTRAINT transactions_property_id_fk FOREIGN KEY (property_id) REFERENCES properties(id) ON DELETE SET NULL,
  CONSTRAINT transactions_project_id_fk FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE tasks (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  title VARCHAR(191) NOT NULL,
  priority VARCHAR(80) NOT NULL DEFAULT 'Media',
  due_at TIMESTAMP NULL,
  assigned_to BIGINT UNSIGNED NULL,
  related_type VARCHAR(80) NOT NULL DEFAULT 'General',
  related_id BIGINT UNSIGNED NULL,
  notes TEXT NULL,
  completed_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX tasks_assigned_to_index (assigned_to),
  INDEX tasks_tenant_id_index (tenant_id),
  CONSTRAINT tasks_assigned_to_fk FOREIGN KEY (assigned_to) REFERENCES advisors(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE reminder_templates (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  type VARCHAR(80) NOT NULL UNIQUE,
  name VARCHAR(191) NOT NULL,
  body TEXT NOT NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE reminders (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  title VARCHAR(191) NOT NULL,
  type VARCHAR(80) NOT NULL DEFAULT 'Pago',
  remind_at TIMESTAMP NOT NULL,
  client_id BIGINT UNSIGNED NULL,
  advisor_id BIGINT UNSIGNED NULL,
  phone VARCHAR(30) NULL,
  message TEXT NULL,
  notify_to VARCHAR(80) NOT NULL DEFAULT 'Solo yo',
  status VARCHAR(80) NOT NULL DEFAULT 'Programado',
  sent_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX reminders_tenant_id_index (tenant_id),
  CONSTRAINT reminders_client_id_fk FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE SET NULL,
  CONSTRAINT reminders_advisor_id_fk FOREIGN KEY (advisor_id) REFERENCES advisors(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE contract_templates (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  name VARCHAR(191) NOT NULL,
  type VARCHAR(100) NOT NULL DEFAULT 'Promesa de compraventa',
  body LONGTEXT NOT NULL,
  active TINYINT(1) NOT NULL DEFAULT 1,
  enrollable TINYINT(1) NOT NULL DEFAULT 1,
  required TINYINT(1) NOT NULL DEFAULT 0,
  requires_signature TINYINT(1) NOT NULL DEFAULT 0,
  requires_attachment TINYINT(1) NOT NULL DEFAULT 0,
  sort_order SMALLINT UNSIGNED NOT NULL DEFAULT 0,
  template_status VARCHAR(30) NOT NULL DEFAULT 'Borrador',
  version_label VARCHAR(30) NOT NULL DEFAULT 'v1.0',
  page_size VARCHAR(20) NOT NULL DEFAULT 'A4',
  orientation VARCHAR(20) NOT NULL DEFAULT 'portrait',
  margin_top SMALLINT UNSIGNED NOT NULL DEFAULT 15,
  margin_right SMALLINT UNSIGNED NOT NULL DEFAULT 14,
  margin_bottom SMALLINT UNSIGNED NOT NULL DEFAULT 26,
  margin_left SMALLINT UNSIGNED NOT NULL DEFAULT 14,
  default_font VARCHAR(80) NOT NULL DEFAULT 'Inter',
  default_font_size SMALLINT UNSIGNED NOT NULL DEFAULT 12,
  design_theme VARCHAR(40) NOT NULL DEFAULT 'modern',
  source_pdf VARCHAR(255) NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX contract_templates_tenant_id_index (tenant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE contracts (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  contract_template_id BIGINT UNSIGNED NULL,
  client_id BIGINT UNSIGNED NULL,
  property_id BIGINT UNSIGNED NULL,
  lote_id BIGINT UNSIGNED NULL,
  advisor_id BIGINT UNSIGNED NULL,
  title VARCHAR(191) NOT NULL,
  body LONGTEXT NOT NULL,
  status VARCHAR(80) NOT NULL DEFAULT 'Borrador',
  signed_at TIMESTAMP NULL,
  page_size VARCHAR(20) NOT NULL DEFAULT 'A4',
  orientation VARCHAR(20) NOT NULL DEFAULT 'portrait',
  margin_top SMALLINT UNSIGNED NOT NULL DEFAULT 15,
  margin_right SMALLINT UNSIGNED NOT NULL DEFAULT 14,
  margin_bottom SMALLINT UNSIGNED NOT NULL DEFAULT 26,
  margin_left SMALLINT UNSIGNED NOT NULL DEFAULT 14,
  default_font VARCHAR(80) NOT NULL DEFAULT 'Inter',
  default_font_size SMALLINT UNSIGNED NOT NULL DEFAULT 12,
  design_theme VARCHAR(40) NOT NULL DEFAULT 'modern',
  body_before_refresh LONGTEXT NULL,
  data_refreshed_at TIMESTAMP NULL,
  deleted_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX contracts_tenant_id_index (tenant_id),
  INDEX contracts_lote_id_index (lote_id),
  CONSTRAINT contracts_template_fk FOREIGN KEY (contract_template_id) REFERENCES contract_templates(id) ON DELETE SET NULL,
  CONSTRAINT contracts_client_fk FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE SET NULL,
  CONSTRAINT contracts_property_fk FOREIGN KEY (property_id) REFERENCES properties(id) ON DELETE SET NULL,
  CONSTRAINT contracts_advisor_fk FOREIGN KEY (advisor_id) REFERENCES advisors(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE commissions (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  advisor_id BIGINT UNSIGNED NOT NULL,
  property_id BIGINT UNSIGNED NULL,
  transaction_id BIGINT UNSIGNED NULL,
  amount DECIMAL(14,2) NOT NULL,
  percentage DECIMAL(5,2) NOT NULL DEFAULT 3,
  status VARCHAR(80) NOT NULL DEFAULT 'Pendiente',
  due_on DATE NULL,
  paid_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX commissions_tenant_id_index (tenant_id),
  CONSTRAINT commissions_advisor_fk FOREIGN KEY (advisor_id) REFERENCES advisors(id) ON DELETE CASCADE,
  CONSTRAINT commissions_property_fk FOREIGN KEY (property_id) REFERENCES properties(id) ON DELETE SET NULL,
  CONSTRAINT commissions_transaction_fk FOREIGN KEY (transaction_id) REFERENCES transactions(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE settings (
  `key` VARCHAR(191) PRIMARY KEY,
  value TEXT NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =====================================================================
-- SEGURIDAD + AUDITORIA + BACKUPS + API
-- =====================================================================

CREATE TABLE activity_logs (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  user_id BIGINT UNSIGNED NULL,
  action VARCHAR(80) NOT NULL,
  description VARCHAR(191) NULL,
  entity_type VARCHAR(80) NULL,
  entity_id BIGINT UNSIGNED NULL,
  context LONGTEXT NULL,
  ip_address VARCHAR(45) NULL,
  user_agent VARCHAR(250) NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX activity_logs_user_id_index (user_id),
  INDEX activity_logs_action_index (action),
  INDEX activity_logs_entity_index (entity_type, entity_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE backups (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  user_id BIGINT UNSIGNED NULL,
  filename VARCHAR(191) NOT NULL UNIQUE,
  disk VARCHAR(40) NOT NULL DEFAULT 'local',
  size_bytes BIGINT UNSIGNED NOT NULL DEFAULT 0,
  status VARCHAR(30) NOT NULL DEFAULT 'completed',
  note VARCHAR(200) NULL,
  meta LONGTEXT NULL,
  completed_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX backups_user_id_index (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================================
-- WORKFLOWS / AUTOMATIZACIONES
-- =====================================================================

CREATE TABLE workflows (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  name VARCHAR(160) NOT NULL,
  description VARCHAR(500) NULL,
  trigger_event VARCHAR(80) NOT NULL,
  conditions LONGTEXT NULL,
  actions LONGTEXT NOT NULL,
  is_active TINYINT(1) NOT NULL DEFAULT 1,
  runs_count INT UNSIGNED NOT NULL DEFAULT 0,
  last_run_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX workflows_tenant_id_index (tenant_id),
  INDEX workflows_trigger_event_index (trigger_event)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE workflow_runs (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  workflow_id BIGINT UNSIGNED NOT NULL,
  trigger_event VARCHAR(80) NOT NULL,
  subject_type VARCHAR(80) NULL,
  subject_id BIGINT UNSIGNED NULL,
  status VARCHAR(30) NOT NULL DEFAULT 'success',
  output TEXT NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  CONSTRAINT workflow_runs_workflow_fk FOREIGN KEY (workflow_id) REFERENCES workflows(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =====================================================================
-- PAGOS / NOTIFICACIONES / FIRMA / INTEGRACIONES / MEDIA
-- =====================================================================

CREATE TABLE payment_links (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  customer_account_id BIGINT UNSIGNED NULL,
  client_id BIGINT UNSIGNED NULL,
  provider VARCHAR(40) NOT NULL,
  external_id VARCHAR(160) NULL,
  url VARCHAR(500) NULL,
  amount DECIMAL(14,2) NOT NULL,
  currency VARCHAR(6) NOT NULL DEFAULT 'MXN',
  concept VARCHAR(200) NULL,
  status VARCHAR(30) NOT NULL DEFAULT 'pending',
  paid_at TIMESTAMP NULL,
  expires_at TIMESTAMP NULL,
  webhook_payload LONGTEXT NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX payment_links_tenant_id_index (tenant_id),
  INDEX payment_links_status_index (status),
  CONSTRAINT payment_links_account_fk FOREIGN KEY (customer_account_id) REFERENCES customer_accounts(id) ON DELETE SET NULL,
  CONSTRAINT payment_links_client_fk FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE notifications_inapp (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  user_id BIGINT UNSIGNED NULL,
  title VARCHAR(200) NOT NULL,
  body VARCHAR(500) NULL,
  icon VARCHAR(40) NOT NULL DEFAULT 'fa-bell',
  color VARCHAR(20) NOT NULL DEFAULT '#c9a84c',
  link VARCHAR(500) NULL,
  read_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX notifications_inapp_tenant_id_index (tenant_id),
  INDEX notifications_inapp_user_id_index (user_id),
  CONSTRAINT notifications_inapp_user_fk FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE signed_documents (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  contract_id BIGINT UNSIGNED NULL,
  provider VARCHAR(40) NOT NULL DEFAULT 'mifiel',
  external_id VARCHAR(160) NULL,
  status VARCHAR(30) NOT NULL DEFAULT 'pending',
  signers LONGTEXT NULL,
  document_url VARCHAR(500) NULL,
  signed_url VARCHAR(500) NULL,
  signed_at TIMESTAMP NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX signed_documents_tenant_id_index (tenant_id),
  CONSTRAINT signed_documents_contract_fk FOREIGN KEY (contract_id) REFERENCES contracts(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE property_media (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  property_id BIGINT UNSIGNED NOT NULL,
  type VARCHAR(20) NOT NULL DEFAULT 'image',
  role VARCHAR(20) NOT NULL DEFAULT 'gallery',
  path VARCHAR(500) NOT NULL,
  caption VARCHAR(250) NULL,
  sort_order INT UNSIGNED NOT NULL DEFAULT 0,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX property_media_property_id_index (property_id),
  INDEX property_media_role_index (role),
  CONSTRAINT property_media_property_fk FOREIGN KEY (property_id) REFERENCES properties(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =====================================================================
-- Expediente digital del cliente (documentacion personal en la nube)
-- =====================================================================
CREATE TABLE client_documents (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
  client_id BIGINT UNSIGNED NULL,
  section VARCHAR(20) NOT NULL DEFAULT 'expediente',
  name VARCHAR(255) NOT NULL,
  category VARCHAR(80) NOT NULL DEFAULT 'Documento',
  type VARCHAR(20) NOT NULL DEFAULT 'document',
  path VARCHAR(500) NOT NULL,
  size BIGINT UNSIGNED NOT NULL DEFAULT 0,
  notes TEXT NULL,
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL,
  INDEX client_documents_tenant_id_index (tenant_id),
  INDEX client_documents_client_id_index (client_id),
  INDEX client_documents_section_index (section),
  CONSTRAINT client_documents_client_fk FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =====================================================================
-- DATOS INICIALES (SEEDS)
-- =====================================================================

-- Migraciones registradas (para que Laravel no las vuelva a correr)
INSERT INTO migrations (migration, batch) VALUES
('0001_01_01_000000_create_inmocore_tables', 1),
('0001_01_02_000000_create_security_tables', 1),
('0001_01_03_000000_create_api_tokens', 1),
('0001_01_04_000000_create_roles_and_branding', 1),
('0001_01_05_000000_create_enterprise_features', 1),
('0001_01_06_000000_add_2fa_softdeletes', 1),
('0001_01_07_000000_property_landing_features', 1),
('0001_01_08_000000_create_client_documents_table', 1),
('0001_01_09_000000_add_curp_domicilio_to_clients', 1),
('0001_01_10_000000_property_media_role', 1),
('0001_01_11_000000_client_personal_address_fields', 1),
('0001_01_12_000000_add_section_to_client_documents', 1),
('0001_01_13_000000_account_payment_plan_fields', 1),
('0001_01_13_000000_add_name_parts_and_birth_to_clients', 1),
('0001_01_14_000000_add_depositario_manzanas_lotes_to_projects', 1),
('0001_01_15_000000_create_puestos_table', 1),
('0001_01_16_000000_make_client_id_nullable_on_client_documents', 1),
('0001_01_17_000000_add_plan_fields_to_customer_accounts', 1),
('0001_01_18_000000_create_payment_installments_table', 1),
('0001_01_19_000000_create_manzanas_table', 1),
('0001_01_20_000000_create_lotes_table', 1),
('0001_01_21_000000_add_lote_id_to_customer_accounts', 1),
('0001_01_22_000000_add_identity_to_manzanas', 1),
('0001_01_23_000000_add_dimensions_to_lotes', 1),
('0001_01_24_000000_add_lote_id_to_contracts', 1),
('0001_01_25_000000_sales_flow_logic_update', 1),
('0001_01_26_000000_add_template_layout_and_contract_refresh', 1),
('0001_01_28_000000_add_document_editor_workflow_fields', 1),
('0001_01_29_000000_create_petty_cash_tables', 1),
('0001_01_30_000000_project_logo_and_project_balances', 1),
('0001_01_31_000000_create_reservations_module', 1),
('0001_01_32_000000_create_formateria_items_table', 1);

-- Tenant principal
INSERT INTO tenants (id, name, slug, accent_color, contact_email, plan, is_active, created_at, updated_at) VALUES
(1, 'Inmobiliaria Principal', 'principal', '#c9a84c', 'admin@inmocore.mx', 'enterprise', 1, NOW(), NOW());

-- Roles del sistema
INSERT INTO roles (name, display_name, description, color, permissions, is_system, created_at, updated_at) VALUES
('admin', 'Administrador', 'Acceso total al sistema y configuracion.', '#c9a84c', '["*"]', 1, NOW(), NOW()),
('gerente', 'Gerente comercial', 'Supervisa equipo, contratos y reportes.', '#3498db', '["dashboard","clients","properties","projects","finance","accounts","reservations","commissions","advisors","tasks","reminders","reports"]', 1, NOW(), NOW()),
('asesor', 'Asesor de ventas', 'Maneja clientes, propiedades y aportaciones.', '#2ecc71', '["dashboard","clients","properties","accounts","reservations","tasks","reminders"]', 1, NOW(), NOW()),
('contador', 'Contador', 'Acceso a finanzas, cuentas, comisiones y reportes.', '#9b59b6', '["dashboard","finance","accounts","commissions","reports"]', 1, NOW(), NOW());

-- Asesores
INSERT INTO advisors (id, tenant_id, name, email, phone, role, status, monthly_goal, sales_count, generated_amount, rating, created_at, updated_at) VALUES
(1, 1, 'Marco Garcia', 'marco@inmocore.mx', '3112345678', 'Senior', 'En linea', 3600000, 32, 3200000, 9.4, NOW(), NOW()),
(2, 1, 'Laura Perez', 'laura@inmocore.mx', '3114567890', 'Senior', 'En linea', 3600000, 28, 2600000, 9.1, NOW(), NOW()),
(3, 1, 'Juan Ruiz', 'juan@inmocore.mx', '3116789012', 'Junior', 'Ocupado', 2800000, 18, 2100000, 8.7, NOW(), NOW()),
(4, 1, 'Sofia Castro', 'sofia@inmocore.mx', '3118901234', 'Junior', 'Sin conexion', 2400000, 14, 1700000, 8.3, NOW(), NOW());

-- Proyectos
INSERT INTO projects (id, tenant_id, name, depositario, depositario_puesto_id, location, logo_path, manzanas, lotes, status, investment, sold_amount, units_total, units_sold, starts_on, ends_on, description, created_at, updated_at) VALUES
(1, 1, 'Residencial Valle', 'Inmobiliaria del Valle S.A. de C.V.', NULL, 'Tepic, Nayarit', 'project-logos/demo-residencial-valle.svg', 2, 6, 'Activo', 42000000, 28000000, 6, 2, '2024-03-01', '2026-12-31', 'Desarrollo habitacional por etapas con lotes residenciales.', NOW(), NOW()),
(2, 1, 'Lomas del Roble', 'Grupo Roble Constructora', NULL, 'Xalisco, Nayarit', 'project-logos/demo-torre-roble.svg', 1, 3, 'En construccion', 18000000, 8000000, 3, 1, '2025-01-01', '2027-03-31', 'Desarrollo residencial campestre.', NOW(), NOW()),
(3, 1, 'Plaza Comercial Sur', 'Desarrollos Sur', NULL, 'Tepic, Nayarit', 'project-logos/demo-plaza-comercial-sur.svg', 1, 3, 'Activo', 28000000, 24000000, 3, 1, '2023-06-01', '2025-06-30', 'Lotes comerciales en zona de alta afluencia.', NOW(), NOW());

-- Propiedades
INSERT INTO properties (id, tenant_id, project_id, name, type, location, latitude, longitude, price, area_m2, bedrooms, bathrooms, parking_spaces, status, stage, description, created_at, updated_at) VALUES
(1, 1, 1, 'Casa Valle del Sol 14-A', 'Casa', 'Tepic, Nayarit', 21.5039, -104.8943, 2850000, 180, 3, 2.5, 2, 'Disponible', 'Disponible', 'Casa de tres recamaras en privada con acceso controlado.', NOW(), NOW()),
(2, 1, 2, 'Depto Torre Roble 4-B', 'Departamento', 'Tepic, Nayarit', 21.5078, -104.8956, 1200000, 85, 2, 2.0, 1, 'Reservado', 'Negociacion', 'Departamento en cuarto nivel con terraza.', NOW(), NOW()),
(3, 1, 3, 'Local Plaza Central LC-08', 'Local', 'Tepic, Nayarit', 21.5101, -104.8884, 4500000, 120, NULL, 1.0, 2, 'Disponible', 'Prospectando', 'Local comercial con frente amplio.', NOW(), NOW()),
(4, 1, 1, 'Terreno Lomas Norte T-22', 'Terreno', 'Xalisco, Nayarit', 21.4406, -104.8967, 980000, 500, NULL, NULL, NULL, 'Vendido', 'Vendido', 'Terreno urbanizado en esquina.', NOW(), NOW());

-- Generar slug unico para la landing de cada propiedad sembrada
UPDATE properties
SET slug = CONCAT(LOWER(REPLACE(REPLACE(REPLACE(name, ' ', '-'), '.', ''), '/', '-')), '-', id)
WHERE slug IS NULL OR slug = '';

-- Clientes demo alineados con el formulario actual
INSERT INTO clients (id, tenant_id, advisor_id, name, nombres, primer_apellido, segundo_apellido, genero, lugar_nacimiento, fecha_nacimiento, phone, email, rfc, curp, estado_civil, ocupacion, domicilio, calle, numero, colonia, codigo_postal, municipio, estado, source, interest, status, notes, last_contact_at, created_at, updated_at) VALUES
(1, 1, 1, 'Carlos Mendoza Ríos', 'Carlos', 'Mendoza', 'Ríos', 'El Asociado', 'Tepic, Nayarit', '1980-01-01', '3112345678', 'c.mendoza@gmail.com', 'MERC800101AB1', 'MERC800101HNTNRS09', 'Casado(a)', 'Comerciante', 'Calle Av. México, #123, Col. Centro, C.P. 63000, Tepic, Nayarit', 'Av. México', '123', 'Centro', '63000', 'Tepic', 'Nayarit', 'Referido', 'Lote habitacional', 'Negociacion', 'Interesado en entrega inmediata.', DATE_SUB(NOW(), INTERVAL 2 HOUR), NOW(), NOW()),
(2, 1, 2, 'Lucia Salinas López', 'Lucia', 'Salinas', 'López', 'La Asociada', 'Guadalajara, Jalisco', '1992-02-02', '3114567890', 'lucia.s@hotmail.com', 'SALL920202CD2', 'SALL920202MJCLPC05', 'Soltero(a)', 'Profesionista independiente', 'Calle Paseo de la Cantera, #78, Col. Ciudad del Valle, C.P. 63157, Tepic, Nayarit', 'Paseo de la Cantera', '78', 'Ciudad del Valle', '63157', 'Tepic', 'Nayarit', 'Redes sociales', 'Lote campestre', 'Calificado', 'Busca financiamiento.', DATE_SUB(NOW(), INTERVAL 1 DAY), NOW(), NOW()),
(3, 1, 3, 'Roberto Soto Vega', 'Roberto', 'Soto', 'Vega', 'El Asociado', 'Tepic, Nayarit', '1978-03-03', '3116789012', 'roberto.s@empresa.mx', 'SOVR780303EF3', 'SOVR780303HNTTGB06', 'Casado(a)', 'Empresario', 'Calle Av. Insurgentes, #405, Col. Las Brisas, C.P. 63117, Tepic, Nayarit', 'Av. Insurgentes', '405', 'Las Brisas', '63117', 'Tepic', 'Nayarit', 'Sitio web', 'Lote comercial', 'Prospecto', 'Enviar informacion de rentabilidad.', DATE_SUB(NOW(), INTERVAL 2 DAY), NOW(), NOW()),
(4, 1, 4, 'Fernanda Mora Díaz', 'Fernanda', 'Mora', 'Díaz', 'La Asociada', 'Tepic, Nayarit', '1989-04-04', '3118901234', 'fmora@outlook.com', 'MODF890404GH4', 'MODF890404MNTDZR07', 'Unión libre', 'Docente', 'Calle Calle Roble, #22, Col. Jardines de la Cruz, C.P. 63168, Tepic, Nayarit', 'Calle Roble', '22', 'Jardines de la Cruz', '63168', 'Tepic', 'Nayarit', 'Expo', 'Lote residencial', 'Cerrado', 'Lista para escrituracion.', DATE_SUB(NOW(), INTERVAL 3 DAY), NOW(), NOW());

-- Cuentas
INSERT INTO customer_accounts (id, tenant_id, client_id, property_id, lote_id, payment_type, total_price, term_months, monthly_payment, plan_type, annuity_amount, reservation_expires_on, paid_amount, next_payment_amount, next_payment_due_on, status, created_at, updated_at) VALUES
(1, 1, 1, 1, 1, 'Plazo', 850000, 24, 33333.33, 'Sin anualidad', NULL, NULL, 116666.66, 33333.33, DATE_ADD(CURDATE(), INTERVAL 3 DAY), 'Al corriente', NOW(), NOW()),
(2, 1, 2, 2, 7, 'Plazo', 1500000, 12, 100000.00, 'Sin anualidad', NULL, NULL, 300000.00, 100000.00, DATE_ADD(CURDATE(), INTERVAL 10 DAY), 'Al corriente', NOW(), NOW()),
(3, 1, 3, 3, 10, 'Plazo', 2200000, 36, 51388.89, 'Con anualidad', 50000.00, NULL, 200000.00, 51388.89, DATE_SUB(CURDATE(), INTERVAL 10 DAY), 'Vencido', NOW(), NOW());

-- Pagos
INSERT INTO payments (tenant_id, customer_account_id, amount, payment_date, method, reference, concept, status, created_at, updated_at) VALUES
(1, 1, 50000.00, '2025-01-15', 'Transferencia', 'ENG-001', 'Enganche inicial / apartado', 'Aplicado', NOW(), NOW()),
(1, 1, 33333.33, '2025-02-15', 'Deposito', 'MEN-001', 'Mensualidad 1', 'Aplicado', NOW(), NOW()),
(1, 1, 33333.33, '2025-03-15', 'Deposito', 'MEN-002', 'Mensualidad 2', 'Aplicado', NOW(), NOW()),
(1, 2, 300000.00, CURDATE(), 'Transferencia', 'ROB-004', 'Enganche inicial', 'Aplicado', NOW(), NOW()),
(1, 3, 200000.00, DATE_SUB(CURDATE(), INTERVAL 3 DAY), 'Transferencia', 'PLC-003', 'Anticipo', 'Aplicado', NOW(), NOW());

-- Movimientos
INSERT INTO transactions (id, tenant_id, type, amount, date, category, description, advisor_id, client_id, property_id, project_id, lote_id, created_at, updated_at) VALUES
(1, 1, 'income', 116666.66, DATE_SUB(CURDATE(), INTERVAL 4 DAY), 'Abono', 'Pagos aplicados - Carlos Mendoza / Lote 1 Manzana A', 1, 1, 1, 1, 1, NOW(), NOW()),
(2, 1, 'income', 300000.00, DATE_SUB(CURDATE(), INTERVAL 1 DAY), 'Enganche', 'Enganche - Lucia Salinas / Lote 1 Manzana A', 2, 2, 2, 2, 7, NOW(), NOW()),
(3, 1, 'income', 200000.00, DATE_SUB(CURDATE(), INTERVAL 3 DAY), 'Anticipo', 'Anticipo - Roberto Soto / Lote 1 Manzana A', 3, 3, 3, 3, 10, NOW(), NOW()),
(4, 1, 'income', 15000.00, CURDATE(), 'Apartado', 'Apartado inicial - Roberto Soto Vega / Lote 3 Manzana A', 3, 3, NULL, 1, 3, NOW(), NOW()),
(5, 1, 'expense', 248000.00, DATE_SUB(CURDATE(), INTERVAL 5 DAY), 'Nomina', 'Nomina - Mayo / Residencial Valle', NULL, NULL, NULL, 1, NULL, NOW(), NOW()),
(6, 1, 'expense', 1200000.00, DATE_SUB(CURDATE(), INTERVAL 8 DAY), 'Construccion', 'Construccion Proyecto Lomas del Roble', NULL, NULL, NULL, 2, NULL, NOW(), NOW()),
(7, 1, 'expense', 45000.00, DATE_SUB(CURDATE(), INTERVAL 6 DAY), 'Marketing', 'Marketing digital - Plaza Comercial Sur', NULL, NULL, NULL, 3, NULL, NOW(), NOW()),
(8, 1, 'income', 98000.00, DATE_SUB(CURDATE(), INTERVAL 2 DAY), 'Enganche apartado', 'Enganche completado para apartado - Carlos Mendoza Ríos / Lote 3 Manzana B', 1, 1, NULL, 1, 6, NOW(), NOW());

-- Tareas
INSERT INTO tasks (tenant_id, title, priority, due_at, assigned_to, related_type, related_id, notes, completed_at, created_at, updated_at) VALUES
(1, 'Llamar a Carlos Mendoza - pago proximo', 'Alta', DATE_ADD(NOW(), INTERVAL 2 HOUR), 1, 'Cliente', 1, 'Confirmar transferencia del siguiente abono.', NULL, NOW(), NOW()),
(1, 'Firmar contrato Local LC-08', 'Alta', DATE_ADD(NOW(), INTERVAL 4 HOUR), 3, 'Propiedad', 3, 'Llevar identificaciones y recibo de anticipo.', NULL, NOW(), NOW()),
(1, 'Actualizar lotes de Torre Roble', 'Media', DATE_ADD(NOW(), INTERVAL 1 DAY), 2, 'Proyecto', 2, NULL, NULL, NOW(), NOW()),
(1, 'Enviar contrato firmado a Lucia S.', 'Baja', DATE_SUB(NOW(), INTERVAL 2 HOUR), 2, 'Contrato', NULL, NULL, DATE_SUB(NOW(), INTERVAL 1 HOUR), NOW(), NOW());

-- Plantillas de recordatorios
INSERT INTO reminder_templates (type, name, body, created_at, updated_at) VALUES
('Pago', 'Recordatorio de pago', 'Hola {{cliente}}, te recordamos que tienes un pago programado de {{monto}} para {{fecha}}. Si ya lo realizaste, por favor comparte tu comprobante.', NOW(), NOW()),
('Reunion', 'Confirmacion de reunion', 'Hola {{cliente}}, confirmamos nuestra reunion para {{fecha}}. Te atendera {{asesor}}.', NOW(), NOW()),
('Visita', 'Confirmacion de visita', 'Hola {{cliente}}, tu visita a {{propiedad}} esta programada para {{fecha}}. Te esperamos puntualmente.', NOW(), NOW()),
('Contrato', 'Firma o revision de contrato', 'Hola {{cliente}}, te recordamos la revision/firma del contrato de {{propiedad}} para {{fecha}}. Favor de llevar identificacion oficial.', NOW(), NOW()),
('Entrega', 'Entrega de llaves', 'Hola {{cliente}}, la entrega de llaves de {{propiedad}} esta programada para {{fecha}}. Gracias por tu confianza.', NOW(), NOW()),
('Evento', 'Invitacion a evento', 'Hola {{cliente}}, te invitamos a nuestro evento de {{propiedad}} el dia {{fecha}}. Sera un gusto recibirte.', NOW(), NOW())
ON DUPLICATE KEY UPDATE name = VALUES(name), body = VALUES(body), updated_at = NOW();

-- Recordatorios
INSERT INTO reminders (tenant_id, title, type, remind_at, client_id, advisor_id, phone, message, notify_to, status, sent_at, created_at, updated_at) VALUES
(1, 'Pago mensual de Carlos Mendoza', 'Pago', DATE_ADD(NOW(), INTERVAL 3 HOUR), 1, 1, '3112345678', 'Hola Carlos, te recordamos que tu pago de $25,000 vence pronto.', 'Asesor especifico', 'Programado', NULL, NOW(), NOW()),
(1, 'Visita a Torre Roble con Lucia', 'Visita', DATE_ADD(NOW(), INTERVAL 1 DAY), 2, 2, '3114567890', 'Hola Lucia, confirmamos tu visita a Torre Roble.', 'Asesor especifico', 'Programado', NULL, NOW(), NOW()),
(1, 'Firma de escritura con Fernanda', 'Contrato', DATE_ADD(NOW(), INTERVAL 2 DAY), 4, 4, '3118901234', 'Hola Fernanda, te recordamos la firma de escritura.', 'Todo el equipo', 'Programado', NULL, NOW(), NOW());

-- Plantillas oficiales de contratos
INSERT INTO contract_templates (id, tenant_id, name, type, body, active, created_at, updated_at) VALUES
(1, 1, 'Contrato de deposito y administracion de aportaciones', 'Deposito y administracion', '<section class="contract-letter-page apartado-page contrato-page"><div class="page-layer"><div class="ap-marco"><div class="ap-head"><div class="ap-logo-box"><img class="ap-logo" src="{{proyecto_logo}}" alt="Logotipo del proyecto"></div><div class="ap-title">CONTRATO DE DEPÓSITO Y ADMINISTRACIÓN DE APORTACIONES</div></div><div class="ap-body"><p>En la ciudad de <span class="contract-field">{{ciudad}}</span>, siendo el día <span class="contract-field">{{fecha_larga}}</span>, comparecen por una parte el C. <span class="contract-field">{{depositario}}</span>, mexicano, mayor de edad, vecino de esta ciudad de Tepic, Nayarit, con domicilio en <span class="contract-field">{{empresa_direccion}}</span>, número de teléfono <span class="contract-field">{{empresa_telefono}}</span> y con correo electrónico <span class="contract-field">{{empresa_email}}</span>, apto para Administrar, Contratar y Obligarse, quien se identifica con su credencial para votar vigente con fotografía, a quien en lo sucesivo se le denominará <strong>EL DEPOSITARIO</strong>; y por otra parte <span class="contract-field">{{apartante_trato}}</span> <span class="contract-field">{{cliente_nombre}}</span>, de nacionalidad <span class="contract-field">{{cliente_nacionalidad}}</span>, estado civil <span class="contract-field">{{cliente_estado_civil}}</span>, mayor de edad, originaria/registrada en <span class="contract-field">{{cliente_lugar_nacimiento}}</span> donde nació el día <span class="contract-field">{{cliente_fecha_nacimiento}}</span>, y vecina de <span class="contract-field">{{cliente_lugar_nacimiento}}</span> con domicilio en <span class="contract-field">{{cliente_domicilio}}</span>, número de teléfono <span class="contract-field">{{cliente_telefono}}</span> y de ocupación <span class="contract-field">{{cliente_ocupacion}}</span>, quien se identifica con su credencial para votar vigente con fotografía y a quien en lo sucesivo se le denominará <strong>LA ASOCIADA</strong>; los cuales manifiestan que tienen concertado un CONTRATO DE DEPÓSITO Y ADMINISTRACIÓN DE APORTACIONES, el cual sujetan al tenor de las siguientes declaraciones y cláusulas:</p><h2 class="center spaced">D E C L A R A C I O N E S</h2><ol class="roman"><li>Expone EL DEPOSITARIO que es legítimo asociante y administrador único de la <span class="contract-field">{{propiedad_antecedente}}</span>, el cual acredita con el Título de Propiedad número <span class="contract-field">{{numero_titulo_propiedad}}</span> (<span class="contract-field">{{numero_titulo_propiedad_letras}}</span>), inscrito en el Registro Público de la Propiedad y del Comercio, así como en el Departamento de Catastro e Impuesto Predial de Tepic, Nayarit.</li><li>El programa tiene por objeto gestionar de manera conjunta la adquisición de terrenos, parcelas ejidales o pequeñas propiedades, a través de un proceso organizado y transparente que permita a los interesados acceder a la propiedad de manera más accesible y ordenada. Esto incluye facilitar la tramitación de la autorización legal necesaria para la compra y venta, así como asegurar el cumplimiento de todos los requisitos legales y normativos relacionados con la subdivisión de terrenos. El objetivo principal de este proceso es enajenar y transmitir la propiedad de forma clara y segura, proporcionando además facilidades de pago adaptadas a las necesidades y capacidades de los compradores, con el fin de que puedan mejorar su situación patrimonial y la de sus familias. Asimismo, se ofrecerán servicios especializados de asesoría y apoyo a los solicitantes, beneficiarios o afiliados, desde la adquisición hasta la regularización de la propiedad. Los ingresos generados provendrán exclusivamente de donaciones, aportaciones o cuotas voluntarias de los participantes, garantizando que las operaciones se mantengan dentro de un marco ético y transparente. LA ASOCIADA acepta continuar integrada a dicho programa bajo la personalidad jurídica de EL DEPOSITARIO, incorporándose con el carácter de beneficiaria, tal cual se define en los objetivos del proyecto.</li><li>Manifiesta LA ASOCIADA tener interés en ser beneficiaria de una de las acciones que promueve EL DEPOSITARIO, para lo cual manifiesta su aprobación para ser parte del programa de copropiedad pro indiviso acordado, y que dicha acción será identificada como: ACCIÓN EN COPROPIEDAD CON FOLIO: <span class="contract-field">{{folio_lote}}</span>, DEL PROYECTO <span class="contract-field">{{proyecto}}</span>, PROYECTO INMOBILIARIO DE INTERÉS SOCIAL UBICADO EN LA SUPERFICIE DE <span class="contract-field">{{ubicacion_legal}}</span>, con características mencionadas en el ANEXO A, que se presentará para su revisión y aprobación en su momento, ante la Dirección General de Ordenamiento Territorial Integral (DGOTI) del ayuntamiento de Tepic, Nayarit.</li><li>Que ambas partes son conscientes de la intención de cumplir con el objetivo referido en la declaración anterior, y del interés de EL DEPOSITARIO en la posibilidad de obtener un incremento en el patrimonio personal y familiar, cumpliendo desde luego con toda la normatividad vigente de autorización de la LEY DE FRACCIONAMIENTOS Y ACCIONES DE URBANIZACIÓN PARA EL ESTADO DE NAYARIT y las demás relativas y aplicables que correspondan.</li></ol></div><div class="ap-foot">{{empresa_sucursal}}</div></div></div></section><section class="contract-letter-page apartado-page contrato-page"><div class="page-layer"><div class="ap-marco"><div class="ap-head"><div class="ap-logo-box"><img class="ap-logo" src="{{proyecto_logo}}" alt="Logotipo del proyecto"></div><div class="ap-title">CONTRATO DE DEPÓSITO Y ADMINISTRACIÓN DE APORTACIONES</div></div><div class="ap-body"><p>En virtud de lo expuesto, es voluntad de las partes contratantes celebrar el presente Contrato de Depósito y Administración de Aportaciones, el cual sujetan al tenor de las siguientes:</p><h2 class="center spaced">C L Á U S U L A S</h2><p><strong>PRIMERA.</strong> EL DEPOSITARIO se obliga a recibir el depósito y administrar las aportaciones que realice LA ASOCIADA, para cubrir el costo estimado de la acción que se describe a continuación: pago de tierra identificada con el folio <span class="contract-field">{{folio_lote}}</span> a EL DEPOSITARIO por la cantidad de <span class="contract-field">{{precio_total}}</span> (<span class="contract-field">{{precio_total_letra}}</span>), los cuales se entregarán de la siguiente forma: un enganche inicial de <span class="contract-field">{{enganche}}</span> (<span class="contract-field">{{enganche_letra}}</span>), posteriormente <span class="contract-field">{{num_mensualidades}}</span> mensualidades de <span class="contract-field">{{mensualidad}}</span> (<span class="contract-field">{{mensualidad_letra}}</span>) el día <span class="contract-field">{{dia_aportacion}}</span> de cada mes. Estos depósitos se harán en la institución bancaria y número de cuenta que será proporcionado por EL DEPOSITARIO, comprometiéndose LA ASOCIADA a informar sobre estos depósitos y a entregar el recibo emitido por el banco para que EL DEPOSITARIO le haga entrega del recibo de pago correspondiente, o bien de forma personal y directa en las oficinas de EL DEPOSITARIO.</p><p>En caso de que la aportación deba realizarse en día inhábil o domingo, con el fin de evitar multas o cargos adicionales, LA ASOCIADA se compromete a realizar su aportación en el domicilio de la sucursal, por transferencia bancaria o en la institución bancaria asignada por EL DEPOSITARIO un día antes del día inhábil o domingo; o bien el día indicado en su contrato siendo este inhábil o domingo, pero únicamente vía transferencia bancaria al número de cuenta proporcionado por EL DEPOSITARIO. LA ASOCIADA deberá conservar el comprobante bancario y entregarlo a EL DEPOSITARIO lo más pronto posible.</p><p><strong>SEGUNDA.</strong> EL DEPOSITARIO se obliga a que, cuando LA ASOCIADA haya pagado los <span class="contract-field">{{precio_total}}</span> (<span class="contract-field">{{precio_total_letra}}</span>) que se describen en la cláusula primera del presente contrato, así como la aportación que se haya acordado por concepto de escrituración general del predio, a entregarle un TÍTULO DE PARTICIPACIÓN que acredite a LA ASOCIADA como copropietaria pro indiviso del inmueble descrito en la declaración III del presente contrato. Asimismo, queda de manifiesto que, una vez que se haga la entrega física de la acción adquirida por LA ASOCIADA, de no contar aún con todos los permisos y servicios correspondientes de DGOTI y de las autoridades administrativas que correspondan, la entrega se hará única y exclusivamente para conservación y mantenimiento, es decir, no se podrá construir hasta en tanto se cuente con la autorización de las autoridades competentes para ello.</p><p><strong>TERCERA.</strong> EL DEPOSITARIO se obliga a administrar las aportaciones que realice LA ASOCIADA, por el tiempo que dure la implementación del programa descrito en la cláusula primera de este contrato. LA ASOCIADA acepta que su inversión está destinada a cubrir el costo del proceso a partir de la primera fase expuesta en la cláusula primera de este contrato. LA ASOCIADA se obliga a realizar todos y cada uno de los pagos puntual y personalmente, ya sea en la sucursal de EL DEPOSITARIO o bien en la institución bancaria que sea asignada por EL DEPOSITARIO.</p></div><div class="ap-foot">{{empresa_sucursal}}</div></div></div></section><section class="contract-letter-page apartado-page contrato-page"><div class="page-layer"><div class="ap-marco"><div class="ap-head"><div class="ap-logo-box"><img class="ap-logo" src="{{proyecto_logo}}" alt="Logotipo del proyecto"></div><div class="ap-title">CONTRATO DE DEPÓSITO Y ADMINISTRACIÓN DE APORTACIONES</div></div><div class="ap-body"><p>El incumplimiento de esta disposición originará que EL DEPOSITARIO requiera a LA DEPOSITANTE y le haga un cobro adicional por concepto de gastos de cobranza, que serán a razón de $250.00 (DOSCIENTOS CINCUENTA PESOS 00/100 M.N.) por mes atrasado.</p><p><strong>CUARTA.</strong> Si LA DEPOSITANTE desea rescindir este Contrato de Depósito y Administración de Aportaciones, podrá recuperar su capital si vende su parte social a un tercero. En este caso, EL DEPOSITARIO aceptará al NUEVO DEPOSITANTE con todos sus derechos y cobrará una tarifa de $2,000.00 (DOS MIL PESOS 00/100 M.N.) por concepto de cambio de titularidad. Esta misma cantidad se deberá pagar si LA DEPOSITANTE decide realizar un cambio de titularidad de la acción adquirida. En caso de que LA DEPOSITANTE desee rescindir el contrato antes de realizar su primera aportación, se aplicará una penalización equivalente al monto de su enganche inicial por concepto de gastos de operación y comisiones; asimismo, deberá firmar su Solicitud de Rescisión de Contrato, con el fin de dejar constancia formal de su decisión. Si LA DEPOSITANTE no logra encontrar un sustituto dentro del primer mes, EL DEPOSITARIO podrá encargarse de buscarlo, deduciendo una tarifa del 30.00% (treinta por ciento) sobre el monto total de sus aportaciones por concepto de costos de Administración, Operación y Organización. La devolución se realizará una vez que se haya encontrado UN NUEVO DEPOSITANTE, y de manera proporcional al número de meses en los que LA DEPOSITANTE haya cumplido con sus aportaciones.</p><p><strong>QUINTA.</strong> En caso de que LA DEPOSITANTE incumpla con sus aportaciones durante 3 (tres) meses consecutivos o más, autoriza a EL DEPOSITARIO automáticamente a anular este contrato, sin necesidad de firma de LA DEPOSITANTE ni de resolución judicial o de cualquier otra índole. Posteriormente, LA DEPOSITANTE podrá solicitar la devolución de sus aportaciones después del tercer mes por incumplimiento de pago; en este caso, EL DEPOSITARIO deducirá una tarifa del 30.00% (treinta por ciento) sobre el monto total de sus aportaciones por concepto de costos de Administración, Operación y Organización. El proceso de devolución no estará sujeto a un plazo determinado, sino que se realizará una vez se encuentre UN NUEVO DEPOSITANTE, y de manera proporcional al número de meses en que LA DEPOSITANTE haya cumplido con sus aportaciones.</p><p><strong>SEXTA.</strong> LA DEPOSITANTE se obliga a su vez a pagar a EL DEPOSITARIO el costo por concepto de Administración, Operación y Organización del programa de copropiedad pro indiviso; así como a realizar los pagos que de forma extraordinaria se establezcan en las asambleas que lleve a cabo la mesa directiva, para la mejora e implementaciones del terreno y entorno. Se toma en consideración que el pago establecido en la cláusula primera del presente contrato cubrirá el pago de la tierra; no obstante, falta cubrir los montos que se originen para el ingreso de los servicios, instalaciones, equipamiento y urbanización que la LEY DE FRACCIONAMIENTOS Y ACCIONES DE URBANIZACIÓN PARA EL ESTADO DE NAYARIT y las demás relativas aplicables impongan en este proyecto, con excepción de los postes de luz hoy en día existentes, que serán aprovechados en la medida de lo técnicamente viable, sin que ello represente costo adicional para LA DEPOSITANTE.</p></div><div class="ap-foot">{{empresa_sucursal}}</div></div></div></section><section class="contract-letter-page apartado-page contrato-page"><div class="page-layer"><div class="ap-marco"><div class="ap-head"><div class="ap-logo-box"><img class="ap-logo" src="{{proyecto_logo}}" alt="Logotipo del proyecto"></div><div class="ap-title">CONTRATO DE DEPÓSITO Y ADMINISTRACIÓN DE APORTACIONES</div></div><div class="ap-body"><p>Para ello, se buscará cumplir con otro de los objetivos, consistente en realizar actividades en conjunto con el fin de evitar el intermediarismo y optimizar los procesos de adquisición. Estas acciones permitirán que los asociados y beneficiarios tengan acceso directo a materias primas, insumos, activos y tecnología, sin la intervención de intermediarios que puedan aumentar costos o complicar los procedimientos, asegurando precios competitivos, alta calidad y entrega oportuna. Lo anterior se determinará en asamblea, después de la búsqueda de las mejores opciones que reduzcan en la medida de lo posible los costos de los servicios, instalaciones, equipamiento, urbanización y las cuotas autorizadas que resulten de dichos trabajos por las autoridades correspondientes, debiendo cumplirse en tiempo y forma una vez designado por la asamblea.</p><p><strong>SÉPTIMA.</strong> LA ASOCIADA se obliga a entregar toda la documentación necesaria, tal como IDENTIFICACIÓN OFICIAL VIGENTE, CURP, ACTA DE NACIMIENTO, COMPROBANTE DE DOMICILIO y las que sean requeridas, para dar la facilidad a EL DEPOSITARIO de administrar las aportaciones que se realicen.</p><p><strong>OCTAVA.</strong> En el supuesto de que LA ASOCIADA fallezca antes de la completa ejecución de las aportaciones o de la culminación del proceso descrito en el presente contrato, podrá designar a una persona como sustituto(a) para que asuma todos sus derechos y obligaciones. Para tal efecto, LA ASOCIADA nombra en vida a <span class="contract-field">{{beneficiario_sustituto}}</span> como su sustituto(a) en caso de fallecimiento. El/La sustituto(a) asumirá todas las responsabilidades, incluyendo las aportaciones pendientes, así como los derechos derivados de este contrato, tal como si fuera LA ASOCIADA original.</p><p><strong>NOVENA.</strong> EL DEPOSITARIO se compromete a custodiar y proteger de manera segura los documentos entregados por LA ASOCIADA, así como a cumplir con las disposiciones establecidas en la carta de autorización de datos personales firmada con fecha del <span class="contract-field">{{fecha_larga}}</span>, garantizando su confidencialidad y el manejo adecuado conforme a la legislación aplicable.</p><p><strong>DÉCIMA.</strong> Declaran ambas partes que en el presente CONTRATO DE DEPÓSITO Y ADMINISTRACIÓN DE APORTACIONES no existe dolo, mala fe, lesión ni enriquecimiento ilegítimo en detrimento de uno ni del otro que invaliden el presente acto jurídico; razón por la cual se obligan a cumplir todas y cada una de las cláusulas que en él se establecen. En caso de incumplimiento de cualquiera de las partes, se someterán en primer orden a un procedimiento de mediación y, en el supuesto de no conseguir resolver la situación, se someterán a la jurisdicción de El Poder Judicial del Estado de Nayarit, específicamente a los tribunales de esta ciudad, anteponiendo siempre una composición de mediación amigable.</p><p>Leído que les fue a las partes este instrumento legal, y enteradas de su contenido, alcance, valor y fuerza legal, lo firman LA ASOCIADA y EL DEPOSITARIO, quienes manifiestan ser mexicanos, mayores de edad, conscientes de sus facultades, en el domicilio <span class="contract-field">{{empresa_direccion}}</span>, el día <span class="contract-field">{{fecha_larga}}</span>.</p><div style="height:90px"></div><div class="ap-signs"><div class="ap-sign"><div class="ap-rol">LA ASOCIADA</div><div class="ap-firma">FIRMA: <span class="ap-line"></span></div><div class="ap-name"><span class="contract-field">{{cliente_nombre}}</span></div><div class="ap-fecha">FECHA: <span class="contract-field">{{fecha_larga}}</span></div></div><div class="ap-sign"><div class="ap-rol">EL DEPOSITARIO</div><div class="ap-firma">FIRMA: <span class="ap-line"></span></div><div class="ap-name"><span class="contract-field">{{depositario}}</span></div><div class="ap-cargo">CARGO: <span class="contract-field">{{depositario_cargo}}</span></div></div></div></div><div class="ap-foot">{{empresa_sucursal}}</div></div></div></section>', 1, NOW(), NOW()),
(2, 1, 'Acta de entrega de terreno para mantenimiento y conservacion', 'Entrega', '<section class="contract-letter-page apartado-page acta-page"><div class="page-layer"><div class="ap-marco"><h1>ACTA DE ENTREGA DE TERRENO PARA MANTENIMIENTO Y CONSERVACIÓN</h1><div class="subtitle">PROYECTO: “<span class="contract-field">{{proyecto}}</span>”</div><p>En la ciudad de <span class="contract-field">{{ciudad}}</span>, a <span class="contract-field">{{fecha_larga}}</span>, se celebra la presente acta de entrega de terreno, por una parte el C. <span class="contract-field">{{propietario}}</span>, en su carácter de propietario del proyecto denominado “<span class="contract-field">{{proyecto}}</span>”, y por la otra el C. <span class="contract-field">{{cliente_nombre}}</span>, en su carácter de comprador, al tenor de las siguientes:</p><h2>DATOS DEL TERRENO</h2><div class="kv-row"><div class="kv-item"><span class="kv-label">Número de lote:</span><span class="kv-value"><span class="contract-field">{{lote}}</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Medidas:</span><span class="kv-value"><span class="contract-field">{{frente}}</span> de frente por <span class="contract-field">{{fondo}}</span> de fondo</span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Superficie total:</span><span class="kv-value"><span class="contract-field">{{superficie}}</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Ubicación:</span><span class="kv-value"><span class="contract-field">{{ubicacion}}</span></span></div></div><h2>DECLARACIONES</h2><ol class="roman"><li>El propietario declara ser el legítimo poseedor del terreno correspondiente al proyecto “<span class="contract-field">{{proyecto}}</span>”.</li><li>El cliente manifiesta haber celebrado un contrato de compraventa respecto del lote antes descrito, el cual no ha sido liquidado en su totalidad.</li><li>Ambas partes acuerdan que la entrega del terreno se realiza exclusivamente para fines de mantenimiento y conservación.</li></ol><h2>CLÁUSULAS</h2><p><strong>PRIMERA. – ENTREGA DEL TERRENO.</strong> El propietario hace entrega física del lote descrito al cliente, quien lo recibe de conformidad para destinarlo exclusivamente a actividades de limpieza, mantenimiento, delimitación y conservación.</p><p><strong>SEGUNDA. – LIMITACIÓN DE USO.</strong> El cliente se compromete a no realizar construcciones permanentes, instalaciones o modificaciones estructurales sin la autorización previa y por escrito del propietario.</p><p><strong>TERCERA. – OBLIGACIÓN DE PAGO.</strong> El cliente reconoce que el lote no ha sido liquidado en su totalidad, por lo que se obliga a cumplir puntualmente con los pagos establecidos en el contrato de compraventa correspondiente.</p><p><strong>CUARTA. – REVOCACIÓN POR INCUMPLIMIENTO.</strong> En caso de incumplimiento en los pagos, el propietario podrá revocar la presente entrega de manera inmediata, sin responsabilidad alguna, reservándose el ejercicio de las acciones legales que correspondan.</p><p><strong>QUINTA. – NATURALEZA DE LA ENTREGA.</strong> La presente entrega no constituye transmisión de propiedad, misma que quedará sujeta al cumplimiento total de las obligaciones de pago por parte del cliente.</p><div style="height:60px"></div><div class="signature-grid"><div><div class="signature-line"></div><div class="sign-label">PROPIETARIO</div><div><span class="contract-field">{{propietario}}</span></div></div><div><div class="signature-line"></div><div class="sign-label">COMPRADOR / REPRESENTANTE</div><div><span class="contract-field">{{cliente_nombre}}</span></div></div></div><div class="ap-foot">{{empresa_sucursal}}</div></div></div></section>', 1, NOW(), NOW()),
(3, 1, 'Apartado de titulo de accion en copropiedad', 'Apartado', '<section class="contract-letter-page apartado-page"><div class="page-layer"><div class="ap-marco"><div class="ap-head"><div class="ap-logo-box"><img class="ap-logo" src="{{proyecto_logo}}" alt="Logotipo del proyecto"></div><div class="ap-title">APARTADO DE TÍTULO DE ACCIÓN EN COPROPIEDAD</div></div><div class="ap-body"><p>En la Ciudad de {{ciudad}}, siendo el día {{fecha_larga}}, {{depositario}} a quien en lo sucesivo se le denominará <strong>EL DEPOSITARIO</strong> recibe de {{cliente_nombre}} a quien en lo sucesivo se le denominará <strong>{{apartante_articulo}} APARTANTE</strong> la cantidad de {{monto_apartado}} ({{monto_apartado_letra}}) por concepto de APARTADO DE UN TÍTULO DE ACCIÓN EN COPROPIEDAD identificado con el folio {{folio_lote}} del programa en copropiedad del proyecto de interés social {{proyecto}}, esta cantidad será descontada de la primera aportación necesaria para formalizar el Contrato de depósito y administración de aportaciones correspondiente sobre el TÍTULO, siendo esta última la cantidad total de {{precio_total}} ({{precio_total_letra}}).</p><p>En virtud de lo anterior, {{apartante_trato}} {{cliente_nombre}} quien deposita la cantidad antes mencionada, se compromete a depositar en el domicilio de El DEPOSITARIO la cantidad restante de {{saldo}} ({{saldo_letra}}) en un lapso de 7 días naturales a partir de esta fecha, a reunir y hacer entrega a El DEPOSITARIO de los siguientes documentos con la finalidad de generar los anexos que sean necesarios al expediente:</p><ul class="ap-docs"><li>IDENTIFICACIÓN OFICIAL (INE, Pasaporte, Cartilla de servicio militar, Matrícula Consular).</li><li>CURP (Clave Única de Registro de Población).</li><li>COMPROBANTE DE DOMICILIO (no mayor a 2 meses).</li><li>ACTA DE NACIMIENTO.</li><li>ACTA DE MATRIMONIO (si aplica).</li><li>DECLARACIÓN DE SOLVENCIA ECONÓMICA.</li><li>CARTA DE AUTORIZACIÓN DE USO DE DATOS PERSONALES.</li></ul><p>Desde el momento y hasta que sea pagada en su totalidad la aportación inicial, ésta será destinada al concepto de Administración, Operación y Organización, y queda asentado en el Contrato de Depósito y Administración de Aportaciones que se firmará en lo sucesivo. Motivo por el cual esta aportación no podrá ser devuelta a {{apartante_articulo}} APARTANTE bajo ninguna circunstancia.</p><p>{{apartante_articulo_min}} APARTANTE acepta que, una vez formalizada la compra, será {{apartante_considerado}} {{apartante_copropietario}} de un TÍTULO DE ACCIÓN EN COPROPIEDAD correspondiente al folio mencionado anteriormente, y que tendrá derechos y responsabilidades proporcionales a su participación, conforme a lo estipulado en el contrato de copropiedad.</p><div class="ap-signs"><div class="ap-sign"><div class="ap-rol">{{apartante_articulo}} APARTANTE</div><div class="ap-firma">FIRMA: <span class="ap-line"></span></div><div class="ap-name">{{cliente_nombre}}</div><div class="ap-fecha">FECHA: {{fecha_larga}}</div></div><div class="ap-sign"><div class="ap-rol">EL DEPOSITARIO</div><div class="ap-firma">FIRMA: <span class="ap-line"></span></div><div class="ap-name">{{depositario}}</div><div class="ap-cargo">CARGO: {{depositario_cargo}}</div></div></div></div><div class="ap-foot">{{empresa_sucursal}}</div></div></div></section>', 1, NOW(), NOW()),
(4, 1, 'Carta de autorizacion de datos personales', 'Datos personales', '<section class="contract-letter-page apartado-page datos-page"><div class="page-layer"><div class="ap-marco"><div class="ap-head"><div class="ap-logo-box"><img class="ap-logo" src="{{proyecto_logo}}" alt="Logotipo del proyecto"></div><div class="ap-title">CARTA DE AUTORIZACIÓN DE DATOS PERSONALES</div></div><div class="ap-body"><div class="ca-fecha">Ciudad de {{ciudad}}. {{fecha_larga}}.</div><div class="ca-dest">C. {{empresa_representante}}<br>{{empresa_cargo}} DEL PROYECTO {{proyecto}}<br>P R E S E N T E</div><p>Yo, {{cliente_nombre}}, de nacionalidad {{cliente_nacionalidad}}, mayor de edad, plenamente consciente de mis facultades legales con domicilio en {{cliente_domicilio}}, y con número de teléfono {{cliente_telefono}}, por medio de la presente autorizo a EL C. {{empresa_representante}} el uso de mis datos personales, exclusivamente para los trámites necesarios relacionados con el Proyecto de interés social {{proyecto}} conforme a lo establecido en la Ley Federal de Protección de Datos Personales en Posesión de los Particulares. Asimismo, comprendo que en cualquier momento puedo revocar mi consentimiento conforme a los procedimientos establecidos en el Proyecto.</p><div class="ca-firma"><div class="ca-atte">ATENTAMENTE</div><div class="ca-firma-linea">FIRMA: <span class="ap-line"></span></div><div class="ca-firma-nombre">{{cliente_nombre}}</div></div></div><div class="ap-foot">{{empresa_sucursal}}</div></div></div></section>', 1, NOW(), NOW()),
(5, 1, 'Declaracion de solvencia economica', 'Solvencia', '<section class="contract-letter-page apartado-page datos-page solv-page"><div class="page-layer"><div class="ap-marco"><div class="ap-head"><div class="ap-logo-box"><img class="ap-logo" src="{{proyecto_logo}}" alt="Logotipo del proyecto"></div><div class="ap-title">DECLARACIÓN DE SOLVENCIA ECONÓMICA</div></div><div class="ap-body"><div class="ca-fecha">Ciudad de {{ciudad}}. {{fecha_larga}}.</div><div class="ca-dest">C. {{empresa_representante}}<br>{{empresa_cargo}} DEL PROYECTO {{proyecto}}<br>P R E S E N T E</div><p>Yo, {{cliente_nombre}}, de nacionalidad {{cliente_nacionalidad}}, mayor de edad, plenamente consciente de mis facultades legales con domicilio en {{cliente_domicilio}}, y con número de teléfono {{cliente_telefono}} manifiesto bajo protesta de decir la verdad que:</p><div class="solv-tengo">TENGO EL INTERÉS Y GOZO DE SOLVENCIA ECONÓMICA</div><p>Para celebrar un Contrato de Depósito y Administración de Aportaciones, con el fin de convertirme en {{apartante_beneficiario}} de la acción en copropiedad identificada con el folio {{folio_lote}}, del Proyecto de interés social {{proyecto}}, ubicado en la superficie de {{ubicacion_legal}}.</p><p>Que no me encuentro {{apartante_sujeto}} a ninguna situación de insolvencia que pueda limitar o afectar mi capacidad para cumplir con mis compromisos financieros. Asimismo, aseguro que los documentos e información proporcionada sobre mi situación económica son verídicos y completos. En caso de que se presente algún cambio en mi situación financiera, me comprometo a notificarlo de inmediato a las personas pertinentes.</p><div class="ca-firma"><div class="ca-atte">ATENTAMENTE</div><div class="ca-firma-linea">FIRMA: <span class="ap-line"></span></div><div class="ca-firma-nombre">{{cliente_nombre}}</div></div></div><div class="ap-foot">{{empresa_sucursal}}</div></div></div></section>', 1, NOW(), NOW()),
(6, 1, 'Promesa de sesion / compraventa', 'Promesa', '<section class="contract-letter-page promesa-page"><div class="page-layer"><div class="ap-marco"><div class="pr-head"><div class="pr-head-left"><div class="promesa-head"><div><strong>TRÁMITE:</strong></div><div><span class="contract-field">{{tipo_promesa}}</span></div></div><div class="promesa-head project"><div><strong>Proyecto:</strong></div><div><span class="contract-field">{{proyecto}}</span></div></div></div><div class="pr-logos"><img class="pr-logo-emp" src="{{empresa_logo}}" alt="Logo de la empresa"><img class="pr-logo-proy" src="{{proyecto_logo}}" alt="Logotipo del proyecto"></div></div><h2 class="center">Datos del solicitante</h2><div class="kv-row"><div class="kv-item"><span class="kv-label">Nombre del titular:</span><span class="kv-value"><span class="contract-field">{{cliente_nombre}}</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Nombre del Representante Legal:</span><span class="kv-value"><span class="contract-field">{{cliente_representante_legal}}</span></span></div></div><div class="dual-head"><div><strong>Estado Civil</strong></div><div><strong>Ocupación</strong></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Titular:</span><span class="kv-value"><span class="contract-field">{{cliente_estado_civil}}</span></span></div><div class="kv-item"><span class="kv-label">Titular:</span><span class="kv-value"><span class="contract-field">{{cliente_ocupacion}}</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">R. Legal:</span><span class="kv-value"><span class="contract-field">{{representante_estado_civil}}</span></span></div><div class="kv-item"><span class="kv-label">R. Legal:</span><span class="kv-value"><span class="contract-field">{{representante_ocupacion}}</span></span></div></div><h2 class="center">Domicilio</h2><div class="kv-row"><div class="kv-item"><span class="kv-label">Calle:</span><span class="kv-value"><span class="contract-field">{{cliente_calle}}</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Número:</span><span class="kv-value"><span class="contract-field">{{cliente_numero}}</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Colonia:</span><span class="kv-value"><span class="contract-field">{{cliente_colonia}}</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Código Postal:</span><span class="kv-value"><span class="contract-field">{{cliente_codigo_postal}}</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Municipio:</span><span class="kv-value"><span class="contract-field">{{cliente_municipio}}</span></span></div><div class="kv-item"><span class="kv-label">Estado:</span><span class="kv-value"><span class="contract-field">{{cliente_estado}}</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Teléfono / Celular:</span><span class="kv-value"><span class="contract-field">{{cliente_telefono}}</span></span></div></div><div class="quad-grid"><div><span class="q-label">Número de Lote:</span><span class="q-value"><span class="contract-field">{{lote}}</span></span></div><div><span class="q-label">Manzana:</span><span class="q-value"><span class="contract-field">{{manzana}}</span></span></div><div><span class="q-label">Plazo:</span><span class="q-value"><span class="contract-field">{{plazo}}</span></span></div><div><span class="q-label">Anualidad:</span><span class="q-value"><span class="contract-field">{{anualidad}}</span></span></div><div><span class="q-label">Precio del lote:</span><span class="q-value"><span class="contract-field">{{precio_total}}</span></span></div><div><span class="q-label">Mensualidad:</span><span class="q-value"><span class="contract-field">{{mensualidad}}</span></span></div><div><span class="q-label">Enganche:</span><span class="q-value"><span class="contract-field">{{enganche}}</span></span></div></div><p class="note-line"><strong>Nota:</strong> Anexar copia de credencial de elector.</p><div class="ap-foot">{{empresa_sucursal}}</div></div></div></section>', 1, NOW(), NOW());

-- Contratos demo enrolados con membrete oficial por hoja y pie de sucursal
INSERT INTO contracts (id, tenant_id, contract_template_id, client_id, property_id, lote_id, advisor_id, title, body, status, signed_at, created_at, updated_at) VALUES
(1, 1, 1, 1, NULL, 1, 1, 'Contrato de deposito y administracion de aportaciones - Carlos Mendoza Alvarez - LOTE 1 MZA A', '<section class="contract-letter-page apartado-page contrato-page"><div class="page-layer"><div class="ap-marco"><div class="ap-head"><div class="ap-logo-box"><img class="ap-logo" src="/storage/project-logos/demo-residencial-valle.svg" alt="Logotipo del proyecto"></div><div class="ap-title">CONTRATO DE DEPÓSITO Y ADMINISTRACIÓN DE APORTACIONES</div></div><div class="ap-body"><p>En la ciudad de <span class="contract-field">Tepic, Nayarit</span>, siendo el día <span class="contract-field">29 de mayo de 2026</span>, comparecen por una parte el C. <span class="contract-field">Carlos Daniel Rivera Suarez</span>, mexicano, mayor de edad, con domicilio en <span class="contract-field">Av. Ignacio Allende #79 INT. 2, Col. Centro, C.P. 63000, Tepic, Nayarit</span>, teléfono <span class="contract-field">311-611-0204</span> y correo electrónico <span class="contract-field">casaamigainmobiliaria@gmail.com</span>, apto para administrar, contratar y obligarse, a quien en lo sucesivo se le denominará <strong>EL DEPOSITARIO</strong>; y por otra parte <span class="contract-field">Carlos Mendoza Alvarez</span>, de nacionalidad <span class="contract-field">mexicana</span>, estado civil <span class="contract-field">Soltero</span>, mayor de edad, originaria de <span class="contract-field">Tepic, Nayarit</span>, con fecha de nacimiento <span class="contract-field">15/03/1988</span>, domicilio en <span class="contract-field">Av. Mar de Japon #159, Fracc. Lagos del Country, C.P. 63175, Tepic, Nayarit</span>, teléfono <span class="contract-field">311-261-8121</span> y ocupación <span class="contract-field">Comerciante</span>, a quien en lo sucesivo se le denominará <strong>LA ASOCIADA</strong>. Las partes manifiestan que tienen concertado el presente contrato, al tenor de las siguientes:</p><h2 class="center spaced">DECLARACIONES</h2><ol class="roman"><li>Manifiesta LA ASOCIADA tener interés en ser beneficiaria de una de las acciones que promueve EL DEPOSITARIO, identificada con el folio <span class="contract-field">LOTE 1 MZA A</span>, del proyecto <span class="contract-field">Residencial Valle</span>, ubicado en <span class="contract-field">Tepic, Nayarit</span>, con las características mencionadas en el ANEXO A que se presentará para revisión y aprobación ante las autoridades competentes.</li><li>LA ASOCIADA acepta continuar integrada al programa bajo la personalidad jurídica de EL DEPOSITARIO, incorporándose con carácter de beneficiaria conforme a los objetivos del proyecto.</li></ol><p>El programa tiene por objeto gestionar de manera conjunta la adquisición de terrenos, parcelas ejidales o pequeñas propiedades mediante un proceso organizado y transparente; facilitar la autorización legal para la compra, venta y subdivisión; proporcionar facilidades de pago; y brindar asesoría jurídica y administrativa a solicitantes, beneficiarios y afiliados.</p><p>Los ingresos del programa provendrán de donaciones, aportaciones o cuotas de los participantes. Las operaciones relacionadas con el público deberán realizarse en un marco ético, transparente y conforme a la normativa aplicable.</p><ol class="roman" start="3"><li>Expone EL DEPOSITARIO que cuenta con facultades para administrar el inmueble o antecedente de propiedad descrito como <span class="contract-field">Parcela 239 Z-3 P1/1 del Ejido de Mora, Municipio de Tepic, Nayarit</span>, acreditado mediante <span class="contract-field">Escritura publica No. 12345, Vol. 50</span>.</li></ol></div><div class="ap-foot">SUCURSAL AV. ALLENDE - Av. Ignacio Allende #79 INT. 2, Col. Centro, C.P. 63000, Cd. de Tepic, Mpio. Tepic, Edo. de Nayarit Cel: 311-611-0204 E-mail: casaamigainmobiliaria@gmail.com</div></div></div></section><section class="contract-letter-page apartado-page contrato-page"><div class="page-layer"><div class="ap-marco"><div class="ap-head"><div class="ap-logo-box"><img class="ap-logo" src="/storage/project-logos/demo-residencial-valle.svg" alt="Logotipo del proyecto"></div><div class="ap-title">CONTRATO DE DEPÓSITO Y ADMINISTRACIÓN DE APORTACIONES</div></div><div class="ap-body"><ol class="roman" start="4"><li>Ambas partes conocen el objetivo del programa y se obligan a cumplir la normatividad vigente, incluyendo la legislación de fraccionamientos, acciones de urbanización y demás disposiciones aplicables.</li></ol><p>En virtud de lo expuesto, es voluntad de las partes celebrar el presente contrato sujeto a las siguientes:</p><h2 class="center spaced">CLÁUSULAS</h2><p><strong>PRIMERA. DEPÓSITO Y PLAN DE APORTACIONES.</strong> EL DEPOSITARIO recibirá y administrará las aportaciones de LA ASOCIADA para cubrir el costo de la acción identificada con el folio <span class="contract-field">LOTE 1 MZA A</span>. El precio total es <span class="contract-field">$850,000.00</span> (<span class="contract-field">OCHOCIENTOS CINCUENTA MIL PESOS 00/100 M.N.</span>), cubierto con una aportación inicial de <span class="contract-field">$50,000.00</span> y el saldo de <span class="contract-field">$800,000.00</span> conforme al siguiente esquema: <span class="contract-field">Plan de Aportacion 2 (Sin Anualidad)</span>. Plazo: <span class="contract-field">24 meses</span>. Mensualidad: <span class="contract-field">$33,333.33</span>. Anualidad: <span class="contract-field">No aplica</span>.</p><p>Cuando la fecha de aportación corresponda a un día inhábil, LA ASOCIADA deberá realizarla un día antes en sucursal o institución bancaria, o en la fecha pactada mediante transferencia. Deberá conservar el comprobante y entregarlo a EL DEPOSITARIO para la emisión del recibo correspondiente.</p><p><strong>SEGUNDA. TÍTULO DE PARTICIPACIÓN.</strong> Una vez cubierto el precio total y las aportaciones de escrituración que correspondan, EL DEPOSITARIO entregará un título de participación que acredite a LA ASOCIADA como copropietaria pro indiviso del inmueble descrito. Si la entrega física ocurre antes de contar con permisos y servicios, se realizará únicamente para conservación y mantenimiento, sin autorización para construir.</p><p><strong>TERCERA. ADMINISTRACIÓN.</strong> EL DEPOSITARIO administrará las aportaciones durante la implementación del programa. LA ASOCIADA se obliga a realizar sus pagos puntualmente en sucursal o en la institución bancaria que le sea indicada.</p><p>El retraso podrá generar gastos de cobranza conforme a las políticas vigentes y a lo pactado por las partes.</p></div><div class="ap-foot">SUCURSAL AV. ALLENDE - Av. Ignacio Allende #79 INT. 2, Col. Centro, C.P. 63000, Cd. de Tepic, Mpio. Tepic, Edo. de Nayarit Cel: 311-611-0204 E-mail: casaamigainmobiliaria@gmail.com</div></div></div></section><section class="contract-letter-page apartado-page contrato-page"><div class="page-layer"><div class="ap-marco"><div class="ap-head"><div class="ap-logo-box"><img class="ap-logo" src="/storage/project-logos/demo-residencial-valle.svg" alt="Logotipo del proyecto"></div><div class="ap-title">CONTRATO DE DEPÓSITO Y ADMINISTRACIÓN DE APORTACIONES</div></div><div class="ap-body"><p><strong>CUARTA. RESCISIÓN Y CAMBIO DE TITULARIDAD.</strong> Si LA ASOCIADA desea rescindir el contrato, podrá recuperar su capital mediante la cesión de su parte social a un tercero autorizado por EL DEPOSITARIO. El cambio de titularidad causará la tarifa administrativa vigente.</p><p>Cuando la rescisión se solicite antes de la primera aportación, podrá aplicarse una penalización equivalente al enganche inicial por gastos de operación y comisiones. LA ASOCIADA deberá firmar la solicitud de rescisión correspondiente.</p><p>Si LA ASOCIADA no encuentra sustituto, EL DEPOSITARIO podrá buscarlo y descontar hasta el porcentaje pactado por costos de administración, operación y organización. La devolución se realizará cuando exista un nuevo depositante y será proporcional a las aportaciones efectivamente cubiertas.</p><p><strong>QUINTA. INCUMPLIMIENTO.</strong> El incumplimiento de tres mensualidades consecutivas o más facultará a EL DEPOSITARIO para cancelar el contrato. La devolución de aportaciones quedará sujeta a la localización de un nuevo depositante y a las deducciones administrativas convenidas.</p><p><strong>SEXTA. APORTACIONES EXTRAORDINARIAS.</strong> LA ASOCIADA se obliga a cubrir los costos de administración, operación y organización, así como las aportaciones extraordinarias aprobadas para servicios, instalaciones, equipamiento, urbanización y demás trabajos exigidos por las autoridades.</p><p>Los montos se determinarán después de analizar opciones que reduzcan costos y deberán cubrirse en tiempo y forma una vez aprobados. Las partes promoverán compras y contrataciones conjuntas para evitar intermediación y obtener condiciones favorables de precio, calidad y entrega.</p></div><div class="ap-foot">SUCURSAL AV. ALLENDE - Av. Ignacio Allende #79 INT. 2, Col. Centro, C.P. 63000, Cd. de Tepic, Mpio. Tepic, Edo. de Nayarit Cel: 311-611-0204 E-mail: casaamigainmobiliaria@gmail.com</div></div></div></section><section class="contract-letter-page apartado-page contrato-page"><div class="page-layer"><div class="ap-marco"><div class="ap-head"><div class="ap-logo-box"><img class="ap-logo" src="/storage/project-logos/demo-residencial-valle.svg" alt="Logotipo del proyecto"></div><div class="ap-title">CONTRATO DE DEPÓSITO Y ADMINISTRACIÓN DE APORTACIONES</div></div><div class="ap-body"><p><strong>SÉPTIMA. EXPEDIENTE.</strong> LA ASOCIADA entregará identificación oficial vigente, CURP, acta de nacimiento, comprobante de domicilio y cualquier otro documento necesario para administrar las aportaciones y formalizar la operación.</p><p><strong>OCTAVA. SUSTITUCIÓN POR FALLECIMIENTO.</strong> Si LA ASOCIADA fallece antes de completar las aportaciones o concluir el proceso, designa como sustituto(a) a <span class="contract-field">_______________________</span>, quien asumirá los derechos y obligaciones pendientes bajo este contrato.</p><p><strong>NOVENA. PROTECCIÓN DE DOCUMENTOS Y DATOS.</strong> EL DEPOSITARIO custodiará los documentos entregados y cumplirá con la carta de autorización de datos personales, garantizando su confidencialidad y manejo conforme a la legislación aplicable.</p><p><strong>DÉCIMA. AUSENCIA DE VICIOS Y JURISDICCIÓN.</strong> Las partes declaran que no existe dolo, mala fe, lesión ni enriquecimiento ilegítimo. En caso de controversia procurarán primero una mediación amigable y, de no resolverse, se someterán a los tribunales competentes de <span class="contract-field">Tepic, Nayarit</span>.</p><p>Leído el presente instrumento y enteradas las partes de su contenido, alcance, valor y fuerza legal, lo firman en <span class="contract-field">Av. Ignacio Allende #79 INT. 2, Col. Centro, C.P. 63000, Tepic, Nayarit</span>, el día <span class="contract-field">29 de mayo de 2026</span>.</p><div style="height:160px"></div><div class="signature-grid"><div><div class="signature-line"></div><div class="sign-label">EL DEPOSITARIO</div><div><span class="contract-field">Carlos Daniel Rivera Suarez</span></div></div><div><div class="signature-line"></div><div class="sign-label">LA ASOCIADA</div><div><span class="contract-field">Carlos Mendoza Alvarez</span></div></div></div><p class="center"><strong>FECHA:</strong> <span class="contract-field">29 de mayo de 2026</span></p></div><div class="ap-foot">SUCURSAL AV. ALLENDE - Av. Ignacio Allende #79 INT. 2, Col. Centro, C.P. 63000, Cd. de Tepic, Mpio. Tepic, Edo. de Nayarit Cel: 311-611-0204 E-mail: casaamigainmobiliaria@gmail.com</div></div></div></section>', 'En revision', NULL, NOW(), NOW()),
(2, 1, 2, 1, NULL, 1, 1, 'Acta de entrega de terreno para mantenimiento y conservacion - Carlos Mendoza Alvarez - LOTE 1 MZA A', '<section class="contract-letter-page apartado-page acta-page"><div class="page-layer"><div class="ap-marco"><h1>ACTA DE ENTREGA DE TERRENO PARA MANTENIMIENTO Y CONSERVACIÓN</h1><div class="subtitle">PROYECTO: “<span class="contract-field">Residencial Valle</span>”</div><p>En la ciudad de <span class="contract-field">Tepic, Nayarit</span>, a <span class="contract-field">29 de mayo de 2026</span>, se celebra la presente acta de entrega de terreno, por una parte el C. <span class="contract-field">Carlos Daniel Rivera Suarez</span>, en su carácter de propietario del proyecto denominado “<span class="contract-field">Residencial Valle</span>”, y por la otra el C. <span class="contract-field">Carlos Mendoza Alvarez</span>, en su carácter de comprador, al tenor de las siguientes:</p><h2>DATOS DEL TERRENO</h2><div class="kv-row"><div class="kv-item"><span class="kv-label">Número de lote:</span><span class="kv-value"><span class="contract-field">1</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Medidas:</span><span class="kv-value"><span class="contract-field">10 m</span> de frente por <span class="contract-field">25 m</span> de fondo</span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Superficie total:</span><span class="kv-value"><span class="contract-field">250 m²</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Ubicación:</span><span class="kv-value"><span class="contract-field">Villas Carley, Tepic, Nayarit</span></span></div></div><h2>DECLARACIONES</h2><ol class="roman"><li>El propietario declara ser el legítimo poseedor del terreno correspondiente al proyecto “<span class="contract-field">Residencial Valle</span>”.</li><li>El cliente manifiesta haber celebrado un contrato de compraventa respecto del lote antes descrito, el cual no ha sido liquidado en su totalidad.</li><li>Ambas partes acuerdan que la entrega del terreno se realiza exclusivamente para fines de mantenimiento y conservación.</li></ol><h2>CLÁUSULAS</h2><p><strong>PRIMERA. – ENTREGA DEL TERRENO.</strong> El propietario hace entrega física del lote descrito al cliente, quien lo recibe de conformidad para destinarlo exclusivamente a actividades de limpieza, mantenimiento, delimitación y conservación.</p><p><strong>SEGUNDA. – LIMITACIÓN DE USO.</strong> El cliente se compromete a no realizar construcciones permanentes, instalaciones o modificaciones estructurales sin la autorización previa y por escrito del propietario.</p><p><strong>TERCERA. – OBLIGACIÓN DE PAGO.</strong> El cliente reconoce que el lote no ha sido liquidado en su totalidad, por lo que se obliga a cumplir puntualmente con los pagos establecidos en el contrato de compraventa correspondiente.</p><p><strong>CUARTA. – REVOCACIÓN POR INCUMPLIMIENTO.</strong> En caso de incumplimiento en los pagos, el propietario podrá revocar la presente entrega de manera inmediata, sin responsabilidad alguna, reservándose el ejercicio de las acciones legales que correspondan.</p><p><strong>QUINTA. – NATURALEZA DE LA ENTREGA.</strong> La presente entrega no constituye transmisión de propiedad, misma que quedará sujeta al cumplimiento total de las obligaciones de pago por parte del cliente.</p><div style="height:60px"></div><div class="signature-grid"><div><div class="signature-line"></div><div class="sign-label">PROPIETARIO</div><div><span class="contract-field">Carlos Daniel Rivera Suarez</span></div></div><div><div class="signature-line"></div><div class="sign-label">COMPRADOR / REPRESENTANTE</div><div><span class="contract-field">Carlos Mendoza Alvarez</span></div></div></div><div class="ap-foot">SUCURSAL AV. ALLENDE - Av. Ignacio Allende #79 INT. 2, Col. Centro, C.P. 63000, Cd. de Tepic, Mpio. Tepic, Edo. de Nayarit Cel: 311-611-0204 E-mail: casaamigainmobiliaria@gmail.com</div></div></div></section>', 'En revision', NULL, NOW(), NOW()),
(3, 1, 3, 1, NULL, 1, 1, 'Apartado de titulo de accion en copropiedad - Carlos Mendoza Alvarez - LOTE 1 MZA A', '<section class="contract-letter-page apartado-page"><div class="page-layer"><div class="ap-marco"><div class="ap-head"><div class="ap-logo-box"><img class="ap-logo" src="/storage/project-logos/demo-residencial-valle.svg" alt="Logotipo del proyecto"></div><div class="ap-title">APARTADO DE TÍTULO DE ACCIÓN EN COPROPIEDAD</div></div><div class="ap-body"><p>En la Ciudad de Tepic, Nayarit, siendo el día 29 de mayo de 2026, Carlos Daniel Rivera Suarez a quien en lo sucesivo se le denominará <strong>EL DEPOSITARIO</strong> recibe de Carlos Mendoza Alvarez a quien en lo sucesivo se le denominará <strong>EL APARTANTE</strong> la cantidad de $50,000.00 (CINCUENTA MIL PESOS 00/100 M.N.) por concepto de APARTADO DE UN TÍTULO DE ACCIÓN EN COPROPIEDAD identificado con el folio LOTE 1 MZA A del programa en copropiedad del proyecto de interés social Residencial Valle, esta cantidad será descontada de la primera aportación necesaria para formalizar el Contrato de depósito y administración de aportaciones correspondiente sobre el TÍTULO, siendo esta última la cantidad total de $850,000.00 (OCHOCIENTOS CINCUENTA MIL PESOS 00/100 M.N.).</p><p>En virtud de lo anterior, El C. Carlos Mendoza Alvarez quien deposita la cantidad antes mencionada, se compromete a depositar en el domicilio de El DEPOSITARIO la cantidad restante de $800,000.00 (OCHOCIENTOS MIL PESOS 00/100 M.N.) en un lapso de 7 días naturales a partir de esta fecha, a reunir y hacer entrega a El DEPOSITARIO de los siguientes documentos con la finalidad de generar los anexos que sean necesarios al expediente:</p><ul class="ap-docs"><li>IDENTIFICACIÓN OFICIAL (INE, Pasaporte, Cartilla de servicio militar, Matrícula Consular).</li><li>CURP (Clave Única de Registro de Población).</li><li>COMPROBANTE DE DOMICILIO (no mayor a 2 meses).</li><li>ACTA DE NACIMIENTO.</li><li>ACTA DE MATRIMONIO (si aplica).</li><li>DECLARACIÓN DE SOLVENCIA ECONÓMICA.</li><li>CARTA DE AUTORIZACIÓN DE USO DE DATOS PERSONALES.</li></ul><p>Desde el momento y hasta que sea pagada en su totalidad la aportación inicial, ésta será destinada al concepto de Administración, Operación y Organización, y queda asentado en el Contrato de Depósito y Administración de Aportaciones que se firmará en lo sucesivo. Motivo por el cual esta aportación no podrá ser devuelta a EL APARTANTE bajo ninguna circunstancia.</p><p>El APARTANTE acepta que, una vez formalizada la compra, será considerado copropietario de un TÍTULO DE ACCIÓN EN COPROPIEDAD correspondiente al folio mencionado anteriormente, y que tendrá derechos y responsabilidades proporcionales a su participación, conforme a lo estipulado en el contrato de copropiedad.</p><div class="ap-signs"><div class="ap-sign"><div class="ap-rol">EL APARTANTE</div><div class="ap-firma">FIRMA: <span class="ap-line"></span></div><div class="ap-name">Carlos Mendoza Alvarez</div><div class="ap-fecha">FECHA: 29 de mayo de 2026</div></div><div class="ap-sign"><div class="ap-rol">EL DEPOSITARIO</div><div class="ap-firma">FIRMA: <span class="ap-line"></span></div><div class="ap-name">Carlos Daniel Rivera Suarez</div><div class="ap-cargo">CARGO: Coord. del Departamento de Administración y Finanzas.</div></div></div></div><div class="ap-foot">SUCURSAL AV. ALLENDE - Av. Ignacio Allende #79 INT. 2, Col. Centro, C.P. 63000, Cd. de Tepic, Mpio. Tepic, Edo. de Nayarit Cel: 311-611-0204 E-mail: casaamigainmobiliaria@gmail.com</div></div></div></section>', 'En revision', NULL, NOW(), NOW()),
(4, 1, 4, 1, NULL, 1, 1, 'Carta de autorizacion de datos personales - Carlos Mendoza Alvarez - LOTE 1 MZA A', '<section class="contract-letter-page apartado-page datos-page"><div class="page-layer"><div class="ap-marco"><div class="ap-head"><div class="ap-logo-box"><img class="ap-logo" src="/storage/project-logos/demo-residencial-valle.svg" alt="Logotipo del proyecto"></div><div class="ap-title">CARTA DE AUTORIZACIÓN DE DATOS PERSONALES</div></div><div class="ap-body"><div class="ca-fecha">Ciudad de Tepic, Nayarit. 29 de mayo de 2026.</div><div class="ca-dest">C. Carlos Daniel Rivera Suarez<br>Asociante y Administrador Unico DEL PROYECTO Residencial Valle<br>P R E S E N T E</div><p>Yo, Carlos Mendoza Alvarez, de nacionalidad mexicana, mayor de edad, plenamente consciente de mis facultades legales con domicilio en Av. Mar de Japon #159, Fracc. Lagos del Country, C.P. 63175, Tepic, Nayarit, y con número de teléfono 3112345678, por medio de la presente autorizo a EL C. Carlos Daniel Rivera Suarez el uso de mis datos personales, exclusivamente para los trámites necesarios relacionados con el Proyecto de interés social Residencial Valle conforme a lo establecido en la Ley Federal de Protección de Datos Personales en Posesión de los Particulares. Asimismo, comprendo que en cualquier momento puedo revocar mi consentimiento conforme a los procedimientos establecidos en el Proyecto.</p><div class="ca-firma"><div class="ca-atte">ATENTAMENTE</div><div class="ca-firma-linea">FIRMA: <span class="ap-line"></span></div><div class="ca-firma-nombre">Carlos Mendoza Alvarez</div></div></div><div class="ap-foot">SUCURSAL AV. ALLENDE - Av. Ignacio Allende #79 INT. 2, Col. Centro, C.P. 63000, Cd. de Tepic, Mpio. Tepic, Edo. de Nayarit Cel: 311-611-0204 E-mail: casaamigainmobiliaria@gmail.com</div></div></div></section>', 'En revision', NULL, NOW(), NOW()),
(5, 1, 5, 1, NULL, 1, 1, 'Declaracion de solvencia economica - Carlos Mendoza Alvarez - LOTE 1 MZA A', '<section class="contract-letter-page apartado-page datos-page solv-page"><div class="page-layer"><div class="ap-marco"><div class="ap-head"><div class="ap-logo-box"><img class="ap-logo" src="/storage/project-logos/demo-residencial-valle.svg" alt="Logotipo del proyecto"></div><div class="ap-title">DECLARACIÓN DE SOLVENCIA ECONÓMICA</div></div><div class="ap-body"><div class="ca-fecha">Ciudad de Tepic, Nayarit. 29 de mayo de 2026.</div><div class="ca-dest">C. Carlos Daniel Rivera Suarez<br>Asociante y Administrador Unico DEL PROYECTO Residencial Valle<br>P R E S E N T E</div><p>Yo, Carlos Mendoza Alvarez, de nacionalidad mexicana, mayor de edad, plenamente consciente de mis facultades legales con domicilio en Av. Mar de Japon #159, Fracc. Lagos del Country, C.P. 63175, Tepic, Nayarit, y con número de teléfono 3112345678 manifiesto bajo protesta de decir la verdad que:</p><div class="solv-tengo">TENGO EL INTERÉS Y GOZO DE SOLVENCIA ECONÓMICA</div><p>Para celebrar un Contrato de Depósito y Administración de Aportaciones, con el fin de convertirme en beneficiario de la acción en copropiedad identificada con el folio LOTE 1 MZA A, del Proyecto de interés social Residencial Valle, ubicado en la superficie de Parcela 239 Z-3 P1/1, del Ejido de Mora, Municipio de Tepic, Nayarit.</p><p>Que no me encuentro sujeto a ninguna situación de insolvencia que pueda limitar o afectar mi capacidad para cumplir con mis compromisos financieros. Asimismo, aseguro que los documentos e información proporcionada sobre mi situación económica son verídicos y completos. En caso de que se presente algún cambio en mi situación financiera, me comprometo a notificarlo de inmediato a las personas pertinentes.</p><div class="ca-firma"><div class="ca-atte">ATENTAMENTE</div><div class="ca-firma-linea">FIRMA: <span class="ap-line"></span></div><div class="ca-firma-nombre">Carlos Mendoza Alvarez</div></div></div><div class="ap-foot">SUCURSAL AV. ALLENDE - Av. Ignacio Allende #79 INT. 2, Col. Centro, C.P. 63000, Cd. de Tepic, Mpio. Tepic, Edo. de Nayarit Cel: 311-611-0204 E-mail: casaamigainmobiliaria@gmail.com</div></div></div></section>', 'En revision', NULL, NOW(), NOW()),
(6, 1, 6, 1, NULL, 1, 1, 'Promesa de sesion / compraventa - Carlos Mendoza Alvarez - LOTE 1 MZA A', '<section class="contract-letter-page promesa-page"><div class="page-layer"><div class="ap-marco"><div class="pr-head"><div class="pr-head-left"><div class="promesa-head"><div><strong>TRÁMITE:</strong></div><div><span class="contract-field">Promesa de sesion</span></div></div><div class="promesa-head project"><div><strong>Proyecto:</strong></div><div><span class="contract-field">Residencial Valle</span></div></div></div><div class="pr-logos"><img class="pr-logo-emp" src="/branding/logo-casa-amiga.png" alt="Logo de la empresa"><img class="pr-logo-proy" src="/storage/project-logos/demo-residencial-valle.svg" alt="Logotipo del proyecto"></div></div><h2 class="center">Datos del solicitante</h2><div class="kv-row"><div class="kv-item"><span class="kv-label">Nombre del titular:</span><span class="kv-value"><span class="contract-field">Carlos Mendoza Alvarez</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Nombre del Representante Legal:</span><span class="kv-value"><span class="contract-field">_______________________</span></span></div></div><div class="dual-head"><div><strong>Estado Civil</strong></div><div><strong>Ocupación</strong></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Titular:</span><span class="kv-value"><span class="contract-field">Casado</span></span></div><div class="kv-item"><span class="kv-label">Titular:</span><span class="kv-value"><span class="contract-field">Comerciante</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">R. Legal:</span><span class="kv-value"><span class="contract-field">_______________________</span></span></div><div class="kv-item"><span class="kv-label">R. Legal:</span><span class="kv-value"><span class="contract-field">_______________________</span></span></div></div><h2 class="center">Domicilio</h2><div class="kv-row"><div class="kv-item"><span class="kv-label">Calle:</span><span class="kv-value"><span class="contract-field">Av. Mar de Japon</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Número:</span><span class="kv-value"><span class="contract-field">159</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Colonia:</span><span class="kv-value"><span class="contract-field">Lagos del Country</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Código Postal:</span><span class="kv-value"><span class="contract-field">63175</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Municipio:</span><span class="kv-value"><span class="contract-field">Tepic</span></span></div><div class="kv-item"><span class="kv-label">Estado:</span><span class="kv-value"><span class="contract-field">Nayarit</span></span></div></div><div class="kv-row"><div class="kv-item"><span class="kv-label">Teléfono / Celular:</span><span class="kv-value"><span class="contract-field">3112345678</span></span></div></div><div class="quad-grid"><div><span class="q-label">Número de Lote:</span><span class="q-value"><span class="contract-field">1</span></span></div><div><span class="q-label">Manzana:</span><span class="q-value"><span class="contract-field">A</span></span></div><div><span class="q-label">Plazo:</span><span class="q-value"><span class="contract-field">24 meses</span></span></div><div><span class="q-label">Anualidad:</span><span class="q-value"><span class="contract-field">No aplica</span></span></div><div><span class="q-label">Precio del lote:</span><span class="q-value"><span class="contract-field">$850,000.00</span></span></div><div><span class="q-label">Mensualidad:</span><span class="q-value"><span class="contract-field">$33,333.33</span></span></div><div><span class="q-label">Enganche:</span><span class="q-value"><span class="contract-field">$50,000.00</span></span></div></div><p class="note-line"><strong>Nota:</strong> Anexar copia de credencial de elector.</p><div class="ap-foot">SUCURSAL AV. ALLENDE - Av. Ignacio Allende #79 INT. 2, Col. Centro, C.P. 63000, Cd. de Tepic, Mpio. Tepic, Edo. de Nayarit Cel: 311-611-0204 E-mail: casaamigainmobiliaria@gmail.com</div></div></div></section>', 'En revision', NULL, NOW(), NOW());


-- Comisiones
INSERT INTO commissions (tenant_id, advisor_id, property_id, amount, percentage, status, due_on, paid_at, created_at, updated_at) VALUES
(1, 1, 1, 85500, 3, 'Pendiente', DATE_ADD(CURDATE(), INTERVAL 5 DAY), NULL, NOW(), NOW()),
(1, 2, 2, 36000, 3, 'Pendiente', DATE_ADD(CURDATE(), INTERVAL 12 DAY), NULL, NOW(), NOW()),
(1, 4, 4, 29400, 3, 'Pagada', DATE_SUB(CURDATE(), INTERVAL 4 DAY), DATE_SUB(NOW(), INTERVAL 2 DAY), NOW(), NOW());

-- Workflow de ejemplo
INSERT INTO workflows (tenant_id, name, description, trigger_event, conditions, actions, is_active, created_at, updated_at) VALUES
(1, 'Recordar cuenta vencida', 'Cuando una cuenta de cliente se marca vencida, notifica al equipo y crea recordatorio.', 'account.overdue', NULL, '[{"type":"send_notification","params":{"title":"Cuenta vencida detectada","icon":"fa-triangle-exclamation","color":"#ef4444"}},{"type":"send_reminder","params":{"title":"Cobrar saldo vencido","type":"Pago","in_minutes":60,"notify_to":"Asesor especifico","message":"Hola {{cliente}}, tu cuenta tiene saldo vencido. Por favor contacta a tu asesor."}}]', 1, NOW(), NOW());

-- Configuracion general + branding + integraciones inicialmente vacias
INSERT INTO settings (`key`, value, created_at, updated_at) VALUES
('company_name', 'Casa Amiga Inmobiliaria', NOW(), NOW()),
('company_phone', '3116110204', NOW(), NOW()),
('company_address', 'Av. Ignacio Allende #79 INT. 2, Col. Centro, C.P. 63000, Tepic, Nayarit', NOW(), NOW()),
('company_email', 'casaamigainmobiliaria@gmail.com', NOW(), NOW()),
('company_rfc', '', NOW(), NOW()),
('company_representative', 'Carlos Daniel Rivera Suarez', NOW(), NOW()),
('company_role', 'Asociante y Administrador Unico', NOW(), NOW()),
('company_city', 'Tepic, Nayarit', NOW(), NOW()),
('company_branch', 'SUCURSAL AV. ALLENDE - Av. Ignacio Allende #79 INT. 2, Col. Centro, C.P. 63000, Cd. de Tepic, Mpio. Tepic, Edo. de Nayarit Cel: 311-611-0204 E-mail: casaamigainmobiliaria@gmail.com', NOW(), NOW()),
('default_client_nationality', 'mexicana', NOW(), NOW()),
('term_nav_formats', 'Gestión de documentos', NOW(), NOW()),
('term_nav_contracts', 'Documentos enrolados', NOW(), NOW()),
('term_nav_reservations', 'Apartados', NOW(), NOW()),
('tab_contratos', 'Documentos', NOW(), NOW()),
('whatsapp_country_code', '52', NOW(), NOW()),
('commission_default_percentage', '3', NOW(), NOW()),
('overdue_grace_days', '3', NOW(), NOW()),
('backup_keep_days', '30', NOW(), NOW()),
('security_enable_audit', '1', NOW(), NOW()),
('security_force_https', '0', NOW(), NOW()),
('brand_name', 'Casa Amiga', NOW(), NOW()),
('brand_subname', 'Inmobiliaria', NOW(), NOW()),
('brand_tagline', 'Sistema inmobiliario operativo', NOW(), NOW()),
('brand_logo_path', 'branding/logo-casa-amiga.png', NOW(), NOW()),
('brand_accent', '#c9a84c', NOW(), NOW()),
('brand_login_title', 'Sistema inmobiliario inteligente para operar ventas, pagos y contratos.', NOW(), NOW());

-- =====================================================================
-- PROYECTOS, MANZANAS, LOTES + CAMPOS NUEVOS (alineación con el código actual)
-- ---------------------------------------------------------------------
-- Estas tablas/columnas se agregan aparte para no tocar las definiciones
-- base. Como este archivo recrea todo desde cero, los ADD COLUMN nunca
-- chocan. (FOREIGN_KEY_CHECKS sigue en 0 hasta el final.)
-- =====================================================================

-- ---- Columnas nuevas en tablas existentes --------------------------
-- Todas las columnas nuevas (clients, customer_accounts.lote_id/plan de pago,
-- contracts.lote_id, property_media.role) ya vienen incluidas en sus
-- CREATE TABLE de arriba. No se necesitan ALTERs: así los INSERT de datos
-- demo nunca fallan por columnas faltantes y la importación no se corta.


-- ---- Tablas nuevas --------------------------------------------------
CREATE TABLE manzanas (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    project_id BIGINT UNSIGNED NOT NULL,
    nombre VARCHAR(191) NOT NULL,
    numero VARCHAR(30) NULL,
    letra VARCHAR(5) NULL,
    orientacion VARCHAR(20) NULL,
    notas TEXT NULL,
    created_at TIMESTAMP NULL,
    updated_at TIMESTAMP NULL,
    INDEX manzanas_project_id_index (project_id),
    CONSTRAINT manzanas_project_id_fk FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE lotes (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    project_id BIGINT UNSIGNED NOT NULL,
    manzana_id BIGINT UNSIGNED NOT NULL,
    numero VARCHAR(191) NOT NULL,
    frente DECIMAL(10,2) NULL,
    fondo DECIMAL(10,2) NULL,
    superficie_m2 DECIMAL(10,2) NULL,
    uso_suelo VARCHAR(40) NULL,
    orientacion VARCHAR(20) NULL,
    colindancias TEXT NULL,
    precio DECIMAL(14,2) NOT NULL DEFAULT 0,
    estado VARCHAR(20) NOT NULL DEFAULT 'Disponible',
    notas TEXT NULL,
    created_at TIMESTAMP NULL,
    updated_at TIMESTAMP NULL,
    INDEX lotes_project_id_index (project_id),
    INDEX lotes_manzana_id_index (manzana_id),
    UNIQUE KEY lotes_manzana_numero_unique (manzana_id, numero),
    CONSTRAINT lotes_project_id_fk FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
    CONSTRAINT lotes_manzana_id_fk FOREIGN KEY (manzana_id) REFERENCES manzanas(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE reservations (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
    client_id BIGINT UNSIGNED NOT NULL,
    advisor_id BIGINT UNSIGNED NULL,
    project_id BIGINT UNSIGNED NOT NULL,
    manzana_id BIGINT UNSIGNED NULL,
    lote_id BIGINT UNSIGNED NOT NULL,
    customer_account_id BIGINT UNSIGNED NULL,
    total_price DECIMAL(14,2) NOT NULL DEFAULT 0,
    deposit_required DECIMAL(14,2) NOT NULL DEFAULT 0,
    status VARCHAR(30) NOT NULL DEFAULT 'Activo',
    reserved_at DATE NULL,
    expires_at DATE NULL,
    converted_at TIMESTAMP NULL,
    cancelled_at TIMESTAMP NULL,
    refunded_at TIMESTAMP NULL,
    notes TEXT NULL,
    created_by BIGINT UNSIGNED NULL,
    created_at TIMESTAMP NULL,
    updated_at TIMESTAMP NULL,
    INDEX reservations_client_id_index (client_id),
    INDEX reservations_project_id_index (project_id),
    INDEX reservations_lote_id_index (lote_id),
    INDEX reservations_status_index (status),
    INDEX reservations_expires_at_index (expires_at),
    CONSTRAINT reservations_client_id_fk FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE CASCADE,
    CONSTRAINT reservations_advisor_id_fk FOREIGN KEY (advisor_id) REFERENCES advisors(id) ON DELETE SET NULL,
    CONSTRAINT reservations_project_id_fk FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
    CONSTRAINT reservations_manzana_id_fk FOREIGN KEY (manzana_id) REFERENCES manzanas(id) ON DELETE SET NULL,
    CONSTRAINT reservations_lote_id_fk FOREIGN KEY (lote_id) REFERENCES lotes(id) ON DELETE CASCADE,
    CONSTRAINT reservations_customer_account_id_fk FOREIGN KEY (customer_account_id) REFERENCES customer_accounts(id) ON DELETE SET NULL,
    CONSTRAINT reservations_created_by_fk FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE reservation_payments (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 1,
    reservation_id BIGINT UNSIGNED NOT NULL,
    client_id BIGINT UNSIGNED NOT NULL,
    project_id BIGINT UNSIGNED NOT NULL,
    lote_id BIGINT UNSIGNED NOT NULL,
    customer_account_id BIGINT UNSIGNED NULL,
    transaction_id BIGINT UNSIGNED NULL,
    payment_id BIGINT UNSIGNED NULL,
    amount DECIMAL(14,2) NOT NULL DEFAULT 0,
    payment_date DATE NOT NULL,
    method VARCHAR(40) NOT NULL DEFAULT 'Efectivo',
    reference VARCHAR(120) NULL,
    concept VARCHAR(160) NULL,
    status VARCHAR(30) NOT NULL DEFAULT 'Aplicado',
    receipt_path VARCHAR(500) NULL,
    notes TEXT NULL,
    created_at TIMESTAMP NULL,
    updated_at TIMESTAMP NULL,
    INDEX reservation_payments_reservation_id_index (reservation_id),
    INDEX reservation_payments_project_id_index (project_id),
    INDEX reservation_payments_lote_id_index (lote_id),
    INDEX reservation_payments_transaction_id_index (transaction_id),
    CONSTRAINT reservation_payments_reservation_id_fk FOREIGN KEY (reservation_id) REFERENCES reservations(id) ON DELETE CASCADE,
    CONSTRAINT reservation_payments_client_id_fk FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE CASCADE,
    CONSTRAINT reservation_payments_project_id_fk FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
    CONSTRAINT reservation_payments_lote_id_fk FOREIGN KEY (lote_id) REFERENCES lotes(id) ON DELETE CASCADE,
    CONSTRAINT reservation_payments_customer_account_id_fk FOREIGN KEY (customer_account_id) REFERENCES customer_accounts(id) ON DELETE SET NULL,
    CONSTRAINT reservation_payments_transaction_id_fk FOREIGN KEY (transaction_id) REFERENCES transactions(id) ON DELETE SET NULL,
    CONSTRAINT reservation_payments_payment_id_fk FOREIGN KEY (payment_id) REFERENCES payments(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Formatería: nube de documentos (carpetas + archivos)
CREATE TABLE formateria_items (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    parent_id BIGINT UNSIGNED NULL,
    kind VARCHAR(10) NOT NULL DEFAULT 'file',
    name VARCHAR(191) NOT NULL,
    path VARCHAR(500) NULL,
    mime VARCHAR(120) NULL,
    size BIGINT UNSIGNED NOT NULL DEFAULT 0,
    created_at TIMESTAMP NULL,
    updated_at TIMESTAMP NULL,
    INDEX formateria_items_parent_id_index (parent_id),
    INDEX formateria_items_kind_index (kind)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE payment_installments (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    customer_account_id BIGINT UNSIGNED NOT NULL,
    number SMALLINT UNSIGNED NOT NULL,
    due_date DATE NOT NULL,
    amount DECIMAL(14,2) NOT NULL,
    is_annuity TINYINT(1) NOT NULL DEFAULT 0,
    status VARCHAR(20) NOT NULL DEFAULT 'Pendiente',
    paid_at DATE NULL,
    payment_id BIGINT UNSIGNED NULL,
    created_at TIMESTAMP NULL,
    updated_at TIMESTAMP NULL,
    INDEX payment_installments_account_index (customer_account_id),
    INDEX payment_installments_payment_index (payment_id),
    CONSTRAINT payment_installments_account_fk FOREIGN KEY (customer_account_id) REFERENCES customer_accounts(id) ON DELETE CASCADE,
    CONSTRAINT payment_installments_payment_fk FOREIGN KEY (payment_id) REFERENCES payments(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;



CREATE TABLE petty_cash_funds (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(191) NOT NULL DEFAULT 'Caja de oficina',
    authorized_amount DECIMAL(14,2) NOT NULL DEFAULT 5000.00,
    minimum_balance DECIMAL(14,2) NOT NULL DEFAULT 1000.00,
    responsible_name VARCHAR(191) NULL,
    active TINYINT(1) NOT NULL DEFAULT 1,
    created_at TIMESTAMP NULL,
    updated_at TIMESTAMP NULL,
    INDEX petty_cash_funds_active_index (active)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE petty_cash_reconciliations (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    petty_cash_fund_id BIGINT UNSIGNED NOT NULL,
    user_id BIGINT UNSIGNED NULL,
    system_balance DECIMAL(14,2) NOT NULL,
    counted_amount DECIMAL(14,2) NOT NULL,
    difference DECIMAL(14,2) NOT NULL,
    adjusted TINYINT(1) NOT NULL DEFAULT 0,
    reconciled_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    notes TEXT NULL,
    created_at TIMESTAMP NULL,
    updated_at TIMESTAMP NULL,
    INDEX petty_cash_reconciliations_fund_index (petty_cash_fund_id),
    INDEX petty_cash_reconciliations_user_index (user_id),
    INDEX petty_cash_reconciliations_date_index (reconciled_at),
    CONSTRAINT petty_cash_reconciliations_fund_fk FOREIGN KEY (petty_cash_fund_id) REFERENCES petty_cash_funds(id) ON DELETE CASCADE,
    CONSTRAINT petty_cash_reconciliations_user_fk FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE petty_cash_movements (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    petty_cash_fund_id BIGINT UNSIGNED NOT NULL,
    user_id BIGINT UNSIGNED NULL,
    transaction_id BIGINT UNSIGNED NULL,
    petty_cash_reconciliation_id BIGINT UNSIGNED NULL,
    cancelled_by BIGINT UNSIGNED NULL,
    folio VARCHAR(30) NOT NULL,
    type VARCHAR(30) NOT NULL,
    amount DECIMAL(14,2) NOT NULL,
    movement_date DATE NOT NULL,
    category VARCHAR(120) NOT NULL,
    concept VARCHAR(255) NOT NULL,
    responsible_name VARCHAR(191) NULL,
    receipt_path VARCHAR(500) NULL,
    status VARCHAR(20) NOT NULL DEFAULT 'applied',
    notes TEXT NULL,
    cancelled_at TIMESTAMP NULL,
    cancellation_reason VARCHAR(255) NULL,
    created_at TIMESTAMP NULL,
    updated_at TIMESTAMP NULL,
    UNIQUE KEY petty_cash_movements_folio_unique (folio),
    INDEX petty_cash_movements_fund_index (petty_cash_fund_id),
    INDEX petty_cash_movements_user_index (user_id),
    INDEX petty_cash_movements_transaction_index (transaction_id),
    INDEX petty_cash_movements_reconciliation_index (petty_cash_reconciliation_id),
    INDEX petty_cash_movements_cancelled_by_index (cancelled_by),
    INDEX petty_cash_movements_type_index (type),
    INDEX petty_cash_movements_date_index (movement_date),
    INDEX petty_cash_movements_status_index (status),
    CONSTRAINT petty_cash_movements_fund_fk FOREIGN KEY (petty_cash_fund_id) REFERENCES petty_cash_funds(id) ON DELETE CASCADE,
    CONSTRAINT petty_cash_movements_user_fk FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL,
    CONSTRAINT petty_cash_movements_transaction_fk FOREIGN KEY (transaction_id) REFERENCES transactions(id) ON DELETE SET NULL,
    CONSTRAINT petty_cash_movements_reconciliation_fk FOREIGN KEY (petty_cash_reconciliation_id) REFERENCES petty_cash_reconciliations(id) ON DELETE SET NULL,
    CONSTRAINT petty_cash_movements_cancelled_by_fk FOREIGN KEY (cancelled_by) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE puestos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(191) NOT NULL,
    area VARCHAR(160) NULL,
    descripcion TEXT NULL,
    activo TINYINT(1) NOT NULL DEFAULT 1,
    created_at TIMESTAMP NULL,
    updated_at TIMESTAMP NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


INSERT INTO puestos (id, nombre, area, descripcion, activo, created_at, updated_at) VALUES
(1, 'Carlos Daniel Rivera Suarez', 'Coord. del Departamento de Administración y Finanzas.', 'Responsable/depositario de proyecto y firma de contratos', 1, NOW(), NOW());

UPDATE projects SET depositario_puesto_id = 1, depositario = 'Carlos Daniel Rivera Suarez' WHERE depositario_puesto_id IS NULL;

-- ---- Datos demo de proyectos, manzanas y lotes ----------------------
INSERT INTO manzanas (id, project_id, nombre, numero, letra, orientacion, notas, created_at, updated_at) VALUES
(1, 1, 'A', 'A', 'A', 'Norte',    'Frente a vialidad principal', NOW(), NOW()),
(2, 1, 'B', 'B', 'B', 'Poniente', NULL, NOW(), NOW()),
(3, 2, 'A', 'A', 'A', 'Oriente',  NULL, NOW(), NOW()),
(4, 3, 'A', 'A', 'A', 'Oriente',  'Sobre avenida comercial', NOW(), NOW());

INSERT INTO lotes (id, project_id, manzana_id, numero, frente, fondo, superficie_m2, uso_suelo, orientacion, colindancias, precio, estado, created_at, updated_at) VALUES
(1, 1, 1, '1', 10, 25, 250.00, 'Habitacional', 'Norte', 'Al Norte 10.00 m con calle; Al Sur 10.00 m con Lote 8; Al Oriente 25.00 m con Lote 2; Al Poniente 25.00 m con área común.', 850000, 'Vendido',    NOW(), NOW()),
(2, 1, 1, '2', 10, 25, 250.00, 'Habitacional', 'Norte', NULL, 870000, 'Disponible', NOW(), NOW()),
(3, 1, 1, '3', 12, 25, 300.00, 'Habitacional', 'Norte', NULL, 940000, 'Apartado',   NOW(), NOW()),
(4, 1, 2, '1', 10, 22, 220.00, 'Habitacional', 'Poniente', NULL, 760000, 'Vendido',    NOW(), NOW()),
(5, 1, 2, '2', 10, 22, 220.00, 'Habitacional', 'Poniente', NULL, 760000, 'Disponible', NOW(), NOW()),
(6, 1, 2, '3', 15, 22, 330.00, 'Mixto',        'Poniente', NULL, 980000, 'Apartado',   NOW(), NOW()),
(7, 2, 3, '1', 20, 40, 800.00, 'Habitacional', 'Oriente', NULL, 1500000, 'Vendido',    NOW(), NOW()),
(8, 2, 3, '2', 20, 40, 800.00, 'Habitacional', 'Oriente', NULL, 1480000, 'Disponible', NOW(), NOW()),
(9, 2, 3, '3', 25, 40, 1000.00, 'Habitacional', 'Oriente', NULL, 1750000, 'Disponible', NOW(), NOW()),
(10, 3, 4, '1', 8,  20, 160.00, 'Comercial',    'Oriente', NULL, 2200000, 'Vendido',    NOW(), NOW()),
(11, 3, 4, '2', 12, 20, 240.00, 'Comercial',    'Oriente', NULL, 3100000, 'Disponible', NOW(), NOW()),
(12, 3, 4, '3', 15, 24, 360.00, 'Comercial',    'Oriente', NULL, 3600000, 'Disponible', NOW(), NOW());

UPDATE projects SET manzanas = 2, lotes = 6, units_total = 6, units_sold = 2 WHERE id = 1;
UPDATE projects SET manzanas = 1, lotes = 3, units_total = 3, units_sold = 1 WHERE id = 2;
UPDATE projects SET manzanas = 1, lotes = 3, units_total = 3, units_sold = 1 WHERE id = 3;
UPDATE lotes SET estado = 'Vendido' WHERE id IN (1,4,7,10);
UPDATE lotes SET estado = 'Apartado' WHERE id IN (3,6);

-- Apartados demo previos a la vinculación formal
INSERT INTO reservations (id, tenant_id, client_id, advisor_id, project_id, manzana_id, lote_id, customer_account_id, total_price, deposit_required, status, reserved_at, expires_at, converted_at, cancelled_at, refunded_at, notes, created_by, created_at, updated_at) VALUES
(1, 1, 3, 3, 1, 1, 3, NULL, 940000.00, 94000.00, 'Activo', CURDATE(), DATE_ADD(CURDATE(), INTERVAL 10 DAY), NULL, NULL, NULL, 'Debe completar el enganche antes del vencimiento para convertir a venta.', 1, NOW(), NOW()),
(2, 1, 1, 1, 1, 2, 6, NULL, 980000.00, 98000.00, 'Cumplido', DATE_SUB(CURDATE(), INTERVAL 2 DAY), DATE_ADD(CURDATE(), INTERVAL 12 DAY), NULL, NULL, NULL, 'Enganche completo: listo para convertir a vinculación de contado o plazo.', 1, NOW(), NOW());

INSERT INTO reservation_payments (id, tenant_id, reservation_id, client_id, project_id, lote_id, customer_account_id, transaction_id, payment_id, amount, payment_date, method, reference, concept, status, receipt_path, notes, created_at, updated_at) VALUES
(1, 1, 1, 3, 1, 3, NULL, 4, NULL, 15000.00, CURDATE(), 'Efectivo', NULL, 'Apartado inicial', 'Aplicado', NULL, NULL, NOW(), NOW()),
(2, 1, 2, 1, 1, 6, NULL, 8, NULL, 98000.00, DATE_SUB(CURDATE(), INTERVAL 2 DAY), 'Transferencia', 'APA-CUM-001', 'Enganche completado', 'Aplicado', NULL, NULL, NOW(), NOW());


-- Vinculación demo cliente → proyecto/manzana/lote y plan de pago
UPDATE customer_accounts SET lote_id = 1, payment_type = 'Plazo', total_price = 850000.00, paid_amount = 116666.66, term_months = 24, monthly_payment = 33333.33, plan_type = 'Sin anualidad', annuity_amount = NULL, next_payment_amount = 33333.33, next_payment_due_on = DATE_ADD(CURDATE(), INTERVAL 3 DAY), status = 'Al corriente' WHERE id = 1;
UPDATE customer_accounts SET lote_id = 7, payment_type = 'Plazo', total_price = 1500000.00, paid_amount = 300000.00, term_months = 12, monthly_payment = 100000.00, plan_type = 'Sin anualidad', annuity_amount = NULL, next_payment_amount = 100000.00, next_payment_due_on = DATE_ADD(CURDATE(), INTERVAL 10 DAY), status = 'Al corriente' WHERE id = 2;
UPDATE customer_accounts SET lote_id = 10, payment_type = 'Plazo', total_price = 2200000.00, paid_amount = 200000.00, term_months = 36, monthly_payment = 51388.89, plan_type = 'Con anualidad', annuity_amount = 50000.00, next_payment_amount = 51388.89, next_payment_due_on = DATE_SUB(CURDATE(), INTERVAL 10 DAY), status = 'Vencido' WHERE id = 3;

UPDATE contracts SET lote_id = 1 WHERE id = 1;
UPDATE contracts SET lote_id = 7 WHERE id = 2;
UPDATE contracts SET lote_id = 10 WHERE id = 3;


-- Llaves de relación hacia lotes. Se agregan después de crear y sembrar lotes
-- porque customer_accounts, contracts y transactions se definen antes por compatibilidad.
ALTER TABLE customer_accounts
  ADD CONSTRAINT customer_accounts_lote_id_fk FOREIGN KEY (lote_id) REFERENCES lotes(id) ON DELETE SET NULL;

ALTER TABLE contracts
  ADD CONSTRAINT contracts_lote_id_fk FOREIGN KEY (lote_id) REFERENCES lotes(id) ON DELETE SET NULL;

ALTER TABLE transactions
  ADD CONSTRAINT transactions_lote_id_fk FOREIGN KEY (lote_id) REFERENCES lotes(id) ON DELETE SET NULL;

INSERT INTO payment_installments (customer_account_id, number, due_date, amount, is_annuity, status, paid_at, payment_id, created_at, updated_at) VALUES
(1, 1, DATE_SUB(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 2 MONTH), 33333.33, 0, 'Pagado', DATE_SUB(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 2 MONTH), NULL, NOW(), NOW()),
(1, 2, DATE_SUB(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 1 MONTH), 33333.33, 0, 'Pagado', DATE_SUB(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 1 MONTH), NULL, NOW(), NOW()),
(1, 3, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 0 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 4, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 1 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 5, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 2 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 6, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 3 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 7, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 4 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 8, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 5 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 9, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 6 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 10, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 7 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 11, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 8 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 12, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 9 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 13, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 10 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 14, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 11 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 15, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 12 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 16, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 13 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 17, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 14 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 18, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 15 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 19, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 16 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 20, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 17 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 21, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 18 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 22, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 19 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 23, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 20 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(1, 24, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 3 DAY), INTERVAL 21 MONTH), 33333.33, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(2, 1, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 10 DAY), INTERVAL 0 MONTH), 100000.00, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(2, 2, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 10 DAY), INTERVAL 1 MONTH), 100000.00, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(2, 3, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 10 DAY), INTERVAL 2 MONTH), 100000.00, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(2, 4, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 10 DAY), INTERVAL 3 MONTH), 100000.00, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(2, 5, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 10 DAY), INTERVAL 4 MONTH), 100000.00, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(2, 6, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 10 DAY), INTERVAL 5 MONTH), 100000.00, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(2, 7, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 10 DAY), INTERVAL 6 MONTH), 100000.00, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(2, 8, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 10 DAY), INTERVAL 7 MONTH), 100000.00, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(2, 9, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 10 DAY), INTERVAL 8 MONTH), 100000.00, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(2, 10, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 10 DAY), INTERVAL 9 MONTH), 100000.00, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(2, 11, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 10 DAY), INTERVAL 10 MONTH), 100000.00, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(2, 12, DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 10 DAY), INTERVAL 11 MONTH), 100000.00, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 1, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 0 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 2, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 1 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 3, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 2 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 4, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 3 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 5, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 4 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 6, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 5 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 7, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 6 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 8, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 7 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 9, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 8 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 10, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 9 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 11, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 10 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 12, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 11 MONTH), 101388.89, 1, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 13, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 12 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 14, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 13 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 15, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 14 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 16, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 15 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 17, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 16 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 18, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 17 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 19, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 18 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 20, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 19 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 21, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 20 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 22, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 21 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 23, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 22 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 24, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 23 MONTH), 101388.89, 1, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 25, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 24 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 26, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 25 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 27, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 26 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 28, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 27 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 29, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 28 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 30, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 29 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 31, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 30 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 32, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 31 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 33, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 32 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 34, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 33 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 35, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 34 MONTH), 51388.89, 0, 'Pendiente', NULL, NULL, NOW(), NOW()),
(3, 36, DATE_ADD(DATE_SUB(CURDATE(), INTERVAL 10 DAY), INTERVAL 35 MONTH), 101389.15, 1, 'Pendiente', NULL, NULL, NOW(), NOW());


-- Caja chica demo compatible con gastos por proyecto
INSERT INTO petty_cash_funds (id, name, authorized_amount, minimum_balance, responsible_name, active, created_at, updated_at) VALUES
(1, 'Caja de oficina central', 300000.00, 20000.00, 'Administración', 1, NOW(), NOW());

INSERT INTO petty_cash_movements (petty_cash_fund_id, user_id, transaction_id, folio, type, amount, movement_date, category, concept, responsible_name, status, notes, created_at, updated_at) VALUES
(1, 1, NULL, 'CC-000001', 'replenishment', 300000.00, DATE_SUB(CURDATE(), INTERVAL 7 DAY), 'Reposición', 'Apertura de caja chica demo', 'Ana Ramirez', 'applied', 'Fondo inicial de demostración.', NOW(), NOW()),
(1, 1, 5, 'CC-000002', 'expense', 248000.00, DATE_SUB(CURDATE(), INTERVAL 5 DAY), 'Nomina', 'Nomina - Mayo / Residencial Valle', 'Administración', 'applied', 'Movimiento enlazado a finanzas y proyecto 1.', NOW(), NOW());

INSERT INTO puestos (nombre, area, descripcion, activo, created_at, updated_at) VALUES
('Director General',     'Dirección',     'Responsable de la operación general.', 1, NOW(), NOW()),
('Gerente de Ventas',    'Comercial',     'Coordina al equipo de asesores.',      1, NOW(), NOW()),
('Asesor Inmobiliario',  'Comercial',     'Atención y seguimiento de clientes.',  1, NOW(), NOW()),
('Administración',       'Administración', 'Cuentas, pagos y cobranza.',          1, NOW(), NOW());

-- ---- Migraciones ----------------------------------------------------
-- Todas las migraciones incluidas en este SQL maestro ya quedan registradas
-- al inicio del archivo para evitar reaplicaciones durante el setup.

-- =====================================================================
-- Reactivar verificacion de llaves foraneas (ya con todas las tablas creadas)
-- =====================================================================

-- =====================================================================
-- Marca de despliegue (OPCIONAL — la auto-limpieza ya es automatica)
-- ---------------------------------------------------------------------
-- SchemaGuard limpia la cache compilada solo cuando cambia la "huella" del
-- codigo (mtime de rutas/config/composer + lista de migraciones), asi que al
-- subir codigo nuevo se limpia sin necesidad de tocar nada aqui.
-- Esta marca es solo un interruptor MANUAL extra: cambia el valor si quieres
-- forzar una limpieza desde la BD sin haber cambiado codigo. No es obligatorio.
-- =====================================================================
INSERT INTO settings (`key`, value, created_at, updated_at)
VALUES ('schema_deploy', '2026-06-14-v6-apartados-instalador-demo', NOW(), NOW())
ON DUPLICATE KEY UPDATE value = VALUES(value), updated_at = NOW();

-- =====================================================================
-- FIN
-- =====================================================================
-- Usuario demo: admin@inmocore.mx
-- Password:     password
-- =====================================================================
