012_invoice_tables.sql 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. -- 行业发票平台 — 全部表 DDL
  2. -- 反向开票/报废产品收购 模块
  3. -- 1. 交易订单
  4. CREATE TABLE IF NOT EXISTS public.pay_invoice_order (
  5. id BIGINT PRIMARY KEY,
  6. status VARCHAR(20),
  7. description TEXT,
  8. created_time TIMESTAMPTZ NOT NULL,
  9. updated_time TIMESTAMPTZ NOT NULL,
  10. tenant_id BIGINT NOT NULL,
  11. enterprise_id VARCHAR(64) NOT NULL,
  12. order_no VARCHAR(64) NOT NULL,
  13. alipay_trade_no VARCHAR(64),
  14. order_time TIMESTAMPTZ,
  15. payment_time TIMESTAMPTZ,
  16. natural_person_name VARCHAR(64),
  17. natural_person_phone VARCHAR(20),
  18. collection_account_type VARCHAR(20),
  19. collection_account VARCHAR(64),
  20. tax_amount DECIMAL(18,2) DEFAULT 0,
  21. trade_status VARCHAR(20),
  22. invoice_no VARCHAR(64),
  23. invoice_pre_tax_amount DECIMAL(18,2),
  24. invoice_tax_amount DECIMAL(18,2),
  25. red_invoice_no VARCHAR(64),
  26. clerk_name VARCHAR(64),
  27. attachments TEXT,
  28. product_code VARCHAR(64),
  29. order_total_amount DECIMAL(18,2),
  30. goods_amount DECIMAL(18,2),
  31. total_tax_paid DECIMAL(18,2),
  32. personal_income_tax DECIMAL(18,2),
  33. value_added_tax DECIMAL(18,2),
  34. urban_maintenance_tax DECIMAL(18,2),
  35. education_surcharge DECIMAL(18,2),
  36. local_education_surcharge DECIMAL(18,2)
  37. );
  38. CREATE UNIQUE INDEX IF NOT EXISTS idx_invoice_order_no ON public.pay_invoice_order(tenant_id, order_no);
  39. CREATE INDEX IF NOT EXISTS idx_invoice_order_trade_status ON public.pay_invoice_order(tenant_id, trade_status);
  40. CREATE INDEX IF NOT EXISTS idx_invoice_order_time ON public.pay_invoice_order(tenant_id, order_time);
  41. COMMENT ON TABLE public.pay_invoice_order IS '行业发票-交易订单';
  42. -- 2. 订单商品明细
  43. CREATE TABLE IF NOT EXISTS public.pay_invoice_order_item (
  44. id BIGINT PRIMARY KEY,
  45. status VARCHAR(20),
  46. description TEXT,
  47. created_time TIMESTAMPTZ NOT NULL,
  48. updated_time TIMESTAMPTZ NOT NULL,
  49. tenant_id BIGINT NOT NULL,
  50. enterprise_id VARCHAR(64) NOT NULL,
  51. order_id BIGINT NOT NULL,
  52. seq_no INT DEFAULT 1,
  53. goods_name VARCHAR(128),
  54. unit_price DECIMAL(18,4),
  55. quantity DECIMAL(18,4),
  56. amount DECIMAL(18,2)
  57. );
  58. CREATE INDEX IF NOT EXISTS idx_invoice_order_item_order ON public.pay_invoice_order_item(order_id);
  59. COMMENT ON TABLE public.pay_invoice_order_item IS '行业发票-订单商品明细';
  60. -- 3. 订单税额明细
  61. CREATE TABLE IF NOT EXISTS public.pay_invoice_tax_detail (
  62. id BIGINT PRIMARY KEY,
  63. status VARCHAR(20),
  64. description TEXT,
  65. created_time TIMESTAMPTZ NOT NULL,
  66. updated_time TIMESTAMPTZ NOT NULL,
  67. tenant_id BIGINT NOT NULL,
  68. enterprise_id VARCHAR(64) NOT NULL,
  69. order_id BIGINT NOT NULL,
  70. tax_type VARCHAR(32),
  71. tax_name VARCHAR(64),
  72. tax_amount DECIMAL(18,2)
  73. );
  74. COMMENT ON TABLE public.pay_invoice_tax_detail IS '行业发票-订单税额明细';
  75. -- 4. 供应商
  76. CREATE TABLE IF NOT EXISTS public.pay_invoice_supplier (
  77. id BIGINT PRIMARY KEY,
  78. status VARCHAR(20),
  79. description TEXT,
  80. created_time TIMESTAMPTZ NOT NULL,
  81. updated_time TIMESTAMPTZ NOT NULL,
  82. tenant_id BIGINT NOT NULL,
  83. enterprise_id VARCHAR(64) NOT NULL,
  84. name VARCHAR(64) NOT NULL,
  85. account_type VARCHAR(20) NOT NULL,
  86. account_no VARCHAR(100) NOT NULL,
  87. phone VARCHAR(20),
  88. confirm_status VARCHAR(20) DEFAULT 'PENDING'
  89. );
  90. CREATE UNIQUE INDEX IF NOT EXISTS idx_invoice_supplier_account ON public.pay_invoice_supplier(tenant_id, enterprise_id, account_type, account_no);
  91. COMMENT ON TABLE public.pay_invoice_supplier IS '行业发票-供应商';
  92. -- 5. 员工
  93. CREATE TABLE IF NOT EXISTS public.pay_invoice_employee (
  94. id BIGINT PRIMARY KEY,
  95. status VARCHAR(20),
  96. description TEXT,
  97. created_time TIMESTAMPTZ NOT NULL,
  98. updated_time TIMESTAMPTZ NOT NULL,
  99. tenant_id BIGINT NOT NULL,
  100. name VARCHAR(64) NOT NULL,
  101. phone VARCHAR(20),
  102. id_card VARCHAR(20),
  103. role VARCHAR(20) NOT NULL DEFAULT 'CLERK',
  104. allow_select_supplier BOOLEAN DEFAULT FALSE,
  105. sys_user_id BIGINT
  106. );
  107. COMMENT ON TABLE public.pay_invoice_employee IS '行业发票-员工';
  108. -- 6. 常用商品
  109. CREATE TABLE IF NOT EXISTS public.pay_invoice_goods (
  110. id BIGINT PRIMARY KEY,
  111. status VARCHAR(20),
  112. description TEXT,
  113. created_time TIMESTAMPTZ NOT NULL,
  114. updated_time TIMESTAMPTZ NOT NULL,
  115. tenant_id BIGINT NOT NULL,
  116. category_id BIGINT NOT NULL,
  117. name VARCHAR(128) NOT NULL,
  118. unit VARCHAR(32),
  119. spec VARCHAR(64),
  120. enterprise_id VARCHAR(64)
  121. );
  122. CREATE INDEX IF NOT EXISTS idx_invoice_goods_cat ON public.pay_invoice_goods(tenant_id, category_id);
  123. COMMENT ON TABLE public.pay_invoice_goods IS '行业发票-常用商品';
  124. -- 7. 商品分类
  125. CREATE TABLE IF NOT EXISTS public.pay_invoice_goods_category (
  126. id BIGINT PRIMARY KEY,
  127. status VARCHAR(20),
  128. description TEXT,
  129. created_time TIMESTAMPTZ NOT NULL,
  130. updated_time TIMESTAMPTZ NOT NULL,
  131. tenant_id BIGINT NOT NULL,
  132. parent_id BIGINT DEFAULT 0,
  133. name VARCHAR(128) NOT NULL,
  134. sort_order INT DEFAULT 0,
  135. product_code VARCHAR(64)
  136. );
  137. COMMENT ON TABLE public.pay_invoice_goods_category IS '行业发票-商品分类';
  138. -- 8. 企业配置
  139. CREATE TABLE IF NOT EXISTS public.pay_invoice_company_config (
  140. id BIGINT PRIMARY KEY,
  141. status VARCHAR(20),
  142. description TEXT,
  143. created_time TIMESTAMPTZ NOT NULL,
  144. updated_time TIMESTAMPTZ NOT NULL,
  145. tenant_id BIGINT NOT NULL,
  146. enterprise_id VARCHAR(64) NOT NULL,
  147. company_name VARCHAR(128),
  148. tax_no VARCHAR(32),
  149. bank_name VARCHAR(128),
  150. bank_account VARCHAR(64),
  151. address VARCHAR(256),
  152. phone VARCHAR(32),
  153. tax_region VARCHAR(128),
  154. issuer_name VARCHAR(64),
  155. issuer_id_card VARCHAR(20),
  156. contact_name VARCHAR(64),
  157. contact_phone VARCHAR(20),
  158. monthly_quota DECIMAL(18,2) DEFAULT 0,
  159. available_quota DECIMAL(18,2) DEFAULT 0,
  160. downloaded_quota DECIMAL(18,2) DEFAULT 0,
  161. used_quota DECIMAL(18,2) DEFAULT 0,
  162. tax_method VARCHAR(32) DEFAULT 'SIMPLIFIED',
  163. default_invoice_type VARCHAR(20) DEFAULT 'ORDINARY',
  164. default_tax_rate VARCHAR(10) DEFAULT '1%',
  165. require_audit_before_pay BOOLEAN DEFAULT FALSE,
  166. invite_to_supplier BOOLEAN DEFAULT FALSE,
  167. show_payee_name BOOLEAN DEFAULT FALSE,
  168. employee_quota_enabled BOOLEAN DEFAULT FALSE
  169. );
  170. CREATE UNIQUE INDEX IF NOT EXISTS idx_invoice_company_config_ent ON public.pay_invoice_company_config(tenant_id, enterprise_id);
  171. COMMENT ON TABLE public.pay_invoice_company_config IS '行业发票-企业配置';
  172. -- 9. 任务记录
  173. CREATE TABLE IF NOT EXISTS public.pay_invoice_task (
  174. id BIGINT PRIMARY KEY,
  175. status VARCHAR(20),
  176. description TEXT,
  177. created_time TIMESTAMPTZ NOT NULL,
  178. updated_time TIMESTAMPTZ NOT NULL,
  179. tenant_id BIGINT NOT NULL,
  180. enterprise_id VARCHAR(64) NOT NULL,
  181. start_time TIMESTAMPTZ,
  182. finish_time TIMESTAMPTZ,
  183. product VARCHAR(64),
  184. task_type VARCHAR(32),
  185. task_status VARCHAR(20),
  186. file_url VARCHAR(256),
  187. total_count INT,
  188. success_count INT,
  189. fail_count INT,
  190. error_msg TEXT
  191. );
  192. CREATE INDEX IF NOT EXISTS idx_invoice_task_type ON public.pay_invoice_task(tenant_id, task_type);
  193. CREATE INDEX IF NOT EXISTS idx_invoice_task_time ON public.pay_invoice_task(tenant_id, start_time);
  194. COMMENT ON TABLE public.pay_invoice_task IS '行业发票-任务记录';
  195. -- 10. 转账账户
  196. CREATE TABLE IF NOT EXISTS public.pay_invoice_transfer_account (
  197. id BIGINT PRIMARY KEY,
  198. status VARCHAR(20),
  199. description TEXT,
  200. created_time TIMESTAMPTZ NOT NULL,
  201. updated_time TIMESTAMPTZ NOT NULL,
  202. tenant_id BIGINT NOT NULL,
  203. enterprise_id VARCHAR(64) NOT NULL,
  204. total_amount DECIMAL(18,2) DEFAULT 0,
  205. pending_amount DECIMAL(18,2) DEFAULT 0,
  206. bank_account_name VARCHAR(128),
  207. bank_account_no VARCHAR(64),
  208. bank_name VARCHAR(128),
  209. bank_branch VARCHAR(128),
  210. bank_location VARCHAR(64),
  211. bank_code VARCHAR(32)
  212. );
  213. COMMENT ON TABLE public.pay_invoice_transfer_account IS '行业发票-转账账户';