lists.arthurdejong.org
RSS feed

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



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