跳转到主要内容

通过ARES/VIES验证增值税号

项目描述

验证增值税登记号

本模块用于验证欧盟的增值税登记号和捷克共和国的增值税识别号。该模块用于Django Verify VAT registration number模块,然后用于DjangoCMS Verify VAT registration number模块。

VIES

VIES增值税号验证(欧盟)。它是一种电子方式,用于验证欧盟内注册的经济操作者的增值税识别号,用于跨境货物或服务的交易。

支持的国家

AT - Austria
BE - Belgium
BG - Bulgaria
CY - Cyprus
CZ - Czechia
DE - Germany
DK - Denmark
EE - Estonia
EL - Greece
ES - Spain
FI - Finland
FR - France
HR - Croatia
HU - Hungary
IE - Ireland
IT - Italy
LT - Lithuania
LU - Luxembourg
LV - Latvia
MT - Malta
NL - The Netherlands
PL - Poland
PT - Portugal
RO - Romania
SE - Sweden
SI - Slovenia
SK - Slovakia
XI - Northern Ireland

ARES

ARES - Access to Registers of Economic Subjects / Entities是一个信息系统,允许检索在捷克共和国注册的经济实体的信息。该系统介于特定政府行政机构(称为源注册)的数据展示之间,这些数据存储在这些注册中。

安装

此库可在PyPI上找到,建议使用pip进行安装

pip install verify-vat-number

使用

from verify_vat_number.ares import get_from_cz_ares
from verify_vat_number.vies import get_from_eu_vies
from verify_vat_number.exceptions import VatNotFound, VerifyVatException, UnsupportedCountryCode

def dump_reg(vat):
    print('\nVAT-REG-NUM:', vat)
    try:
        data = get_from_eu_vies(vat)
    except VatNotFound:
        print("VAT not found for", vat)
    except UnsupportedCountryCode as err:
        print("Unsupported country code:", err)
    except VerifyVatException as err:
        print(err)
        print(err.source)
    else:
        print(data)

def dump_vid(ic):
    print('\nVAT-ID-NUM:', ic)
    try:
        data = get_from_cz_ares(ic)
    except VatNotFound:
        print("IC not found for", ic)
    except VerifyVatException as err:
        print(err)
        print(err.source)
    else:
        print(data)


for vat in ("CZ67985726", "DE306401413", "SK2020317068", "CZ67985728", "BE0404616494", "BE0400853488", "BG127015636", "XX67985726"):
    dump_reg(vat)

for ic in ("67985726", "67985728", "456456456"):
    dump_vid(ic)
VAT-REG-NUM: CZ67985726
VerifiedCompany(
    company_name='CZ.NIC, z.s.p.o.',
    address='Milešovská 1136/5\nPRAHA 3 - VINOHRADY\n130 00  PRAHA 3',
    street_and_num='Milešovská 1136/5',
    city='PRAHA 3',
    postal_code='130 00',
    district='PRAHA 3 - VINOHRADY',
    country_code='CZ',
    legal_form=None
)

VAT-REG-NUM: DE306401413
VerifiedCompany(
    company_name='',
    address=None,
    street_and_num=None,
    city=None,
    postal_code=None,
    district=None,
    country=None,
    legal_form=None
)

VAT-REG-NUM: SK2020317068
VerifiedCompany(
    company_name='ESET, spol. s r.o.',
    address='Einsteinova 24\n85101 Bratislava - mestská časť Petržalka\nSlovensko',
    street_and_num='Einsteinova 24',
    city='Bratislava - mestská časť Petržalka',
    postal_code='85101',
    district=None,
    country_code='SK',
    legal_form=None
)

VAT-REG-NUM: CZ67985728
VAT not found for CZ67985728

VAT-REG-NUM: BE0404616494
VerifiedCompany(
    company_name='NV ACKERMANS & VAN HAAREN',
    address='Begijnenvest 113\n2000 Antwerpen',
    street_and_num='Begijnenvest 113',
    city='Antwerpen',
    postal_code='2000',
    district=None,
    country_code='BE',
    legal_form=None
)

VAT-REG-NUM: BE0400853488
VerifiedCompany(
    company_name='NV BRUSSELS AIRLINES',
    address='Ringbaan 26\n1831 Machelen (Brab.)',
    street_and_num='Ringbaan 26',
    city='Machelen (Brab.)',
    postal_code='1831',
    district=None,
    country_code='BE',
    legal_form=None
)

VAT-REG-NUM: BG127015636
VerifiedCompany(
    company_name='КАРЛСБЕРГ БЪЛГАРИЯ - АД',
    address='жк МЛАДОСТ 4БИЗНЕС ПАРК СОФИЯ  №1 бл.сграда 10 ет.4 обл.СОФИЯ, гр.СОФИЯ 1715',
    street_and_num='жк МЛАДОСТ 4БИЗНЕС ПАРК СОФИЯ  №1 бл.сграда 10 ет.4 обл.СОФИЯ',
    city='гр.СОФИЯ',
    postal_code='1715',
    district=None,
    country_code='BG',
    legal_form=None
)

