python-stdnum branch master updated. 1.20-4-g58ecb03
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
python-stdnum branch master updated. 1.20-4-g58ecb03
- From: Commits of the python-stdnum project <python-stdnum-commits [at] lists.arthurdejong.org>
- To: python-stdnum-commits [at] lists.arthurdejong.org
- Reply-to: python-stdnum-users [at] lists.arthurdejong.org, python-stdnum-commits [at] lists.arthurdejong.org
- Subject: python-stdnum branch master updated. 1.20-4-g58ecb03
- Date: Sun, 23 Jun 2024 14:28:14 +0200 (CEST)
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "python-stdnum".
The branch, master has been updated
via 58ecb0348ef7bd53d08ac21bfaed32e9d68764b2 (commit)
from fb4d792145c315170dffe20a8e4c76277be27429 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://arthurdejong.org/git/python-stdnum/commit/?id=58ecb0348ef7bd53d08ac21bfaed32e9d68764b2
commit 58ecb0348ef7bd53d08ac21bfaed32e9d68764b2
Author: Olly Middleton <olly@wegotpop.com>
Date: Fri May 31 22:03:45 2024 +0100
Update Irish PPS validator to support new numbers
See https://www.charteredaccountants.ie/News/b-range-pps-numbers
Closes https://github.com/arthurdejong/python-stdnum/issues/440
Closes https://github.com/arthurdejong/python-stdnum/pull/441
diff --git a/stdnum/ie/pps.py b/stdnum/ie/pps.py
index e64514c..a52d8f3 100644
--- a/stdnum/ie/pps.py
+++ b/stdnum/ie/pps.py
@@ -25,8 +25,11 @@ two letters. The first letter is a check character.
When present (which should be the case for new numbers as of 2013),
the second letter can be 'A' (for individuals) or 'H' (for
non-individuals, such as limited companies, trusts, partnerships
-and unincorporated bodies). Pre-2013 values may have 'W', 'T',
-or 'X' as the second letter ; it is ignored by the check.
+and unincorporated bodies). As of 2024, B was accepted as a second
+letter on all new PPS numbers.
+
+Pre-2013 values may have 'W', 'T', or 'X' as the second letter ;
+it is ignored by the check.
>>> validate('6433435F') # pre-2013
'6433435F'
@@ -55,7 +58,7 @@ from stdnum.ie import vat
from stdnum.util import clean
-pps_re = re.compile(r'^\d{7}[A-W][AHWTX]?$')
+pps_re = re.compile(r'^\d{7}[A-W][ABHWTX]?$')
"""Regular expression used to check syntax of PPS numbers."""
@@ -71,7 +74,7 @@ def validate(number):
number = compact(number)
if not pps_re.match(number):
raise InvalidFormat()
- if len(number) == 9 and number[8] in 'AH':
+ if len(number) == 9 and number[8] in 'ABH':
# new 2013 format
if number[7] != vat.calc_check_digit(number[:7] + number[8:]):
raise InvalidChecksum()
diff --git a/tests/test_ie_pps.doctest b/tests/test_ie_pps.doctest
new file mode 100644
index 0000000..6527a4f
--- /dev/null
+++ b/tests/test_ie_pps.doctest
@@ -0,0 +1,59 @@
+test_ie_pps.doctest - more detailed doctests for stdnum.ie.pps module
+
+Copyright (C) 2024 Olly Middleton
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA
+
+
+This file contains more detailed doctests for the stdnum.ie.pps module. It
+tries to cover more corner cases and detailed functionality that is not
+really useful as module documentation.
+
+>>> from stdnum.ie import pps
+
+
+Extra tests for length checking and corner cases:
+
+>>> pps.validate('111222333') # check number should contain letters
+Traceback (most recent call last):
+ ...
+InvalidFormat: ...
+>>> pps.validate('1234567ABC') # too long
+Traceback (most recent call last):
+ ...
+InvalidFormat: ...
+>>> pps.validate('1234567XX') # invalid letters
+Traceback (most recent call last):
+ ...
+InvalidFormat: ...
+
+
+The validate() function should check with new format if last letter is A, B or
H.
+
+>>> pps.validate('1234567FA')
+'1234567FA'
+>>> pps.validate('1234567WH')
+'1234567WH'
+>>> pps.validate('1234567OB')
+'1234567OB'
+
+
+The validate() function should check with old format if last letter is W or T.
+
+>>> pps.validate('1234567TW')
+'1234567TW'
+>>> pps.validate('1234567TT')
+'1234567TT'
-----------------------------------------------------------------------
Summary of changes:
stdnum/ie/pps.py | 11 +++---
tests/{test_ie_vat.doctest => test_ie_pps.doctest} | 41 ++++++++++++++--------
2 files changed, 33 insertions(+), 19 deletions(-)
copy tests/{test_ie_vat.doctest => test_ie_pps.doctest} (55%)
hooks/post-receive
--
python-stdnum
- python-stdnum branch master updated. 1.20-4-g58ecb03,
Commits of the python-stdnum project