Python实现关税自动计算模型

这是关税自动计算Python脚本,按HS编码查税率,自动算关税、消费税、增值税和到岸总成本,并输出明细。

```python

-*- coding: utf-8 -*-

"""

进口环节税费自动计算

支持:从价税 / 从量税 / 复合税、原产地优惠税率、消费税、进口增值税、汇率折算

"""

from dataclasses import dataclass, field

from decimal import Decimal, ROUND_HALF_UP

CENT = Decimal("0.01")

D = Decimal

def yuan(x) -> Decimal:

"""四舍五入到分"""

return D(x).quantize(CENT, rounding=ROUND_HALF_UP)

----------------------------------------------------------------------

税率规则

----------------------------------------------------------------------

@dataclass(frozen=True)

class TaxRule:

hs_code: str

name: str

duty_rate: Decimal = D("0") # 从价关税税率

duty_per_unit: Decimal = D("0") # 从量关税(元/计量单位)

vat_rate: Decimal = D("0.13") # 进口环节增值税率

excise_rate: Decimal = D("0") # 从价消费税率

excise_per_unit: Decimal = D("0") # 从量消费税(元/计量单位)

preferential: dict = field(default_factory=dict) # 原产国代码 -> 优惠关税税率

示例税则库(真实业务请替换为海关税则 / 接口数据)

TARIFF_DB = {

"8517.1200": TaxRule("8517.1200", "智能手机", D("0")),

"8703.2341": TaxRule("8703.2341", "小汽车(1.5L以下)", D("0.15"),

excise_rate=D("0.03")),

"2204.2100": TaxRule("2204.2100", "葡萄酒", D("0.14"),

excise_rate=D("0.10"),

preferential={"CL": D("0"), "AU": D("0"), "GE": D("0")}),

"2402.2000": TaxRule("2402.2000", "卷烟", D("0.25"),

excise_rate=D("0.56"), excise_per_unit=D("0.003")),

}

----------------------------------------------------------------------

计算结果

----------------------------------------------------------------------

@dataclass

class DutyResult:

hs_code: str

origin: str

duty_rate: Decimal # 实际适用的关税税率

cif: Decimal # 完税价格(人民币)

duty: Decimal # 关税

excise: Decimal # 消费税

vat: Decimal # 增值税

total_tax: Decimal # 税费合计

landed_cost: Decimal # 到岸总成本 = 完税价格 + 税费

def report(self) -> str:

lines = [

f"商品 : {self.hs_code} 原产地: {self.origin or '---'}",

f"适用关税税率: {self.duty_rate:.2%}",

f"完税价格 CIF: ¥{self.cif:,.2f}",

f"关 税 : ¥{self.duty:,.2f}",

f"消 费 税 : ¥{self.excise:,.2f}",

f"增 值 税 : ¥{self.vat:,.2f}",

f"税费合计 : ¥{self.total_tax:,.2f}",

f"到岸总成本 : ¥{self.landed_cost:,.2f}",

]

return "\n".join(lines)

----------------------------------------------------------------------

核心计算

----------------------------------------------------------------------

def calc_import_tax(hs_code: str,

price,

quantity=1,

fx_rate=1,

origin: str = None) -> DutyResult:

"""

:param hs_code: HS 编码(税则库键值)

:param price: 成交单价(外币或人民币)

:param quantity: 数量(单位需与从量税计量单位一致,如 升 / 千克 / 条)

:param fx_rate: 外币 -> 人民币汇率,人民币计价填 1

:param origin: 原产国代码,用于判定协定优惠税率

"""

rule = TARIFF_DB.get(hs_code)

if rule is None:

raise KeyError(f"税则库中未找到 HS 编码: {hs_code}")

qty = D(str(quantity))

fx = D(str(fx_rate))

1. 完税价格(CIF,人民币)

cif = yuan(D(str(price)) * qty * fx)

2. 确定适用关税税率(协定税率优先)

origin_key = (origin or "").upper()

duty_rate = rule.preferential.get(origin_key, rule.duty_rate)

3. 关税 = 从价税 + 从量税

duty = yuan(cif * duty_rate + rule.duty_per_unit * qty)

4. 消费税

if rule.excise_rate > 0:

组成计税价格 = (完税价格 + 关税 + 从量消费税) / (1 - 从价消费税率)

base = (cif + duty + rule.excise_per_unit * qty) / (D("1") - rule.excise_rate)

excise = yuan(base * rule.excise_rate + rule.excise_per_unit * qty)

elif rule.excise_per_unit > 0:

excise = yuan(rule.excise_per_unit * qty)

else:

excise = yuan(0)

5. 进口环节增值税

vat = yuan((cif + duty + excise) * rule.vat_rate)

total_tax = yuan(duty + excise + vat)

return DutyResult(

hs_code=hs_code,

origin=origin_key,

duty_rate=duty_rate,

cif=cif,

duty=duty,

excise=excise,

vat=vat,

total_tax=total_tax,

landed_cost=yuan(cif + total_tax),

)

----------------------------------------------------------------------

演示

----------------------------------------------------------------------

if name == "main":

例 1:法国葡萄酒,单价 50 欧元,120 瓶,汇率 7.8

r1 = calc_import_tax("2204.2100", price="50", quantity=120,

fx_rate="7.8", origin="FR")

print("【例1】", r1.report(), "\n")

例 2:同款酒来自智利,享受协定零关税

r2 = calc_import_tax("2204.2100", price="50", quantity=120,

fx_rate="7.8", origin="CL")

print("【例2】", r2.report(), "\n")

例 3:卷烟,从价 + 从量复合税,1000 条

r3 = calc_import_tax("2402.2000", price="200", quantity=1000, fx_rate=1)

print("【例3】", r3.report())

```

进口税费计算工具的核心模块

这个脚本把进口税费计算拆成几个好用的部分,您只需要提供商品信息就能直接出结果。

· 税则库:用TaxRule记录每个HS编码对应的从价税、从量税、增值税、消费税及优惠税率,示例里放了智能手机、葡萄酒、卷烟等常见品类。

· 计算函数:calc_import_tax接收HS编码、单价、数量、汇率和原产地,自动完成完税价格、关税、消费税、增值税及到岸总成本的计算。

· 结果报告:返回DutyResult对象并附report()方法,直接打印各项税费明细,方便核对和记录。

· 优惠判定:传入原产地代码后,系统会优先匹配协定税率,像智利葡萄酒就能享受零关税。


优化建议: 示例税则库仅含少量商品,您可以将TARIFF_DB替换为真实海关税则数据或接入查询接口,并同步更新相关税率字段。

文章仅供参考学习用。

相关推荐
专业程序开发源10 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
FPGA小迷弟10 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude
卷无止境10 小时前
面向arm64桌面客户端开发全景:语言、框架与生态
后端·python
fanruitian10 小时前
python else用法
开发语言·python
FRing0310 小时前
JavaScript入门到精通二十六(变量提升、函数剩余参数、展开运算符、ES6箭头函数)
开发语言·前端·javascript·es6·箭头函数
云深麋鹿10 小时前
C++ | 基于红黑树实现mymap与myset
开发语言·c++
Thinker QAQ11 小时前
并发编程(十一):Shared Memory 与 Message Passing——关系与组合使用
java·python·go·并发编程·shared memory·message passing
用户83562907805111 小时前
如何使用 Python 对 Excel 数据进行分组和分级显示
后端·python
vx_Biye_Design11 小时前
django房屋租赁推荐系统78455-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·express
weixin_4173968311 小时前
桌面云终端PXE启动失败怎么排查?从DHCP Option到镜像下发
开发语言·前端·php·技术·酒店·综合布线·弱电