lists.arthurdejong.org
RSS feed

python-stdnum branch master updated. 1.20-7-ge951dac

[Date Prev][Date Next] [Thread Prev][Thread Next]

python-stdnum branch master updated. 1.20-7-ge951dac



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  e951daca447f678f5a3f3c70dcc535eb8d7449b4 (commit)
      from  1da003f4523369d982ad923e6ad5c3093dac298b (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=e951daca447f678f5a3f3c70dcc535eb8d7449b4

commit e951daca447f678f5a3f3c70dcc535eb8d7449b4
Author: Arthur de Jong <arthur@arthurdejong.org>
Date:   Sun Jun 23 16:12:59 2024 +0200

    Support 16 digit Indonesian NPWP numbers
    
    The Indonesian NPWP is being switched from 15 to 16 digits. The number
    is now the NIK for Indonesian citizens and the old format with a leading
    0 for others (organisations and non-citizens).
    
    See 
https://www.grantthornton.co.id/insights/global-insights1/updates-regarding-the-format-of-indonesian-tax-id-numbers/
    
    Closes https://github.com/arthurdejong/python-stdnum/issues/432

diff --git a/stdnum/id/npwp.py b/stdnum/id/npwp.py
index cfa668c..effa8ec 100644
--- a/stdnum/id/npwp.py
+++ b/stdnum/id/npwp.py
@@ -2,6 +2,7 @@
 # coding: utf-8
 #
 # Copyright (C) 2020 Leandro Regueiro
+# Copyright (C) 2024 Arthur de Jong
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -24,11 +25,15 @@ The Nomor Pokok Wajib Pajak (NPWP) is assigned to 
organisations and
 individuals (families) by the Indonesian Tax Office after registration by the
 tax payers.
 
-The number consists of 15 digits of which the first 2 denote the type of
+The number consists of 16 digits and is either a NIK (Nomor Induk Kependudukan)
+or a number that starts with a 0, followed by 2 digits that denote the type of
 entity, 6 digits to identify the tax payer, a check digit over the first 8
 digits followed by 3 digits to identify the local tax office and 3 digits for
 branch code.
 
+This module also accepts the old 15 digit format which is just the 16 digit
+format without the starting 0.
+
 More information:
 
 * 
https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Indonesia-TIN.pdf
@@ -49,6 +54,7 @@ InvalidLength: ...
 
 from stdnum import luhn
 from stdnum.exceptions import *
+from stdnum.id import nik
 from stdnum.util import clean, isdigits
 
 
@@ -64,12 +70,20 @@ def compact(number):
 def validate(number):
     """Check if the number is a valid Indonesia NPWP number."""
     number = compact(number)
-    if len(number) != 15:
-        raise InvalidLength()
     if not isdigits(number):
         raise InvalidFormat()
-    luhn.validate(number[:9])
-    return number
+    if len(number) == 15:
+        # Old 15 digit format
+        luhn.validate(number[:9])
+        return number
+    if len(number) == 16:
+        # New format since 2024: either a NIK (for Indonesian citizens) or
+        # the old number with a 0 at the beginning
+        if not number.startswith('0'):
+            return nik.validate(number)
+        luhn.validate(number[:10])
+        return number
+    raise InvalidLength()
 
 
 def is_valid(number):
diff --git a/tests/test_id_npwp.doctest b/tests/test_id_npwp.doctest
index 13a78d9..621aa53 100644
--- a/tests/test_id_npwp.doctest
+++ b/tests/test_id_npwp.doctest
@@ -1,6 +1,7 @@
 test_id_npwp.doctest - more detailed doctests for stdnum.id.npwp module
 
 Copyright (C) 2020 Leandro Regueiro
+Copyright (C) 2024 Arthur de Jong
 
 This library is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
@@ -49,6 +50,16 @@ Traceback (most recent call last):
 InvalidChecksum: ...
 
 
+Since 2024 the numbers have been changed to a 16 digit format. They can
+either be a NIK (for Indonesian citizens) or a 0 followed by the original
+15-digit number.
+
+>>> npwp.validate('3171011708450001')  # NIK
+'3171011708450001'
+>>> npwp.validate('083.132.665.7-201.000')  # extra 0 prepended
+'0831326657201000'
+
+
 These have been found online and should all be valid numbers.
 
 >>> numbers = '''

-----------------------------------------------------------------------

Summary of changes:
 stdnum/id/npwp.py          | 24 +++++++++++++++++++-----
 tests/test_id_npwp.doctest | 11 +++++++++++
 2 files changed, 30 insertions(+), 5 deletions(-)


hooks/post-receive
-- 
python-stdnum