Token导航 LogoToken导航TokenDH.com
研究检索权限需确认clawhub未标认证来源可访问clear审计通过

validate-einvoice-xmlvalidate einvoice XML 搜索

Agent Skill

用于辅助音频、音乐、语音转写、语音合成或声音素材处理。它适合让 Agent 生成配乐说明、整理音频流程、调用语音工具或处理播客和视频配音素材。使用时需要确认输入音频来源、输出格式、时长和模型限制;涉及人声克隆、版权音乐或公开发布时,应先核对授权和合规边界。

总安装

2,717

周安装

111

GitHub Stars

公开资料未说明

下载量

879
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:validate-einvoice-xml(validate einvoice XML 搜索)
来源仓库:https://github.com/hanw2039/validate-einvoice-xml
安装命令:
openclaw skills install validate-einvoice-xml
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install validate-einvoice-xml

简介

验证XML文件是否为中国数电票(全面数字化电子发票)格式。检查XML结构、必需字段和数电票特征。当用户需要验证XML是否为数电票、检查数电票格式合规性、或处理电子发票XML文件时使用。

SKILL.md

name
validate-einvoice-xml
description
验证XML文件是否为中国数电票(全面数字化电子发票)格式。检查XML结构、必需字段和数电票特征。当用户需要验证XML是否为数电票、检查数电票格式合规性、或处理电子发票XML文件时使用。

数电票XML验证

验证XML文件是否符合中国数电票(全面数字化电子发票)格式规范。

数电票XML关键特征

数电票XML必须包含以下核心结构和字段:

1. 根元素

  • 根元素名称为 EInvoice

2. 头部信息 (Header)

必需子元素:

  • EIid - 发票唯一标识(20位数字)
  • EInvoiceTag - 发票标签(如 SWEI4400)
  • Version - 版本号
  • InherentLabel - 固有标签(包含发票类型信息)

3. 发票数据 (EInvoiceData)

必需包含以下部分:

  • SellerInformation - 销售方信息(SellerIdNum, SellerName)
  • BuyerInformation - 购买方信息(BuyerIdNum, BuyerName)
  • BasicInformation - 基本信息(金额、开票时间等)
  • IssuItemInformation - 开票项目信息(至少一个)

4. 销售方认证 (SellerAuthentication)

  • AuthenticationMethods - 认证方式

5. 税务监管信息 (TaxSupervisionInfo)

  • InvoiceNumber - 发票号码(20位)
  • IssueTime - 开票日期
  • TaxBureauCode - 税务局代码
  • TaxBureauName - 税务局名称

6. 税务局签名 (TaxBureauSignature)

  • SignatureValue - 签名值(包含数字签名)

验证流程

  1. XML格式检查

- 验证是否为有效的XML文件 - 检查XML声明(encoding="utf-8")

  1. 根元素验证

- 确认根元素为 EInvoice

  1. 必需元素检查

- 检查 Header/EIid 是否存在(20位数字) - 检查 Header/EInvoiceTag 是否存在 - 检查 EInvoiceData/SellerInformation/SellerIdNum - 检查 EInvoiceData/BuyerInformation/BuyerIdNum - 检查 TaxSupervisionInfo/InvoiceNumber(20位)

  1. 数电票特征验证

- 发票号码为20位数字(区别于传统发票的8位或12位) - 包含数字签名(TaxBureauSignature/SignatureValue) - 包含税务局信息

验证脚本

使用以下Python脚本进行验证:

import xml.etree.ElementTree as ET
import re

