71 lines
3.5 KiB
Python
71 lines
3.5 KiB
Python
"""对外法定报表适配 — 数据库迁移
|
|
补充资产负债表科目(资产/负债/所有者权益),按新30号准则经营/投资/筹资分类打标
|
|
"""
|
|
import sys, os
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
from app.database import get_engine
|
|
from sqlalchemy import text
|
|
import logging
|
|
|
|
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
|
|
logger = logging.getLogger("migrate_statutory")
|
|
|
|
# (科目编码, 科目名称, 上级, 级别, 类别, 新30号准则分类)
|
|
# 新30号准则分类: operating经营类 / investing投资类 / financing筹资类 / equity权益
|
|
BALANCE_SHEET_SUBJECTS = [
|
|
# ── 资产类 (category=asset) ──
|
|
('1001', '库存现金', None, 1, 'asset', 'operating'),
|
|
('1002', '银行存款', None, 1, 'asset', 'operating'),
|
|
('1012', '其他货币资金', None, 1, 'asset', 'operating'),
|
|
('1101', '交易性金融资产', None, 1, 'asset', 'investing'),
|
|
('1122', '应收账款', None, 1, 'asset', 'operating'),
|
|
('1123', '预付账款', None, 1, 'asset', 'operating'),
|
|
('1131', '应收股利', None, 1, 'asset', 'investing'),
|
|
('1221', '其他应收款', None, 1, 'asset', 'operating'),
|
|
('1405', '库存商品', None, 1, 'asset', 'operating'),
|
|
('1501', '持有至到期投资', None, 1, 'asset', 'investing'),
|
|
('1511', '长期股权投资', None, 1, 'asset', 'investing'),
|
|
('1601', '固定资产', None, 1, 'asset', 'operating'),
|
|
('1602', '累计折旧', '1601', 2, 'asset', 'operating'),
|
|
('1701', '无形资产', None, 1, 'asset', 'operating'),
|
|
# ── 负债类 (category=liability) ──
|
|
('2001', '短期借款', None, 1, 'liability', 'financing'),
|
|
('2202', '应付账款', None, 1, 'liability', 'operating'),
|
|
('2203', '预收账款', None, 1, 'liability', 'operating'),
|
|
('2211', '应付职工薪酬', None, 1, 'liability', 'operating'),
|
|
('2221', '应交税费', None, 1, 'liability', 'operating'),
|
|
('2241', '其他应付款', None, 1, 'liability', 'operating'),
|
|
('2501', '长期借款', None, 1, 'liability', 'financing'),
|
|
('2502', '应付债券', None, 1, 'liability', 'financing'),
|
|
# ── 所有者权益类 (category=equity) ──
|
|
('4001', '实收资本', None, 1, 'equity', 'equity'),
|
|
('4002', '资本公积', None, 1, 'equity', 'equity'),
|
|
('4103', '本年利润', None, 1, 'equity', 'equity'),
|
|
('4104', '利润分配', None, 1, 'equity', 'equity'),
|
|
]
|
|
|
|
|
|
def run():
|
|
engine = get_engine()
|
|
with engine.connect() as conn:
|
|
inserted = 0
|
|
for row in BALANCE_SHEET_SUBJECTS:
|
|
res = conn.execute(text("""
|
|
INSERT IGNORE INTO subjects (subject_code, subject_name, parent_code, level, category, new_standard_category, is_active)
|
|
VALUES (:code, :name, :parent, :level, :cat, :ns_cat, 1)
|
|
"""), {"code": row[0], "name": row[1], "parent": row[2],
|
|
"level": row[3], "cat": row[4], "ns_cat": row[5]})
|
|
inserted += res.rowcount
|
|
conn.commit()
|
|
logger.info(f"✅ 插入 {inserted} 条资产负债表科目(已有则跳过)")
|
|
total = conn.execute(text("SELECT count(*) FROM subjects")).scalar()
|
|
by_cat = conn.execute(text(
|
|
"SELECT category, count(*) FROM subjects GROUP BY category ORDER BY category"
|
|
)).fetchall()
|
|
dist = {r[0]: r[1] for r in by_cat}
|
|
logger.info(f"✅ subjects 表当前共 {total} 条,分类分布: {dist}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
run()
|