"""经营底稿构造样例;仅标准库,任意工作目录运行,输出到脚本同目录。 税额为经营所得五级累进的优惠前算术值,不认定身份、扣除或减免资格。 """ from decimal import Decimal as D from pathlib import Path import json HERE = Path(__file__).resolve().parent LIMITS = [(30000, D('.05')), (90000, D('.10')), (300000, D('.20')), (500000, D('.30')), (None, D('.35'))] def tax(base): base = max(D(str(base)), D(0)) lower = D(0) total = D(0) bands = [] for upper, rate in LIMITS: width = max(D(0), base - lower) if upper is None else max(D(0), min(base, D(upper)) - lower) amount = width * rate bands.append({'区间下界': lower, '区间上界': upper, '区间税基': width, '税率': rate, '区间税额': amount}) total += amount if upper is not None: lower = D(upper) return {'应税所得额': base, '分段': bands, '优惠前累进税额': total} def encode(v): if isinstance(v, D): return int(v) if v == v.to_integral() else float(v) raise TypeError(type(v).__name__) def build(): out = {} costs = {'材料':180000, '租金':60000, '雇员报酬':90000, '平台费用':30000, '折旧':12000} base = 600000 - sum(costs.values()) - 18000 out['DJ2-073'] = {'收入':600000, '已确认成本':costs, '管理账全部费用':396000, '个人消费':18000, '待核项目':6000, '已确认另行扣除':18000, '桥接':[600000-396000,600000-396000+18000, 600000-396000+18000+6000,base], '正确':tax(base), '误用管理费用':tax(600000-396000-18000), '误用收入':tax(600000), '待核项目后续全部确认可扣':tax(base-6000)} out['DJ2-074'] = {'年度':2025, '已确认收入':360000, '成本明细':{'外包':120000,'租金':60000,'雇员报酬':40000}, '期初现金':40000, '设备购买现金':30000, '设备本年另无扣除':True, '利润税基':tax(140000), '收款情景':[ {'年内收款':r,'年末应收':360000-r,'经营现金净额':r-220000, '购设备后现金净额':r-220000-30000,'期末现金':40000+r-220000-30000, '扣优惠前税额压力后余额':40000+r-220000-30000-tax(140000)['优惠前累进税额']} for r in [260000,220000,360000]]} out['DJ2-075'] = {'期初现金':80000,'收入收现':480000,'已确认成本已付':280000, '个人提款情景':[{'提款':v,'期末现金':80000+480000-280000-v,'税额':tax(200000)} for v in [120000,60000]], '提款误作成本':tax(80000),'个人回补现金20000后余额':180000, '另还借款本金30000后余额':130000} out['DJ2-076'] = {'收入':300000,'账户直接成本':100000,'期初现金':40000, '个人垫款':[{'编号':'E01','金额':18000,'已报销':18000}, {'编号':'E02','金额':8000,'已报销':6000}, {'编号':'E03','金额':4000,'已报销':0}], '垫款合计':30000,'已报销合计':24000,'未报销负债':6000,'期末经营账户现金':216000, '正确':tax(170000),'报销再次扣除':tax(146000),'漏未报销成本':tax(176000), 'E02尚待核验的条件结果':tax(178000)} out['DJ2-077'] = {'已确认年度税基':260000,'优惠前':tax(260000), '外部已确认减免假设':6000,'减免后年度税额假设':35500, '预缴已入库':[5000,7000,9000,6000],'尚未缴款申报':2000, '年度余额':35500-27000,'误抵未缴款余额':35500-29000, '多缴对照':{'已入库':40000,'年度余额':35500-40000}, '税基更正对照':{'优惠前':tax(220000),'同一减免假设':6000,'年度余额':33500-6000-27000}} a,b=160000,140000 out['DJ2-078'] = {'适用假设':'同一居民个人境内两处查账经营,税基及合并范围均先确认;未加入减免', '项目':[{'收入':360000,'成本':200000,'税基':a,'单项优惠前':tax(a),'已入库':12000}, {'收入':300000,'成本':160000,'税基':b,'单项优惠前':tax(b),'已入库':10000}], '合并':tax(a+b),'分别税额之和':tax(a)['优惠前累进税额']+tax(b)['优惠前累进税额'], '优惠前减已入库待衔接额':49500-22000,'误重复扣除60000':tax(240000)} revenue_a=[40000,40000,50000,60000,80000,100000,100000,80000,60000,50000,40000,100000] cost_a=[30000,35000,40000,45000,50000,55000,60000,55000,50000,45000,35000,60000] revenue_b=[100000]*5+[40000]*6+[60000] cost_b=[30000]*5+[65000]*6+[20000] paths=[] for name,revenues,costs in [('较平缓',revenue_a,cost_a),('利润前置后回落',revenue_b,cost_b)]: cumulative_rev=cumulative_profit=0 rows=[] for month,(r,c) in enumerate(zip(revenues,costs),1): cumulative_rev+=r;cumulative_profit+=r-c stress=tax(cumulative_profit)['优惠前累进税额'] reserve=D(cumulative_rev)*D('.05') rows.append({'月':month,'收入':r,'成本':c,'当月利润':r-c,'累计利润':cumulative_profit, '累计收入':cumulative_rev,'按收入5%累计划拨':reserve, '累计利润税额压力刻度':stress,'划拨减压力刻度':reserve-stress}) paths.append({'名称':name,'逐月':rows,'全年收入':sum(revenues),'全年成本':sum(costs), '全年优惠前':tax(cumulative_profit)}) out['DJ2-079']={'路径':paths,'高利润年度对照':tax(360000),'按收入5%预留':40000, '高利润对照不足':67500-40000, '声明':'5%为构造资金分配;累计税额刻度不是月度预缴申报公式,未计已缴与减免'} out['DJ2-080']={'含税客户价款':636000,'价款中的已确认增值税':36000,'收入':600000, '供应商不含可抵扣税额的成本':416400,'采购单列可抵扣税额假设':12000,'供应商付款':428400, '已确认附加等成本':3600,'成本合计':420000,'本期增值税缴款假设':24000, '单独代收代付':10000,'银行总入账':646000, '税前经营现金净额':646000-10000-428400-24000-3600, '正确':tax(180000),'扣优惠前税额的现金压力余量':154500, '含税价误作收入':tax(216000),'将全部银行入账误作收入':tax(226000)} out['DJ2-081']={'收入':500000,'已确认成本':250000,'待核项目':{'混用支出':12000,'设备期间归属':18000}, '个人消费':20000,'管理现金支出总额':300000,'混用项目本年已确认可扣假设':4800, '条件税额':[{'后续确认可扣':v,'结果':tax(500000-250000-v)} for v in [0,4800,18000,22800]], '个人消费也误扣':tax(200000)} for row in out.values(): row['样本性质']='构造教学;金额单位元;税基确认是外部前提,程序不认定资格' assert out['DJ2-073']['正确']['优惠前累进税额']==31500 assert out['DJ2-078']['合并']['优惠前累进税额']==49500 assert all(p['全年收入']==800000 and p['全年成本']==560000 for p in paths) # 与另一种速算表达交叉检查每个输出税基和档位边界。 bases=[0,1,29999,30000,30001,90000,90001,210000,300000,300001,500000,500001,600000] def collect(obj): if isinstance(obj, dict): if '应税所得额' in obj and '优惠前累进税额' in obj: bases.append(obj['应税所得额']) for value in obj.values(): collect(value) elif isinstance(obj, list): for value in obj: collect(value) collect(out) for x in bases: rate,quick=next((r,q) for ceiling,r,q in [(30000,D('.05'),0),(90000,D('.1'),1500), (300000,D('.2'),10500),(500000,D('.3'),40500),(D('Infinity'),D('.35'),65500)] if x<=ceiling) assert tax(x)['优惠前累进税额']==D(x)*rate-quick # 逐表勾稽,数值也对应文章对照行;不认定费用或减免资格。 assert sum(out['DJ2-073']['已确认成本'].values())==372000 assert out['DJ2-073']['管理账全部费用']==372000+18000+6000 assert [r['期末现金'] for r in out['DJ2-074']['收款情景']]==[50000,10000,150000] assert [r['扣优惠前税额压力后余额'] for r in out['DJ2-074']['收款情景']]==[32500,-7500,132500] assert [r['期末现金'] for r in out['DJ2-075']['个人提款情景']]==[160000,220000] advances=out['DJ2-076']['个人垫款'] assert sum(r['金额'] for r in advances)==30000 assert sum(r['金额']-r['已报销'] for r in advances)==6000 assert 40000+300000-100000-24000==out['DJ2-076']['期末经营账户现金'] assert sum(out['DJ2-077']['预缴已入库'])==27000 assert 41500-6000-27000==out['DJ2-077']['年度余额']==8500 assert sum(r['税基'] for r in out['DJ2-078']['项目'])==300000 assert out['DJ2-078']['合并']['优惠前累进税额']-out['DJ2-078']['分别税额之和']==10500 for path in paths: for i,row in enumerate(path['逐月']): assert row['累计利润']==sum(r['当月利润'] for r in path['逐月'][:i+1]) assert row['按收入5%累计划拨']==sum(r['收入'] for r in path['逐月'][:i+1])*D('.05') assert paths[0]['逐月'][4]['按收入5%累计划拨']==13500 assert paths[1]['逐月'][4]['累计利润税额压力刻度']-25000==39500 invoice=out['DJ2-080'] assert invoice['含税客户价款']-invoice['价款中的已确认增值税']==invoice['收入'] assert invoice['供应商不含可抵扣税额的成本']+invoice['采购单列可抵扣税额假设']==invoice['供应商付款'] assert invoice['税前经营现金净额']==180000 assert [r['结果']['优惠前累进税额'] for r in out['DJ2-081']['条件税额']]==[39500,38540,35900,34940] return out if __name__=='__main__': data=build() target=HERE/'calc_r09.json' target.write_text(json.dumps(data,ensure_ascii=False,indent=2,default=encode)+'\n',encoding='utf-8') print(f'已复算{len(data)}篇,输出:{target}')