-- ============================================
-- 发票管理模块数据库表结构
-- 版本: V1.0.0
-- 创建时间: 2026-04-04
-- ============================================

-- ----------------------------
-- 1. 发票主表
-- ----------------------------
CREATE TABLE IF NOT EXISTS `invoices` (
    `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    `tenant_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID',
    
    -- 发票基本信息
    `invoice_no` VARCHAR(50) DEFAULT NULL COMMENT '发票号码（电子发票号）',
    `invoice_code` VARCHAR(50) DEFAULT NULL COMMENT '发票代码（税务局分配）',
    `invoice_type` TINYINT NOT NULL DEFAULT 1 COMMENT '发票类型：1-增值税专用发票, 2-增值税普通发票, 3-电子发票, 4-卷式发票',
    `status` TINYINT NOT NULL DEFAULT 0 COMMENT '发票状态：0-待审核, 1-已开具, 2-已作废, 3-已红冲',
    
    -- 购方信息
    `buyer_name` VARCHAR(200) NOT NULL COMMENT '购方名称（购买方公司名称）',
    `buyer_tax_no` VARCHAR(50) NOT NULL COMMENT '购方纳税人识别号',
    `buyer_address_phone` VARCHAR(200) DEFAULT NULL COMMENT '购方地址电话',
    `buyer_bank_account` VARCHAR(100) DEFAULT NULL COMMENT '购方银行账号',
    
    -- 销方信息
    `seller_name` VARCHAR(200) DEFAULT NULL COMMENT '销方名称（销售方公司名称）',
    `seller_tax_no` VARCHAR(50) DEFAULT NULL COMMENT '销方纳税人识别号',
    `seller_address_phone` VARCHAR(200) DEFAULT NULL COMMENT '销方地址电话',
    `seller_bank_account` VARCHAR(100) DEFAULT NULL COMMENT '销方银行账号',
    
    -- 金额信息
    `total_amount` DECIMAL(18, 2) NOT NULL DEFAULT 0.00 COMMENT '价税合计金额',
    `amount` DECIMAL(18, 2) NOT NULL DEFAULT 0.00 COMMENT '不含税金额（金额）',
    `tax_amount` DECIMAL(18, 2) NOT NULL DEFAULT 0.00 COMMENT '税额',
    `tax_rate` DECIMAL(10, 4) NOT NULL DEFAULT 0.0000 COMMENT '税率（如 0.13 表示13%）',
    
    -- 关联信息
    `order_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '关联订单ID',
    `order_no` VARCHAR(50) DEFAULT NULL COMMENT '关联订单号',
    `customer_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '关联客户ID',
    `customer_name` VARCHAR(200) DEFAULT NULL COMMENT '客户名称',
    
    -- 发票内容
    `invoice_content` VARCHAR(500) DEFAULT NULL COMMENT '发票项目（商品/服务名称汇总）',
    `drawer` VARCHAR(50) DEFAULT NULL COMMENT '开票人',
    `reviewer` VARCHAR(50) DEFAULT NULL COMMENT '复核人',
    `payee` VARCHAR(50) DEFAULT NULL COMMENT '收款人',
    
    -- 时间信息
    `invoice_date` DATE DEFAULT NULL COMMENT '开票日期',
    `apply_date` DATE DEFAULT NULL COMMENT '申请日期',
    `void_date` DATE DEFAULT NULL COMMENT '作废/红冲日期',
    
    -- 原因和备注
    `void_reason` VARCHAR(500) DEFAULT NULL COMMENT '作废/红冲原因',
    `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
    
    -- 文件路径
    `pdf_path` VARCHAR(500) DEFAULT NULL COMMENT '电子发票PDF路径',
    `image_path` VARCHAR(500) DEFAULT NULL COMMENT '电子发票图片路径',
    
    -- 操作人信息
    `applicant_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '申请人ID',
    `applicant_name` VARCHAR(50) DEFAULT NULL COMMENT '申请人名称',
    `auditor_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '审核人ID',
    `auditor_name` VARCHAR(50) DEFAULT NULL COMMENT '审核人名称',
    `issuer_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '开票人ID',
    `issuer_name` VARCHAR(50) DEFAULT NULL COMMENT '开票人名称',
    
    -- 时间戳
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted_at` DATETIME DEFAULT NULL COMMENT '删除时间（逻辑删除）',
    
    -- 索引
    INDEX `idx_tenant_id` (`tenant_id`),
    INDEX `idx_invoice_no` (`invoice_no`),
    INDEX `idx_status` (`status`),
    INDEX `idx_invoice_type` (`invoice_type`),
    INDEX `idx_order_id` (`order_id`),
    INDEX `idx_customer_id` (`customer_id`),
    INDEX `idx_apply_date` (`apply_date`),
    INDEX `idx_invoice_date` (`invoice_date`),
    INDEX `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='发票主表';

-- ----------------------------
-- 2. 发票明细表
-- ----------------------------
CREATE TABLE IF NOT EXISTS `invoice_items` (
    `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    `invoice_id` BIGINT UNSIGNED NOT NULL COMMENT '发票ID',
    `tenant_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID',
    
    -- 商品/服务信息
    `goods_name` VARCHAR(200) NOT NULL COMMENT '商品/服务名称',
    `spec` VARCHAR(100) DEFAULT NULL COMMENT '规格型号',
    `unit` VARCHAR(20) DEFAULT NULL COMMENT '单位',
    `quantity` DECIMAL(18, 4) NOT NULL DEFAULT 0.0000 COMMENT '数量',
    `unit_price` DECIMAL(18, 6) DEFAULT NULL COMMENT '单价（含税）',
    `amount` DECIMAL(18, 2) NOT NULL DEFAULT 0.00 COMMENT '金额（不含税）',
    `tax_rate` DECIMAL(10, 4) NOT NULL DEFAULT 0.0000 COMMENT '税率',
    `tax_amount` DECIMAL(18, 2) NOT NULL DEFAULT 0.00 COMMENT '税额',
    `total_amount` DECIMAL(18, 2) NOT NULL DEFAULT 0.00 COMMENT '价税合计',
    
    -- 编码信息
    `goods_code` VARCHAR(50) DEFAULT NULL COMMENT '商品编码',
    `tax_classification_code` VARCHAR(50) DEFAULT NULL COMMENT '税收分类编码',
    
    -- 优惠政策
    `preferential_flag` TINYINT NOT NULL DEFAULT 0 COMMENT '优惠政策标识：0-不享受, 1-享受',
    `zero_tax_flag` TINYINT NOT NULL DEFAULT 0 COMMENT '零税率标识：0-非零税率, 1-免税, 2-不征税, 3-使用低税率',
    
    -- 时间戳
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted_at` DATETIME DEFAULT NULL COMMENT '删除时间（逻辑删除）',
    
    -- 索引
    INDEX `idx_invoice_id` (`invoice_id`),
    INDEX `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='发票明细表';

-- ----------------------------
-- 3. 初始化系统配置的销方信息（示例）
-- ----------------------------
-- INSERT INTO `system_configs` (`tenant_id`, `config_key`, `config_value`, `created_at`) VALUES
-- (0, 'invoice_seller_name', '示例公司', NOW()),
-- (0, 'invoice_seller_tax_no', '91110000XXXXXXXX', NOW()),
-- (0, 'invoice_seller_address_phone', '北京市朝阳区xxx电话010-xxxx', NOW()),
-- (0, 'invoice_seller_bank_account', '中国银行xxxxx', NOW());