VAT-REG-NUM: XX67985726
Unsupported country code: XX

VAT-ID-NUM: 67985726
VerifiedCompany(
    company_name='CZ.NIC, z.s.p.o.',
    address='Milešovská 1136/5\n13000 Praha 3',
    street_and_num='Milešovská 1136/5',
    city='Praha 3',
    postal_code='13000',
    district='Praha 3 - Vinohrady',
    country_code='CZ',
    legal_form=751
)

VAT-ID-NUM: 67985728
IC not found for 67985728

VAT-ID-NUM: 456456456
The number cannot be more than 8 digits long.
None

与日志记录一起工作

import sys
import logging
from verify_vat_number.ares import get_from_cz_ares
from verify_vat_number.vies import get_from_eu_vies
from verify_vat_number.exceptions import VatNotFound

logger = logging.getLogger('verify_vat_number.vies')
logger.addHandler(logging.StreamHandler(sys.stdout))
logger.setLevel(logging.DEBUG)

get_from_eu_vies("CZ67985726")
https://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl Country code: CZ VAT: 67985726

<ns0:Envelope
    xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns1="urn:ec.europa.eu:taxud:vies:services:checkVat:types">
    <ns0:Body>
        <ns1:checkVat>
            <ns1:countryCode>CZ</ns1:countryCode>
            <ns1:vatNumber>67985726</ns1:vatNumber>
        </ns1:checkVat>
    </ns0:Body>
</ns0:Envelope>

<ns0:Envelope
    xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns1="urn:ec.europa.eu:taxud:vies:services:checkVat:types">
    <ns0:Body>
        <ns1:checkVatResponse>
            <ns1:countryCode>CZ</ns1:countryCode>
            <ns1:vatNumber>67985726</ns1:vatNumber>
            <ns1:requestDate>2022-05-20+02:00</ns1:requestDate>
            <ns1:valid>true</ns1:valid>
            <ns1:name>CZ.NIC, z.s.p.o.</ns1:name>
            <ns1:address>Milešovská 1136/5
PRAHA 3 - VINOHRADY
130 00  PRAHA 3</ns1:address>
        </ns1:checkVatResponse>
    </ns0:Body>
</ns0:Envelope>

VerifiedCompany(
    company_name='CZ.NIC, z.s.p.o.',
    address='Milešovská 1136/5\n13000 Praha 3',
    street_and_num='Milešovská 1136/5',
    city='Praha 3',
    postal_code='13000',
    district='Praha 3 - Vinohrady',
    country_code='CZ',
    legal_form=None
)
logger = logging.getLogger('verify_vat_number.ares')
logger.addHandler(logging.StreamHandler(sys.stdout))
logger.setLevel(logging.DEBUG)

try:
    get_from_cz_ares("67985728")
except VatNotFound:
    print('VAT not found.')
https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/67985728/
VAT not found.

多个ARES输出:经济实体/公共登记

get_from_cz_ares 函数是对各个寄存器的总称函数。目前它包括经济实体(get_from_cz_ares_ee)和公共登记册(get_from_cz_ares_vr)。默认是经济实体。使用 register_type 属性并具有 RegisterType.PUBLIC_REGISTER 值返回公共登记册的数据。公共登记册包含关于著名治理机构所有者和成员的信息。

from verify_vat_number.ares import get_from_cz_ares, get_from_cz_ares_vr, RegisterType

get_from_cz_ares("67985726", RegisterType.PUBLIC_REGISTER)
# or
get_from_cz_ares_vr("67985726")