def validate_einvoice_xml(file_path):
    """
    验证XML是否为数电票格式
    返回: (is_valid: bool, message: str, details: dict)
    """
    result = {
        "is_valid_xml": False,
        "has_einvoice_root": False,
        "has_required_fields": False,
        "invoice_number": None,
        "seller_id": None,
        "buyer_id": None,
        "errors": []
    }
    
    try:
        # 1. 解析XML
        tree = ET.parse(file_path)
        root = tree.getroot()
        result["is_valid_xml"] = True
        
        # 2. 检查根元素
        if root.tag != "EInvoice":
            result["errors"].append(f"根元素应为 'EInvoice',实际为 '{root.tag}'")
            return False, "非数电票格式:根元素不匹配", result
        result["has_einvoice_root"] = True
        
        # 3. 检查必需字段
        ns = {'': root.tag}  # 处理命名空间
        
        # 检查 EIid
        eiid = root.find('.//EIid')
        if eiid is None or not eiid.text:
            result["errors"].append("缺少必需字段: Header/EIid")
        elif eiid.text and not re.match(r'^\d{20}$', eiid.text.strip()):
            result["errors"].append(f"EIid 应为20位数字,实际为: {eiid.text}")
        
        # 检查 EInvoiceTag
        einvoice_tag = root.find('.//EInvoiceTag')
        if einvoice_tag is None or not einvoice_tag.text:
            result["errors"].append("缺少必需字段: Header/EInvoiceTag")
        
        # 检查 InvoiceNumber (20位数电票号码)
        invoice_num = root.find('.//InvoiceNumber')
        if invoice_num is not None and invoice_num.text:
            result["invoice_number"] = invoice_num.text.strip()
            if not re.match(r'^\d{20}$', invoice_num.text.strip()):
                result["errors"].append(f"InvoiceNumber 应为20位数字,实际为: {invoice_num.text}")
        
        # 检查销售方纳税人识别号
        seller_id = root.find('.//SellerIdNum')
        if seller_id is not None and seller_id.text:
            result["seller_id"] = seller_id.text.strip()
        
        # 检查购买方纳税人识别号
        buyer_id = root.find('.//BuyerIdNum')
        if buyer_id is not None and buyer_id.text:
            result["buyer_id"] = buyer_id.text.strip()
        
        # 检查数字签名
        signature = root.find('.//SignatureValue')
        if signature is None or not signature.text:
            result["errors"].append("缺少数字签名: TaxBureauSignature/SignatureValue")
        
        # 检查税务局信息
        tax_bureau = root.find('.//TaxBureauName')
        if tax_bureau is None or not tax_bureau.text:
            result["errors"].append("缺少税务局信息: TaxSupervisionInfo/TaxBureauName")
        
        # 判定结果
        if len(result["errors"]) == 0:
            result["has_required_fields"] = True
            return True, "验证通过:该XML是有效的数电票格式", result
        else:
            return False, f"验证失败:发现 {len(result['errors'])} 个问题", result
            
    except ET.ParseError as e:
        result["errors"].append(f"XML解析错误: {str(e)}")
        return False, "XML格式错误:无法解析文件", result
    except Exception as e:
        result["errors"].append(f"验证过程出错: {str(e)}")
        return False, f"验证异常: {str(e)}", result


def print_validation_report(file_path):
    """打印详细的验证报告"""
    is_valid, message, details = validate_einvoice_xml(file_path)
    
    print("=" * 60)
    print("数电票XML验证报告")
    print("=" * 60)
    print(f"文件路径: {file_path}")
    print(f"验证结果: {'✓ 通过' if is_valid else '✗ 失败'}")
    print(f"结果说明: {message}")
    print("-" * 60)
    
    if details["invoice_number"]:
        print(f"发票号码: {details['invoice_number']}")
    if details["seller_id"]:
        print(f"销售方税号: {details['seller_id']}")
    if details["buyer_id"]:
        print(f"购买方税号: {details['buyer_id']}")
    
    if details["errors"]:
        print("\
问题列表:")
        for i, error in enumerate(details["errors"], 1):
            print(f"  {i}. {error}")
    
    print("=" * 60)
    return is_valid


# 使用示例
if __name__ == "__main__":
    import sys
    if len(sys.argv) > 1:
        print_validation_report(sys.argv[1])
    else:
        print("用法: python validate_einvoice.py <xml文件路径>")

快速判断方法

如果只需要快速判断,检查以下3个关键特征:

  1. 根元素是 EInvoice - 区别于传统发票的 Invoice
  2. 发票号码是20位数字 - 区别于传统发票的8位或12位
  3. 包含 TaxBureauSignature - 税务局数字签名

满足以上3点,基本可以确定为数电票XML。

与传统电子发票的区别

特征数电票传统电子发票
根元素EInvoiceInvoice
发票号码20位数字8位或12位
发票代码有(10位或12位)
数字签名TaxBureauSignature可能不同
版本标识Version字段可能无

输出格式

验证完成后,输出以下格式的报告:

## 数电票验证结果

**文件**: [文件名]

**验证结果**: [通过/失败]

**发票信息**:
- 发票号码: [20位号码]
- 销售方: [纳税人识别号]
- 购买方: [纳税人识别号]
- 开票日期: [日期]

**详细检查**:
- [x] XML格式正确
- [x] 根元素为EInvoice
- [x] 包含EIid字段(20位)
- [x] 包含发票号码(20位)
- [x] 包含数字签名
- [ ] [如有失败项]

**结论**: [该文件是/不是]有效的数电票XML

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

73.33%
按下载量换算645

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

通过

权限和风险

权限需确认

当前来源未能明确判断权限范围,默认进入异常复核队列。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills