Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
169 changes: 169 additions & 0 deletions partner_identification_kyc/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

==========================
Partner Identification KYC
==========================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:10c73c95886256911541d6f9b7ed42f8f1cbddd83a56b784b533ee8334d66525
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpartner--contact-lightgray.png?logo=github
:target: https://github.com/OCA/partner-contact/tree/19.0/partner_identification_kyc
:alt: OCA/partner-contact
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/partner-contact-19-0/partner-contact-19-0-partner_identification_kyc
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/partner-contact&target_branch=19.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

Partner Identification KYC
==========================

This module adds Know Your Customer (KYC) identification functionality
to the partner identification automation system. It provides a
specialized KYC identification category with associated activities and
workflows to manage customer verification processes.

**Table of contents**

.. contents::
:local:

Installation
============

This module depends on ``partner_identification_automation_activity``
which must be installed first. The module will automatically create the
KYC identification category and activity type during installation.

Configuration
=============

Identification Category
~~~~~~~~~~~~~~~~~~~~~~~

The module automatically creates a "KYC" identification category with
the following default settings:

- Initial Activity Type: "Perform KYC Check"
- Renew Activity Type: "Perform KYC Check"
- Create Activity on New: True
- Default Validity: 1 year
- Renewal Lead Number: 2
- Renewal Lead Unit: Months

Activity Types
~~~~~~~~~~~~~~

The module creates the "Perform KYC Check" activity type which is
assigned to both the initial and renewal activities for KYC
identification records.

Filters
~~~~~~~

A filter is added to the id_numbers views to allow filtering on the KYC
Category.

Usage
=====

Request KYC Button
~~~~~~~~~~~~~~~~~~

On the partner form, a "Request KYC" button will appear when:

- There is no KYC identification record in the 'new', 'running', or
'to_renew' states
- OR there is no ID number record of the KYC category at all

The button will be hidden if:

- There is a 'running' or 'to_renew' KYC record
- OR there is already a 'new' status KYC record (to prevent redundant
records)

Clicking the button will create a new KYC identification record in the
'new' status, triggering the associated activity for KYC officers to
process.

API Function
~~~~~~~~~~~~

For partners created via API, there is a function to trigger the KYC
process automatically. If no KYC identification record exists for a
partner, calling this function will create a record in the 'new' status.

Activity Management
-------------------

KYC identification records are associated with the "Perform KYC Check"
activity type, which appears in the activity views for tracking and
processing by responsible officers.

Changelog
=========

[1.0.0] - 2025-01-01
--------------------

Added
~~~~~

- Initial implementation of KYC identification category
- "Request KYC" button on partner form
- API function to trigger KYC flow for API-created partners
- Dedicated "Perform KYC Check" activity type
- Filters for KYC category in id_numbers views

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/partner-contact/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/partner-contact/issues/new?body=module:%20partner_identification_kyc%0Aversion:%2019.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Contributors
------------

- OCA Community
- Emiel van Bokhoven

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/partner-contact <https://github.com/OCA/partner-contact/tree/19.0/partner_identification_kyc>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions partner_identification_kyc/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
25 changes: 25 additions & 0 deletions partner_identification_kyc/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"name": "Partner Identification KYC",
"summary": "Know Your Customer identification for partners",
"version": "19.0.1.0.0",
"category": "Customer Relationship Management",
"author": "Odoo Community Association (OCA)",
"website": "https://github.com/OCA/partner-contact",
"license": "AGPL-3",
"depends": [
"partner_identification_automation_activity",
"partner_identification",
],
"data": [
"data/activity_type_data.xml",
"data/identification_category_data.xml",
"views/res_partner_views.xml",
"views/identification_number_views.xml",
"views/res_partner_id_category_view.xml",
],
"demo": [
"demo/identification_number_demo.xml",
],
"installable": True,
"auto_install": False,
}
19 changes: 19 additions & 0 deletions partner_identification_kyc/data/activity_type_data.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Sequence for KYC identification numbers -->
<record id="seq_kyc_identification" model="ir.sequence">
<field name="name">KYC Identification Sequence</field>
<field name="code">kyc.identification</field>
<field name="prefix">KYC</field>
<field name="padding">3</field>
</record>

<!-- Activity type for KYC check -->
<record id="activity_type_kyc_check" model="mail.activity.type">
<field name="name">Perform KYC Check</field>
<field name="delay_count">2</field>
<field name="delay_unit">days</field>
<field name="summary">Perform KYC verification</field>
<field name="icon">fa-user-secret</field>
</record>
</odoo>
16 changes: 16 additions & 0 deletions partner_identification_kyc/data/identification_category_data.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- KYC Identification Category -->
<record id="kyc_identification_category" model="res.partner.id_category">
<field name="name">KYC</field>
<field name="code">KYC</field>
<field name="initial_activity_type_id" ref="activity_type_kyc_check" />
<field name="renew_activity_type_id" ref="activity_type_kyc_check" />
<field name="create_activity_on_new" eval="True" />
<field name="default_validity_number">1</field>
<field name="default_validity_unit">years</field>
<field name="renewal_lead_number">2</field>
<field name="renewal_lead_unit">months</field>
<field name="enable_on_child_contacts" eval="True" />
</record>
</odoo>
103 changes: 103 additions & 0 deletions partner_identification_kyc/demo/identification_number_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Demo partner records for KYC testing -->
<record id="demo_partner_for_kyc" model="res.partner">
<field name="name">Demo Partner for KYC Testing</field>
<field name="email">[email protected]</field>
<field name="phone">+1 234 567 8900</field>
</record>
<!-- Demo issuer for KYC -->
<record id="demo_kyc_issuer" model="res.partner">
<field name="name">KYC Verification Authority</field>
<field name="is_company" eval="True" />
<field name="email">[email protected]</field>
</record>

<!-- Demo partner for testing -->
<record id="demo_partner_kyc_request" model="res.partner">
<field name="name">John KYC Customer</field>
<field name="email">[email protected]</field>
</record>

<!-- Demo partners in various KYC stages -->
<record id="demo_partner_kyc_running" model="res.partner">
<field name="name">Jane Running KYC</field>
<field name="email">[email protected]</field>
</record>

<record id="demo_partner_kyc_to_renew" model="res.partner">
<field name="name">Bob To-Renew KYC</field>
<field name="email">[email protected]</field>
</record>

<record id="demo_partner_kyc_expired" model="res.partner">
<field name="name">Alice Expired KYC</field>
<field name="email">[email protected]</field>
</record>

<!-- Demo identification records in various states -->
<!-- Draft status KYC record -->
<record id="demo_kyc_draft" model="res.partner.id_number">
<field name="partner_id" ref="demo_partner_kyc_request" />
<field name="category_id" ref="kyc_identification_category" />
<field name="name">KYC-001-DRAFT</field>
<field name="status">draft</field>
<field name="validity_start" eval="context_today().strftime('%Y-%m-01')" />
<field
name="validity_end"
eval="(context_today() + timedelta(days=365)).strftime('%Y-%m-%d')"
/>
<field name="issuer_id" ref="demo_kyc_issuer" />
</record>

<!-- Running status KYC record -->
<record id="demo_kyc_running" model="res.partner.id_number">
<field name="partner_id" ref="demo_partner_kyc_running" />
<field name="category_id" ref="kyc_identification_category" />
<field name="name">KYC-002-RUNNING</field>
<field name="status">open</field>
<field
name="validity_start"
eval="(context_today() - timedelta(days=100)).strftime('%Y-%m-%d')"
/>
<field
name="validity_end"
eval="(context_today() + timedelta(days=200)).strftime('%Y-%m-%d')"
/>
<field name="issuer_id" ref="demo_kyc_issuer" />
</record>

<!-- To Renew status KYC record -->
<record id="demo_kyc_to_renew" model="res.partner.id_number">
<field name="partner_id" ref="demo_partner_kyc_to_renew" />
<field name="category_id" ref="kyc_identification_category" />
<field name="name">KYC-003-TORENEW</field>
<field name="status">pending</field>
<field
name="validity_start"
eval="(context_today() - timedelta(days=250)).strftime('%Y-%m-%d')"
/>
<field
name="validity_end"
eval="(context_today() + timedelta(days=50)).strftime('%Y-%m-%d')"
/>
<field name="issuer_id" ref="demo_kyc_issuer" />
</record>

<!-- Expired status KYC record -->
<record id="demo_kyc_expired" model="res.partner.id_number">
<field name="partner_id" ref="demo_partner_kyc_expired" />
<field name="category_id" ref="kyc_identification_category" />
<field name="name">KYC-004-EXPIRED</field>
<field name="status">close</field>
<field
name="validity_start"
eval="(context_today() - timedelta(days=500)).strftime('%Y-%m-%d')"
/>
<field
name="validity_end"
eval="(context_today() - timedelta(days=100)).strftime('%Y-%m-%d')"
/>
<field name="issuer_id" ref="demo_kyc_issuer" />
</record>
</odoo>
20 changes: 20 additions & 0 deletions partner_identification_kyc/i18n/de.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# German translation for partner_identification_kyc
# Copyright (C) 2025
# This file is distributed under the same license as the partner_identification_kyc module.
#, fuzzy
msgid ""
msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Language: de\n"

#. module: partner_identification_kyc
msgid "Request KYC"
msgstr "KYC anfordern"

#. module: partner_identification_kyc
msgid "Perform KYC Check"
msgstr "KYC-Prüfung durchführen"

#. module: partner_identification_kyc
msgid "KYC"
msgstr "KYC"
20 changes: 20 additions & 0 deletions partner_identification_kyc/i18n/es.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Spanish translation for partner_identification_kyc
# Copyright (C) 2025
# This file is distributed under the same license as the partner_identification_kyc module.
#, fuzzy
msgid ""
msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Language: es\n"

#. module: partner_identification_kyc
msgid "Request KYC"
msgstr "Solicitar KYC"

#. module: partner_identification_kyc
msgid "Perform KYC Check"
msgstr "Realizar verificación KYC"

#. module: partner_identification_kyc
msgid "KYC"
msgstr "KYC"
Loading
Loading