Odoo税务平台回执数据解析与存储机制详解
Odoo作为开源ERP系统,其税务平台回执数据处理采用分层架构设计,通过事件驱动模式实现高效解析与存储。以下是核心实现机制:
一、数据解析层架构
1. 多格式适配解析器
class TaxReceiptParser:
def parse_xml_receipt(self, xml_data):
"""解析XML格式税务回执"""
try:
root = ET.fromstring(xml_data)
receipt_data = {
'receipt_id': root.find('ns:ReceiptID', namespaces=NS_MAP).text,
'status': root.find('ns:Status', namespaces=NS_MAP).text,
'tax_amount': float(root.find('ns:TaxAmount', namespaces=NS_MAP).text),
'issue_date': datetime.strptime(
root.find('ns:IssueDate', namespaces=NS_MAP).text,
'%Y-%m-%d %H:%M:%S'
)
}
return receipt_data
except ET.ParseError as e:
self._log_parse_error(xml_data, e)
def parse_json_receipt(self, json_data):
"""解析JSON格式税务回执"""
data = json.loads(json_data)
return {
'receipt_id': data['receiptNo'],
'status': self._map_status_code(data['statusCode']),
'tax_amount': data['taxPayable'],
'verification_url': data['verifyUrl']
}
2. 状态码映射机制
class StatusMapper:
STATUS_MAPPING = {
'S001': 'approved', # 审核通过
'S002': 'rejected', # 审核驳回
'S003': 'pending', # 处理中
'S004': 'cancelled' # 已作废
}
def map_status_code(self, platform_code):
return self.STATUS_MAPPING.get(platform_code, 'unknown')
二、数据存储层设计
1. 标准化存储模型
class TaxReceipt(models.Model):
_name = 'tax.receipt'
_description = '税务回执存储'
name = fields.Char('回执编号', required=True)
original_id = fields.Char('平台原始ID') # 税务平台返回的唯一标识
status = fields.Selection([
('draft', '草稿'),
('submitted', '已提交'),
('approved', '审核通过'),
('rejected', '审核驳回'),
('cancelled', '已作废')
], string='状态', default='draft')
# 核心税务数据
tax_amount = fields.Float('税额', digits=(12, 2))
total_amount = fields.Float('金额合计', digits=(12, 2))
issue_date = fields.Datetime('开票日期')
verification_url = fields.Char('查验地址')
# 关联业务数据
invoice_id = fields.Many2one('account.move', '关联发票')
company_id = fields.Many2one('res.company', '公司', required=True)
# 审计字段
raw_data = fields.Text('原始回执数据') # 完整保存原始响应
parse_log = fields.Text('解析日志')
last_sync = fields.Datetime('最后同步时间')
2. 数据持久化流程
class TaxReceiptService:
def process_receipt_response(self, platform_response):
"""处理税务平台回执响应"""
try:
# 1. 格式识别与解析
parser = self._select_parser(platform_response.format_type)
parsed_data = parser.parse(platform_response.raw_data)
# 2. 数据验证
self._validate_receipt_data(parsed_data)
# 3. 存储处理
receipt = self._create_or_update_receipt(parsed_data)
# 4. 状态同步
self._sync_invoice_status(receipt)
return receipt
except ValidationError as e:
self._handle_validation_error(e, platform_response)
except IntegrityError as e:
self._handle_integrity_error(e, parsed_data)
三、事件驱动处理机制
1. 回执处理事件流
@api.model
def process_tax_receipt_event(self, receipt_data):
"""税务回执处理事件入口"""
# 触发解析事件
self.env['tax.event'].create({
'type': 'receipt_parse_start',
'payload': receipt_data
})
# 执行解析存储
receipt = self.tax_receipt_service.process_receipt_response(receipt_data)
# 触发后续业务事件
if receipt.status == 'approved':
self._trigger_invoice_confirm_event(receipt)
elif receipt.status == 'rejected':
self._trigger_rejection_handle_event(receipt)
2. 错误处理与重试
class ReceiptErrorHandler:
def handle_parse_failure(self, raw_data, error):
"""处理解析失败情况"""
error_receipt = self.env['tax.receipt'].create({
'name': f'ERROR_{datetime.now().strftime("%Y%m%d%H%M%S")}',
'status': 'parse_error',
'raw_data': raw_data,
'parse_log': str(error)
})
# 进入人工处理队列
self._create_manual_review_task(error_receipt)
# 记录错误指标
self._metrics.inc('receipt_parse_errors')
四、审计与数据一致性保障
1. 完整审计追踪
class TaxReceiptAudit(models.Model):
_name = 'tax.receipt.audit'
receipt_id = fields.Many2one('tax.receipt', '回执')
operation = fields.Selection([
('create', '创建'),
('update', '更新'),
('parse', '解析'),
('sync', '同步')
], string='操作类型')
old_values = fields.Text('旧值')
new_values = fields.Text('新值')
timestamp = fields.Datetime('操作时间', default=fields.Datetime.now)
user_id = fields.Many2one('res.users', '操作人')
2. 数据一致性检查
def verify_receipt_consistency(self):
"""回执数据一致性验证"""
inconsistent_receipts = self.env['tax.receipt'].search([
'|',
('invoice_id', '=', False),
('raw_data', '=', False)
])
for receipt in inconsistent_receipts:
self._repair_receipt_data(receipt)
五、实际应用场景示例
场景:电子发票回执处理
- 接收回执:税务平台推送XML格式回执数据
- 解析验证:提取回执编号、状态、税额等关键信息
- 状态更新:自动更新关联发票状态为"已认证"
- 凭证生成:基于回执数据创建会计凭证
- 归档存储:原始回执数据加密存储备查
这种设计确保了税务回执数据从接收到存储的全流程自动化处理,同时提供了完善的错误处理和审计追踪能力,符合企业级税务合规要求。通过模块化解析器和标准化存储模型,系统能够灵活适配不同税务平台的接口差异,保证数据处理的一致性和可靠性。
参考来源
391

被折叠的 条评论
为什么被折叠?