VerifiedCompanyPublicRegister(
    company_name='CZ.NIC, z.s.p.o.',
    address='Milešovská 1136/5\n13000 Praha 3',
    street_and_num='Milešovská 1136/5', city='Praha 3',
    postal_code='13000', district='Praha 3 - Vinohrady',
    country_code='CZ',
    company_entities=[
        CompanyEntity(
            entity_type=<CompanyEntityType.GOVERNING_BODY: 'Statutární orgán'>,
            name='Statutární orgán - Představenstvo',
            members=[
                Member(
                    role=<MemberRoleType.STATUTORY_BODY_MEMBER: 'STATUTARNI_ORGAN_CLEN'>,
                    identity=NaturalPerson(
                        first_name='Josef',
                        last_name='Novák',
                        date_of_birth=datetime.date(1992, 11, 8))),
                Member(
                    role=<MemberRoleType.STATUTORY_BODY_MEMBER: 'STATUTARNI_ORGAN_CLEN'>,
                    identity=NaturalPerson(
                        first_name='Jana',
                        last_name='Novotná',
                        date_of_birth=datetime.date(1962, 9, 17))),
                Member(
                    role=<MemberRoleType.STATUTORY_BODY_MEMBER: 'STATUTARNI_ORGAN_CLEN'>,
                    identity=NaturalPerson(
                        first_name='Karel',
                        last_name='Svoboda',
                        date_of_birth=datetime.date(1981, 12, 3))),
                Member(
                    role=<MemberRoleType.STATUTORY_BODY_MEMBER: 'STATUTARNI_ORGAN_CLEN'>,
                    identity=NaturalPerson(
                        first_name='Hana',
                        last_name='Horáková',
                        date_of_birth=datetime.date(1974, 4, 12))),
                Member(
                    role=<MemberRoleType.STATUTORY_BODY_MEMBER: 'STATUTARNI_ORGAN_CLEN'>,
                    identity=NaturalPerson(
                        first_name='Jiří',
                        last_name='Dvořák',
                        date_of_birth=datetime.date(1978, 6, 21)))
        ]),
        CompanyEntity(
            entity_type=<CompanyEntityType.OTHER: 'Jiný orgán'>,
            name='Kontrolní orgán - Dozorčí rada',
            members=[
                Member(
                    role=<MemberRoleType.AUDIT_COMMITTEE_MEMBER: 'KONTROLNI_KOMISE_CLEN'>,
                    identity=NaturalPerson(
                        first_name='Eva',
                        last_name='Kopecká',
                        date_of_birth=datetime.date(1982, 8, 12))),
                Member(
                    role=<MemberRoleType.AUDIT_COMMITTEE_MEMBER: 'KONTROLNI_KOMISE_CLEN'>,
                    identity=NaturalPerson(
                        first_name='Milan',
                        last_name='Dostál',
                        date_of_birth=datetime.date(1985, 7, 10))),
                Member(
                    role=<MemberRoleType.AUDIT_COMMITTEE_MEMBER: 'KONTROLNI_KOMISE_CLEN'>,
                    identity=NaturalPerson(
                        first_name='Jan',
                        last_name='Beneš',
                        date_of_birth=datetime.date(1952, 11, 12)))
        ])
    ],
    legal_form=751
)

ARES - 各种登记册

ARES 数据来源于多个来源。目前已实现了两个

  • 经济实体
  • 公共登记册

通过 get_from_cz_ares_ee(VAT) 函数获取经济实体,这与调用 get_from_cz_ares(VAT) 函数相同。公共登记册的数据由 get_from_cz_ares_vr(VAT) 函数提供,这与调用 get_from_cz_ares(VAT, RegisterType.PUBLIC_REGISTER) 函数几乎相同。区别在于,如果公共登记册中找不到数据,则从默认的登记册经济实体返回数据。因此,get_from_cz_ares_ee 函数可能会抛出 VatNotFound 异常,而 get_from_cz_ares 函数将返回公司记录,但当然,没有实体。

ARES - 实体中人的小写姓名

遗憾的是,ARES 公共登记册返回的是大写字母的人名。程序将它们转换回小写。如果您希望保留原始数据,可以禁用此转换的 ARES_KEEP_CASE 环境变量。

python -c 'from verify_vat_number.ares import get_from_cz_ares_vr;print(get_from_cz_ares_vr("67985726"))'
VerifiedCompanyPublicRegister(
    company_name='CZ.NIC, z.s.p.o.',
    ...
    company_entities=[
        CompanyEntity(entity_type=<CompanyEntityType.GOVERNING_BODY: 'Statutární orgán'>, name='Statutární orgán',
        members=[
            Member(
                role=<MemberRoleType.STATUTORY_BODY_MEMBER: 'STATUTARNI_ORGAN_CLEN'>,
                identity=NaturalPerson(first_name='Josef', last_name='Novák', ...)),
        ...
    ...
)
ARES_KEEP_CASE=y python -c 'from verify_vat_number.ares import get_from_cz_ares_vr;print(get_from_cz_ares_vr("67985726"))'
VerifiedCompanyPublicRegister(
    company_name='CZ.NIC, z.s.p.o.',
    ...
    company_entities=[
        CompanyEntity(entity_type=<CompanyEntityType.GOVERNING_BODY: 'Statutární orgán'>, name='Statutární orgán',
        members=[
            Member(
                role=<MemberRoleType.STATUTORY_BODY_MEMBER: 'STATUTARNI_ORGAN_CLEN'>,
                identity=NaturalPerson(first_name='JOSEF', last_name='NOVÁK', ...)),
        ...
    ...
)

许可证

GPLv3+

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

verify-vat-number-2.0.0.tar.gz (36.1 kB 查看哈希值)

上传

构建分布

verify_vat_number-2.0.0-py3-none-any.whl (37.0 kB 查看哈希值)

上传 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面