235 lines
5.5 KiB
Python
235 lines
5.5 KiB
Python
import functools
|
|
|
|
|
|
def params_check(params_index):
|
|
"""
|
|
参数校验
|
|
Parameters:
|
|
params_index: 参数顺序下标
|
|
Returns:
|
|
1.若参数中有None或除法计算分母为0 返回None
|
|
2.通过检验 返回func
|
|
"""
|
|
def decorator(func):
|
|
@functools.wraps(func)
|
|
def internal(*args, **kwargs):
|
|
# 检查参数中有没有None
|
|
if None in args:
|
|
return None
|
|
# 检查分母是否为0
|
|
if sum([args[index] for index in params_index]) == 0:
|
|
return None
|
|
return func(*args, **kwargs)
|
|
return internal
|
|
return decorator
|
|
|
|
|
|
@params_check([1, 2])
|
|
def roe(param1, param2, param3):
|
|
"""
|
|
ZH: 净资产收益率
|
|
EN: Return Of Equity
|
|
Parameters:
|
|
param1 - float 净利润
|
|
param2 - float 所有者权益合计(当期)
|
|
param3 - float 所有者权益合计(上期)
|
|
Returns:
|
|
value - float 净资产收益率
|
|
"""
|
|
value = param1 / (param2 + param3) * 2 * 100
|
|
value = round(value, 2)
|
|
return value
|
|
|
|
|
|
@params_check([2, 3])
|
|
def roa(param1, param2, param3, param4):
|
|
"""
|
|
ZH: 总资产报酬率
|
|
EN: Return Of Assets
|
|
Parameters:
|
|
param1 - float 利润总额
|
|
param2 - float 利息支出
|
|
param3 - float 资产总计(当期)
|
|
param4 - float 资产总计(上期)
|
|
Returns:
|
|
value - float 总资产报酬率
|
|
"""
|
|
value = (param1 + param2) / (param3 + param4) * 2 * 100
|
|
value = round(value, 2)
|
|
return value
|
|
|
|
|
|
@params_check([1, 2])
|
|
def tat(param1, param2, param3):
|
|
"""
|
|
ZH: 总资产周转率
|
|
EN: Total Assets Turnover
|
|
Parameters:
|
|
param1 - float 营业收入
|
|
param2 - float 资产总计(当期)
|
|
param3 - float 资产总计(上期)
|
|
Returns:
|
|
value - float 总资产周转率
|
|
"""
|
|
value = param1 / (param2 + param3) * 2 * 100
|
|
value = round(value)
|
|
return value
|
|
|
|
|
|
@params_check([1])
|
|
def acrt(param1, param2):
|
|
"""
|
|
ZH: 应收账款周转速度
|
|
EN: Accounts Receivable Turnover Speed
|
|
Parameters:
|
|
param1 - float 营业收入
|
|
param2 - float 应收账款
|
|
Returns:
|
|
value - float 应收账款周算速度
|
|
"""
|
|
value = round(param1 / param2, 2)
|
|
return value
|
|
|
|
|
|
@params_check([1, 2])
|
|
def ivtt(param1, param2, param3):
|
|
"""
|
|
ZH: 存货周转率
|
|
EN: Inventory Turnover
|
|
Parameters:
|
|
param1 - float 营业成本
|
|
param2 - float 存货(当期)
|
|
param3 - float 存货(上期)
|
|
Returns:
|
|
value - 存货周转率
|
|
"""
|
|
if param2 + param3 == 0:
|
|
return None
|
|
else:
|
|
value = param1 / (param2 + param3) * 2
|
|
value = round(value, 2)
|
|
return value
|
|
|
|
|
|
@params_check([1])
|
|
def dbar(param1, param2):
|
|
"""
|
|
ZH: 资产负债率
|
|
EN: Debt Asset Ratio
|
|
Parameters:
|
|
param1 - float 负债合计
|
|
param2 - float 资产总计
|
|
Returns:
|
|
value - float 资产负债率
|
|
"""
|
|
if param2 == 0:
|
|
return None
|
|
else:
|
|
value = round(param1 / param2 * 100, 2)
|
|
return value
|
|
|
|
|
|
def icm(param1, param2, param3, param4, param5):
|
|
"""
|
|
ZH: 利息保障倍数
|
|
EN: Interest Cover Multiplier
|
|
Parameters:
|
|
param1 - float 利润总额
|
|
param2 - float 计入财务费用的利息支出
|
|
param3 - float 资本化利息支出
|
|
param4 - float 短期借款
|
|
param5 - float 长期借款
|
|
Returns:
|
|
value - float 利息保障倍数
|
|
"""
|
|
if (param2 + param3) == 0 and (param4 + param5) != 0:
|
|
value = param1 / (param4 * 0.043 + param5 * 0.049)
|
|
value = round(value, 2)
|
|
return value
|
|
elif (param2 + param3) > 0:
|
|
value = (param1 + param2) / (param2 + param3)
|
|
value = round(value, 2)
|
|
return value
|
|
else:
|
|
return None
|
|
|
|
|
|
@params_check([2])
|
|
def qkr(param1, param2, param3):
|
|
"""
|
|
ZH: 速动比率
|
|
EN: Quick Ratio
|
|
Unit: %
|
|
Parameters:
|
|
param1 - float 流动资产合计
|
|
param2 - float 存货
|
|
param3 - float 流动负债合计
|
|
Returns:
|
|
value - float 速动比率
|
|
"""
|
|
if param3 == 0:
|
|
return None
|
|
else:
|
|
value = (param1 - param2) / param3
|
|
value = round(value, 2)
|
|
return value
|
|
|
|
|
|
@params_check([1])
|
|
def bgr(param1, param2):
|
|
"""
|
|
ZH: 营业增长率
|
|
EN: Business Growth Rate
|
|
Unit: %
|
|
Parameters:
|
|
param1 - float 期末营业收入
|
|
param2 - float 期初营业收入
|
|
Returns:
|
|
value - float 营业增长率
|
|
"""
|
|
if param2 == 0:
|
|
return None
|
|
else:
|
|
value = (param1 - param2) / param2 * 100
|
|
value = round(value, 2)
|
|
return value
|
|
|
|
|
|
@params_check([1])
|
|
def tagr(param1, param2):
|
|
"""
|
|
ZH: 总资产增长率
|
|
EN: Total Assets Growth Rate
|
|
Unit: %
|
|
Parameters:
|
|
param2 - float 期末资产总计
|
|
param3 - float 期初资产总计
|
|
Returns:
|
|
value - float 总资产增长率
|
|
"""
|
|
if param2 == 0:
|
|
return None
|
|
else:
|
|
value = (param1 - param2) / param2 * 100
|
|
value = round(value, 2)
|
|
return value
|
|
|
|
|
|
@params_check([1])
|
|
def tio(param1, param2):
|
|
"""
|
|
ZH: 技术投入比率
|
|
EN: Technology Input-Output Ratio
|
|
Unit: %
|
|
Parameters:
|
|
param1 - float 研发费用
|
|
param2 - float 营业收入
|
|
Returns:
|
|
value - type 技术投入比率
|
|
"""
|
|
if param2 == 0:
|
|
return None
|
|
else:
|
|
value = round(param1 / param2 * 100, 2)
|
|
return value
|