diff --git a/l10n_co_hr_payroll_enterprise/CONTRIBUTING.md b/l10n_co_hr_payroll_enterprise/CONTRIBUTING.md new file mode 100644 index 000000000..15dd0f1bd --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/CONTRIBUTING.md @@ -0,0 +1,13 @@ +Jorels SAS +---------- + +Desarrollo +========== +Jorge Sanabria (2021-2022). Desarrollo del código fuente del modulo + +Aportes de conocimiento +======================= +David Alejandro De La Rosa Maldonado (2021-2022). Asesoría el desarrollo con sus grandes conocimientos en el tema de +nómina de Odoo + +July Marcela Caballero Martinez (2022). Asesoría en el tema de nómina e interfaz de usuario \ No newline at end of file diff --git a/l10n_co_hr_payroll_enterprise/LICENSE b/l10n_co_hr_payroll_enterprise/LICENSE new file mode 100644 index 000000000..0a041280b --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/l10n_co_hr_payroll_enterprise/README.md b/l10n_co_hr_payroll_enterprise/README.md new file mode 100644 index 000000000..60bfaab53 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/README.md @@ -0,0 +1,27 @@ +![Jorels](https://www.jorels.com/web/image/res.company/1/logo) +### Jorels SAS - Copyright (2019-2023) + +# Electronic payroll for Colombia (Enterprise) + +## Module name +l10n_co_hr_payroll_enterprise + +## Support + +[info@jorels.com](mailto:info@jorels.com) + +[Telegram: @Jorels_SAS](https://t.me/Jorels_SAS) + +[https://www.jorels.com](https://www.jorels.com) + +## Authors and acknowledgment +Jorels SAS + +## License +Under LGPL (Lesser General Public License) + +## Project status +Tested in production on Odoo 12, 13, 14, 15 y 16. + +## Description +Odoo module for electronic payroll for Colombia (Enterprise) diff --git a/l10n_co_hr_payroll_enterprise/__init__.py b/l10n_co_hr_payroll_enterprise/__init__.py new file mode 100644 index 000000000..92c9b29c1 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# +# Jorels S.A.S. - Copyright (C) 2019-2023 +# +# This file is part of l10n_co_hr_payroll_enterprise. +# +# This program 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 3 of the License, or +# (at your option) any later version. +# +# This program 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 program. If not, see . +# +# email: info@jorels.com +# + + +from . import models diff --git a/l10n_co_hr_payroll_enterprise/__manifest__.py b/l10n_co_hr_payroll_enterprise/__manifest__.py new file mode 100644 index 000000000..12d753372 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/__manifest__.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# +# Jorels S.A.S. - Copyright (C) 2019-2023 +# +# This file is part of l10n_co_hr_payroll_enterprise. +# +# This program 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 3 of the License, or +# (at your option) any later version. +# +# This program 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 program. If not, see . +# +# email: info@jorels.com +# + + +{ + 'name': 'Nómina electrónica DIAN para Colombia por Jorels SAS (Enterprise)', + 'summary': 'Nómina electrónica DIAN para Colombia por Jorels SAS (Enterprise)', + 'description': "Electronic payroll management for companies in Colombia (Enterprise)", + 'author': 'Jorels SAS', + 'license': 'LGPL-3', + 'category': 'Human Resources', + 'version': '16.0.23.06.15.17.58', + 'website': "https://www.jorels.com", + 'images': ['static/images/main_screenshot.png'], + 'support': 'info@jorels.com', + 'depends': [ + 'hr_payroll', + 'l10n_co_edi_jorels', + ], + 'data': [ + 'data/hr_payroll_sequence.xml', + 'views/hr_contract_views.xml', + 'views/hr_salary_rule_views.xml', + 'views/hr_payslip_views.xml', + 'views/hr_payslip_edi_views.xml', + 'views/res_config_settings_views.xml', + 'security/ir.model.access.csv', + 'report/hr_payslip_edi_report.xml', + ], + 'installable': True, + 'application': False, +} diff --git a/l10n_co_hr_payroll_enterprise/data/hr_payroll_sequence.xml b/l10n_co_hr_payroll_enterprise/data/hr_payroll_sequence.xml new file mode 100644 index 000000000..143029464 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/data/hr_payroll_sequence.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Salary Slip Note + salary.slip.note + no_gap + SSAN + 1 + + + + Edi payslip + salary.slip.edi + no_gap + EPSS + 1 + + + + Edi Payslip Note + salary.slip.edi.note + no_gap + EPAN + 1 + + + + diff --git a/l10n_co_hr_payroll_enterprise/i18n/es.po b/l10n_co_hr_payroll_enterprise/i18n/es.po new file mode 100644 index 000000000..8ce3e3401 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/i18n/es.po @@ -0,0 +1,2613 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_co_hr_payroll_enterprise +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-22 06:18+0000\n" +"PO-Revision-Date: 2023-08-22 01:28-0500\n" +"Last-Translator: \n" +"Language-Team: Jorels SAS\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 3.3.2\n" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__daily_overtime +msgid "% Daily" +msgstr "% Diario" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__daily_surcharge_hours_sundays_holidays +msgid "% Daily hours on sundays and holidays" +msgstr "% Horas diarias en domingos y festivos" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__daily_overtime +msgid "% Daily overtime" +msgstr "% Horas extra diarias" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__daily_surcharge_hours_sundays_holidays +msgid "% Daily surcharge hours on sundays and holidays" +msgstr "% Recargo diario horas en domingos y festivos" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__hours_night_surcharge +msgid "% Hours night surcharge" +msgstr "% Recargo horas nocturna" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__hours_night_surcharge +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__overtime_night_hours +msgid "% Night hours" +msgstr "% Horas nocturnas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__overtime_night_hours +msgid "% Overtime night hours" +msgstr "% Horas extra nocturnas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__sunday_holiday_daily_overtime +msgid "% Sunday and Holiday daily" +msgstr "% Domingo y festivo diario" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__sunday_holiday_daily_overtime +msgid "% Sunday and Holiday daily overtime" +msgstr "% Domingos y festivos horas extras diarias" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__sunday_holidays_night_surcharge_hours +msgid "% Sunday and holidays night hours" +msgstr "% Domingos y festivos horas nocturnas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__sunday_holidays_night_surcharge_hours +msgid "% Sunday and holidays night surcharge hours" +msgstr "% Domingos y festivos recargo horas nocturnas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__sunday_night_overtime_holidays +msgid "% Sunday night and holidays" +msgstr "% Noche de domingo y festivos" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__sunday_night_overtime_holidays +msgid "% Sunday night overtime and holidays" +msgstr "% Horas extra noche de domingo y festivos" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.actions.report,print_report_name:l10n_co_hr_payroll_enterprise.action_hr_payslip_co_report +#: model:ir.actions.report,print_report_name:l10n_co_hr_payroll_enterprise.action_hr_payslip_edi_co_report +msgid "(object.name)" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__state +msgid "" +"* When the payslip is created the status is 'Draft'\n" +" \n" +"* If the payslip is under verification, the status is 'Waiting'.\n" +" \n" +"* If the payslip is confirmed then status is set to 'Done'.\n" +" \n" +"* When user cancel payslip the status is 'Rejected'." +msgstr "" +"* Cuando la nómina es creada el estado es 'Borrador'\n" +" \n" +"* Si la nómina está bajo verificación el estado es 'En Espera'.\n" +" \n" +"* Si la nómina está confirmada entonces el estado se cambia a 'Finalizado'.\n" +" \n" +"* Cuando el usuario cancela la nómina el estado es 'Rechazado'." + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "" +"" +msgstr "" +"\n" +" " + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "" +"Enable consolidated electronic payroll for this " +"company" +msgstr "" +"Habilitar nómina electrónica consolidada para esta " +"compañía" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "" +"Enable electronic payroll for this company" +msgstr "" +"Habilitar la nómina electrónica " +"para esta empresa" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Legal parameters" +msgstr "Parámetros legales" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Overtime percentages" +msgstr "" +"Porcentajes de horas extras" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Software ID" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Software pin" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Surcharge percentages" +msgstr "Porcentajes de recargo" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "TestSetID" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "" +"DIAN\n" +" Web View" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_payslip_view_form_l10n_co_hr_payroll +msgid "" +"DIAN\n" +" Web View" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.report_hr_payslip_co_template +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.report_hr_payslip_edi_co_template +msgid "CUNE:" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.report_hr_payslip_co_template +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.report_hr_payslip_edi_co_template +msgid "Electronic payslip:" +msgstr "Nómina electrónica:" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "A adjustment note should not be made to a adjustment note" +msgstr "Una nota de ajuste no puede ser hecha a una nota de ajuste" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "A valid Zip key or UUID was not obtained. Try again." +msgstr "No se obtuvo una llave zip o UUID válido. Intente otra vez." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "A valid Zip key was not obtained. Try again." +msgstr "No se obtuvo una llave Zip válida. Intente otra vez." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "A zip key or UUID is required to check the status of the document." +msgstr "Se requiere una llave Zip o UUID para verificar el estado del documento." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Account number" +msgstr "Numero de cuenta" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Account type" +msgstr "Tipo de cuenta" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__accrued_total_amount +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__accrued_total_amount +msgid "Accrued" +msgstr "Devengados" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Accrued total" +msgstr "Total de devengados" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Address" +msgstr "Dirección" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__credit_note +msgid "Adjustment note" +msgstr "Nota de ajuste" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Admission date" +msgstr "Fecha de ingreso" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__advances +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__advances +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__advances +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__advances +#, python-format +msgid "Advances" +msgstr "Anticipos" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__afc +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__afc +#, python-format +msgid "Afc" +msgstr "Ahorro fomento a la construcción" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_algorithm +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_algorithm +msgid "Algorithm" +msgstr "Algoritmo" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__amount +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__amount +msgid "Amount" +msgstr "Importe" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Amount time" +msgstr "Cantidad de tiempo" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_application_response_base64 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_application_response_base64 +msgid "Application response" +msgstr "Respuesta de la aplicación" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__4 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__4 +msgid "April" +msgstr "Abril" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Assistance" +msgstr "Auxilio" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__assistances +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__assistances +#, python-format +msgid "Assistances" +msgstr "Auxilios" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_attached_document_base64 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_attached_document_base64 +msgid "Attached document" +msgstr "Documento adjunto" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__8 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__8 +msgid "August" +msgstr "Agosto" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Authentication error with the API" +msgstr "Error de autenticación con la API" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__edi_quantity_select__auto +msgid "Auto" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Bank" +msgstr "Banco" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__basic +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__basic +#, python-format +msgid "Basic" +msgstr "Basico" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__bonuses +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__bonuses +#, python-format +msgid "Bonuses" +msgstr "Bonificaciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Cancel Payslip" +msgstr "Cancelar nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__category +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__category +msgid "Category" +msgstr "Categoría" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_class +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_class +msgid "Class" +msgstr "Clase" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__code +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__code +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__code +msgid "Code" +msgstr "Código" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__module_l10n_co_hr_payroll +msgid "Colombian Payroll" +msgstr "Nómina colombiana" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__commissions +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__commissions +#, python-format +msgid "Commissions" +msgstr "Comisiones" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__company_id +msgid "Company" +msgstr "Compañía" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__company_withdrawal_bonus +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__company_withdrawal_bonus +#, python-format +msgid "Company withdrawal bonus" +msgstr "Bonificación de retiro" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__compensation +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__compensation +#, python-format +msgid "Compensation" +msgstr "Indemnización" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Compensations" +msgstr "Compensaciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__compensations_extraordinary +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__compensations_extraordinary +msgid "Compensations extraordinary" +msgstr "Compensaciones extraordinarias" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__compensations_ordinary +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__compensations_ordinary +msgid "Compensations ordinary" +msgstr "Compensaciones ordinarias" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__complementary_plans +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__complementary_plans +#, python-format +msgid "Complementary plans" +msgstr "Planes complementarios" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Compute Sheet" +msgstr "Calcular hoja" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_res_config_settings +msgid "Config Settings" +msgstr "Opciones de configuración" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Confirm" +msgstr "Confirmar" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_payslip_view_form_l10n_co_hr_payroll +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Consult DIAN" +msgstr "Consultar DIAN" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__contract_id +msgid "Contract" +msgstr "Contrato" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Contract does not have a name" +msgstr "El contrato no tiene nombre" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Contract type" +msgstr "Tipo de contrato" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__cooperative +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__cooperative +#, python-format +msgid "Cooperative" +msgstr "Cooperativa" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Country" +msgstr "País" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.actions.act_window,help:l10n_co_hr_payroll_enterprise.action_view_hr_payslip_edi +msgid "Create your first Edi Payslip!" +msgstr "¡Crea tu primer Edi Payslip!" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__create_uid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__create_uid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__create_uid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__create_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__create_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__create_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__create_date +msgid "Created on" +msgstr "Creado" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__currency_id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__currency_id +#, python-format +msgid "Currency" +msgstr "Moneda" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "DIAN TESTSETID" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "DIAN settings" +msgstr "Ajustes DIAN" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__daily_overtime +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__daily_overtime +msgid "Daily overtime" +msgstr "Horas extras diurnas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__daily_surcharge_hours_sundays_holidays +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__daily_surcharge_hours_sundays_holidays +msgid "Daily surcharge hours on sundays and holidays" +msgstr "Horas recargo diarias dominicales y festivas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_issue_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_issue_date +#, python-format +msgid "Date" +msgstr "Fecha" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__date +msgid "Date Account" +msgstr "Fecha contable" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Date issue" +msgstr "Fecha de emisión" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__debt +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__debt +#, python-format +msgid "Debt" +msgstr "Deuda" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__12 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__12 +msgid "December" +msgstr "Diciembre" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__type_concept__deduction +#, python-format +msgid "Deduction" +msgstr "Deducción" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_payslip_view_form_l10n_co_hr_payroll +msgid "Deduction Details" +msgstr "Detalles de Deducciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__deduction_category +msgid "Deduction category" +msgstr "Categoría de la deducción" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_l10n_co_hr_payroll_deduction_line +msgid "Deduction details" +msgstr "Detalles de deducciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__deduction_ids +msgid "Deduction lines" +msgstr "Lineas de deducciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__deductions_total_amount +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__deductions_total_amount +msgid "Deductions" +msgstr "Deducciones" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Deductions total" +msgstr "Total de deducciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__edi_percent_select__default +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__edi_quantity_select__default +msgid "Default" +msgstr "Defecto" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__name +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__name +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__name +#, python-format +msgid "Description" +msgstr "Descripción" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__display_name +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__display_name +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__display_name +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__display_name +msgid "Display Name" +msgstr "Nombre Público" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Document number" +msgstr "Número de identificación" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Document type" +msgstr "Tipo de documento" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__state__done +msgid "Done" +msgstr "Hecho" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__state__draft +msgid "Draft" +msgstr "Borrador" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__type_concept__earn +#, python-format +msgid "Earn" +msgstr "Devengado" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_payslip_view_form_l10n_co_hr_payroll +msgid "Earn Details" +msgstr "Detalles de Devengados" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__earn_category +msgid "Earn category" +msgstr "Categoría de devengado" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_l10n_co_hr_payroll_earn_line +msgid "Earn details" +msgstr "Detalles de devengados" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__earn_ids +msgid "Earn lines" +msgstr "Lineas de devengados" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_payslip_view_form_l10n_co_hr_payroll +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Edi Payload" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_tree +msgid "Edi Payslip" +msgstr "Nómina Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__name +msgid "Edi Payslip Name" +msgstr "Nombre de nómina Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.actions.act_window,name:l10n_co_hr_payroll_enterprise.action_view_hr_payslip_edi +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__payslip_edi_ids +#: model:ir.ui.menu,name:l10n_co_hr_payroll_enterprise.menu_payslip_edi_tree +msgid "Edi Payslips" +msgstr "Nóminas Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_salary_rule_view_form_l10n_co_hr_payroll +msgid "Edi Percent" +msgstr "Porcentaje Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_line__edi_quantity +msgid "Edi Quantity" +msgstr "Cantidad Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_line__edi_rate +msgid "Edi Rate (%)" +msgstr "Tasa Edi (%)" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_payslip_view_form_l10n_co_hr_payroll +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Edi Response" +msgstr "Respuesta Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__edi_is_detailed +msgid "Edi detailed" +msgstr "Detalle Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.actions.report,name:l10n_co_hr_payroll_enterprise.action_hr_payslip_co_report +#: model:ir.actions.report,name:l10n_co_hr_payroll_enterprise.action_hr_payslip_edi_co_report +msgid "Edi payslip" +msgstr "Nómina Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__edi_quantity_select +msgid "Edi quantity" +msgstr "Cantidad Edi" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__education +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__education +#, python-format +msgid "Education" +msgstr "Educación" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__employee_id +#, python-format +msgid "Employee" +msgstr "Empleado" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_hr_contract +msgid "Employee Contract" +msgstr "Contrato de empleado" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Employee does not have a first name" +msgstr "El empleado no tiene nombre" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Employee does not have a postal municipality" +msgstr "El empleado no tiene un municipio postal" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Employee does not have a surname" +msgstr "El empleado no tiene apellido" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Employee does not have an address." +msgstr "El empleado no tiene una dirección." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Employee does not have an document number" +msgstr "El empleado no tiene un número de documento" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Employee does not have an identification type" +msgstr "El empleado no tiene un tipo de identificación" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Employer" +msgstr "Empleador" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__edi_payroll_consolidated_enable +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__edi_payroll_consolidated_enable +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Enable consolidated electronic payroll for this company" +msgstr "Habilitar nómina electrónica consolidada para esta compañía" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__edi_payroll_enable +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__edi_payroll_enable +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Enable electronic payroll for this company" +msgstr "Habilitar la nómina electrónica para esta empresa" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Enable production environment" +msgstr "Habilitar entorno de producción" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "End" +msgstr "Fin" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__date_end +msgid "End date" +msgstr "Fecha final" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__time_end +msgid "End hour" +msgstr "Hora final" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__endowment +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__endowment +#, python-format +msgid "Endowment" +msgstr "Dotacion" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Environment" +msgstr "Entorno" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_errors_messages +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_errors_messages +msgid "Error messages" +msgstr "Mensajes de error" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_expedition_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_expedition_date +msgid "Expedition date" +msgstr "Fecha de expedición" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Extraordinary" +msgstr "Extraordinario" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Failed to process the request: %s" +msgstr "No se pudo procesar la solicitud: %s" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__2 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__2 +msgid "February" +msgstr "Febrero" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "First name" +msgstr "Primer Nombre" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__edi_percent_fix +msgid "Fixed Percent" +msgstr "Porcentaje Fijo" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__edi_percent_select__fix +msgid "Fixed percent" +msgstr "Porcentaje Fijo" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__health +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__health +#, python-format +msgid "Health" +msgstr "Salud" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_contract__high_risk_pension +#, python-format +msgid "High risk pension" +msgstr "Alto riesgo de pensión" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__hours_night_surcharge +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__hours_night_surcharge +msgid "Hours night surcharge" +msgstr "Horas recargo nocturno" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_payload_html +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_payload_html +msgid "Html payload" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__id +msgid "ID" +msgstr "Identificación" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_is_not_test +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_is_not_test +msgid "In production" +msgstr "En producción" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Incapacities" +msgstr "Incapacidades" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__incapacities_common +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__incapacities_common +msgid "Incapacities common" +msgstr "Incapacidades comunes" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__incapacities_professional +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__incapacities_professional +msgid "Incapacities professional" +msgstr "Incapacidades profesionales" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__incapacities_working +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__incapacities_working +msgid "Incapacities working" +msgstr "Incapacidades laborales" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Incapacity type" +msgstr "Tipo de incapacidad" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__credit_note +msgid "Indicates this edi payslip has a refund of another" +msgstr "Indica que esta nómina Edi tiene una nota de ajuste de otra" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Information" +msgstr "Información" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_salary_rule_view_form_l10n_co_hr_payroll +msgid "Input Data" +msgstr "Datos de entrada" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__input_ids +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_salary_rule_view_form_l10n_co_hr_payroll +msgid "Inputs" +msgstr "Entradas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_contract__integral_salary +#, python-format +msgid "Integral salary" +msgstr "Salario integral" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Interest payment" +msgstr "Pago intereses" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__note +msgid "Internal Note" +msgstr "Nota interna" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/earn_line.py:0 +#, python-format +msgid "Invalid end time: %s" +msgstr "Tiempo final invalido: %s" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/earn_line.py:0 +#, python-format +msgid "Invalid start time: %s" +msgstr "Tiempo inicial invalido: %s" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_is_restored +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_is_restored +msgid "Is restored?" +msgstr "¿Ha sido restaurado?" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_is_valid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_is_valid +msgid "Is valid?" +msgstr "¿Es válido?" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Issue date" +msgstr "Fecha de emisión" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__1 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__1 +msgid "January" +msgstr "Enero" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__7 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__7 +msgid "July" +msgstr "Julio" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__6 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__6 +msgid "June" +msgstr "Junio" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_hr_payslip__date +msgid "Keep empty to use the period of the validation(Payslip) date." +msgstr "Manténgalo vacío para usar el período de la fecha de validación (Nómina)." + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi____last_update +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input____last_update +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line____last_update +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line____last_update +msgid "Last Modified on" +msgstr "Última Modificación el" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__write_uid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__write_uid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__write_uid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__write_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__write_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__write_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__layoffs +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__layoffs +#, python-format +msgid "Layoffs" +msgstr "Cesantias" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__layoffs_interest +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__layoffs_interest +msgid "Layoffs interest" +msgstr "Interés de cesantías" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__legal_strikes +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__legal_strikes +#, python-format +msgid "Legal strikes" +msgstr "Huelgas legales" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__libranzas +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__libranzas +#, python-format +msgid "Libranzas" +msgstr "Libranzas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Licensings" +msgstr "Licencias" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__licensings_maternity_or_paternity_leaves +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__licensings_maternity_or_paternity_leaves +msgid "Licensings maternity or paternity leaves" +msgstr "Licencias de maternidad o paternidad" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__licensings_permit_or_paid_licenses +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__licensings_permit_or_paid_licenses +msgid "Licensings permit or paid licenses" +msgstr "Licencias remuneradas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__licensings_suspension_or_unpaid_leaves +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__licensings_suspension_or_unpaid_leaves +msgid "Licensings suspension or unpaid leaves" +msgstr "Licencias no remunerada" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__3 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__3 +msgid "March" +msgstr "Marzo" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Maternity or paternity leaves" +msgstr "Licencia de Maternidad o Paternidad" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__5 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__5 +msgid "May" +msgstr "Mayo" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__month +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__month +msgid "Month" +msgstr "Mes" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__stm_value +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__stm_value +msgid "Monthly transportation allowance" +msgstr "Subsidio de transporte mensual" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Municipality" +msgstr "Municipio" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Name" +msgstr "Nombre" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "New" +msgstr "Nuevo" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "No logical response was obtained from the API." +msgstr "No se obtuvo ninguna respuesta lógica de la API." + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__assistances_non_salary +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__assistances_non_salary +msgid "Non salary assistances" +msgstr "Auxilios no salariales" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__bonuses_non_salary +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__bonuses_non_salary +msgid "Non salary bonuses" +msgstr "Bonificaciones no salariales" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Non salary food payment" +msgstr "Bono Alimentación (No Salarial)" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__other_concepts_non_salary +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__other_concepts_non_salary +msgid "Non salary other concepts" +msgstr "Otros conceptos no salariales" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Non salary payment" +msgstr "Pago (No Salarial)" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Non salary viatic" +msgstr "Viaticos (No Salarial)" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Notes" +msgstr "Notas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Novelty" +msgstr "Novedad" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__11 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__11 +msgid "November" +msgstr "Noviembre" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_number +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_number +#, python-format +msgid "Number" +msgstr "Número" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__10 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__10 +msgid "October" +msgstr "Octubre" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Once enabled in DIAN" +msgstr "Una vez habilitado en la DIAN" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Ordinary" +msgstr "Ordinario" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__origin_payslip_id +msgid "Origin Edi payslip" +msgstr "Nómina Edi de origen" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__origin_payslip_id +msgid "Origin payslip" +msgstr "Nómina de origen" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__type_concept__other +msgid "Other" +msgstr "Otro" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__other_concepts +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__other_concepts +#, python-format +msgid "Other concepts" +msgstr "Otro" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__other_deductions +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__other_deductions +#, python-format +msgid "Other deductions" +msgstr "Otras deducciones" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Other names" +msgstr "Otros nombres" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__others_total_amount +msgid "Others" +msgstr "Otros" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Overtime and surcharges type" +msgstr "Tipo de horas extra y/o recargos" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__overtime_night_hours +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__overtime_night_hours +msgid "Overtime night hours" +msgstr "Horas extras nocturnas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Overtimes and surcharges" +msgstr "Horas extra y/o recargos" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_pdf_base64 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_pdf_base64 +msgid "PDF" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_pdf_download_link +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_pdf_download_link +msgid "PDF link" +msgstr "Enlace PDF" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Parameters" +msgstr "Parámetros" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_hr_payslip +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__payslip_id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__payslip_id +msgid "Pay Slip" +msgstr "Recibo de nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_payload +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_payload +msgid "Payload" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Payment" +msgstr "Pago" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__payment_date +msgid "Payment date" +msgstr "Fecha de pago" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Payment dates" +msgstr "Fechas de pago" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__payment_form_id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__payment_form_id +#, python-format +msgid "Payment form" +msgstr "Forma de pago" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__payment_method_id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__payment_method_id +#, python-format +msgid "Payment method" +msgstr "Método de pago" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Payment private" +msgstr "Pago (Sanción Privada)" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Payment public" +msgstr "Pago (Sanción Pública)" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Payment subsistence" +msgstr "Pago (Fondo de Subsistencia)" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_contract__payroll_period_id +#, python-format +msgid "Payroll period" +msgstr "Periodo de la nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Payroll software ID" +msgstr "Software ID de nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Payroll software pin" +msgstr "Pin de nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_hr_payslip_edi +msgid "Payslip Edi" +msgstr "Nómina Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__input_type_id +msgid "Payslip Input Type" +msgstr "Tipo de entrada de nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_hr_payslip_line +msgid "Payslip Line" +msgstr "Línea de recibo de nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__payslip_ids +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Payslips" +msgstr "Nóminas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__pension_fund +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__pension_fund +#, python-format +msgid "Pension fund" +msgstr "Fondos de pensión" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__pension_security_fund +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__pension_security_fund +#, python-format +msgid "Pension security fund" +msgstr "Fondo de seguridad pensional" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__pension_security_fund_subsistence +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__pension_security_fund_subsistence +msgid "Pension security fund subsistence" +msgstr "Fondo de seguridad pensional de subsistencia" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__edi_percent_select +msgid "Percent Type" +msgstr "Tipo de porcentaje" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Percentage" +msgstr "Porcentaje" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Percentage subsistence" +msgstr "Porcentaje (Fondo de Subsistencia)" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Percentages" +msgstr "Porcentajes" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Period" +msgstr "Periodo" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Permit or paid licenses" +msgstr "Licencia Remunerada" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Prefix" +msgstr "Prefijo" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__primas +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__primas +#, python-format +msgid "Primas" +msgstr "Prima legal" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__primas_non_salary +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__primas_non_salary +msgid "Primas non salary" +msgstr "Prima no salarial" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__edi_payroll_is_not_test +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__edi_payroll_is_not_test +msgid "Production environment" +msgstr "Entorno de producción" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Provider" +msgstr "Proveedor" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__edi_percent_python_compute +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__edi_percent_select__code +msgid "Python Code" +msgstr "Código Python" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_qr_code +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_qr_code +msgid "QR code" +msgstr "Código QR" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_qr_data +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_qr_data +msgid "QR data" +msgstr "Datos QR" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_qr_link +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_qr_link +msgid "QR link" +msgstr "Enlace QR" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__quantity +#, python-format +msgid "Quantity" +msgstr "Cantidad" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__number +#, python-format +msgid "Reference" +msgstr "Referencia" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__refund +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__refund +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__refund +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__refund +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +#, python-format +msgid "Refund" +msgstr "Reintegro" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Refund: " +msgstr "Reintegro: " + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__state__cancel +msgid "Rejected" +msgstr "Rechazado" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Rounding" +msgstr "Redondeo" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__rule_input_id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__rule_input_id +msgid "Rule input" +msgstr "Regla de entrada" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__smmlv_value +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__smmlv_value +msgid "SMMLV" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Salary" +msgstr "Salario" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_hr_salary_rule +msgid "Salary Rule" +msgstr "Regla salarial" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_hr_rule_input +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__input_id +msgid "Salary Rule Input" +msgstr "Entrada de regla salarial" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Salary Slip of %s for %s" +msgstr "Nómina salarial de %s para %s" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Salary food payment" +msgstr "Bono Alimentación (Salarial)" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Sanctions" +msgstr "Sanciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__sanctions_private +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__sanctions_private +msgid "Sanctions private" +msgstr "Sanciones privadas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__sanctions_public +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__sanctions_public +msgid "Sanctions public" +msgstr "Sanciones publicas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Second surname" +msgstr "Segundo apellido" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__9 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__9 +msgid "September" +msgstr "Septiembre" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__sequence +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__sequence +#, python-format +msgid "Sequence" +msgstr "Secuencia" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Set to Draft" +msgstr "Cambiar a borrador" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Settlement end date" +msgstr "Fecha final de Nómina" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Settlement start date" +msgstr "Fecha inicial de Nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_signature +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_signature +msgid "Signature" +msgstr "Firma" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__edi_payroll_id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__edi_payroll_id +#, python-format +msgid "Software ID" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__edi_payroll_pin +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__edi_payroll_pin +msgid "Software PIN" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Software pin" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Start" +msgstr "Inicio" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__date_start +msgid "Start date" +msgstr "Fecha de inicio" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__time_start +msgid "Start hour" +msgstr "Hora de inicio" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__state +msgid "Status" +msgstr "Estado" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_status_code +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_status_code +msgid "Status code" +msgstr "Código de estado" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_status_description +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_status_description +msgid "Status description" +msgstr "Descripción de estado" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_status_message +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_status_message +msgid "Status message" +msgstr "Mensaje de estado" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_contract__subtype_worker_id +msgid "Subtype worker" +msgstr "Subtipo de trabajador" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__sunday_holiday_daily_overtime +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__sunday_holiday_daily_overtime +msgid "Sunday and Holiday daily overtime" +msgstr "Horas extras diarias dominicales y festivas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__sunday_holidays_night_surcharge_hours +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__sunday_holidays_night_surcharge_hours +msgid "Sunday and holidays night surcharge hours" +msgstr "Horas recargo nocturno dominicales y festivas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__sunday_night_overtime_holidays +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__sunday_night_overtime_holidays +msgid "Sunday night overtime and holidays" +msgstr "Horas extras nocturnas dominicales y festivas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Surname" +msgstr "Apellido" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Suspension or unpaid leaves" +msgstr "Licencia No Remunerada" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__sustainment_support +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__sustainment_support +#, python-format +msgid "Sustainment support" +msgstr "Apoyo a Sostenimiento" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_sync +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_sync +#, python-format +msgid "Sync" +msgstr "Sincronizar" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__tax_lien +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__tax_lien +#, python-format +msgid "Tax lien" +msgstr "Embargo fiscal" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__telecommuting +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__telecommuting +#, python-format +msgid "Telecommuting" +msgstr "Teletrabajo" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__edi_payroll_test_set_id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__edi_payroll_test_set_id +msgid "TestSetId" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Text" +msgstr "Texto" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "" +"The 'Layoffs' and 'Layoffs interest' rules are mandatory in order to report " +"Layoffs" +msgstr "" +"Las reglas 'Cesantías' e 'Intereses de Cesantías' son obligatorias para reportar " +"Cesantías" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "The 'Primas' rule is mandatory in order to report Primas" +msgstr "La regla 'Primas' es obligatoria para reportar Primas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The Origin payslip is required for adjusment notes." +msgstr "La nómina de origen es obligatoria para notas de ajuste." + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_hr_rule_input__code +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__code +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__code +msgid "The code that can be used in the salary rules" +msgstr "El código puede ser usado en las reglas salariales" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__edi_quantity_select +msgid "The computation method for rule Edi quantity." +msgstr "Método de calculo para la cantidad Edi de la regla." + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__edi_percent_select +msgid "The computation method for the rule percent." +msgstr "El método de calculo para el porcentaje de la regla." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The contract must have the 'Scheduled Pay' field configured" +msgstr "El contrato debe tener configurado el campo 'Pago planificado'" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The contract must have the 'Start Date' field configured" +msgstr "El contrato debe tener configurado el campo 'Fecha de inicio'" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The contract must have the 'Subtype worker' field configured" +msgstr "El contrato debe tener configurado el campo 'Sontipo de trabajador'" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The contract must have the 'Type contract' field configured" +msgstr "El contrato debe tener configurado el campo 'Tipo de contrato" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The contract must have the 'Type worker' field configured" +msgstr "El contrato debe tener configurado el campo 'Tipo de trabajador'" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The contract must have the 'Wage' field configured" +msgstr "El contrato debe tener configurado el campo 'Salario'" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/deduction_line.py:0 +#, python-format +msgid "The deduction amount must always be greater than 0 for: %s" +msgstr "La cantidad de deducciones debe ser siempre mayor que 0 para: %s" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The document could not be validated in DIAN." +msgstr "No se pudo validar el documento ante la DIAN." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/earn_line.py:0 +#, python-format +msgid "The earn amount must always be greater than 0 for: %s" +msgstr "La cantidad de devengados debe ser siempre mayor que 0 para: %s" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The employee's document type cannot be NIT" +msgstr "El tipo de documento del empleado no puede ser NIT" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/earn_line.py:0 +#, python-format +msgid "The end date must always be greater than the start date for: %s" +msgstr "La fecha final debe ser siempre mayor que la fecha inicial para: %s" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The payroll must have a consecutive number, 'Reference' field" +msgstr "La nómina debe tener un número consecutivo, campo 'Referencia'" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The payroll must have a month" +msgstr "La nómina debe tener un mes" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "The payroll must have a payment date" +msgstr "La nómina debe tener una fecha de pago" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The payroll must have a payment form" +msgstr "La fecha debe tener una forma de pago" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The payroll must have a payment method" +msgstr "La nómina debe tener un método de pago" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "The payroll must have a period" +msgstr "La nómina debe tener definido un periodo" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The payroll must have a year" +msgstr "La nómina debe tener un año" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The reference payroll is not valid." +msgstr "La nómina de referencia no es valida." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The sequence is required." +msgstr "La secuencia es obligatoria." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The sequence must have a prefix" +msgstr "La secuencia debe tener un prefijo" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "The time worked cannot be negative." +msgstr "El tiempo trabajado no puede ser negativo." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__third_party_payments +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__third_party_payments +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__third_party_payments +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__third_party_payments +#, python-format +msgid "Third party payments" +msgstr "Pagos a Terceros" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "This concept must be calculated through the salary rules: %s" +msgstr "Este concepto debe ser calculado a través de las reglas salariales: %s" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "This concept must be configured in salary rules as not detailed: %s" +msgstr "" +"Este concepto debe estar configurado en reglas salariales como no detallado: %s" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__total_amount +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__total_amount +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__total +#, python-format +msgid "Total" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__trade_unions +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__trade_unions +#, python-format +msgid "Trade unions" +msgstr "Sindicatos" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Transports" +msgstr "Transporte" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__transports_assistance +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__transports_assistance +msgid "Transports assistance" +msgstr "Auxilio de Transporte" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__transports_non_salary_viatic +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__transports_non_salary_viatic +msgid "Transports non salary viatic" +msgstr "Viáticos de transporte no salariales" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__transports_viatic +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__transports_viatic +msgid "Transports viatic" +msgstr "Viáticos de transporte" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Trm" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__type_concept +msgid "Type concept" +msgstr "Tipo de concepto" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_contract__type_contract_id +msgid "Type contract" +msgstr "Tipo de contrato" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_type_environment +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_type_environment +msgid "Type environment" +msgstr "Tipo de entorno" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_contract__type_worker_id +msgid "Type worker" +msgstr "Tipo de trabajador" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_uuid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_uuid +#, python-format +msgid "UUID" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__uvt_value +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__uvt_value +msgid "UVT" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Vacation" +msgstr "Vacaciones" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__vacation_common +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__vacation_common +#, python-format +msgid "Vacation common" +msgstr "Vacaciones comunes" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__vacation_compensated +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__vacation_compensated +#, python-format +msgid "Vacation compensated" +msgstr "Vacaciones compensadas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Viatic" +msgstr "Viatico" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__voluntary_pension +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__voluntary_pension +#, python-format +msgid "Voluntary pension" +msgstr "Pensión voluntaria" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__vouchers +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__vouchers +#, python-format +msgid "Vouchers" +msgstr "Vales" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__vouchers_non_salary +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__vouchers_non_salary +msgid "Vouchers non salary" +msgstr "Vales no salariales" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__vouchers_non_salary_food +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__vouchers_non_salary_food +msgid "Vouchers non salary food" +msgstr "Vales no salariales de alimentación" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__vouchers_salary_food +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__vouchers_salary_food +msgid "Vouchers salary food" +msgstr "Vales salariales de alimentación" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__state__verify +msgid "Waiting" +msgstr "Esperando" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Withdrawal date" +msgstr "Fecha de retiro" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__withholding_source +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__withholding_source +#, python-format +msgid "Withholding source" +msgstr "Retención en la Fuente" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__worked_days_total +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__worked_days_total +#, python-format +msgid "Worked days" +msgstr "Días trabajados" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Worked salary" +msgstr "Salario trabajado" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Worker code" +msgstr "Código del trabajador" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Worker subtype" +msgstr "Subtipo de trabajador" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Worker type" +msgstr "Tipo de trabajador" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_salary_rule.py:0 +#, python-format +msgid "Wrong percent python code defined for salary rule %s (%s). %s" +msgstr "" +"Código Python de porcentaje incorrecto definido para la regla salarial %s (%s). " +"%s" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_xml_base64 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_xml_base64 +msgid "XML" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_xml_name +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_xml_name +msgid "XML name" +msgstr "Nombre XML" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__year +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__year +msgid "Year" +msgstr "Año" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "" +"You cannot cancel a electronic payroll that has already been validated to the " +"DIAN" +msgstr "" +"No puede cancelar una nomina electrónica que ya ha sido validada en la DIAN" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "You cannot delete a Edi payslip which is not draft or cancelled!" +msgstr "¡No puede borrar una nomina electrónica en estado borrador o cancelado!" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "You do not have a software id and pin configured" +msgstr "No tiene un software id ni un pin configurados" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "You have not configured a 'TestSetId'." +msgstr "No tiene configurado un 'TestSetId'." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "You must configure a token" +msgstr "Debe configurar un token" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "You must create a sequence for adjusment notes with code 'salary.slip.note'" +msgstr "" +"Usted debe crear una secuencia para notas de ajuste con código 'salary.slip.note'" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Your company does not have a document number" +msgstr "Su compañía no tiene un número de documento" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Your company does not have a name" +msgstr "Su compañía no tiene un nombre" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Your company does not have a postal municipality" +msgstr "Su compañía no tiene una municipalidad postal" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Your company does not have an address" +msgstr "Su compañía no tiene una dirección" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Your company does not have an identification type" +msgstr "Su compañía no tiene un tipo de identificación" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_zip_base64 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_zip_base64 +msgid "Zip" +msgstr "Documento Zip" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_zip_key +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_zip_key +msgid "Zip key" +msgstr "Llave Zip" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_zip_name +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_zip_name +msgid "Zip name" +msgstr "Nombre del Zip" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_tree +msgid "accrued_total_amount" +msgstr "total_de_devengados" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_tree +msgid "deductions_total_amount" +msgstr "total_de_deducciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_tree +msgid "total_amount" +msgstr "total" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_tree +msgid "worked_days_total" +msgstr "total_días_trabajados" diff --git a/l10n_co_hr_payroll_enterprise/i18n/es_CO.po b/l10n_co_hr_payroll_enterprise/i18n/es_CO.po new file mode 100644 index 000000000..e621804b7 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/i18n/es_CO.po @@ -0,0 +1,2613 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_co_hr_payroll_enterprise +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-22 06:18+0000\n" +"PO-Revision-Date: 2023-08-22 01:27-0500\n" +"Last-Translator: \n" +"Language-Team: Jorels SAS\n" +"Language: es_CO\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 3.3.2\n" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__daily_overtime +msgid "% Daily" +msgstr "% Diario" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__daily_surcharge_hours_sundays_holidays +msgid "% Daily hours on sundays and holidays" +msgstr "% Horas diarias en domingos y festivos" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__daily_overtime +msgid "% Daily overtime" +msgstr "% Horas extra diarias" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__daily_surcharge_hours_sundays_holidays +msgid "% Daily surcharge hours on sundays and holidays" +msgstr "% Recargo diario horas en domingos y festivos" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__hours_night_surcharge +msgid "% Hours night surcharge" +msgstr "% Recargo horas nocturna" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__hours_night_surcharge +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__overtime_night_hours +msgid "% Night hours" +msgstr "% Horas nocturnas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__overtime_night_hours +msgid "% Overtime night hours" +msgstr "% Horas extra nocturnas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__sunday_holiday_daily_overtime +msgid "% Sunday and Holiday daily" +msgstr "% Domingo y festivo diario" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__sunday_holiday_daily_overtime +msgid "% Sunday and Holiday daily overtime" +msgstr "% Domingos y festivos horas extras diarias" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__sunday_holidays_night_surcharge_hours +msgid "% Sunday and holidays night hours" +msgstr "% Domingos y festivos horas nocturnas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__sunday_holidays_night_surcharge_hours +msgid "% Sunday and holidays night surcharge hours" +msgstr "% Domingos y festivos recargo horas nocturnas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__sunday_night_overtime_holidays +msgid "% Sunday night and holidays" +msgstr "% Noche de domingo y festivos" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__sunday_night_overtime_holidays +msgid "% Sunday night overtime and holidays" +msgstr "% Horas extra noche de domingo y festivos" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.actions.report,print_report_name:l10n_co_hr_payroll_enterprise.action_hr_payslip_co_report +#: model:ir.actions.report,print_report_name:l10n_co_hr_payroll_enterprise.action_hr_payslip_edi_co_report +msgid "(object.name)" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__state +msgid "" +"* When the payslip is created the status is 'Draft'\n" +" \n" +"* If the payslip is under verification, the status is 'Waiting'.\n" +" \n" +"* If the payslip is confirmed then status is set to 'Done'.\n" +" \n" +"* When user cancel payslip the status is 'Rejected'." +msgstr "" +"* Cuando la nómina es creada el estado es 'Borrador'\n" +" \n" +"* Si la nómina está bajo verificación el estado es 'En Espera'.\n" +" \n" +"* Si la nómina está confirmada entonces el estado se cambia a 'Finalizado'.\n" +" \n" +"* Cuando el usuario cancela la nómina el estado es 'Rechazado'." + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "" +"" +msgstr "" +"\n" +" " + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "" +"Enable consolidated electronic payroll for this " +"company" +msgstr "" +"Habilitar nómina electrónica consolidada para esta " +"compañía" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "" +"Enable electronic payroll for this company" +msgstr "" +"Habilitar la nómina electrónica " +"para esta empresa" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Legal parameters" +msgstr "Parámetros legales" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Overtime percentages" +msgstr "" +"Porcentajes de horas extras" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Software ID" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Software pin" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Surcharge percentages" +msgstr "Porcentajes de recargo" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "TestSetID" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "" +"DIAN\n" +" Web View" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_payslip_view_form_l10n_co_hr_payroll +msgid "" +"DIAN\n" +" Web View" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.report_hr_payslip_co_template +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.report_hr_payslip_edi_co_template +msgid "CUNE:" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.report_hr_payslip_co_template +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.report_hr_payslip_edi_co_template +msgid "Electronic payslip:" +msgstr "Nómina electrónica:" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "A adjustment note should not be made to a adjustment note" +msgstr "Una nota de ajuste no puede ser hecha a una nota de ajuste" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "A valid Zip key or UUID was not obtained. Try again." +msgstr "No se obtuvo una llave zip o UUID válido. Intente otra vez." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "A valid Zip key was not obtained. Try again." +msgstr "No se obtuvo una llave Zip válida. Intente otra vez." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "A zip key or UUID is required to check the status of the document." +msgstr "Se requiere una llave Zip o UUID para verificar el estado del documento." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Account number" +msgstr "Numero de cuenta" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Account type" +msgstr "Tipo de cuenta" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__accrued_total_amount +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__accrued_total_amount +msgid "Accrued" +msgstr "Devengados" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Accrued total" +msgstr "Total de devengados" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Address" +msgstr "Dirección" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__credit_note +msgid "Adjustment note" +msgstr "Nota de ajuste" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Admission date" +msgstr "Fecha de ingreso" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__advances +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__advances +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__advances +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__advances +#, python-format +msgid "Advances" +msgstr "Anticipos" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__afc +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__afc +#, python-format +msgid "Afc" +msgstr "Ahorro fomento a la construcción" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_algorithm +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_algorithm +msgid "Algorithm" +msgstr "Algoritmo" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__amount +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__amount +msgid "Amount" +msgstr "Importe" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Amount time" +msgstr "Cantidad de tiempo" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_application_response_base64 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_application_response_base64 +msgid "Application response" +msgstr "Respuesta de la aplicación" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__4 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__4 +msgid "April" +msgstr "Abril" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Assistance" +msgstr "Auxilio" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__assistances +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__assistances +#, python-format +msgid "Assistances" +msgstr "Auxilios" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_attached_document_base64 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_attached_document_base64 +msgid "Attached document" +msgstr "Documento adjunto" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__8 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__8 +msgid "August" +msgstr "Agosto" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Authentication error with the API" +msgstr "Error de autenticación con la API" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__edi_quantity_select__auto +msgid "Auto" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Bank" +msgstr "Banco" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__basic +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__basic +#, python-format +msgid "Basic" +msgstr "Basico" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__bonuses +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__bonuses +#, python-format +msgid "Bonuses" +msgstr "Bonificaciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Cancel Payslip" +msgstr "Cancelar nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__category +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__category +msgid "Category" +msgstr "Categoría" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_class +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_class +msgid "Class" +msgstr "Clase" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__code +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__code +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__code +msgid "Code" +msgstr "Código" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__module_l10n_co_hr_payroll +msgid "Colombian Payroll" +msgstr "Nómina colombiana" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__commissions +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__commissions +#, python-format +msgid "Commissions" +msgstr "Comisiones" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__company_id +msgid "Company" +msgstr "Compañía" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__company_withdrawal_bonus +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__company_withdrawal_bonus +#, python-format +msgid "Company withdrawal bonus" +msgstr "Bonificación de retiro" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__compensation +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__compensation +#, python-format +msgid "Compensation" +msgstr "Indemnización" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Compensations" +msgstr "Compensaciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__compensations_extraordinary +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__compensations_extraordinary +msgid "Compensations extraordinary" +msgstr "Compensaciones extraordinarias" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__compensations_ordinary +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__compensations_ordinary +msgid "Compensations ordinary" +msgstr "Compensaciones ordinarias" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__complementary_plans +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__complementary_plans +#, python-format +msgid "Complementary plans" +msgstr "Planes complementarios" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Compute Sheet" +msgstr "Calcular hoja" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_res_config_settings +msgid "Config Settings" +msgstr "Opciones de configuración" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Confirm" +msgstr "Confirmar" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_payslip_view_form_l10n_co_hr_payroll +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Consult DIAN" +msgstr "Consultar DIAN" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__contract_id +msgid "Contract" +msgstr "Contrato" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Contract does not have a name" +msgstr "El contrato no tiene nombre" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Contract type" +msgstr "Tipo de contrato" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__cooperative +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__cooperative +#, python-format +msgid "Cooperative" +msgstr "Cooperativa" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Country" +msgstr "País" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.actions.act_window,help:l10n_co_hr_payroll_enterprise.action_view_hr_payslip_edi +msgid "Create your first Edi Payslip!" +msgstr "¡Crea tu primer Edi Payslip!" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__create_uid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__create_uid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__create_uid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__create_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__create_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__create_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__create_date +msgid "Created on" +msgstr "Creado" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__currency_id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__currency_id +#, python-format +msgid "Currency" +msgstr "Moneda" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "DIAN TESTSETID" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "DIAN settings" +msgstr "Ajustes DIAN" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__daily_overtime +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__daily_overtime +msgid "Daily overtime" +msgstr "Horas extras diurnas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__daily_surcharge_hours_sundays_holidays +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__daily_surcharge_hours_sundays_holidays +msgid "Daily surcharge hours on sundays and holidays" +msgstr "Horas recargo diarias dominicales y festivas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_issue_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_issue_date +#, python-format +msgid "Date" +msgstr "Fecha" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__date +msgid "Date Account" +msgstr "Fecha contable" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Date issue" +msgstr "Fecha de emisión" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__debt +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__debt +#, python-format +msgid "Debt" +msgstr "Deuda" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__12 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__12 +msgid "December" +msgstr "Diciembre" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__type_concept__deduction +#, python-format +msgid "Deduction" +msgstr "Deducción" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_payslip_view_form_l10n_co_hr_payroll +msgid "Deduction Details" +msgstr "Detalles de Deducciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__deduction_category +msgid "Deduction category" +msgstr "Categoría de la deducción" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_l10n_co_hr_payroll_deduction_line +msgid "Deduction details" +msgstr "Detalles de deducciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__deduction_ids +msgid "Deduction lines" +msgstr "Lineas de deducciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__deductions_total_amount +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__deductions_total_amount +msgid "Deductions" +msgstr "Deducciones" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Deductions total" +msgstr "Total de deducciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__edi_percent_select__default +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__edi_quantity_select__default +msgid "Default" +msgstr "Defecto" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__name +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__name +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__name +#, python-format +msgid "Description" +msgstr "Descripción" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__display_name +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__display_name +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__display_name +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__display_name +msgid "Display Name" +msgstr "Nombre Público" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Document number" +msgstr "Número de identificación" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Document type" +msgstr "Tipo de documento" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__state__done +msgid "Done" +msgstr "Hecho" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__state__draft +msgid "Draft" +msgstr "Borrador" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__type_concept__earn +#, python-format +msgid "Earn" +msgstr "Devengado" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_payslip_view_form_l10n_co_hr_payroll +msgid "Earn Details" +msgstr "Detalles de Devengados" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__earn_category +msgid "Earn category" +msgstr "Categoría de devengado" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_l10n_co_hr_payroll_earn_line +msgid "Earn details" +msgstr "Detalles de devengados" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__earn_ids +msgid "Earn lines" +msgstr "Lineas de devengados" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_payslip_view_form_l10n_co_hr_payroll +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Edi Payload" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_tree +msgid "Edi Payslip" +msgstr "Nómina Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__name +msgid "Edi Payslip Name" +msgstr "Nombre de nómina Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.actions.act_window,name:l10n_co_hr_payroll_enterprise.action_view_hr_payslip_edi +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__payslip_edi_ids +#: model:ir.ui.menu,name:l10n_co_hr_payroll_enterprise.menu_payslip_edi_tree +msgid "Edi Payslips" +msgstr "Nóminas Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_salary_rule_view_form_l10n_co_hr_payroll +msgid "Edi Percent" +msgstr "Porcentaje Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_line__edi_quantity +msgid "Edi Quantity" +msgstr "Cantidad Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_line__edi_rate +msgid "Edi Rate (%)" +msgstr "Tasa Edi (%)" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_payslip_view_form_l10n_co_hr_payroll +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Edi Response" +msgstr "Respuesta Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__edi_is_detailed +msgid "Edi detailed" +msgstr "Detalle Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.actions.report,name:l10n_co_hr_payroll_enterprise.action_hr_payslip_co_report +#: model:ir.actions.report,name:l10n_co_hr_payroll_enterprise.action_hr_payslip_edi_co_report +msgid "Edi payslip" +msgstr "Nómina Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__edi_quantity_select +msgid "Edi quantity" +msgstr "Cantidad Edi" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__education +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__education +#, python-format +msgid "Education" +msgstr "Educación" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__employee_id +#, python-format +msgid "Employee" +msgstr "Empleado" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_hr_contract +msgid "Employee Contract" +msgstr "Contrato de empleado" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Employee does not have a first name" +msgstr "El empleado no tiene nombre" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Employee does not have a postal municipality" +msgstr "El empleado no tiene un municipio postal" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Employee does not have a surname" +msgstr "El empleado no tiene apellido" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Employee does not have an address." +msgstr "El empleado no tiene una dirección." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Employee does not have an document number" +msgstr "El empleado no tiene un número de documento" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Employee does not have an identification type" +msgstr "El empleado no tiene un tipo de identificación" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Employer" +msgstr "Empleador" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__edi_payroll_consolidated_enable +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__edi_payroll_consolidated_enable +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Enable consolidated electronic payroll for this company" +msgstr "Habilitar nómina electrónica consolidada para esta compañía" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__edi_payroll_enable +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__edi_payroll_enable +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Enable electronic payroll for this company" +msgstr "Habilitar la nómina electrónica para esta empresa" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Enable production environment" +msgstr "Habilitar entorno de producción" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "End" +msgstr "Fin" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__date_end +msgid "End date" +msgstr "Fecha final" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__time_end +msgid "End hour" +msgstr "Hora final" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__endowment +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__endowment +#, python-format +msgid "Endowment" +msgstr "Dotacion" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Environment" +msgstr "Entorno" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_errors_messages +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_errors_messages +msgid "Error messages" +msgstr "Mensajes de error" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_expedition_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_expedition_date +msgid "Expedition date" +msgstr "Fecha de expedición" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Extraordinary" +msgstr "Extraordinario" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Failed to process the request: %s" +msgstr "No se pudo procesar la solicitud: %s" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__2 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__2 +msgid "February" +msgstr "Febrero" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "First name" +msgstr "Primer Nombre" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__edi_percent_fix +msgid "Fixed Percent" +msgstr "Porcentaje Fijo" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__edi_percent_select__fix +msgid "Fixed percent" +msgstr "Porcentaje Fijo" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__health +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__health +#, python-format +msgid "Health" +msgstr "Salud" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_contract__high_risk_pension +#, python-format +msgid "High risk pension" +msgstr "Alto riesgo de pensión" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__hours_night_surcharge +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__hours_night_surcharge +msgid "Hours night surcharge" +msgstr "Horas recargo nocturno" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_payload_html +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_payload_html +msgid "Html payload" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__id +msgid "ID" +msgstr "Identificación" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_is_not_test +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_is_not_test +msgid "In production" +msgstr "En producción" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Incapacities" +msgstr "Incapacidades" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__incapacities_common +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__incapacities_common +msgid "Incapacities common" +msgstr "Incapacidades comunes" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__incapacities_professional +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__incapacities_professional +msgid "Incapacities professional" +msgstr "Incapacidades profesionales" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__incapacities_working +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__incapacities_working +msgid "Incapacities working" +msgstr "Incapacidades laborales" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Incapacity type" +msgstr "Tipo de incapacidad" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__credit_note +msgid "Indicates this edi payslip has a refund of another" +msgstr "Indica que esta nómina Edi tiene una nota de ajuste de otra" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Information" +msgstr "Información" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_salary_rule_view_form_l10n_co_hr_payroll +msgid "Input Data" +msgstr "Datos de entrada" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__input_ids +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.hr_salary_rule_view_form_l10n_co_hr_payroll +msgid "Inputs" +msgstr "Entradas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_contract__integral_salary +#, python-format +msgid "Integral salary" +msgstr "Salario integral" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Interest payment" +msgstr "Pago intereses" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__note +msgid "Internal Note" +msgstr "Nota interna" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/earn_line.py:0 +#, python-format +msgid "Invalid end time: %s" +msgstr "Tiempo final invalido: %s" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/earn_line.py:0 +#, python-format +msgid "Invalid start time: %s" +msgstr "Tiempo inicial invalido: %s" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_is_restored +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_is_restored +msgid "Is restored?" +msgstr "¿Ha sido restaurado?" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_is_valid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_is_valid +msgid "Is valid?" +msgstr "¿Es válido?" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Issue date" +msgstr "Fecha de emisión" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__1 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__1 +msgid "January" +msgstr "Enero" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__7 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__7 +msgid "July" +msgstr "Julio" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__6 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__6 +msgid "June" +msgstr "Junio" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_hr_payslip__date +msgid "Keep empty to use the period of the validation(Payslip) date." +msgstr "Manténgalo vacío para usar el período de la fecha de validación (Nómina)." + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi____last_update +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input____last_update +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line____last_update +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line____last_update +msgid "Last Modified on" +msgstr "Última Modificación el" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__write_uid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__write_uid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__write_uid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__write_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__write_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__write_date +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__layoffs +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__layoffs +#, python-format +msgid "Layoffs" +msgstr "Cesantias" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__layoffs_interest +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__layoffs_interest +msgid "Layoffs interest" +msgstr "Interés de cesantías" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__legal_strikes +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__legal_strikes +#, python-format +msgid "Legal strikes" +msgstr "Huelgas legales" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__libranzas +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__libranzas +#, python-format +msgid "Libranzas" +msgstr "Libranzas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Licensings" +msgstr "Licencias" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__licensings_maternity_or_paternity_leaves +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__licensings_maternity_or_paternity_leaves +msgid "Licensings maternity or paternity leaves" +msgstr "Licencias de maternidad o paternidad" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__licensings_permit_or_paid_licenses +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__licensings_permit_or_paid_licenses +msgid "Licensings permit or paid licenses" +msgstr "Licencias remuneradas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__licensings_suspension_or_unpaid_leaves +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__licensings_suspension_or_unpaid_leaves +msgid "Licensings suspension or unpaid leaves" +msgstr "Licencias no remunerada" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__3 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__3 +msgid "March" +msgstr "Marzo" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Maternity or paternity leaves" +msgstr "Licencia de Maternidad o Paternidad" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__5 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__5 +msgid "May" +msgstr "Mayo" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__month +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__month +msgid "Month" +msgstr "Mes" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__stm_value +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__stm_value +msgid "Monthly transportation allowance" +msgstr "Subsidio de transporte mensual" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Municipality" +msgstr "Municipio" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Name" +msgstr "Nombre" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "New" +msgstr "Nuevo" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "No logical response was obtained from the API." +msgstr "No se obtuvo ninguna respuesta lógica de la API." + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__assistances_non_salary +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__assistances_non_salary +msgid "Non salary assistances" +msgstr "Auxilios no salariales" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__bonuses_non_salary +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__bonuses_non_salary +msgid "Non salary bonuses" +msgstr "Bonificaciones no salariales" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Non salary food payment" +msgstr "Bono Alimentación (No Salarial)" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__other_concepts_non_salary +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__other_concepts_non_salary +msgid "Non salary other concepts" +msgstr "Otros conceptos no salariales" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Non salary payment" +msgstr "Pago (No Salarial)" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Non salary viatic" +msgstr "Viaticos (No Salarial)" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Notes" +msgstr "Notas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Novelty" +msgstr "Novedad" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__11 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__11 +msgid "November" +msgstr "Noviembre" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_number +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_number +#, python-format +msgid "Number" +msgstr "Número" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__10 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__10 +msgid "October" +msgstr "Octubre" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Once enabled in DIAN" +msgstr "Una vez habilitado en la DIAN" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Ordinary" +msgstr "Ordinario" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__origin_payslip_id +msgid "Origin Edi payslip" +msgstr "Nómina Edi de origen" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__origin_payslip_id +msgid "Origin payslip" +msgstr "Nómina de origen" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__type_concept__other +msgid "Other" +msgstr "Otro" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__other_concepts +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__other_concepts +#, python-format +msgid "Other concepts" +msgstr "Otro" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__other_deductions +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__other_deductions +#, python-format +msgid "Other deductions" +msgstr "Otras deducciones" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Other names" +msgstr "Otros nombres" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__others_total_amount +msgid "Others" +msgstr "Otros" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Overtime and surcharges type" +msgstr "Tipo de horas extra y/o recargos" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__overtime_night_hours +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__overtime_night_hours +msgid "Overtime night hours" +msgstr "Horas extras nocturnas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Overtimes and surcharges" +msgstr "Horas extra y/o recargos" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_pdf_base64 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_pdf_base64 +msgid "PDF" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_pdf_download_link +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_pdf_download_link +msgid "PDF link" +msgstr "Enlace PDF" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Parameters" +msgstr "Parámetros" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_hr_payslip +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__payslip_id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__payslip_id +msgid "Pay Slip" +msgstr "Recibo de nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_payload +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_payload +msgid "Payload" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Payment" +msgstr "Pago" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__payment_date +msgid "Payment date" +msgstr "Fecha de pago" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Payment dates" +msgstr "Fechas de pago" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__payment_form_id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__payment_form_id +#, python-format +msgid "Payment form" +msgstr "Forma de pago" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__payment_method_id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__payment_method_id +#, python-format +msgid "Payment method" +msgstr "Método de pago" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Payment private" +msgstr "Pago (Sanción Privada)" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Payment public" +msgstr "Pago (Sanción Pública)" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Payment subsistence" +msgstr "Pago (Fondo de Subsistencia)" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_contract__payroll_period_id +#, python-format +msgid "Payroll period" +msgstr "Periodo de la nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Payroll software ID" +msgstr "Software ID de nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Payroll software pin" +msgstr "Pin de nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_hr_payslip_edi +msgid "Payslip Edi" +msgstr "Nómina Edi" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__input_type_id +msgid "Payslip Input Type" +msgstr "Tipo de entrada de nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_hr_payslip_line +msgid "Payslip Line" +msgstr "Línea de recibo de nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__payslip_ids +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Payslips" +msgstr "Nóminas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__pension_fund +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__pension_fund +#, python-format +msgid "Pension fund" +msgstr "Fondos de pensión" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__pension_security_fund +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__pension_security_fund +#, python-format +msgid "Pension security fund" +msgstr "Fondo de seguridad pensional" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__pension_security_fund_subsistence +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__pension_security_fund_subsistence +msgid "Pension security fund subsistence" +msgstr "Fondo de seguridad pensional de subsistencia" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__edi_percent_select +msgid "Percent Type" +msgstr "Tipo de porcentaje" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Percentage" +msgstr "Porcentaje" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Percentage subsistence" +msgstr "Porcentaje (Fondo de Subsistencia)" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.res_config_settings_view_form_l10n_co_hr_payroll +msgid "Percentages" +msgstr "Porcentajes" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Period" +msgstr "Periodo" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Permit or paid licenses" +msgstr "Licencia Remunerada" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Prefix" +msgstr "Prefijo" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__primas +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__primas +#, python-format +msgid "Primas" +msgstr "Prima legal" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__primas_non_salary +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__primas_non_salary +msgid "Primas non salary" +msgstr "Prima no salarial" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__edi_payroll_is_not_test +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__edi_payroll_is_not_test +msgid "Production environment" +msgstr "Entorno de producción" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Provider" +msgstr "Proveedor" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__edi_percent_python_compute +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__edi_percent_select__code +msgid "Python Code" +msgstr "Código Python" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_qr_code +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_qr_code +msgid "QR code" +msgstr "Código QR" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_qr_data +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_qr_data +msgid "QR data" +msgstr "Datos QR" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_qr_link +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_qr_link +msgid "QR link" +msgstr "Enlace QR" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__quantity +#, python-format +msgid "Quantity" +msgstr "Cantidad" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__number +#, python-format +msgid "Reference" +msgstr "Referencia" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__refund +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__refund +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__refund +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__refund +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +#, python-format +msgid "Refund" +msgstr "Reintegro" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Refund: " +msgstr "Reintegro: " + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__state__cancel +msgid "Rejected" +msgstr "Rechazado" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Rounding" +msgstr "Redondeo" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__rule_input_id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__rule_input_id +msgid "Rule input" +msgstr "Regla de entrada" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__smmlv_value +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__smmlv_value +msgid "SMMLV" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Salary" +msgstr "Salario" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_hr_salary_rule +msgid "Salary Rule" +msgstr "Regla salarial" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model,name:l10n_co_hr_payroll_enterprise.model_hr_rule_input +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_rule_input__input_id +msgid "Salary Rule Input" +msgstr "Entrada de regla salarial" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Salary Slip of %s for %s" +msgstr "Nómina salarial de %s para %s" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Salary food payment" +msgstr "Bono Alimentación (Salarial)" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Sanctions" +msgstr "Sanciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__sanctions_private +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__sanctions_private +msgid "Sanctions private" +msgstr "Sanciones privadas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__sanctions_public +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__sanctions_public +msgid "Sanctions public" +msgstr "Sanciones publicas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Second surname" +msgstr "Segundo apellido" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip__month__9 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__month__9 +msgid "September" +msgstr "Septiembre" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__sequence +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__sequence +#, python-format +msgid "Sequence" +msgstr "Secuencia" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form +msgid "Set to Draft" +msgstr "Cambiar a borrador" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Settlement end date" +msgstr "Fecha final de Nómina" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Settlement start date" +msgstr "Fecha inicial de Nómina" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_signature +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_signature +msgid "Signature" +msgstr "Firma" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__edi_payroll_id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__edi_payroll_id +#, python-format +msgid "Software ID" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__edi_payroll_pin +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__edi_payroll_pin +msgid "Software PIN" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Software pin" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Start" +msgstr "Inicio" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__date_start +msgid "Start date" +msgstr "Fecha de inicio" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__time_start +msgid "Start hour" +msgstr "Hora de inicio" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__state +msgid "Status" +msgstr "Estado" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_status_code +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_status_code +msgid "Status code" +msgstr "Código de estado" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_status_description +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_status_description +msgid "Status description" +msgstr "Descripción de estado" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_status_message +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_status_message +msgid "Status message" +msgstr "Mensaje de estado" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_contract__subtype_worker_id +msgid "Subtype worker" +msgstr "Subtipo de trabajador" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__sunday_holiday_daily_overtime +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__sunday_holiday_daily_overtime +msgid "Sunday and Holiday daily overtime" +msgstr "Horas extras diarias dominicales y festivas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__sunday_holidays_night_surcharge_hours +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__sunday_holidays_night_surcharge_hours +msgid "Sunday and holidays night surcharge hours" +msgstr "Horas recargo nocturno dominicales y festivas" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__sunday_night_overtime_holidays +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__sunday_night_overtime_holidays +msgid "Sunday night overtime and holidays" +msgstr "Horas extras nocturnas dominicales y festivas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Surname" +msgstr "Apellido" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Suspension or unpaid leaves" +msgstr "Licencia No Remunerada" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__sustainment_support +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__sustainment_support +#, python-format +msgid "Sustainment support" +msgstr "Apoyo a Sostenimiento" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_sync +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_sync +#, python-format +msgid "Sync" +msgstr "Sincronizar" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__tax_lien +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__tax_lien +#, python-format +msgid "Tax lien" +msgstr "Embargo fiscal" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__telecommuting +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__telecommuting +#, python-format +msgid "Telecommuting" +msgstr "Teletrabajo" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__edi_payroll_test_set_id +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__edi_payroll_test_set_id +msgid "TestSetId" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Text" +msgstr "Texto" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "" +"The 'Layoffs' and 'Layoffs interest' rules are mandatory in order to report " +"Layoffs" +msgstr "" +"Las reglas 'Cesantías' e 'Intereses de Cesantías' son obligatorias para reportar " +"Cesantías" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "The 'Primas' rule is mandatory in order to report Primas" +msgstr "La regla 'Primas' es obligatoria para reportar Primas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The Origin payslip is required for adjusment notes." +msgstr "La nómina de origen es obligatoria para notas de ajuste." + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_hr_rule_input__code +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_deduction_line__code +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__code +msgid "The code that can be used in the salary rules" +msgstr "El código puede ser usado en las reglas salariales" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__edi_quantity_select +msgid "The computation method for rule Edi quantity." +msgstr "Método de calculo para la cantidad Edi de la regla." + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,help:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__edi_percent_select +msgid "The computation method for the rule percent." +msgstr "El método de calculo para el porcentaje de la regla." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The contract must have the 'Scheduled Pay' field configured" +msgstr "El contrato debe tener configurado el campo 'Pago planificado'" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The contract must have the 'Start Date' field configured" +msgstr "El contrato debe tener configurado el campo 'Fecha de inicio'" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The contract must have the 'Subtype worker' field configured" +msgstr "El contrato debe tener configurado el campo 'Sontipo de trabajador'" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The contract must have the 'Type contract' field configured" +msgstr "El contrato debe tener configurado el campo 'Tipo de contrato" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The contract must have the 'Type worker' field configured" +msgstr "El contrato debe tener configurado el campo 'Tipo de trabajador'" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The contract must have the 'Wage' field configured" +msgstr "El contrato debe tener configurado el campo 'Salario'" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/deduction_line.py:0 +#, python-format +msgid "The deduction amount must always be greater than 0 for: %s" +msgstr "La cantidad de deducciones debe ser siempre mayor que 0 para: %s" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The document could not be validated in DIAN." +msgstr "No se pudo validar el documento ante la DIAN." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/earn_line.py:0 +#, python-format +msgid "The earn amount must always be greater than 0 for: %s" +msgstr "La cantidad de devengados debe ser siempre mayor que 0 para: %s" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The employee's document type cannot be NIT" +msgstr "El tipo de documento del empleado no puede ser NIT" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/earn_line.py:0 +#, python-format +msgid "The end date must always be greater than the start date for: %s" +msgstr "La fecha final debe ser siempre mayor que la fecha inicial para: %s" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The payroll must have a consecutive number, 'Reference' field" +msgstr "La nómina debe tener un número consecutivo, campo 'Referencia'" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The payroll must have a month" +msgstr "La nómina debe tener un mes" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "The payroll must have a payment date" +msgstr "La nómina debe tener una fecha de pago" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The payroll must have a payment form" +msgstr "La fecha debe tener una forma de pago" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The payroll must have a payment method" +msgstr "La nómina debe tener un método de pago" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "The payroll must have a period" +msgstr "La nómina debe tener definido un periodo" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The payroll must have a year" +msgstr "La nómina debe tener un año" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The reference payroll is not valid." +msgstr "La nómina de referencia no es valida." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The sequence is required." +msgstr "La secuencia es obligatoria." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "The sequence must have a prefix" +msgstr "La secuencia debe tener un prefijo" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "The time worked cannot be negative." +msgstr "El tiempo trabajado no puede ser negativo." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__third_party_payments +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__third_party_payments +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__third_party_payments +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__third_party_payments +#, python-format +msgid "Third party payments" +msgstr "Pagos a Terceros" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "This concept must be calculated through the salary rules: %s" +msgstr "Este concepto debe ser calculado a través de las reglas salariales: %s" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "This concept must be configured in salary rules as not detailed: %s" +msgstr "" +"Este concepto debe estar configurado en reglas salariales como no detallado: %s" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__total_amount +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__total_amount +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_l10n_co_hr_payroll_earn_line__total +#, python-format +msgid "Total" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__trade_unions +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__trade_unions +#, python-format +msgid "Trade unions" +msgstr "Sindicatos" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Transports" +msgstr "Transporte" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__transports_assistance +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__transports_assistance +msgid "Transports assistance" +msgstr "Auxilio de Transporte" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__transports_non_salary_viatic +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__transports_non_salary_viatic +msgid "Transports non salary viatic" +msgstr "Viáticos de transporte no salariales" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__transports_viatic +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__transports_viatic +msgid "Transports viatic" +msgstr "Viáticos de transporte" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Trm" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_salary_rule__type_concept +msgid "Type concept" +msgstr "Tipo de concepto" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_contract__type_contract_id +msgid "Type contract" +msgstr "Tipo de contrato" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_type_environment +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_type_environment +msgid "Type environment" +msgstr "Tipo de entorno" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_contract__type_worker_id +msgid "Type worker" +msgstr "Tipo de trabajador" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_uuid +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_uuid +#, python-format +msgid "UUID" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_company__uvt_value +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_res_config_settings__uvt_value +msgid "UVT" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Vacation" +msgstr "Vacaciones" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__vacation_common +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__vacation_common +#, python-format +msgid "Vacation common" +msgstr "Vacaciones comunes" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__vacation_compensated +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__vacation_compensated +#, python-format +msgid "Vacation compensated" +msgstr "Vacaciones compensadas" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Viatic" +msgstr "Viatico" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__voluntary_pension +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__voluntary_pension +#, python-format +msgid "Voluntary pension" +msgstr "Pensión voluntaria" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__vouchers +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__vouchers +#, python-format +msgid "Vouchers" +msgstr "Vales" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__vouchers_non_salary +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__vouchers_non_salary +msgid "Vouchers non salary" +msgstr "Vales no salariales" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__vouchers_non_salary_food +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__vouchers_non_salary_food +msgid "Vouchers non salary food" +msgstr "Vales no salariales de alimentación" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__earn_category__vouchers_salary_food +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_earn_line__category__vouchers_salary_food +msgid "Vouchers salary food" +msgstr "Vales salariales de alimentación" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_payslip_edi__state__verify +msgid "Waiting" +msgstr "Esperando" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Withdrawal date" +msgstr "Fecha de retiro" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__hr_salary_rule__deduction_category__withholding_source +#: model:ir.model.fields.selection,name:l10n_co_hr_payroll_enterprise.selection__l10n_co_hr_payroll_deduction_line__category__withholding_source +#, python-format +msgid "Withholding source" +msgstr "Retención en la Fuente" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__worked_days_total +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__worked_days_total +#, python-format +msgid "Worked days" +msgstr "Días trabajados" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Worked salary" +msgstr "Salario trabajado" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Worker code" +msgstr "Código del trabajador" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Worker subtype" +msgstr "Subtipo de trabajador" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Worker type" +msgstr "Tipo de trabajador" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_salary_rule.py:0 +#, python-format +msgid "Wrong percent python code defined for salary rule %s (%s). %s" +msgstr "" +"Código Python de porcentaje incorrecto definido para la regla salarial %s (%s). " +"%s" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_xml_base64 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_xml_base64 +msgid "XML" +msgstr "" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_xml_name +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_xml_name +msgid "XML name" +msgstr "Nombre XML" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__year +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__year +msgid "Year" +msgstr "Año" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "" +"You cannot cancel a electronic payroll that has already been validated to the " +"DIAN" +msgstr "" +"No puede cancelar una nomina electrónica que ya ha sido validada en la DIAN" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "You cannot delete a Edi payslip which is not draft or cancelled!" +msgstr "¡No puede borrar una nomina electrónica en estado borrador o cancelado!" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "You do not have a software id and pin configured" +msgstr "No tiene un software id ni un pin configurados" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "You have not configured a 'TestSetId'." +msgstr "No tiene configurado un 'TestSetId'." + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "You must configure a token" +msgstr "Debe configurar un token" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#, python-format +msgid "You must create a sequence for adjusment notes with code 'salary.slip.note'" +msgstr "" +"Usted debe crear una secuencia para notas de ajuste con código 'salary.slip.note'" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Your company does not have a document number" +msgstr "Su compañía no tiene un número de documento" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Your company does not have a name" +msgstr "Su compañía no tiene un nombre" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Your company does not have a postal municipality" +msgstr "Su compañía no tiene una municipalidad postal" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Your company does not have an address" +msgstr "Su compañía no tiene una dirección" + +#. module: l10n_co_hr_payroll_enterprise +#. odoo-python +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip.py:0 +#: code:addons/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py:0 +#, python-format +msgid "Your company does not have an identification type" +msgstr "Su compañía no tiene un tipo de identificación" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_zip_base64 +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_zip_base64 +msgid "Zip" +msgstr "Documento Zip" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_zip_key +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_zip_key +msgid "Zip key" +msgstr "Llave Zip" + +#. module: l10n_co_hr_payroll_enterprise +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip__edi_zip_name +#: model:ir.model.fields,field_description:l10n_co_hr_payroll_enterprise.field_hr_payslip_edi__edi_zip_name +msgid "Zip name" +msgstr "Nombre del Zip" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_tree +msgid "accrued_total_amount" +msgstr "total_de_devengados" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_tree +msgid "deductions_total_amount" +msgstr "total_de_deducciones" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_tree +msgid "total_amount" +msgstr "total" + +#. module: l10n_co_hr_payroll_enterprise +#: model_terms:ir.ui.view,arch_db:l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_tree +msgid "worked_days_total" +msgstr "total_días_trabajados" diff --git a/l10n_co_hr_payroll_enterprise/models/__init__.py b/l10n_co_hr_payroll_enterprise/models/__init__.py new file mode 100644 index 000000000..e7cb75fe3 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/models/__init__.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# +# Jorels S.A.S. - Copyright (C) 2019-2023 +# +# This file is part of l10n_co_hr_payroll_enterprise. +# +# This program 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 3 of the License, or +# (at your option) any later version. +# +# This program 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 program. If not, see . +# +# email: info@jorels.com +# + +from . import res_company +from . import res_config_settings +from . import hr_rule_input +from . import earn_line +from . import deduction_line +from . import hr_contract +from . import hr_salary_rule +from . import hr_payslip +from . import hr_payslip_line +from . import hr_payslip_edi diff --git a/l10n_co_hr_payroll_enterprise/models/deduction_line.py b/l10n_co_hr_payroll_enterprise/models/deduction_line.py new file mode 100644 index 000000000..1c8a13046 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/models/deduction_line.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +# +# Jorels S.A.S. - Copyright (C) 2019-2023 +# +# This file is part of l10n_co_hr_payroll_enterprise. +# +# This program 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 3 of the License, or +# (at your option) any later version. +# +# This program 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 program. If not, see . +# +# email: info@jorels.com +# + + +from odoo import fields, models, api, _ +from odoo.exceptions import ValidationError + + +class DeductionLine(models.Model): + _name = 'l10n_co_hr_payroll.deduction.line' + _description = 'Deduction details' + _order = 'payslip_id, sequence' + + name = fields.Char(string='Description', required=True) + payslip_id = fields.Many2one('hr.payslip', string='Pay Slip', required=True, ondelete='cascade', index=True) + sequence = fields.Integer(required=True, index=True, default=10) + code = fields.Char(help="The code that can be used in the salary rules", compute="_compute_rule", store=True) + amount = fields.Float("Amount") + + rule_input_id = fields.Many2one('hr.rule.input', string='Rule input', copy=True, required=True, + domain=[('input_id.type_concept', '=', 'deduction')]) + category = fields.Selection([ + ('health', 'Health'), + ('pension_fund', 'Pension fund'), + ('pension_security_fund', 'Pension security fund'), + ('pension_security_fund_subsistence', 'Pension security fund subsistence'), + ('voluntary_pension', 'Voluntary pension'), + ('withholding_source', 'Withholding source'), + ('afc', 'Afc'), + ('cooperative', 'Cooperative'), + ('tax_lien', 'Tax lien'), + ('complementary_plans', 'Complementary plans'), + ('education', 'Education'), + ('refund', 'Refund'), + ('debt', 'Debt'), + ('trade_unions', 'Trade unions'), + ('sanctions_public', 'Sanctions public'), + ('sanctions_private', 'Sanctions private'), + ('libranzas', 'Libranzas'), + ('third_party_payments', 'Third party payments'), + ('advances', 'Advances'), + ('other_deductions', 'Other deductions') + ], string="Category", compute="_compute_rule", store=True) + + @api.depends("rule_input_id") + def _compute_rule(self): + for rec in self: + rec.name = rec.rule_input_id.name + rec.code = rec.rule_input_id.code + rec.category = rec.rule_input_id.input_id.deduction_category + + @api.constrains("amount") + def _check_amount(self): + for rec in self: + if rec.amount <= 0: + raise ValidationError(_("The deduction amount must always be greater than 0 for: %s") % rec.name) diff --git a/l10n_co_hr_payroll_enterprise/models/earn_line.py b/l10n_co_hr_payroll_enterprise/models/earn_line.py new file mode 100644 index 000000000..5dc122f89 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/models/earn_line.py @@ -0,0 +1,157 @@ +# -*- coding: utf-8 -*- +# +# Jorels S.A.S. - Copyright (C) 2019-2023 +# +# This file is part of l10n_co_hr_payroll_enterprise. +# +# This program 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 3 of the License, or +# (at your option) any later version. +# +# This program 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 program. If not, see . +# +# email: info@jorels.com +# + + +from odoo import fields, models, api, _ +from odoo.exceptions import ValidationError + + +class EarnLine(models.Model): + _name = 'l10n_co_hr_payroll.earn.line' + _description = 'Earn details' + _order = 'payslip_id, sequence' + + name = fields.Char(string='Description', required=True) + payslip_id = fields.Many2one('hr.payslip', string='Pay Slip', required=True, ondelete='cascade', index=True) + sequence = fields.Integer(required=True, index=True, default=10) + code = fields.Char(help="The code that can be used in the salary rules", compute="_compute_rule", store=True) + amount = fields.Float("Amount") + + date_start = fields.Date("Start date") + date_end = fields.Date("End date") + time_start = fields.Float("Start hour") + time_end = fields.Float("End hour") + quantity = fields.Float("Quantity", default=1, compute='_compute_quantity', store=True) + total = fields.Float("Total", compute="_compute_total", store=True) + rule_input_id = fields.Many2one('hr.rule.input', string='Rule input', copy=True, required=True, + domain=[('input_id.type_concept', '=', 'earn')]) + category = fields.Selection([ + ('basic', 'Basic'), + ('vacation_common', 'Vacation common'), + ('vacation_compensated', 'Vacation compensated'), + ('primas', 'Primas'), + ('primas_non_salary', 'Primas non salary'), + ('layoffs', 'Layoffs'), + ('layoffs_interest', 'Layoffs interest'), + ('licensings_maternity_or_paternity_leaves', 'Licensings maternity or paternity leaves'), + ('licensings_permit_or_paid_licenses', 'Licensings permit or paid licenses'), + ('licensings_suspension_or_unpaid_leaves', 'Licensings suspension or unpaid leaves'), + ('endowment', 'Endowment'), + ('sustainment_support', 'Sustainment support'), + ('telecommuting', 'Telecommuting'), + ('company_withdrawal_bonus', 'Company withdrawal bonus'), + ('compensation', 'Compensation'), + ('refund', 'Refund'), + ('transports_assistance', 'Transports assistance'), + ('transports_viatic', 'Transports viatic'), + ('transports_non_salary_viatic', 'Transports non salary viatic'), + ('daily_overtime', 'Daily overtime'), + ('overtime_night_hours', 'Overtime night hours'), + ('hours_night_surcharge', 'Hours night surcharge'), + ('sunday_holiday_daily_overtime', 'Sunday and Holiday daily overtime'), + ('daily_surcharge_hours_sundays_holidays', 'Daily surcharge hours on sundays and holidays'), + ('sunday_night_overtime_holidays', 'Sunday night overtime and holidays'), + ('sunday_holidays_night_surcharge_hours', 'Sunday and holidays night surcharge hours'), + ('incapacities_common', 'Incapacities common'), + ('incapacities_professional', 'Incapacities professional'), + ('incapacities_working', 'Incapacities working'), + ('bonuses', 'Bonuses'), + ('bonuses_non_salary', 'Non salary bonuses'), + ('assistances', 'Assistances'), + ('assistances_non_salary', 'Non salary assistances'), + ('legal_strikes', 'Legal strikes'), + ('other_concepts', 'Other concepts'), + ('other_concepts_non_salary', 'Non salary other concepts'), + ('compensations_ordinary', 'Compensations ordinary'), + ('compensations_extraordinary', 'Compensations extraordinary'), + ('vouchers', 'Vouchers'), + ('vouchers_non_salary', 'Vouchers non salary'), + ('vouchers_salary_food', 'Vouchers salary food'), + ('vouchers_non_salary_food', 'Vouchers non salary food'), + ('commissions', 'Commissions'), + ('third_party_payments', 'Third party payments'), + ('advances', 'Advances') + ], string="Category", compute="_compute_rule", store=True) + + @api.depends("rule_input_id") + def _compute_rule(self): + for rec in self: + rec.name = rec.rule_input_id.name + rec.code = rec.rule_input_id.code + rec.category = rec.rule_input_id.input_id.earn_category + + @api.depends("quantity", "amount") + def _compute_total(self): + for rec in self: + rec.total = rec.quantity * rec.amount + + @api.depends("date_start", "date_end", "time_start", "time_end") + def _compute_quantity(self): + for rec in self: + if rec.category in ( + 'vacation_common', + 'licensings_maternity_or_paternity_leaves', + 'licensings_permit_or_paid_licenses', + 'licensings_suspension_or_unpaid_leaves', + 'incapacities_common', + 'incapacities_professional', + 'incapacities_working', + 'legal_strikes' + ) and rec.date_end and rec.date_start: + rec.quantity = (rec.date_end - rec.date_start).days + 1 + elif rec.category in ( + 'daily_overtime', + 'overtime_night_hours', + 'hours_night_surcharge', + 'sunday_holiday_daily_overtime', + 'daily_surcharge_hours_sundays_holidays', + 'sunday_night_overtime_holidays', + 'sunday_holidays_night_surcharge_hours' + ) and rec.date_end and rec.date_start: + days = (rec.date_end - rec.date_start).days + rec.quantity = 24 * days + rec.time_end - rec.time_start + else: + rec.quantity = 1 + + @api.constrains("time_start") + def _check_time_start(self): + for rec in self: + if rec.time_start < 0 or rec.time_start >= 24: + raise ValidationError(_("Invalid start time: %s") % rec.time_start) + + @api.constrains("time_end") + def _check_time_end(self): + for rec in self: + if rec.time_end < 0 or rec.time_end >= 24: + raise ValidationError(_("Invalid end time: %s") % rec.time_end) + + @api.constrains("date_start", "date_end") + def _check_date_start_end(self): + for rec in self: + if rec.date_end < rec.date_start: + raise ValidationError(_("The end date must always be greater than the start date for: %s") % rec.name) + + @api.constrains("amount") + def _check_amount(self): + for rec in self: + if rec.amount <= 0: + raise ValidationError(_("The earn amount must always be greater than 0 for: %s") % rec.name) diff --git a/l10n_co_hr_payroll_enterprise/models/hr_contract.py b/l10n_co_hr_payroll_enterprise/models/hr_contract.py new file mode 100644 index 000000000..6246a1b0b --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/models/hr_contract.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# +# Jorels S.A.S. - Copyright (C) 2019-2023 +# +# This file is part of l10n_co_hr_payroll_enterprise. +# +# This program 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 3 of the License, or +# (at your option) any later version. +# +# This program 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 program. If not, see . +# +# email: info@jorels.com +# + + +from odoo import fields, models, api + + +class HrContract(models.Model): + _inherit = 'hr.contract' + + type_worker_id = fields.Many2one(comodel_name="l10n_co_edi_jorels.type_workers", string="Type worker") + subtype_worker_id = fields.Many2one(comodel_name="l10n_co_edi_jorels.subtype_workers", string="Subtype worker") + high_risk_pension = fields.Boolean(string="High risk pension", default=False) + integral_salary = fields.Boolean(string="Integral salary", default=False) + type_contract_id = fields.Many2one(comodel_name="l10n_co_edi_jorels.type_contracts", string="Type contract") + payroll_period_id = fields.Many2one(comodel_name="l10n_co_edi_jorels.payroll_periods", string="Payroll period", + compute="_compute_payroll_period_id", store=True) + + @api.depends('schedule_pay') + def _compute_payroll_period_id(self): + for rec in self: + values = { + 'monthly': 5, + 'quarterly': 6, + 'semi-annually': 6, + 'annually': 6, + 'weekly': 1, + 'bi-weekly': 4, + 'bi-monthly': 6, + } + if rec.schedule_pay: + rec.payroll_period_id = values[rec.schedule_pay] + else: + rec.payroll_period_id = None diff --git a/l10n_co_hr_payroll_enterprise/models/hr_payslip.py b/l10n_co_hr_payroll_enterprise/models/hr_payslip.py new file mode 100644 index 000000000..909b5207a --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/models/hr_payslip.py @@ -0,0 +1,1695 @@ +# -*- coding: utf-8 -*- +# +# Jorels S.A.S. - Copyright (C) 2019-2023 +# +# This file is part of l10n_co_hr_payroll_enterprise. +# +# This program 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 3 of the License, or +# (at your option) any later version. +# +# This program 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 program. If not, see . +# +# email: info@jorels.com +# + + +import ast +import calendar +import json +import logging +from datetime import datetime, timedelta + +import requests +from dateutil.relativedelta import relativedelta +from odoo import api, fields, models, _ +from odoo.exceptions import UserError, ValidationError + +_logger = logging.getLogger(__name__) + + +class HrPayslip(models.Model): + _inherit = 'hr.payslip' + + origin_payslip_id = fields.Many2one(comodel_name="hr.payslip", string="Origin payslip", readonly=True, copy=False, + states={'draft': [('readonly', False)], 'verify': [('readonly', False)]}) + + # They allow storing synchronous and production modes used when invoicing + edi_sync = fields.Boolean(string="Sync", default=False, copy=False) + edi_is_not_test = fields.Boolean(string="In production", default=False, copy=False) + + # Edi fields + date = fields.Date('Date Account', states={'draft': [('readonly', False)], 'verify': [('readonly', False)]}, + readonly=True, help="Keep empty to use the period of the validation(Payslip) date.") + payment_date = fields.Date("Payment date", required=True, readonly=True, + states={'draft': [('readonly', False)], 'verify': [('readonly', False)]}, + default=lambda self: fields.Date.to_string( + (datetime.now() + relativedelta(months=+1, day=1, days=-1)).date())) + payment_form_id = fields.Many2one(comodel_name="l10n_co_edi_jorels.payment_forms", string="Payment form", default=1, + readonly=True, copy=True, + states={'draft': [('readonly', False)], 'verify': [('readonly', False)]}) + payment_method_id = fields.Many2one(comodel_name="l10n_co_edi_jorels.payment_methods", string="Payment method", + default=1, readonly=True, copy=True, + states={'draft': [('readonly', False)], 'verify': [('readonly', False)]}) + accrued_total_amount = fields.Monetary("Accrued", currency_field='currency_id', readonly=True, copy=True) + deductions_total_amount = fields.Monetary("Deductions", currency_field='currency_id', readonly=True, copy=True) + others_total_amount = fields.Monetary("Others", currency_field='currency_id', readonly=True, copy=True) + total_amount = fields.Monetary("Total", currency_field='currency_id', readonly=True, copy=True) + currency_id = fields.Many2one('res.currency', string='Currency', readonly=False, compute='_compute_currency') + earn_ids = fields.One2many('l10n_co_hr_payroll.earn.line', 'payslip_id', string='Earn lines', readonly=True, + copy=True, states={'draft': [('readonly', False)], 'verify': [('readonly', False)]}) + deduction_ids = fields.One2many('l10n_co_hr_payroll.deduction.line', 'payslip_id', string='Deduction lines', + copy=True, readonly=True, + states={'draft': [('readonly', False)], 'verify': [('readonly', False)]}) + worked_days_total = fields.Integer("Worked days", default=0) + + # Edi response fields + edi_is_valid = fields.Boolean("Is valid?", copy=False) + edi_is_restored = fields.Boolean("Is restored?", copy=False) + edi_algorithm = fields.Char("Algorithm", copy=False) + edi_class = fields.Char("Class", copy=False) + edi_number = fields.Char("Number", copy=False) + edi_uuid = fields.Char("UUID", copy=False) + edi_issue_date = fields.Date("Date", copy=False) + edi_issue_datetime = fields.Char(string="Issue datetime", copy=False, readonly=True) + edi_expedition_date = fields.Char("Expedition date", copy=False) + edi_zip_key = fields.Char("Zip key", copy=False) + edi_status_code = fields.Char("Status code", copy=False) + edi_status_description = fields.Char("Status description", copy=False) + edi_status_message = fields.Char("Status message", copy=False) + edi_errors_messages = fields.Char("Error messages", copy=False) + edi_xml_name = fields.Char("XML name", copy=False) + edi_zip_name = fields.Char("Zip name", copy=False) + edi_signature = fields.Char("Signature", copy=False) + edi_qr_code = fields.Char("QR code", copy=False) + edi_qr_data = fields.Char("QR data", copy=False) + edi_qr_link = fields.Char("QR link", copy=False) + edi_pdf_download_link = fields.Char("PDF link", copy=False) + edi_xml_base64 = fields.Binary("XML", copy=False) + edi_application_response_base64 = fields.Binary("Application response", copy=False) + edi_attached_document_base64 = fields.Binary("Attached document", copy=False) + edi_pdf_base64 = fields.Binary("PDF", copy=False) + edi_zip_base64 = fields.Binary("Zip", copy=False) + edi_type_environment = fields.Many2one(comodel_name="l10n_co_edi_jorels.type_environments", + string="Type environment", copy=False) + edi_payload = fields.Text("Payload", copy=False) + + edi_payload_html = fields.Html("Html payload", copy=False, compute="_compute_edi_payload_html", store=True) + + payslip_edi_ids = fields.Many2many(comodel_name='hr.payslip.edi', string='Edi Payslips', + relation='hr_payslip_hr_payslip_edi_rel', + readonly=True, copy=False) + + # color = fields.Integer(string='Color', required=False, default=None, readonly=True, compute='_compute_color', + # store=True, copy=False) + + month = fields.Selection([ + ('1', 'January'), + ('2', 'February'), + ('3', 'March'), + ('4', 'April'), + ('5', 'May'), + ('6', 'June'), + ('7', 'July'), + ('8', 'August'), + ('9', 'September'), + ('10', 'October'), + ('11', 'November'), + ('12', 'December') + ], string='Month', compute='_compute_month', store=True, copy=False) + year = fields.Integer(string='Year', compute='_compute_year', store=True, copy=False) + + def dian_preview(self): + for rec in self: + if rec.edi_uuid: + return { + 'type': 'ir.actions.act_url', + 'target': 'new', + 'url': 'https://catalogo-vpfe.dian.gov.co/document/searchqr?documentkey=' + rec.edi_uuid, + } + + @api.depends('edi_payload') + def _compute_edi_payload_html(self): + hr_payslip_edi_env = self.env['hr.payslip.edi'] + for rec in self: + if rec.edi_payload: + try: + rec.edi_payload_html = hr_payslip_edi_env.payload2html(json.loads(rec.edi_payload), 2) + except json.decoder.JSONDecodeError as e: + rec.edi_payload_html = hr_payslip_edi_env.payload2html(ast.literal_eval(rec.edi_payload), 2) + else: + rec.edi_payload_html = "" + + @api.depends('date_from') + def _compute_month(self): + for rec in self: + rec.month = str(rec.date_from.month) if rec.date_from else None + + @api.depends('date_from') + def _compute_year(self): + for rec in self: + rec.year = rec.date_from.year + + def _format_date_hours(self, date, hours): + date_hours = datetime(date.year, + date.month, + date.day) + timedelta(hours=hours) + return fields.Datetime.to_string(date_hours) + + def _compute_currency(self): + for rec in self: + rec.currency_id = rec.company_id.currency_id + + def compute_sheet(self): + for rec in self: + # Read all codes + all_earn_code_list = [] + for earn_id in rec.earn_ids: + all_earn_code_list.append(earn_id.code) + + # Read all codes + all_deduction_code_list = [] + for deduction_id in rec.deduction_ids: + all_deduction_code_list.append(deduction_id.code) + + # Remove records with codes duplicated + earn_code_list = [] + [earn_code_list.append(code) for code in all_earn_code_list if code not in earn_code_list] + + # Remove records with codes duplicated + deduction_code_list = [] + [deduction_code_list.append(x) for x in all_deduction_code_list if x not in deduction_code_list] + + # List of all earn details + earn_list = [] + for earn_id in rec.earn_ids: + earn_list.append({ + 'input_type_id': earn_id.rule_input_id.input_type_id.id, + 'name': earn_id.name, + 'sequence': earn_id.sequence, + 'code': earn_id.code, + 'amount': abs(earn_id.amount), + 'quantity': abs(earn_id.quantity), + 'total': abs(earn_id.total), + 'category': earn_id.category + }) + + # List of all deduction details + deduction_list = [] + for deduction_id in rec.deduction_ids: + deduction_list.append({ + 'input_type_id': deduction_id.rule_input_id.input_type_id.id, + 'name': deduction_id.name, + 'sequence': deduction_id.sequence, + 'code': deduction_id.code, + 'amount': abs(deduction_id.amount) + }) + + # Remove input line records with codes in earn and deduction code list + input_line_list = [] + for input_line in rec.input_line_ids: + if (input_line.input_type_id.code in earn_code_list + or input_line.input_type_id.code in deduction_code_list): + input_line_list.append((2, input_line.id)) + + # Remove worked days line records with codes in earn code list + worked_days_line_list = [] + for worked_days_line in rec.worked_days_line_ids: + if worked_days_line.work_entry_type_id.code in earn_code_list: + worked_days_line_list.append((2, worked_days_line.id)) + + # Prepare earn input lines + for code in earn_code_list: + filter_list = list(filter(lambda earn_detail: earn_detail["code"] == code, earn_list)) + amount = 0 + quantity = 0 + total = 0 + for filter_item in filter_list: + amount += filter_item['amount'] + quantity += filter_item['quantity'] + total += filter_item['total'] + + res_item = filter_list[0] + + # Prepare input lines + input_line_list.append((0, 0, { + 'input_type_id': res_item['input_type_id'], + 'payslip_id': rec.id, + 'sequence': res_item['sequence'], + 'amount': abs(total), + 'contract_id': rec.contract_id.id + })) + + # Search or create work entry type for code + work_entry_type_id = self.env['hr.work.entry.type'].search([('code', '=', code)]) + if not work_entry_type_id and res_item['category'] in ( + 'vacation_common', + 'vacation_compensated', + 'licensings_maternity_or_paternity_leaves', + 'licensings_permit_or_paid_licenses', + 'licensings_suspension_or_unpaid_leaves', + 'incapacities_common', + 'incapacities_professional', + 'incapacities_working', + 'legal_strikes', + 'daily_overtime', + 'overtime_night_hours', + 'hours_night_surcharge', + 'sunday_holiday_daily_overtime', + 'daily_surcharge_hours_sundays_holidays', + 'sunday_night_overtime_holidays', + 'sunday_holidays_night_surcharge_hours' + ): + self.env['hr.work.entry.type'].create({ + 'name': res_item['name'], + 'code': res_item['code'], + 'sequence': res_item['sequence'], + 'round_days': 'NO' + }) + + work_entry_type_id = self.env['hr.work.entry.type'].search([('code', '=', code)]) + if work_entry_type_id: + work_entry_type_id = work_entry_type_id[0] + + # Prepare worked days lines + if res_item['category'] in ( + 'vacation_common', + 'vacation_compensated', + 'licensings_maternity_or_paternity_leaves', + 'licensings_permit_or_paid_licenses', + 'licensings_suspension_or_unpaid_leaves', + 'incapacities_common', + 'incapacities_professional', + 'incapacities_working', + 'legal_strikes' + ): + worked_days_line_list.append((0, 0, { + 'work_entry_type_id': work_entry_type_id.id, + 'name': res_item['name'], + 'payslip_id': rec.id, + 'sequence': res_item['sequence'], + 'number_of_days': abs(quantity), + 'number_of_hours': 0, + 'contract_id': rec.contract_id.id + })) + elif res_item['category'] in ( + 'daily_overtime', + 'overtime_night_hours', + 'hours_night_surcharge', + 'sunday_holiday_daily_overtime', + 'daily_surcharge_hours_sundays_holidays', + 'sunday_night_overtime_holidays', + 'sunday_holidays_night_surcharge_hours' + ): + worked_days_line_list.append((0, 0, { + 'work_entry_type_id': work_entry_type_id.id, + 'name': res_item['name'], + 'payslip_id': rec.id, + 'sequence': res_item['sequence'], + 'number_of_days': 0, + 'number_of_hours': abs(quantity), + 'contract_id': rec.contract_id.id + })) + + # Prepare deduction input lines + for code in deduction_code_list: + filter_list = list(filter(lambda deduction_detail: deduction_detail["code"] == code, deduction_list)) + amount = 0 + for filter_item in filter_list: + amount += filter_item['amount'] + + res_item = filter_list[0] + + input_line_list.append((0, 0, { + 'input_type_id': res_item['input_type_id'], + 'payslip_id': rec.id, + 'sequence': res_item['sequence'], + 'amount': -abs(amount), + 'contract_id': rec.contract_id.id + })) + + # Add lines + rec.update({'input_line_ids': input_line_list}) + rec.update({'worked_days_line_ids': worked_days_line_list}) + + # Sequences + if not rec.number: + rec.number = _('New') + + res = super(HrPayslip, self).compute_sheet() + self.compute_totals() + + # The sheet and the totals are calculated again, + # just in case the totals obtained initially are used to calculate some salary rule. + # Especially the field worked_days_total + try: + if int(self.env['ir.config_parameter'].sudo().get_param('jorels.payroll.recompute_sheet', 1)): + res = super(HrPayslip, self).compute_sheet() + self.compute_totals() + except ValueError as e: + raise UserError("The system parameter 'jorels.payroll.recompute_sheet' is misconfigured. Use only 0 or 1") + + return res + + def compute_totals(self): + for rec in self: + # The date is the sending date + rec.date = fields.Date.context_today(self) + + # Totals + accrued_total_amount = 0 + deductions_total_amount = 0 + others_total_amount = 0 + + for line_id in rec.line_ids: + if line_id.salary_rule_id.type_concept == 'earn': + if line_id.salary_rule_id.earn_category not in ( + 'licensings_suspension_or_unpaid_leaves', + 'legal_strikes' + ): + accrued_total_amount += abs(line_id.total) + elif line_id.salary_rule_id.type_concept == 'deduction': + deductions_total_amount += abs(line_id.total) + elif line_id.salary_rule_id.type_concept == 'other': + others_total_amount += abs(line_id.total) + + rec.accrued_total_amount = accrued_total_amount + rec.deductions_total_amount = deductions_total_amount + rec.others_total_amount = others_total_amount + rec.total_amount = accrued_total_amount - deductions_total_amount + + rec.edi_payload = json.dumps(rec.get_json_request(), indent=4, sort_keys=False) + + @api.model + def calculate_time_worked(self, start, end): + if end < start: + raise ValidationError(_("The time worked cannot be negative.")) + + end_day = 30 if end.day == calendar.monthrange(end.year, end.month)[1] else end.day + start_day = 30 if start.day == calendar.monthrange(start.year, start.month)[1] else start.day + + return (end.year - start.year) * 360 + (end.month - start.month) * 30 + end_day - start_day + 1 + + def get_json_request(self): + for rec in self: + # Force compute edi payroll period + rec.contract_id._compute_payroll_period_id() + + if not rec.number: + raise UserError(_("The payroll must have a consecutive number, 'Reference' field")) + if not rec.contract_id.payroll_period_id: + raise UserError(_("The contract must have the 'Scheduled Pay' field configured")) + if not rec.company_id.name: + raise UserError(_("Your company does not have a name")) + if not rec.company_id.type_document_identification_id: + raise UserError(_("Your company does not have an identification type")) + if not rec.company_id.vat: + raise UserError(_("Your company does not have a document number")) + if not rec.company_id.partner_id.postal_municipality_id: + raise UserError(_("Your company does not have a postal municipality")) + if not rec.company_id.street: + raise UserError(_("Your company does not have an address")) + if not rec.contract_id.type_worker_id: + raise UserError(_("The contract must have the 'Type worker' field configured")) + if not rec.contract_id.subtype_worker_id: + raise UserError(_("The contract must have the 'Subtype worker' field configured")) + if not rec.employee_id.address_home_id.first_name: + raise UserError(_("Employee does not have a first name")) + if not rec.employee_id.address_home_id.surname: + raise UserError(_("Employee does not have a surname")) + if not rec.employee_id.address_home_id.type_document_identification_id: + raise UserError(_("Employee does not have an identification type")) + if rec.employee_id.address_home_id.type_document_identification_id.id == 6: + raise UserError(_("The employee's document type cannot be NIT")) + if not rec.employee_id.address_home_id.vat: + raise UserError(_("Employee does not have an document number")) + if not rec.employee_id.address_home_id.postal_municipality_id: + raise UserError(_("Employee does not have a postal municipality")) + if not rec.employee_id.address_home_id.street: + raise UserError(_("Employee does not have an address.")) + if not rec.contract_id.name: + raise UserError(_("Contract does not have a name")) + if rec.contract_id.wage <= 0: + raise UserError(_("The contract must have the 'Wage' field configured")) + if not rec.contract_id.type_contract_id: + raise UserError(_("The contract must have the 'Type contract' field configured")) + if not rec.contract_id.date_start: + raise UserError(_("The contract must have the 'Start Date' field configured")) + if not rec.date_from: + raise UserError(_("The payroll must have a period")) + if not rec.date_to: + raise UserError(_("The payroll must have a period")) + if not rec.payment_form_id: + raise UserError(_("The payroll must have a payment form")) + if not rec.payment_method_id: + raise UserError(_("The payroll must have a payment method")) + if not rec.payment_date: + raise UserError(_("The payroll must have a payment date")) + + rec.edi_sync = rec.company_id.edi_payroll_is_not_test + + sequence = {} + if rec.number and rec.number not in ('New', _('New')): + sequence_number = ''.join([i for i in rec.number if i.isdigit()]) + sequence_prefix = rec.number.split(sequence_number) + if sequence_prefix: + sequence = { + # "worker_code": "string", + "prefix": sequence_prefix[0], + "number": int(sequence_number) + } + else: + raise UserError(_("The sequence must have a prefix")) + + information = { + "payroll_period_code": rec.contract_id.payroll_period_id.id, + "currency_code": 35, + # "trm": 1 + } + + employer_id_code = rec.company_id.type_document_identification_id.id + employer_id_number_general = ''.join([i for i in rec.company_id.vat if i.isdigit()]) + if employer_id_code == 6: + employer_id_number = employer_id_number_general[:-1] + else: + employer_id_number = employer_id_number_general + + employer = { + "name": rec.company_id.name, + # "surname": "string", + # "second_surname": "string", + # "first_name": "string", + # "other_names": "string", + "id_code": employer_id_code, + "id_number": employer_id_number, + "country_code": 46, + "municipality_code": rec.company_id.partner_id.postal_municipality_id.id, + "address": rec.company_id.street + } + + employee = { + "type_worker_code": rec.contract_id.type_worker_id.id, + "subtype_worker_code": rec.contract_id.subtype_worker_id.id, + "high_risk_pension": rec.contract_id.high_risk_pension, + "id_code": rec.employee_id.address_home_id.type_document_identification_id.id, + "id_number": ''.join([i for i in rec.employee_id.address_home_id.vat if i.isdigit()]), + "surname": rec.employee_id.address_home_id.surname, + "first_name": rec.employee_id.address_home_id.first_name, + "country_code": 46, + "municipality_code": rec.employee_id.address_home_id.postal_municipality_id.id, + "address": rec.employee_id.address_home_id.street, + "integral_salary": rec.contract_id.integral_salary, + "contract_code": rec.contract_id.type_contract_id.id, + "salary": abs(rec.contract_id.wage), + # "worker_code": "string" + } + if rec.employee_id.address_home_id.other_names: + employee['other_names'] = rec.employee_id.address_home_id.other_names + if rec.employee_id.address_home_id.second_surname: + employee['second_surname'] = rec.employee_id.address_home_id.second_surname + + if rec.contract_id.date_end: + amount_time = self.calculate_time_worked(rec.contract_id.date_start, rec.contract_id.date_end) + else: + amount_time = self.calculate_time_worked(rec.contract_id.date_start, rec.date_to) + + rec.date = fields.Date.context_today(rec) + + period = { + "admission_date": fields.Date.to_string(rec.contract_id.date_start), + "settlement_start_date": fields.Date.to_string(rec.date_from), + "settlement_end_date": fields.Date.to_string(rec.date_to), + "amount_time": amount_time, + "date_issue": fields.Date.to_string(rec.date) + } + if rec.contract_id.date_end: + period['withdrawal_date'] = fields.Date.to_string(rec.contract_id.date_end) + + payment = { + "code": rec.payment_form_id.id, + "method_code": rec.payment_method_id.id, + # "bank": "string", + # "account_type": "string", + # "account_number": "string" + } + + # Earn details + basic = {} + company_withdrawal_bonus = 0 + compensation = 0 + endowment = 0 + layoffs = {} + primas = {} + refund = 0 + sustainment_support = 0 + telecommuting = 0 + + advances = [] + assistances = [] + bonuses = [] + commissions = [] + compensations = [] + overtimes_surcharges = [] + incapacities = [] + legal_strikes = [] + licensings_maternity_or_paternity_leaves = [] + licensings_permit_or_paid_licenses = [] + licensings_suspension_or_unpaid_leaves = [] + other_concepts = [] + third_party_payments = [] + transports = [] + vacation_common = [] + vacation_compensated = [] + vouchers = [] + + # Earn details iteration + for earn_id in rec.earn_ids: + if not earn_id.rule_input_id.input_id.edi_is_detailed: + raise UserError(_("This concept must be calculated through the salary rules: %s") + % earn_id.rule_input_id.input_id.name) + + if earn_id.category in ( + 'basic', + 'company_withdrawal_bonus', + 'compensation', + 'endowment', + 'layoffs', + 'layoffs_interest', + 'primas', + 'primas_non_salary', + 'refund', + 'sustainment_support', + 'telecommuting' + ): + raise UserError(_("This concept must be configured in salary rules as not detailed: %s") + % earn_id.rule_input_id.input_id.name) + + if earn_id.category == 'advances': + if earn_id.total: + advances.append({ + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'assistances': + if earn_id.total: + assistances.append({ + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'assistances_non_salary': + if earn_id.total: + assistances.append({ + "non_salary_payment": abs(earn_id.total) + }) + elif earn_id.category == 'bonuses': + if earn_id.total: + bonuses.append({ + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'bonuses_non_salary': + if earn_id.total: + bonuses.append({ + "non_salary_payment": abs(earn_id.total) + }) + elif earn_id.category == 'commissions': + if earn_id.total: + commissions.append({ + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'compensations_extraordinary': + if earn_id.total: + compensations.append({ + "extraordinary": abs(earn_id.total) + }) + elif earn_id.category == 'compensations_ordinary': + if earn_id.total: + compensations.append({ + "ordinary": abs(earn_id.total) + }) + elif earn_id.category == 'daily_overtime': + if earn_id.quantity and earn_id.total: + overtimes_surcharges.append({ + "start": self._format_date_hours(earn_id.date_start, earn_id.time_start), + "end": self._format_date_hours(earn_id.date_end, earn_id.time_end), + "quantity": abs(earn_id.quantity), + "time_code": 1, + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'daily_surcharge_hours_sundays_holidays': + if earn_id.quantity and earn_id.total: + overtimes_surcharges.append({ + "start": self._format_date_hours(earn_id.date_start, earn_id.time_start), + "end": self._format_date_hours(earn_id.date_end, earn_id.time_end), + "quantity": abs(earn_id.quantity), + "time_code": 5, + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'hours_night_surcharge': + if earn_id.quantity and earn_id.total: + overtimes_surcharges.append({ + "start": self._format_date_hours(earn_id.date_start, earn_id.time_start), + "end": self._format_date_hours(earn_id.date_end, earn_id.time_end), + "quantity": abs(earn_id.quantity), + "time_code": 3, + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'incapacities_common': + if earn_id.quantity and earn_id.total: + incapacities.append({ + "start": fields.Date.to_string(earn_id.date_start), + "end": fields.Date.to_string(earn_id.date_end), + "quantity": abs(earn_id.quantity), + "incapacity_code": 1, + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'incapacities_professional': + if earn_id.quantity and earn_id.total: + incapacities.append({ + "start": fields.Date.to_string(earn_id.date_start), + "end": fields.Date.to_string(earn_id.date_end), + "quantity": abs(earn_id.quantity), + "incapacity_code": 2, + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'incapacities_working': + if earn_id.quantity and earn_id.total: + incapacities.append({ + "start": fields.Date.to_string(earn_id.date_start), + "end": fields.Date.to_string(earn_id.date_end), + "quantity": abs(earn_id.quantity), + "incapacity_code": 3, + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'legal_strikes': + if earn_id.quantity: + legal_strikes.append({ + "start": fields.Date.to_string(earn_id.date_start), + "end": fields.Date.to_string(earn_id.date_end), + "quantity": abs(earn_id.quantity), + }) + elif earn_id.category == 'licensings_maternity_or_paternity_leaves': + if earn_id.quantity and earn_id.total: + licensings_maternity_or_paternity_leaves.append({ + "start": fields.Date.to_string(earn_id.date_start), + "end": fields.Date.to_string(earn_id.date_end), + "quantity": abs(earn_id.quantity), + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'licensings_permit_or_paid_licenses': + if earn_id.quantity and earn_id.total: + licensings_permit_or_paid_licenses.append({ + "start": fields.Date.to_string(earn_id.date_start), + "end": fields.Date.to_string(earn_id.date_end), + "quantity": abs(earn_id.quantity), + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'licensings_suspension_or_unpaid_leaves': + if earn_id.quantity: + licensings_suspension_or_unpaid_leaves.append({ + "start": fields.Date.to_string(earn_id.date_start), + "end": fields.Date.to_string(earn_id.date_end), + "quantity": abs(earn_id.quantity) + }) + elif earn_id.category == 'other_concepts': + if earn_id.total: + other_concepts.append({ + "description": earn_id.name, + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'other_concepts_non_salary': + if earn_id.total: + other_concepts.append({ + "description": earn_id.name, + "non_salary_payment": abs(earn_id.total) + }) + elif earn_id.category == 'overtime_night_hours': + if earn_id.quantity and earn_id.total: + overtimes_surcharges.append({ + "start": self._format_date_hours(earn_id.date_start, earn_id.time_start), + "end": self._format_date_hours(earn_id.date_end, earn_id.time_end), + "quantity": abs(earn_id.quantity), + "time_code": 2, + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'sunday_holiday_daily_overtime': + if earn_id.quantity and earn_id.total: + overtimes_surcharges.append({ + "start": self._format_date_hours(earn_id.date_start, earn_id.time_start), + "end": self._format_date_hours(earn_id.date_end, earn_id.time_end), + "quantity": abs(earn_id.quantity), + "time_code": 4, + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'sunday_holidays_night_surcharge_hours': + if earn_id.quantity and earn_id.total: + overtimes_surcharges.append({ + "start": self._format_date_hours(earn_id.date_start, earn_id.time_start), + "end": self._format_date_hours(earn_id.date_end, earn_id.time_end), + "quantity": abs(earn_id.quantity), + "time_code": 7, + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'sunday_night_overtime_holidays': + if earn_id.quantity and earn_id.total: + overtimes_surcharges.append({ + "start": self._format_date_hours(earn_id.date_start, earn_id.time_start), + "end": self._format_date_hours(earn_id.date_end, earn_id.time_end), + "quantity": abs(earn_id.quantity), + "time_code": 6, + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'third_party_payments': + if earn_id.total: + third_party_payments.append({ + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'transports_assistance': + if earn_id.total: + transports.append({ + "assistance": abs(earn_id.total) + }) + elif earn_id.category == 'transports_non_salary_viatic': + if earn_id.total: + transports.append({ + "non_salary_viatic": abs(earn_id.total) + }) + elif earn_id.category == 'transports_viatic': + if earn_id.total: + transports.append({ + "viatic": abs(earn_id.total) + }) + elif earn_id.category == 'vacation_common': + if earn_id.quantity and earn_id.total: + vacation_common.append({ + "start": fields.Date.to_string(earn_id.date_start), + "end": fields.Date.to_string(earn_id.date_end), + "quantity": abs(earn_id.quantity), + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'vacation_compensated': + if earn_id.quantity and earn_id.total: + vacation_compensated.append({ + "quantity": abs(earn_id.quantity), + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'vouchers': + if earn_id.total: + vouchers.append({ + "payment": abs(earn_id.total) + }) + elif earn_id.category == 'vouchers_non_salary': + if earn_id.total: + vouchers.append({ + "non_salary_payment": abs(earn_id.total) + }) + elif earn_id.category == 'vouchers_non_salary_food': + if earn_id.total: + vouchers.append({ + "non_salary_food_payment": abs(earn_id.total) + }) + elif earn_id.category == 'vouchers_salary_food': + if earn_id.total: + vouchers.append({ + "salary_food_payment": abs(earn_id.total) + }) + + # Deduction details + deduction_afc = 0 + deduction_complementary_plans = 0 + deduction_cooperative = 0 + deduction_debt = 0 + deduction_education = 0 + deduction_health = {} + deduction_pension_fund = {} + deduction_pension_security_fund = {} + deduction_refund = 0 + deduction_sanctions = {} + deduction_tax_lien = 0 + deduction_trade_unions = {} + deduction_voluntary_pension = 0 + deduction_withholding_source = 0 + + deduction_advances = [] + deduction_libranzas = [] + deduction_others = [] + deduction_third_party_payments = [] + + # Deduction details iteration + for deduction_id in rec.deduction_ids: + if not deduction_id.rule_input_id.input_id.edi_is_detailed: + raise UserError(_("This concept must be calculated through the salary rules: %s") + % deduction_id.rule_input_id.input_id.name) + + # For trade unions and sanctions this settings is temporary + if deduction_id.category in ( + 'afc', + 'complementary_plans', + 'cooperative', + 'debt', + 'education', + 'health', + 'pension_fund', + 'pension_security_fund', + 'pension_security_fund_subsistence', + 'refund', + 'sanctions_private', + 'sanctions_public', + 'tax_lien', + 'trade_unions', + 'voluntary_pension', + 'withholding_source' + ): + raise UserError(_("This concept must be configured in salary rules as not detailed: %s") + % deduction_id.rule_input_id.input_id.name) + elif deduction_id.category == 'advances': + if deduction_id.amount: + deduction_advances.append({ + "payment": abs(deduction_id.amount) + }) + elif deduction_id.category == 'libranzas': + if deduction_id.amount: + deduction_libranzas.append({ + "description": deduction_id.name, + "payment": abs(deduction_id.amount) + }) + elif deduction_id.category == 'other_deductions': + if deduction_id.amount: + deduction_others.append({ + "payment": abs(deduction_id.amount) + }) + elif deduction_id.category == 'third_party_payments': + if deduction_id.amount: + deduction_third_party_payments.append({ + "payment": abs(deduction_id.amount) + }) + + # Salary computation iteration + for line_id in rec.line_ids: + line_id.edi_rate = line_id.compute_edi_rate() + line_id.edi_quantity = line_id.compute_edi_quantity() + if line_id.salary_rule_id.type_concept == 'earn' and not line_id.salary_rule_id.edi_is_detailed: + if line_id.salary_rule_id.earn_category == 'basic': + if line_id.total: + # The days worked are calculated at the end + basic['worked_days'] = None + basic['worker_salary'] = abs(line_id.total) + elif line_id.salary_rule_id.earn_category == 'company_withdrawal_bonus': + if line_id.total: + company_withdrawal_bonus = abs(line_id.total) + elif line_id.salary_rule_id.earn_category == 'compensation': + if line_id.total: + compensation = abs(line_id.total) + elif line_id.salary_rule_id.earn_category == 'endowment': + if line_id.total: + endowment = abs(line_id.total) + elif line_id.salary_rule_id.earn_category == 'layoffs': + if line_id.total: + layoffs['payment'] = abs(line_id.total) + elif line_id.salary_rule_id.earn_category == 'layoffs_interest': + if line_id.total: + layoffs['percentage'] = abs(line_id.edi_rate) + layoffs['interest_payment'] = abs(line_id.total) + elif line_id.salary_rule_id.earn_category == 'primas': + if line_id.total: + primas['quantity'] = abs(line_id.edi_quantity) + primas['payment'] = abs(line_id.total) + elif line_id.salary_rule_id.earn_category == 'primas_non_salary': + if line_id.total: + primas['non_salary_payment'] = abs(line_id.total) + elif line_id.salary_rule_id.earn_category == 'refund': + if line_id.total: + refund = abs(line_id.total) + elif line_id.salary_rule_id.earn_category == 'sustainment_support': + if line_id.total: + sustainment_support = abs(line_id.total) + elif line_id.salary_rule_id.earn_category == 'telecommuting': + if line_id.total: + telecommuting = abs(line_id.total) + elif line_id.salary_rule_id.earn_category == 'advances': + if line_id.total: + advances.append({ + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'assistances': + if line_id.total: + assistances.append({ + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'assistances_non_salary': + if line_id.total: + assistances.append({ + "non_salary_payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'bonuses': + if line_id.total: + bonuses.append({ + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'bonuses_non_salary': + if line_id.total: + bonuses.append({ + "non_salary_payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'commissions': + if line_id.total: + commissions.append({ + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'compensations_extraordinary': + if line_id.total: + compensations.append({ + "extraordinary": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'compensations_ordinary': + if line_id.total: + compensations.append({ + "ordinary": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'daily_overtime': + if line_id.edi_quantity and line_id.total: + overtimes_surcharges.append({ + "quantity": abs(line_id.edi_quantity), + "time_code": 1, + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'daily_surcharge_hours_sundays_holidays': + if line_id.edi_quantity and line_id.total: + overtimes_surcharges.append({ + "quantity": abs(line_id.edi_quantity), + "time_code": 5, + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'hours_night_surcharge': + if line_id.edi_quantity and line_id.total: + overtimes_surcharges.append({ + "quantity": abs(line_id.edi_quantity), + "time_code": 3, + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'incapacities_common': + if line_id.edi_quantity and line_id.total: + incapacities.append({ + "quantity": abs(line_id.edi_quantity), + "incapacity_code": 1, + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'incapacities_professional': + if line_id.edi_quantity and line_id.total: + incapacities.append({ + "quantity": abs(line_id.edi_quantity), + "incapacity_code": 2, + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'incapacities_working': + if line_id.edi_quantity and line_id.total: + incapacities.append({ + "quantity": abs(line_id.edi_quantity), + "incapacity_code": 3, + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'legal_strikes': + if line_id.edi_quantity: + legal_strikes.append({ + "quantity": abs(line_id.edi_quantity) + }) + elif line_id.salary_rule_id.earn_category == 'licensings_maternity_or_paternity_leaves': + if line_id.edi_quantity and line_id.total: + licensings_maternity_or_paternity_leaves.append({ + "quantity": abs(line_id.edi_quantity), + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'licensings_permit_or_paid_licenses': + if line_id.edi_quantity and line_id.total: + licensings_permit_or_paid_licenses.append({ + "quantity": abs(line_id.edi_quantity), + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'licensings_suspension_or_unpaid_leaves': + if line_id.edi_quantity: + licensings_suspension_or_unpaid_leaves.append({ + "quantity": abs(line_id.edi_quantity) + }) + elif line_id.salary_rule_id.earn_category == 'other_concepts': + if line_id.total: + other_concepts.append({ + "description": line_id.name, + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'other_concepts_non_salary': + if line_id.total: + other_concepts.append({ + "description": line_id.name, + "non_salary_payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'overtime_night_hours': + if line_id.edi_quantity and line_id.total: + overtimes_surcharges.append({ + "quantity": abs(line_id.edi_quantity), + "time_code": 2, + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'sunday_holiday_daily_overtime': + if line_id.edi_quantity and line_id.total: + overtimes_surcharges.append({ + "quantity": abs(line_id.edi_quantity), + "time_code": 4, + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'sunday_holidays_night_surcharge_hours': + if line_id.edi_quantity and line_id.total: + overtimes_surcharges.append({ + "quantity": abs(line_id.edi_quantity), + "time_code": 7, + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'sunday_night_overtime_holidays': + if line_id.edi_quantity and line_id.total: + overtimes_surcharges.append({ + "quantity": abs(line_id.edi_quantity), + "time_code": 6, + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'third_party_payments': + if line_id.total: + third_party_payments.append({ + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'transports_assistance': + if line_id.total: + transports.append({ + 'assistance': abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'transports_non_salary_viatic': + if line_id.total: + transports.append({ + "non_salary_viatic": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'transports_viatic': + if line_id.total: + transports.append({ + "viatic": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'vacation_common': + if line_id.edi_quantity and line_id.total: + vacation_common.append({ + "quantity": abs(line_id.edi_quantity), + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'vacation_compensated': + if line_id.edi_quantity and line_id.total: + vacation_compensated.append({ + "quantity": abs(line_id.edi_quantity), + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'vouchers': + if line_id.total: + vouchers.append({ + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'vouchers_non_salary': + if line_id.total: + vouchers.append({ + "non_salary_payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'vouchers_non_salary_food': + if line_id.total: + vouchers.append({ + "non_salary_food_payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.earn_category == 'vouchers_salary_food': + if line_id.total: + vouchers.append({ + "salary_food_payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.type_concept == 'deduction' \ + and not line_id.salary_rule_id.edi_is_detailed \ + and line_id.total: + if line_id.salary_rule_id.deduction_category == 'afc': + deduction_afc = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'complementary_plans': + deduction_complementary_plans = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'cooperative': + deduction_cooperative = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'debt': + deduction_debt = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'education': + deduction_education = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'health': + deduction_health['percentage'] = abs(line_id.edi_rate) + deduction_health['payment'] = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'pension_fund': + deduction_pension_fund['percentage'] = abs(line_id.edi_rate) + deduction_pension_fund['payment'] = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'pension_security_fund': + deduction_pension_security_fund['percentage'] = abs(line_id.edi_rate) + deduction_pension_security_fund['payment'] = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'pension_security_fund_subsistence': + deduction_pension_security_fund['percentage_subsistence'] = abs(line_id.edi_rate) + deduction_pension_security_fund['payment_subsistence'] = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'refund': + deduction_refund = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'sanctions_private': + deduction_sanctions['payment_private'] = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'sanctions_public': + deduction_sanctions['payment_public'] = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'tax_lien': + deduction_tax_lien = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'trade_unions': + deduction_trade_unions = { + 'percentage': abs(line_id.edi_rate), + 'payment': abs(line_id.total) + } + elif line_id.salary_rule_id.deduction_category == 'voluntary_pension': + deduction_voluntary_pension = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'withholding_source': + deduction_withholding_source = abs(line_id.total) + elif line_id.salary_rule_id.deduction_category == 'advances': + deduction_advances.append({ + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.deduction_category == 'libranzas': + deduction_libranzas.append({ + "description": line_id.salary_rule_id.name, + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.deduction_category == 'other_deductions': + deduction_others.append({ + "payment": abs(line_id.total) + }) + elif line_id.salary_rule_id.deduction_category == 'third_party_payments': + deduction_third_party_payments.append({ + "payment": abs(line_id.total) + }) + + # Calculate days worked + rec.worked_days_total = self.calculate_time_worked(rec.date_from, rec.date_to) + for list_with_days in [ + vacation_common, + licensings_maternity_or_paternity_leaves, + licensings_permit_or_paid_licenses, + licensings_suspension_or_unpaid_leaves, + incapacities, + legal_strikes + ]: + for dict_with_days in list_with_days: + rec.worked_days_total -= dict_with_days['quantity'] + if rec.worked_days_total < 0: + rec.worked_days_total = 0 + basic['worked_days'] = rec.worked_days_total + + if 'worker_salary' not in basic: + basic['worker_salary'] = 0.0 + + # Complete json request + earn = { + "basic": basic + } + + # Earn details + vacation = {} + if vacation_common: + vacation['common'] = vacation_common + if vacation_compensated: + vacation['compensated'] = vacation_compensated + if vacation: + earn['vacation'] = vacation + + if primas: + if 'payment' in primas: + earn['primas'] = primas + else: + raise UserError(_("The 'Primas' rule is mandatory in order to report Primas")) + + if layoffs: + if ('payment' in layoffs) and ('interest_payment' in layoffs): + earn['layoffs'] = layoffs + else: + raise UserError( + _("The 'Layoffs' and 'Layoffs interest' rules are mandatory in order to report Layoffs")) + + licensings = {} + if licensings_maternity_or_paternity_leaves: + licensings['licensings_maternity_or_paternity_leaves'] = licensings_maternity_or_paternity_leaves + if licensings_permit_or_paid_licenses: + licensings['licensings_permit_or_paid_licenses'] = licensings_permit_or_paid_licenses + if licensings_suspension_or_unpaid_leaves: + licensings['licensings_suspension_or_unpaid_leaves'] = licensings_suspension_or_unpaid_leaves + if licensings: + earn['licensings'] = licensings + + if endowment: + earn['endowment'] = endowment + + if sustainment_support: + earn['sustainment_support'] = sustainment_support + + if telecommuting: + earn['telecommuting'] = telecommuting + + if company_withdrawal_bonus: + earn['company_withdrawal_bonus'] = company_withdrawal_bonus + + if compensation: + earn['compensation'] = compensation + + if refund: + earn['refund'] = refund + + if transports: + earn['transports'] = transports + + if overtimes_surcharges: + earn['overtimes_surcharges'] = overtimes_surcharges + + if incapacities: + earn['incapacities'] = incapacities + + if bonuses: + earn['bonuses'] = bonuses + + if assistances: + earn['assistances'] = assistances + + if legal_strikes: + earn['legal_strikes'] = legal_strikes + + if other_concepts: + earn['other_concepts'] = other_concepts + + if compensations: + earn['compensations'] = compensations + + if vouchers: + earn['vouchers'] = vouchers + + if commissions: + earn['commissions'] = commissions + + if third_party_payments: + earn['third_party_payments'] = third_party_payments + + if advances: + earn['advances'] = advances + + # Deduction details + deduction = {} + + if deduction_health: + deduction['health'] = deduction_health + + if deduction_pension_fund: + deduction['pension_fund'] = deduction_pension_fund + + if deduction_pension_security_fund: + deduction['pension_security_fund'] = deduction_pension_security_fund + + if deduction_voluntary_pension: + deduction['voluntary_pension'] = deduction_voluntary_pension + + if deduction_withholding_source: + deduction['withholding_source'] = deduction_withholding_source + + if deduction_afc: + deduction['afc'] = deduction_afc + + if deduction_cooperative: + deduction['cooperative'] = deduction_cooperative + + if deduction_tax_lien: + deduction['tax_lien'] = deduction_tax_lien + + if deduction_complementary_plans: + deduction['complementary_plans'] = deduction_complementary_plans + + if deduction_education: + deduction['education'] = deduction_education + + if deduction_refund: + deduction['refund'] = deduction_refund + + if deduction_debt: + deduction['debt'] = deduction_debt + + if deduction_trade_unions: + deduction['trade_unions'] = [deduction_trade_unions] + + if deduction_sanctions: + if 'payment_public' not in deduction_sanctions: + deduction_sanctions['payment_public'] = 0.0 + if 'payment_private' not in deduction_sanctions: + deduction_sanctions['payment_private'] = 0.0 + deduction['sanctions'] = [deduction_sanctions] + + if deduction_libranzas: + deduction['libranzas'] = deduction_libranzas + + if deduction_third_party_payments: + deduction['third_party_payments'] = deduction_third_party_payments + + if deduction_advances: + deduction['advances'] = deduction_advances + + if deduction_others: + deduction['other_deductions'] = deduction_others + + # Payment + payment_dates = [{ + "date": fields.Date.to_string(rec.payment_date) + }] + + json_request = {} + json_request['sync'] = rec.edi_sync + # json_request["rounding"] = 0 + json_request['accrued_total'] = rec.accrued_total_amount + json_request['deductions_total'] = rec.deductions_total_amount + json_request['total'] = rec.total_amount + if sequence: + json_request['sequence'] = sequence + json_request['information'] = information + # json_request["novelty"] = novelty + # json_request["provider"] = provider + json_request['employer'] = employer + json_request['employee'] = employee + json_request['period'] = period + json_request['payment'] = payment + json_request['payment_dates'] = payment_dates + json_request['earn'] = earn + + # Optionals + if deduction: + json_request['deduction'] = deduction + + if rec.note: + notes = [{ + "text": rec.note + }] + json_request['notes'] = notes + + # Credit note + if rec.credit_note: + if rec.origin_payslip_id: + if rec.origin_payslip_id.edi_is_valid: + json_request['payroll_reference'] = { + 'number': rec.origin_payslip_id.edi_number, + 'uuid': rec.origin_payslip_id.edi_uuid, + 'issue_date': str(rec.origin_payslip_id.edi_issue_date) + } + else: + json_request['payroll_reference'] = { + 'number': rec.origin_payslip_id.number, + 'issue_date': str(rec.origin_payslip_id.date) + } + else: + raise UserError(_("The Origin payslip is required for adjusment notes.")) + + json_request = rec.get_json_delete_request(json_request) + + return json_request + + def write_response(self, response, payload): + for rec in self: + rec.edi_is_valid = response['is_valid'] + rec.edi_is_restored = response['is_restored'] + rec.edi_algorithm = response['algorithm'] + rec.edi_class = response['class'] + rec.edi_number = response['number'] + rec.edi_uuid = response['uuid'] + rec.edi_issue_date = response['issue_date'] + rec.edi_issue_datetime = response['issue_date'] + rec.edi_expedition_date = response['expedition_date'] + rec.edi_zip_key = response['zip_key'] + rec.edi_status_code = response['status_code'] + rec.edi_status_description = response['status_description'] + rec.edi_status_message = response['status_message'] + rec.edi_errors_messages = str(response['errors_messages']) + rec.edi_xml_name = response['xml_name'] + rec.edi_zip_name = response['zip_name'] + rec.edi_signature = response['signature'] + rec.edi_qr_code = response['qr_code'] + rec.edi_qr_data = response['qr_data'] + rec.edi_qr_link = response['qr_link'] + rec.edi_pdf_download_link = response['pdf_download_link'] + rec.edi_xml_base64 = response['xml_base64_bytes'] + rec.edi_application_response_base64 = response['application_response_base64_bytes'] + rec.edi_attached_document_base64 = response['attached_document_base64_bytes'] + rec.edi_pdf_base64 = response['pdf_base64_bytes'] + rec.edi_zip_base64 = response['zip_base64_bytes'] + rec.edi_type_environment = response['type_environment_id'] + rec.edi_payload = payload + + @api.model + def get_json_delete_request(self, requests_data): + requests_delete = {} + + if 'sequence' in requests_data: + requests_delete['sequence'] = requests_data['sequence'] + if 'payroll_reference' in requests_data: + requests_delete['payroll_reference'] = requests_data['payroll_reference'] + + requests_delete['sync'] = requests_data['sync'] + requests_delete['information'] = requests_data['information'] + requests_delete['employer'] = requests_data['employer'] + + if 'rounding' in requests_data: + requests_delete['rounding'] = requests_data['rounding'] + if 'provider' in requests_data: + requests_delete['provider'] = requests_data['provider'] + if 'notes' in requests_data: + requests_delete['notes'] = requests_data['notes'] + + return requests_delete + + def validate_dian_generic(self): + for rec in self: + try: + if not rec.company_id.edi_payroll_enable or rec.company_id.edi_payroll_consolidated_enable: + continue + + requests_data = rec.get_json_request() + + if 'sequence' not in requests_data: + raise UserError(_("The sequence is required.")) + + # Credit note + if rec.credit_note: + type_edi_document = 'payroll_delete' + if 'payroll_reference' not in requests_data or 'uuid' not in requests_data['payroll_reference']: + raise UserError(_("The reference payroll is not valid.")) + else: + type_edi_document = 'payroll' + + # Payload + payload = json.dumps(requests_data, indent=2, sort_keys=False) + + # Software id and pin + if rec.company_id.edi_payroll_id and rec.company_id.edi_payroll_pin: + requests_data['environment'] = { + 'software': rec.company_id.edi_payroll_id, + 'pin': rec.company_id.edi_payroll_pin + } + else: + raise UserError(_("You do not have a software id and pin configured")) + + # API key and URL + if rec.company_id.api_key: + token = rec.company_id.api_key + else: + raise UserError(_("You must configure a token")) + + api_url = self.env['ir.config_parameter'].sudo().get_param('jorels.edipo.api_url', + 'https://edipo.jorels.com') + params = {'token': token} + header = {"accept": "application/json", "Content-Type": "application/json"} + + # Request + api_url = api_url + "/" + type_edi_document + + rec.edi_is_not_test = rec.company_id.edi_payroll_is_not_test + + if not rec.edi_is_not_test: + if rec.company_id.edi_payroll_test_set_id: + params['test_set_id'] = rec.company_id.edi_payroll_test_set_id + else: + raise UserError(_("You have not configured a 'TestSetId'.")) + + _logger.debug('API URL: %s', api_url) + _logger.debug("DIAN Validation Request: %s", json.dumps(requests_data, indent=2, sort_keys=False)) + # raise Warning(json.dumps(requests_data, indent=2, sort_keys=False)) + + response = requests.post(api_url, + json.dumps(requests_data), + headers=header, + params=params).json() + _logger.debug('API Response: %s', response) + + if 'detail' in response: + raise UserError(response['detail']) + if 'message' in response: + if response['message'] == 'Unauthenticated.' or response['message'] == '': + raise UserError(_("Authentication error with the API")) + else: + if 'errors' in response: + raise UserError(response['message'] + '/ errors: ' + str(response['errors'])) + else: + raise UserError(response['message']) + elif 'is_valid' in response: + rec.write_response(response, payload) + if response['is_valid']: + # self.env.user.notify_success(message=_("The validation at DIAN has been successful.")) + _logger.debug("The validation at DIAN has been successful.") + elif 'zip_key' in response: + if response['zip_key'] is not None: + if not rec.edi_is_not_test: + # self.env.user.notify_success(message=_("Document sent to DIAN in habilitation.")) + _logger.debug("Document sent to DIAN in habilitation.") + else: + temp_message = {rec.edi_status_message, rec.edi_errors_messages, + rec.edi_status_description, rec.edi_status_code} + raise UserError(str(temp_message)) + else: + raise UserError(_('A valid Zip key was not obtained. Try again.')) + else: + raise UserError(_('The document could not be validated in DIAN.')) + else: + raise UserError(_("No logical response was obtained from the API.")) + except Exception as e: + _logger.debug("Failed to process the request: %s", e) + raise UserError(_("Failed to process the request: %s") % e) + + def action_payslip_done(self): + for rec in self: + if not rec.number or rec.number in ('New', _('New')): + if rec.credit_note: + rec.number = self.env['ir.sequence'].next_by_code('salary.slip.note') + if not rec.number: + raise UserError( + _("You must create a sequence for adjusment notes with code 'salary.slip.note'")) + else: + rec.number = self.env['ir.sequence'].next_by_code('salary.slip') + + res = super(HrPayslip, self).action_payslip_done() + + for rec in self: + if rec.company_id.edi_payroll_enable and not rec.company_id.edi_payroll_consolidated_enable: + rec.validate_dian_generic() + + return res + + def status_zip(self): + for rec in self: + try: + if not rec.company_id.edi_payroll_enable or rec.company_id.edi_payroll_consolidated_enable: + continue + + # This line ensures that the electronic fields of the payroll are updated in Odoo, before the request + payload = json.dumps(rec.get_json_request(), indent=2, sort_keys=False) + + _logger.debug('Payload: %s', payload) + + if rec.edi_zip_key or rec.edi_uuid: + requests_data = {} + _logger.debug('API Requests: %s', requests_data) + + # API key and URL + if rec.company_id.api_key: + token = rec.company_id.api_key + else: + raise UserError(_("You must configure a token")) + + api_url = self.env['ir.config_parameter'].sudo().get_param('jorels.edipo.api_url', + 'https://edipo.jorels.com') + params = { + 'token': token, + 'environment': rec.edi_type_environment.id + } + header = {"accept": "application/json", "Content-Type": "application/json"} + + # Request + if rec.edi_zip_key: + api_url = api_url + "/zip/" + rec.edi_zip_key + else: + api_url = api_url + "/document/" + rec.edi_uuid + + _logger.debug('API URL: %s', api_url) + + response = requests.post(api_url, + json.dumps(requests_data), + headers=header, + params=params).json() + _logger.debug('API Response: %s', response) + + if 'detail' in response: + raise UserError(response['detail']) + if 'message' in response: + if response['message'] == 'Unauthenticated.' or response['message'] == '': + raise UserError(_("Authentication error with the API")) + else: + if 'errors' in response: + raise UserError(response['message'] + '/ errors: ' + str(response['errors'])) + else: + raise UserError(response['message']) + elif 'is_valid' in response: + rec.write_response(response, payload) + if response['is_valid']: + # self.env.user.notify_success(message=_("The validation at DIAN has been successful.")) + _logger.debug("The validation at DIAN has been successful.") + elif 'zip_key' in response or 'uuid' in response: + if response['zip_key'] is not None or response['uuid'] is not None: + if not rec.edi_is_not_test: + # self.env.user.notify_success(message=_("Document sent to DIAN in testing.")) + _logger.debug("Document sent to DIAN in testing.") + else: + temp_message = {rec.edi_status_message, rec.edi_errors_messages, + rec.edi_status_description, rec.edi_status_code} + raise UserError(str(temp_message)) + else: + raise UserError(_('A valid Zip key or UUID was not obtained. Try again.')) + else: + raise UserError(_('The document could not be validated in DIAN.')) + else: + raise UserError(_("No logical response was obtained from the API.")) + else: + raise UserError(_("A zip key or UUID is required to check the status of the document.")) + + except Exception as e: + _logger.debug("Failed to process the request: %s", e) + raise UserError(_("Failed to process the request: %s") % e) + + def refund_sheet(self): + self.ensure_one() + res = super(HrPayslip, self).refund_sheet() + + for payslip in self: + if payslip.credit_note: + raise UserError(_("A adjustment note should not be made to a adjustment note")) + + # Only compatible with one record (one payslip), with ensure_one() + copied_payslips_ids = res['domain'][0][2] + copied_payslip = self.env['hr.payslip'].search([('id', 'in', copied_payslips_ids)])[0] + + copied_payslip.write({ + 'origin_payslip_id': payslip.id, + 'number': _('New'), + }) + + if payslip.edi_payload and not copied_payslip.edi_payload: + payload = copied_payslip.get_json_request() + copied_payslip.write({'edi_payload': json.dumps(payload, indent=2, sort_keys=False)}) + + return res + + # @api.depends('state') + # def _compute_color(self): + # for rec in self: + # switcher = { + # 'draft': 11, + # 'verify': 2, + # 'cancel': 1, + # 'done': 0 + # } + # rec.color = switcher.get(rec.state, 11) diff --git a/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py b/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py new file mode 100644 index 000000000..146443066 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/models/hr_payslip_edi.py @@ -0,0 +1,1031 @@ +# -*- coding: utf-8 -*- +# +# Jorels S.A.S. - Copyright (C) 2019-2023 +# +# This file is part of l10n_co_hr_payroll_enterprise. +# +# This program 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 3 of the License, or +# (at your option) any later version. +# +# This program 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 program. If not, see . +# +# email: info@jorels.com +# + + +import ast +import datetime as dt +import json +import logging +from copy import deepcopy + +import babel +import requests +from odoo import api, fields, models, tools, _ +from odoo.exceptions import UserError + +_logger = logging.getLogger(__name__) + + +class HrPayslipEdi(models.Model): + _name = "hr.payslip.edi" + _description = "Payslip Edi" + + note = fields.Text(string='Internal Note', readonly=True, states={'draft': [('readonly', False)]}) + contract_id = fields.Many2one('hr.contract', string='Contract', readonly=True, + states={'draft': [('readonly', False)]}) + credit_note = fields.Boolean(string='Adjustment note', readonly=True, states={'draft': [('readonly', False)]}, + help="Indicates this edi payslip has a refund of another") + origin_payslip_id = fields.Many2one(comodel_name="hr.payslip.edi", string="Origin Edi payslip", readonly=True, + states={'draft': [('readonly', False)]}, copy=False) + state = fields.Selection([ + ('draft', 'Draft'), + ('verify', 'Waiting'), + ('done', 'Done'), + ('cancel', 'Rejected'), + ], string='Status', index=True, readonly=True, copy=False, default='draft', + help="""* When the payslip is created the status is \'Draft\' + \n* If the payslip is under verification, the status is \'Waiting\'. + \n* If the payslip is confirmed then status is set to \'Done\'. + \n* When user cancel payslip the status is \'Rejected\'.""") + employee_id = fields.Many2one('hr.employee', string='Employee', required=True, readonly=True, + states={'draft': [('readonly', False)]}) + company_id = fields.Many2one('res.company', string='Company', readonly=True, copy=False, + default=lambda self: self.env.company, + states={'draft': [('readonly', False)]}) + number = fields.Char(string='Reference', readonly=True, copy=False, states={'draft': [('readonly', False)]}) + name = fields.Char(string='Edi Payslip Name', compute='_compute_name', store=True) + + # They allow storing synchronous and production modes used when invoicing + edi_sync = fields.Boolean(string="Sync", default=False, copy=False) + edi_is_not_test = fields.Boolean(string="In production", default=False, copy=False) + + # Edi fields + date = fields.Date("Date", required=True, readonly=True, states={'draft': [('readonly', False)]}, + default=fields.Date.context_today, copy=False) + payment_form_id = fields.Many2one(comodel_name="l10n_co_edi_jorels.payment_forms", string="Payment form", + default=1, readonly=True, states={'draft': [('readonly', False)]}, copy=True) + payment_method_id = fields.Many2one(comodel_name="l10n_co_edi_jorels.payment_methods", string="Payment method", + default=1, readonly=True, states={'draft': [('readonly', False)]}, copy=True) + accrued_total_amount = fields.Monetary("Accrued", currency_field='currency_id', readonly=True, + states={'draft': [('readonly', False)]}, copy=True) + deductions_total_amount = fields.Monetary("Deductions", currency_field='currency_id', readonly=True, + states={'draft': [('readonly', False)]}, copy=True) + total_amount = fields.Monetary("Total", currency_field='currency_id', readonly=True, + states={'draft': [('readonly', False)]}, copy=True) + currency_id = fields.Many2one('res.currency', string='Currency', readonly=False, compute='_compute_currency') + worked_days_total = fields.Integer("Worked days", default=0) + + # Edi response fields + edi_is_valid = fields.Boolean("Is valid?", copy=False) + edi_is_restored = fields.Boolean("Is restored?", copy=False) + edi_algorithm = fields.Char("Algorithm", copy=False) + edi_class = fields.Char("Class", copy=False) + edi_number = fields.Char("Number", copy=False) + edi_uuid = fields.Char("UUID", copy=False) + edi_issue_date = fields.Date("Date", copy=False) + edi_expedition_date = fields.Char("Expedition date", copy=False) + edi_zip_key = fields.Char("Zip key", copy=False) + edi_status_code = fields.Char("Status code", copy=False) + edi_status_description = fields.Char("Status description", copy=False) + edi_status_message = fields.Char("Status message", copy=False) + edi_errors_messages = fields.Char("Error messages", copy=False) + edi_xml_name = fields.Char("XML name", copy=False) + edi_zip_name = fields.Char("Zip name", copy=False) + edi_signature = fields.Char("Signature", copy=False) + edi_qr_code = fields.Char("QR code", copy=False) + edi_qr_data = fields.Char("QR data", copy=False) + edi_qr_link = fields.Char("QR link", copy=False) + edi_pdf_download_link = fields.Char("PDF link", copy=False) + edi_xml_base64 = fields.Binary("XML", copy=False) + edi_application_response_base64 = fields.Binary("Application response", copy=False) + edi_attached_document_base64 = fields.Binary("Attached document", copy=False) + edi_pdf_base64 = fields.Binary("PDF", copy=False) + edi_zip_base64 = fields.Binary("Zip", copy=False) + edi_type_environment = fields.Many2one(comodel_name="l10n_co_edi_jorels.type_environments", + string="Type environment", copy=False) + edi_payload = fields.Text("Payload", copy=False) + + edi_payload_html = fields.Html("Html payload", copy=False, compute="_compute_edi_payload_html", store=True) + + payslip_ids = fields.Many2many(comodel_name='hr.payslip', string='Payslips', + relation='hr_payslip_hr_payslip_edi_rel', + readonly=True, states={'draft': [('readonly', False)]}, copy=True) + + # color = fields.Integer(string='Color', required=False, default=None, readonly=True, compute='_compute_color', + # store=True, copy=False) + + month = fields.Selection([ + ('1', 'January'), + ('2', 'February'), + ('3', 'March'), + ('4', 'April'), + ('5', 'May'), + ('6', 'June'), + ('7', 'July'), + ('8', 'August'), + ('9', 'September'), + ('10', 'October'), + ('11', 'November'), + ('12', 'December') + ], string='Month', index=True, copy=False, required=True, readonly=True, states={'draft': [('readonly', False)]}, + default=lambda self: str(fields.Date.context_today(self).month)) + year = fields.Integer(string='Year', index=True, copy=False, required=True, readonly=True, + states={'draft': [('readonly', False)]}, + default=lambda self: fields.Date.context_today(self).year) + + def dian_preview(self): + for rec in self: + if rec.edi_uuid: + return { + 'type': 'ir.actions.act_url', + 'target': 'new', + 'url': 'https://catalogo-vpfe.dian.gov.co/document/searchqr?documentkey=' + rec.edi_uuid, + } + + @api.depends('edi_payload') + def _compute_edi_payload_html(self): + for rec in self: + if rec.edi_payload: + try: + rec.edi_payload_html = rec.payload2html(json.loads(rec.edi_payload), 2) + except json.decoder.JSONDecodeError as e: + rec.edi_payload_html = rec.payload2html(ast.literal_eval(rec.edi_payload), 2) + else: + rec.edi_payload_html = "" + + @api.depends('employee_id', 'month', 'year') + def _compute_name(self): + for rec in self: + if (not rec.employee_id) or (not rec.month) or (not rec.year): + return + + employee = self.employee_id + + date_ym = dt.date(rec.year, int(rec.month), 1) + locale = self.env.context.get('lang') or 'en_US' + rec.name = _('Salary Slip of %s for %s') % ( + employee.name, + tools.ustr(babel.dates.format_date(date=date_ym, format='MMMM-y', locale=locale)) + ) + + def unlink(self): + if any(self.filtered(lambda payslip: payslip.state not in ('draft', 'cancel'))): + raise UserError(_('You cannot delete a Edi payslip which is not draft or cancelled!')) + return super(HrPayslipEdi, self).unlink() + + def action_payslip_draft(self): + for rec in self: + rec.write({'state': 'draft'}) + return True + + def action_payslip_cancel(self): + for rec in self: + if not rec.edi_is_valid: + rec.write({'state': 'cancel'}) + else: + raise UserError(_("You cannot cancel a electronic payroll that has already been validated to the DIAN")) + return True + + def _compute_currency(self): + for rec in self: + rec.currency_id = rec.company_id.currency_id + + def compute_sheet(self): + for rec in self: + number = rec.number or _('New') + + # The date is the sending date + date = fields.Date.context_today(self) + + # Save + rec.write({ + 'number': number, + 'date': date, + }) + + # Payload + payload = rec.get_json_request() + edi_payload = json.dumps(payload, indent=4, sort_keys=False) + + # Save + rec.write({ + 'edi_sync': rec.company_id.edi_payroll_is_not_test, + 'edi_is_not_test': rec.company_id.edi_payroll_is_not_test, + 'edi_payload': edi_payload, + }) + + return True + + @api.model + def join_dicts(self, a, b, date_issue): + if dt.datetime.strptime(a['period']['settlement_start_date'], '%Y-%m-%d') \ + < dt.datetime.strptime(b['period']['settlement_start_date'], '%Y-%m-%d'): + first, last = deepcopy(a), deepcopy(b) + else: + first, last = deepcopy(b), deepcopy(a) + + # Root + self.dict_root_sum(first, last, [ + 'accrued_total', + 'deductions_total', + 'total' + ]) + + self.dict_root_append_lists(first, last, [ + 'notes', + 'payment_dates' + ]) + + # Sequence + if 'sequence' in last: + last.pop('sequence') + + # Period + self.dict_root_merge(first['period'], last['period'], [ + 'admission_date', + 'settlement_start_date' + ]) + last['period']['date_issue'] = date_issue + + # Earn + self.dict_root_sum(first['earn'], last['earn'], [ + 'endowment', + 'sustainment_support', + 'telecommuting', + 'company_withdrawal_bonus', + 'compensation', + 'refund' + ]) + self.dict_sum_2(first, last, 'earn', 'basic', [ + 'worked_days', + 'worker_salary' + ]) + self.dict_sum_2(first, last, 'earn', 'primas', [ + 'quantity', + 'payment', + 'non_salary_payment' + ]) + self.dict_sum_2(first, last, 'earn', 'layoffs', [ + 'payment', + 'interest_payment' + ], ['percentage']) + + self.dict_root_append_dicts(first['earn'], last['earn'], [ + 'vacation', + 'licensings' + ]) + + self.dict_root_append_lists(first['earn'], last['earn'], [ + 'transports', + 'overtimes_surcharges', + 'incapacities', + 'bonuses', + 'assistances', + 'legal_strikes', + 'other_concepts', + 'compensations', + 'vouchers', + 'commissions', + 'third_party_payments', + 'advances' + ]) + + # Deduction + self.dict_sum_1(first, last, 'deduction', [ + 'voluntary_pension', + 'withholding_source', + 'afc', + 'cooperative', + 'tax_lien', + 'complementary_plans', + 'education', + 'refund', + 'debt' + ]) + self.dict_sum_2(first, last, 'deduction', 'health', [ + 'payment' + ], ['percentage']) + self.dict_sum_2(first, last, 'deduction', 'pension_fund', [ + 'payment' + ], ['percentage']) + self.dict_sum_2(first, last, 'deduction', 'pension_security_fund', [ + 'payment', + 'payment_subsistence' + ], ['percentage', 'percentage_subsistence']) + + self.dict_append_lists_1(first, last, 'deduction', [ + 'trade_unions', + 'sanctions', + 'libranzas', + 'third_party_payments', + 'advances', + 'other_deductions' + ]) + + return last + + def get_json_request(self): + for rec in self: + if not rec.number: + raise UserError(_("The payroll must have a consecutive number, 'Reference' field")) + if not rec.contract_id.payroll_period_id: + raise UserError(_("The contract must have the 'Scheduled Pay' field configured")) + if not rec.company_id.name: + raise UserError(_("Your company does not have a name")) + if not rec.company_id.type_document_identification_id: + raise UserError(_("Your company does not have an identification type")) + if not rec.company_id.vat: + raise UserError(_("Your company does not have a document number")) + if not rec.company_id.partner_id.postal_municipality_id: + raise UserError(_("Your company does not have a postal municipality")) + if not rec.company_id.street: + raise UserError(_("Your company does not have an address")) + if not rec.contract_id.type_worker_id: + raise UserError(_("The contract must have the 'Type worker' field configured")) + if not rec.contract_id.subtype_worker_id: + raise UserError(_("The contract must have the 'Subtype worker' field configured")) + if not rec.employee_id.address_home_id.first_name: + raise UserError(_("Employee does not have a first name")) + if not rec.employee_id.address_home_id.surname: + raise UserError(_("Employee does not have a surname")) + if not rec.employee_id.address_home_id.type_document_identification_id: + raise UserError(_("Employee does not have an identification type")) + if rec.employee_id.address_home_id.type_document_identification_id.id == 6: + raise UserError(_("The employee's document type cannot be NIT")) + if not rec.employee_id.address_home_id.vat: + raise UserError(_("Employee does not have an document number")) + if not rec.employee_id.address_home_id.postal_municipality_id: + raise UserError(_("Employee does not have a postal municipality")) + if not rec.employee_id.address_home_id.street: + raise UserError(_("Employee does not have an address.")) + if not rec.contract_id.name: + raise UserError(_("Contract does not have a name")) + if rec.contract_id.wage <= 0: + raise UserError(_("The contract must have the 'Wage' field configured")) + if not rec.contract_id.type_contract_id: + raise UserError(_("The contract must have the 'Type contract' field configured")) + if not rec.contract_id.date_start: + raise UserError(_("The contract must have the 'Start Date' field configured")) + # if not rec.date_from: + # raise UserError(_("The payroll must have a period")) + # if not rec.date_to: + # raise UserError(_("The payroll must have a period")) + if not rec.payment_form_id: + raise UserError(_("The payroll must have a payment form")) + if not rec.payment_method_id: + raise UserError(_("The payroll must have a payment method")) + # if not rec.payment_date: + # raise UserError(_("The payroll must have a payment date")) + if not rec.month: + raise UserError(_("The payroll must have a month")) + if not rec.year: + raise UserError(_("The payroll must have a year")) + + sequence = {} + if rec.number and rec.number not in ('New', _('New')): + sequence_number = ''.join([i for i in rec.number if i.isdigit()]) + sequence_prefix = rec.number.split(sequence_number) + if sequence_prefix: + sequence = { + # "worker_code": "string", + "prefix": sequence_prefix[0], + "number": int(sequence_number) + } + else: + raise UserError(_("The sequence must have a prefix")) + + json_request = {} + + # Others fields + if rec.payslip_ids: + for index, payslip in enumerate(rec.payslip_ids): + if index > 0: + json_request = rec.join_dicts(json_request, json.loads(payslip.edi_payload), + fields.Date.to_string(rec.date)) + else: + json_request = json.loads(payslip.edi_payload) + + # Sequence + if sequence: + json_request['sequence'] = sequence + + # Notes + if rec.note: + notes = [{ + "text": rec.note + }] + json_request['notes'] = notes + + # Save + rec.write({ + 'payment_form_id': json_request['payment']['code'], + 'payment_method_id': json_request['payment']['method_code'], + 'accrued_total_amount': json_request['accrued_total'], + 'deductions_total_amount': json_request['deductions_total'], + 'total_amount': json_request['total'], + 'worked_days_total': json_request['earn']['basic']['worked_days'], + }) + + # Credit note + if rec.credit_note: + if rec.origin_payslip_id: + if rec.origin_payslip_id.edi_is_valid: + json_request['payroll_reference'] = { + 'number': rec.origin_payslip_id.edi_number, + 'uuid': rec.origin_payslip_id.edi_uuid, + 'issue_date': str(rec.origin_payslip_id.edi_issue_date) + } + else: + json_request['payroll_reference'] = { + 'number': rec.origin_payslip_id.number, + 'issue_date': str(rec.origin_payslip_id.date) + } + else: + raise UserError(_("The Origin payslip is required for adjusment notes.")) + + json_request = rec.get_json_delete_request(json_request) + + return json_request + + def write_response(self, response, payload): + for rec in self: + rec.edi_is_valid = response['is_valid'] + rec.edi_is_restored = response['is_restored'] + rec.edi_algorithm = response['algorithm'] + rec.edi_class = response['class'] + rec.edi_number = response['number'] + rec.edi_uuid = response['uuid'] + rec.edi_issue_date = response['issue_date'] + rec.edi_expedition_date = response['expedition_date'] + rec.edi_zip_key = response['zip_key'] + rec.edi_status_code = response['status_code'] + rec.edi_status_description = response['status_description'] + rec.edi_status_message = response['status_message'] + rec.edi_errors_messages = str(response['errors_messages']) + rec.edi_xml_name = response['xml_name'] + rec.edi_zip_name = response['zip_name'] + rec.edi_signature = response['signature'] + rec.edi_qr_code = response['qr_code'] + rec.edi_qr_data = response['qr_data'] + rec.edi_qr_link = response['qr_link'] + rec.edi_pdf_download_link = response['pdf_download_link'] + rec.edi_xml_base64 = response['xml_base64_bytes'] + rec.edi_application_response_base64 = response['application_response_base64_bytes'] + rec.edi_attached_document_base64 = response['attached_document_base64_bytes'] + rec.edi_pdf_base64 = response['pdf_base64_bytes'] + rec.edi_zip_base64 = response['zip_base64_bytes'] + rec.edi_type_environment = response['type_environment_id'] + rec.edi_payload = payload + + @api.model + def get_json_delete_request(self, requests_data): + requests_delete = {} + + if 'sequence' in requests_data: + requests_delete['sequence'] = requests_data['sequence'] + if 'payroll_reference' in requests_data: + requests_delete['payroll_reference'] = requests_data['payroll_reference'] + + requests_delete['sync'] = requests_data['sync'] + requests_delete['information'] = requests_data['information'] + requests_delete['employer'] = requests_data['employer'] + + if 'rounding' in requests_data: + requests_delete['rounding'] = requests_data['rounding'] + if 'provider' in requests_data: + requests_delete['provider'] = requests_data['provider'] + if 'notes' in requests_data: + requests_delete['notes'] = requests_data['notes'] + + return requests_delete + + def validate_dian_generic(self): + for rec in self: + try: + if not rec.company_id.edi_payroll_enable or not rec.company_id.edi_payroll_consolidated_enable: + continue + + requests_data = rec.get_json_request() + + if 'sequence' not in requests_data: + raise UserError(_("The sequence is required.")) + + # Credit note + if rec.credit_note: + type_edi_document = 'payroll_delete' + if 'payroll_reference' not in requests_data or 'uuid' not in requests_data['payroll_reference']: + raise UserError(_("The reference payroll is not valid.")) + else: + type_edi_document = 'payroll' + + # Payload + payload = json.dumps(requests_data, indent=2, sort_keys=False) + + # Software id and pin + if rec.company_id.edi_payroll_id and rec.company_id.edi_payroll_pin: + requests_data['environment'] = { + 'software': rec.company_id.edi_payroll_id, + 'pin': rec.company_id.edi_payroll_pin + } + else: + raise UserError(_("You do not have a software id and pin configured")) + + # API key and URL + if rec.company_id.api_key: + token = rec.company_id.api_key + else: + raise UserError(_("You must configure a token")) + + api_url = self.env['ir.config_parameter'].sudo().get_param('jorels.edipo.api_url', + 'https://edipo.jorels.com') + params = {'token': token} + header = {"accept": "application/json", "Content-Type": "application/json"} + + # Request + api_url = api_url + "/" + type_edi_document + + rec.edi_is_not_test = rec.company_id.edi_payroll_is_not_test + + if not rec.edi_is_not_test: + if rec.company_id.edi_payroll_test_set_id: + params['test_set_id'] = rec.company_id.edi_payroll_test_set_id + else: + raise UserError(_("You have not configured a 'TestSetId'.")) + + _logger.debug('API URL: %s', api_url) + _logger.debug("DIAN Validation Request: %s", json.dumps(requests_data, indent=2, sort_keys=False)) + # raise Warning(json.dumps(requests_data, indent=2, sort_keys=False)) + + response = requests.post(api_url, + json.dumps(requests_data), + headers=header, + params=params).json() + _logger.debug('API Response: %s', response) + + if 'detail' in response: + raise UserError(response['detail']) + if 'message' in response: + if response['message'] == 'Unauthenticated.' or response['message'] == '': + raise UserError(_("Authentication error with the API")) + else: + if 'errors' in response: + raise UserError(response['message'] + '/ errors: ' + str(response['errors'])) + else: + raise UserError(response['message']) + elif 'is_valid' in response: + rec.write_response(response, payload) + if response['is_valid']: + # self.env.user.notify_success(message=_("The validation at DIAN has been successful.")) + _logger.debug("The validation at DIAN has been successful.") + elif 'zip_key' in response: + if response['zip_key'] is not None: + if not rec.edi_is_not_test: + # self.env.user.notify_success(message=_("Document sent to DIAN in habilitation.")) + _logger.debug("Document sent to DIAN in habilitation.") + else: + temp_message = {rec.edi_status_message, rec.edi_errors_messages, + rec.edi_status_description, rec.edi_status_code} + raise UserError(str(temp_message)) + else: + raise UserError(_('A valid Zip key was not obtained. Try again.')) + else: + raise UserError(_('The document could not be validated in DIAN.')) + else: + raise UserError(_("No logical response was obtained from the API.")) + except Exception as e: + _logger.debug("Failed to process the request: %s", e) + raise UserError(_("Failed to process the request: %s") % e) + + def action_payslip_done(self): + for rec in self: + if not rec.number or rec.number in ('New', _('New')): + if rec.credit_note: + rec.number = self.env['ir.sequence'].next_by_code('salary.slip.edi.note') + else: + rec.number = self.env['ir.sequence'].next_by_code('salary.slip.edi') + + if not self.env.context.get('without_compute_sheet'): + rec.compute_sheet() + rec.write({'state': 'done'}) + + if rec.company_id.edi_payroll_enable and rec.company_id.edi_payroll_consolidated_enable: + rec.validate_dian_generic() + + return True + + def status_zip(self): + for rec in self: + try: + if not rec.company_id.edi_payroll_enable or not rec.company_id.edi_payroll_consolidated_enable: + continue + + # This line ensures that the electronic fields of the payroll are updated in Odoo, before the request + payload = json.dumps(rec.get_json_request(), indent=2, sort_keys=False) + + _logger.debug('Payload: %s', payload) + + if rec.edi_zip_key or rec.edi_uuid: + requests_data = {} + _logger.debug('API Requests: %s', requests_data) + + # API key and URL + if rec.company_id.api_key: + token = rec.company_id.api_key + else: + raise UserError(_("You must configure a token")) + + api_url = self.env['ir.config_parameter'].sudo().get_param('jorels.edipo.api_url', + 'https://edipo.jorels.com') + params = { + 'token': token, + 'environment': rec.edi_type_environment.id + } + header = {"accept": "application/json", "Content-Type": "application/json"} + + # Request + if rec.edi_zip_key: + api_url = api_url + "/zip/" + rec.edi_zip_key + else: + api_url = api_url + "/document/" + rec.edi_uuid + + _logger.debug('API URL: %s', api_url) + + response = requests.post(api_url, + json.dumps(requests_data), + headers=header, + params=params).json() + _logger.debug('API Response: %s', response) + + if 'detail' in response: + raise UserError(response['detail']) + if 'message' in response: + if response['message'] == 'Unauthenticated.' or response['message'] == '': + raise UserError(_("Authentication error with the API")) + else: + if 'errors' in response: + raise UserError(response['message'] + '/ errors: ' + str(response['errors'])) + else: + raise UserError(response['message']) + elif 'is_valid' in response: + rec.write_response(response, payload) + if response['is_valid']: + # self.env.user.notify_success(message=_("The validation at DIAN has been successful.")) + _logger.debug("The validation at DIAN has been successful.") + elif 'zip_key' in response or 'uuid' in response: + if response['zip_key'] is not None or response['uuid'] is not None: + if not rec.edi_is_not_test: + # self.env.user.notify_success(message=_("Document sent to DIAN in testing.")) + _logger.debug("Document sent to DIAN in testing.") + else: + temp_message = {rec.edi_status_message, rec.edi_errors_messages, + rec.edi_status_description, rec.edi_status_code} + raise UserError(str(temp_message)) + else: + raise UserError(_('A valid Zip key or UUID was not obtained. Try again.')) + else: + raise UserError(_('The document could not be validated in DIAN.')) + else: + raise UserError(_("No logical response was obtained from the API.")) + else: + raise UserError(_("A zip key or UUID is required to check the status of the document.")) + + except Exception as e: + _logger.debug("Failed to process the request: %s", e) + raise UserError(_("Failed to process the request: %s") % e) + + def refund_sheet(self): + refund_payslip = None + for payslip in self: + if payslip.credit_note: + raise UserError(_("A adjustment note should not be made to a adjustment note")) + + refund_payslip = payslip.copy({'credit_note': True, + 'name': _('Refund: ') + payslip.name, + 'origin_payslip_id': payslip.id, + 'number': _('New'), + }) + refund_payslip.with_context(without_compute_sheet=True).action_payslip_done() + + if payslip.edi_payload and not refund_payslip.edi_payload: + payload = refund_payslip.get_json_request() + refund_payslip.write({'edi_payload': json.dumps(payload, indent=2, sort_keys=False)}) + + formview_ref = self.env.ref('l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_form', False) + treeview_ref = self.env.ref('l10n_co_hr_payroll_enterprise.view_hr_payslip_edi_tree', False) + + if refund_payslip is not None: + domain = "[('id', 'in', %s)]" % refund_payslip.ids + else: + domain = "[(credit_note, '=', True)]" + + return { + 'name': ("Refund Edi Payslip"), + 'view_mode': 'tree, form', + 'view_id': False, + 'view_type': 'form', + 'res_model': 'hr.payslip.edi', + 'type': 'ir.actions.act_window', + 'target': 'current', + 'domain': domain, + 'views': [(treeview_ref and treeview_ref.id or False, 'tree'), + (formview_ref and formview_ref.id or False, 'form')], + 'context': {} + } + + # @api.depends('state') + # def _compute_color(self): + # for rec in self: + # switcher = { + # 'draft': 11, + # 'verify': 2, + # 'cancel': 1, + # 'done': 0 + # } + # rec.color = switcher.get(rec.state, 11) + + # Root + @api.model + def dict_root_sum(self, first, last, fields=[]): + for field in fields: + self.dict_root_sum_field(first, last, field) + + @api.model + def dict_root_merge(self, first, last, fields=[]): + for field in fields: + self.dict_root_merge_field(first, last, field) + + @api.model + def dict_root_sum_field(self, first, last, field): + if field in first: + if field not in last: + last[field] = first[field] + else: + last[field] += first[field] + + @api.model + def dict_root_merge_field(self, first, last, field): + if field in first: + last[field] = first[field] + + @api.model + def dict_root_append_lists(self, first, last, list_fields): + for list_field in list_fields: + if list_field in first: + if list_field not in last: + last[list_field] = [] + for temp_dict in first[list_field]: + last[list_field].append(temp_dict) + + @api.model + def dict_root_append_dicts(self, first, last, dict_fields): + for dict_field in dict_fields: + if dict_field in first: + if dict_field not in last: + last[dict_field] = {} + self.dict_root_append_lists(first[dict_field], last[dict_field], first[dict_field]) + + # Others + @api.model + def dict_append_lists_1(self, first, last, b, c=[]): + if b in first: + if b not in last: + last[b] = {} + self.dict_root_append_lists(first[b], last[b], c) + + @api.model + def dict_sum_1(self, first, last, b, c=[], d=[]): + if b in first: + if b not in last: + last[b] = {} + self.dict_root_sum(first[b], last[b], c) + self.dict_root_merge(first[b], last[b], d) + + @api.model + def dict_sum_2(self, first, last, a, b, c=[], d=[]): + if a in first: + if a not in last: + last[a] = {} + if b in first[a]: + if b not in last[a]: + last[a][b] = {} + self.dict_root_sum(first[a][b], last[a][b], c) + self.dict_root_merge(first[a][b], last[a][b], d) + + @api.model + def dict_merge_field(self, first, last, a, b, c): + if c in first[a][b]: + if c not in last[a][b]: + last[a][b][c] = first[a][b][c] + + @api.model + def dict_sum_field(self, first, last, a, b, c): + if c in first[a][b]: + if c not in last[a][b]: + last[a][b][c] = first[a][b][c] + else: + last[a][b][c] += first[a][b][c] + + @api.model + def get_json2html_field_name(self, field_name, key): + field_names = { + "_sync": _("Sync"), + "_rounding": _("Rounding"), + "_accrued_total": _("Accrued total"), + "_deductions_total": _("Deductions total"), + "_total": _("Total"), + "_environment": _("Environment"), + "_environment_software": _("Software ID"), + "_environment_pin": _("Software pin"), + "_novelty": _("Novelty"), + "uuid": _("UUID"), + "_sequence": _("Sequence"), + "worker_code": _("Worker code"), + "prefix": _("Prefix"), + "number": _("Number"), + "_provider": _("Provider"), + "name": _("Name"), + "surname": _("Surname"), + "second_surname": _("Second surname"), + "first_name": _("First name"), + "other_names": _("Other names"), + "_information": _("Information"), + "payroll_period_code": _("Payroll period"), + "currency_code": _("Currency"), + "trm": _("Trm"), + "_employer": _("Employer"), + "id_code": _("Document type"), + "id_number": _("Document number"), + "country_code": _("Country"), + "municipality_code": _("Municipality"), + "address": _("Address"), + "_employee": _("Employee"), + "type_worker_code": _("Worker type"), + "subtype_worker_code": _("Worker subtype"), + "high_risk_pension": _("High risk pension"), + "integral_salary": _("Integral salary"), + "contract_code": _("Contract type"), + "salary": _("Salary"), + "_period": _("Period"), + "admission_date": _("Admission date"), + "withdrawal_date": _("Withdrawal date"), + "settlement_start_date": _("Settlement start date"), + "settlement_end_date": _("Settlement end date"), + "amount_time": _("Amount time"), + "date_issue": _("Date issue"), + "_payment": _("Payment"), + "_payment_code": _("Payment form"), + "_payment_method_code": _("Payment method"), + "bank": _("Bank"), + "account_type": _("Account type"), + "account_number": _("Account number"), + "_earn": _("Earn"), + "endowment": _("Endowment"), + "sustainment_support": _("Sustainment support"), + "telecommuting": _("Telecommuting"), + "company_withdrawal_bonus": _("Company withdrawal bonus"), + "compensation": _("Compensation"), + "refund": _("Refund"), + "basic": _("Basic"), + "worked_days": _("Worked days"), + "worker_salary": _("Worked salary"), + "vacation": _("Vacation"), + "primas": _("Primas"), + "layoffs": _("Layoffs"), + "licensings": _("Licensings"), + "transports": _("Transports"), + "overtimes_surcharges": _("Overtimes and surcharges"), + "incapacities": _("Incapacities"), + "bonuses": _("Bonuses"), + "assistances": _("Assistances"), + "legal_strikes": _("Legal strikes"), + "other_concepts": _("Other concepts"), + "compensations": _("Compensations"), + "vouchers": _("Vouchers"), + "commissions": _("Commissions"), + "third_party_payments": _("Third party payments"), + "advances": _("Advances"), + "_deduction": _("Deduction"), + "_notes": _("Notes"), + "_payment_dates": _("Payment dates"), + "date": _("Date"), + "start": _("Start"), + "end": _("End"), + "quantity": _("Quantity"), + "payment": _("Payment"), + "non_salary_payment": _("Non salary payment"), + "percentage": _("Percentage"), + "interest_payment": _("Interest payment"), + "assistance": _("Assistance"), + "viatic": _("Viatic"), + "non_salary_viatic": _("Non salary viatic"), + "time_code": _("Overtime and surcharges type"), + "incapacity_code": _("Incapacity type"), + "description": _("Description"), + "ordinary": _("Ordinary"), + "extraordinary": _("Extraordinary"), + "salary_food_payment": _("Salary food payment"), + "non_salary_food_payment": _("Non salary food payment"), + "voluntary_pension": _("Voluntary pension"), + "withholding_source": _("Withholding source"), + "afc": _("Afc"), + "cooperative": _("Cooperative"), + "tax_lien": _("Tax lien"), + "complementary_plans": _("Complementary plans"), + "education": _("Education"), + "debt": _("Debt"), + "percentage_subsistence": _("Percentage subsistence"), + "payment_subsistence": _("Payment subsistence"), + "payment_public": _("Payment public"), + "payment_private": _("Payment private"), + "text": _("Text"), + "other_deductions": _("Other deductions"), + "libranzas": _("Libranzas"), + "sanctions": _("Sanctions"), + "trade_unions": _("Trade unions"), + "_deduction_pension_security_fund": _("Pension security fund"), + "_deduction_pension_fund": _("Pension fund"), + "health": _("Health"), + "_earn_vacation_common": _("Vacation common"), + "_earn_vacation_compensated": _("Vacation compensated"), + "_earn_licensings_licensings_maternity_or_paternity_leaves": _("Maternity or paternity leaves"), + "_earn_licensings_licensings_permit_or_paid_licenses": _("Permit or paid licenses"), + "_earn_licensings_licensings_suspension_or_unpaid_leaves": _("Suspension or unpaid leaves"), + "_payroll_reference": _("Reference"), + "issue_date": _("Issue date"), + } + + if field_name in field_names: + return field_names[field_name] + elif key in field_names: + return field_names[key] + else: + return field_name + + @api.model + def payload2html(self, payload, tab, title=""): + output = "" + output_temp = "" + for key, value in payload.items(): + field_name = title + "_" + key + if type(value) != dict and type(value) != list: + if key == 'sync': + continue + if key[-4:] == 'code': + model_names = { + "payroll_period_code": "l10n_co_edi_jorels.payroll_periods", + "currency_code": "l10n_co_edi_jorels.type_currencies", + "id_code": "l10n_co_edi_jorels.type_document_identifications", + "municipality_code": "l10n_co_edi_jorels.municipalities", + "type_worker_code": "l10n_co_edi_jorels.type_workers", + "subtype_worker_code": "l10n_co_edi_jorels.subtype_workers", + "country_code": "l10n_co_edi_jorels.countries", + "contract_code": "l10n_co_edi_jorels.type_contracts", + "_payment_code": "l10n_co_edi_jorels.payment_forms", + "_payment_method_code": "l10n_co_edi_jorels.payment_methods", + "time_code": "l10n_co_edi_jorels.type_times", + "incapacity_code": "l10n_co_edi_jorels.type_incapacities", + } + try: + if field_name in model_names: + value = self.env[model_names[field_name]].search([('id', '=', value)])[0].name + elif key in model_names: + value = self.env[model_names[key]].search([('id', '=', value)])[0].name + except IndexError as e: + pass + output_temp += "" \ + "" + if output_temp != "
" + \ + str(value) + \ + "
": + output_temp += "


" + output += output_temp + + for key, value in payload.items(): + field_name = title + "_" + key + if type(value) == dict: + if key == 'environment': + continue + output += "" + \ + self.get_json2html_field_name(field_name, key) + "" + output += self.payload2html(value, tab + 1, field_name) + + for key, value in payload.items(): + field_name = title + "_" + key + if type(value) == list: + output += "" + \ + self.get_json2html_field_name(field_name, key) + "" + for i, valor in enumerate(value): + output += "" + str(i + 1) + ". " + "" + output += self.payload2html(valor, tab + 1, field_name) + return output diff --git a/l10n_co_hr_payroll_enterprise/models/hr_payslip_line.py b/l10n_co_hr_payroll_enterprise/models/hr_payslip_line.py new file mode 100644 index 000000000..140bf8875 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/models/hr_payslip_line.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +# +# Jorels S.A.S. - Copyright (C) 2019-2023 +# +# This file is part of l10n_co_hr_payroll_enterprise. +# +# This program 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 3 of the License, or +# (at your option) any later version. +# +# This program 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 program. If not, see . +# +# email: info@jorels.com +# + + +from odoo import fields, models, api +from odoo.addons import decimal_precision as dp + + +class HrPayslipLine(models.Model): + _inherit = 'hr.payslip.line' + + edi_rate = fields.Float(string='Edi Rate (%)', digits=dp.get_precision('Payroll Rate'), + default=100.0, compute="compute_edi_rate", store=True, required=True) + + edi_quantity = fields.Integer(string='Edi Quantity', default=0, compute="compute_edi_quantity", required=True, + store=True) + + def compute_edi_rate(self): + for rec in self: + if rec.salary_rule_id.edi_percent_select == 'default': + return rec.rate + else: + return rec.salary_rule_id.compute_edi_percent(rec.slip_id) + + def compute_edi_quantity(self): + for rec in self: + if rec.salary_rule_id.type_concept == 'earn' and rec.salary_rule_id.edi_quantity_select == 'auto': + worked_days_line = rec.env['hr.payslip.worked_days'].search([ + ('payslip_id', '=', rec.slip_id.id), + ('code', '=', rec.code) + ]) + if rec.salary_rule_id.earn_category in ( + 'vacation_common', + 'vacation_compensated', + 'licensings_maternity_or_paternity_leaves', + 'licensings_permit_or_paid_licenses', + 'licensings_suspension_or_unpaid_leaves', + 'incapacities_common', + 'incapacities_professional', + 'incapacities_working', + 'legal_strikes', + 'primas' + ): + return worked_days_line[0]['number_of_days'] if worked_days_line else 0 + elif rec.salary_rule_id.earn_category in ( + 'daily_overtime', + 'overtime_night_hours', + 'hours_night_surcharge', + 'sunday_holiday_daily_overtime', + 'daily_surcharge_hours_sundays_holidays', + 'sunday_night_overtime_holidays', + 'sunday_holidays_night_surcharge_hours' + ): + return worked_days_line[0]['number_of_hours'] if worked_days_line else 0 + else: + return rec.quantity + else: + return rec.quantity diff --git a/l10n_co_hr_payroll_enterprise/models/hr_rule_input.py b/l10n_co_hr_payroll_enterprise/models/hr_rule_input.py new file mode 100644 index 000000000..4a99306d3 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/models/hr_rule_input.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# +# Jorels S.A.S. - Copyright (C) 2019-2023 +# +# This file is part of l10n_co_hr_payroll_enterprise. +# +# This program 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 3 of the License, or +# (at your option) any later version. +# +# This program 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 program. If not, see . +# +# email: info@jorels.com +# + + +from odoo import fields, models + + +class HrRuleInput(models.Model): + _name = 'hr.rule.input' + _description = 'Salary Rule Input' + + input_type_id = fields.Many2one('hr.payslip.input.type', string='Payslip Input Type', required=True) + + name = fields.Char(related='input_type_id.name', readonly=True) + code = fields.Char(related='input_type_id.code', readonly=True) + input_id = fields.Many2one('hr.salary.rule', string='Salary Rule Input', required=True) diff --git a/l10n_co_hr_payroll_enterprise/models/hr_salary_rule.py b/l10n_co_hr_payroll_enterprise/models/hr_salary_rule.py new file mode 100644 index 000000000..a9ebaf161 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/models/hr_salary_rule.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- +# +# Jorels S.A.S. - Copyright (C) 2019-2023 +# +# This file is part of l10n_co_hr_payroll_enterprise. +# +# This program 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 3 of the License, or +# (at your option) any later version. +# +# This program 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 program. If not, see . +# +# email: info@jorels.com +# + + +from odoo import fields, models, api, _ +from odoo.addons import decimal_precision as dp +from odoo.exceptions import UserError +from odoo.tools.safe_eval import safe_eval + + +class HrSalaryRule(models.Model): + _inherit = 'hr.salary.rule' + + input_ids = fields.One2many('hr.rule.input', 'input_id', string='Inputs', copy=True) + + type_concept = fields.Selection([ + ('earn', 'Earn'), + ('deduction', 'Deduction'), + ('other', 'Other') + ], string="Type concept", default="other", required=True) + + earn_category = fields.Selection([ + ('basic', 'Basic'), + ('vacation_common', 'Vacation common'), + ('vacation_compensated', 'Vacation compensated'), + ('primas', 'Primas'), + ('primas_non_salary', 'Primas non salary'), + ('layoffs', 'Layoffs'), + ('layoffs_interest', 'Layoffs interest'), + ('licensings_maternity_or_paternity_leaves', 'Licensings maternity or paternity leaves'), + ('licensings_permit_or_paid_licenses', 'Licensings permit or paid licenses'), + ('licensings_suspension_or_unpaid_leaves', 'Licensings suspension or unpaid leaves'), + ('endowment', 'Endowment'), + ('sustainment_support', 'Sustainment support'), + ('telecommuting', 'Telecommuting'), + ('company_withdrawal_bonus', 'Company withdrawal bonus'), + ('compensation', 'Compensation'), + ('refund', 'Refund'), + ('transports_assistance', 'Transports assistance'), + ('transports_viatic', 'Transports viatic'), + ('transports_non_salary_viatic', 'Transports non salary viatic'), + ('daily_overtime', 'Daily overtime'), + ('overtime_night_hours', 'Overtime night hours'), + ('hours_night_surcharge', 'Hours night surcharge'), + ('sunday_holiday_daily_overtime', 'Sunday and Holiday daily overtime'), + ('daily_surcharge_hours_sundays_holidays', 'Daily surcharge hours on sundays and holidays'), + ('sunday_night_overtime_holidays', 'Sunday night overtime and holidays'), + ('sunday_holidays_night_surcharge_hours', 'Sunday and holidays night surcharge hours'), + ('incapacities_common', 'Incapacities common'), + ('incapacities_professional', 'Incapacities professional'), + ('incapacities_working', 'Incapacities working'), + ('bonuses', 'Bonuses'), + ('bonuses_non_salary', 'Non salary bonuses'), + ('assistances', 'Assistances'), + ('assistances_non_salary', 'Non salary assistances'), + ('legal_strikes', 'Legal strikes'), + ('other_concepts', 'Other concepts'), + ('other_concepts_non_salary', 'Non salary other concepts'), + ('compensations_ordinary', 'Compensations ordinary'), + ('compensations_extraordinary', 'Compensations extraordinary'), + ('vouchers', 'Vouchers'), + ('vouchers_non_salary', 'Vouchers non salary'), + ('vouchers_salary_food', 'Vouchers salary food'), + ('vouchers_non_salary_food', 'Vouchers non salary food'), + ('commissions', 'Commissions'), + ('third_party_payments', 'Third party payments'), + ('advances', 'Advances') + ], string="Earn category", default="other_concepts", required=True) + + deduction_category = fields.Selection([ + ('health', 'Health'), + ('pension_fund', 'Pension fund'), + ('pension_security_fund', 'Pension security fund'), + ('pension_security_fund_subsistence', 'Pension security fund subsistence'), + ('voluntary_pension', 'Voluntary pension'), + ('withholding_source', 'Withholding source'), + ('afc', 'Afc'), + ('cooperative', 'Cooperative'), + ('tax_lien', 'Tax lien'), + ('complementary_plans', 'Complementary plans'), + ('education', 'Education'), + ('refund', 'Refund'), + ('debt', 'Debt'), + ('trade_unions', 'Trade unions'), + ('sanctions_public', 'Sanctions public'), + ('sanctions_private', 'Sanctions private'), + ('libranzas', 'Libranzas'), + ('third_party_payments', 'Third party payments'), + ('advances', 'Advances'), + ('other_deductions', 'Other deductions') + ], string="Deduction category", default="other_deductions", required=True) + + edi_percent_select = fields.Selection([ + ('default', 'Default'), + ('fix', 'Fixed percent'), + ('code', 'Python Code'), + ], string='Percent Type', index=True, required=True, default='default', + help="The computation method for the rule percent.") + edi_percent_python_compute = fields.Text(string='Python Code', + default=''' + # Available variables: + #---------------------- + # payslip: object containing the payslips + # employee: hr.employee object + # contract: hr.contract object + # inputs: object containing the computed inputs. + + # Note: returned value have to be set in the variable 'percent' + + result = inputs.example * 0.10''') + edi_percent_fix = fields.Float(string='Fixed Percent', digits=dp.get_precision('Payroll'), default=0.0) + + edi_is_detailed = fields.Boolean(string="Edi detailed", default=False) + + edi_quantity_select = fields.Selection([ + ('default', 'Default'), + ('auto', 'Auto') + ], string='Edi quantity', index=True, required=True, default='default', + help="The computation method for rule Edi quantity.") + + def compute_edi_percent(self, payslip): + self.ensure_one() + + class BrowsableObject(object): + def __init__(self, browsable_dict, env): + self.dict = browsable_dict + self.env = env + + def __getattr__(self, attr): + return attr in self.dict and self.dict.__getitem__(attr) or 0.0 + + inputs_dict = {} + for input_line in payslip.input_line_ids: + inputs_dict[input_line.code] = input_line + inputs = BrowsableObject(inputs_dict, self.env) + contract = payslip.contract_id + employee = contract.employee_id + + local_dict = {'payslip': payslip, 'inputs': inputs, 'employee': employee, 'contract': contract, 'result': None} + + if self.edi_percent_select == 'default': + if self.amount_select == 'percentage': + return self.amount_percentage + else: + return 100.0 + elif self.edi_percent_select == 'fix': + return self.edi_percent_fix + else: + try: + safe_eval(self.edi_percent_python_compute, local_dict, mode='exec', nocopy=True) + return float(local_dict['result']) + except Exception as e: + raise UserError( + _('Wrong percent python code defined for salary rule %s (%s). %s') % (self.name, self.code, e)) diff --git a/l10n_co_hr_payroll_enterprise/models/res_company.py b/l10n_co_hr_payroll_enterprise/models/res_company.py new file mode 100644 index 000000000..3bc4b92a6 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/models/res_company.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +# +# Jorels S.A.S. - Copyright (C) 2019-2023 +# +# This file is part of l10n_co_hr_payroll_enterprise. +# +# This program 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 3 of the License, or +# (at your option) any later version. +# +# This program 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 program. If not, see . +# +# email: info@jorels.com +# + + +from odoo import fields, models, api + + +class ResCompany(models.Model): + _inherit = 'res.company' + + smmlv_value = fields.Monetary("SMMLV", currency_field='currency_id', readonly=False) + uvt_value = fields.Monetary("UVT", currency_field='currency_id', readonly=False) + stm_value = fields.Monetary("Monthly transportation allowance", currency_field='currency_id', readonly=False) + + # times + daily_overtime = fields.Float("% Daily overtime", readonly=False, default=25.0) + overtime_night_hours = fields.Float("% Overtime night hours", readonly=False, default=75.0) + hours_night_surcharge = fields.Float("% Hours night surcharge", readonly=False, default=35.0) + sunday_holiday_daily_overtime = fields.Float("% Sunday and Holiday daily overtime", readonly=False, + default=100.0) + daily_surcharge_hours_sundays_holidays = fields.Float("% Daily surcharge hours on sundays and holidays", + readonly=False, default=75.0) + sunday_night_overtime_holidays = fields.Float("% Sunday night overtime and holidays", readonly=False, + default=150.0) + sunday_holidays_night_surcharge_hours = fields.Float("% Sunday and holidays night surcharge hours", + readonly=False, default=110.0) + + # Test + edi_payroll_is_not_test = fields.Boolean(string="Production environment", default=False, readonly=False) + + # Enable/disable electronic payroll for company + edi_payroll_enable = fields.Boolean(string="Enable electronic payroll for this company", default=False, + readonly=False) + + # Test + edi_payroll_test_set_id = fields.Char(string="TestSetId") + + # Software ID and pin + edi_payroll_id = fields.Char(string="Software ID", readonly=False) + edi_payroll_pin = fields.Char(string="Software PIN", readonly=False) + + # Consolidated payroll + edi_payroll_consolidated_enable = fields.Boolean(string="Enable consolidated electronic payroll for this company", + default=False, readonly=False) diff --git a/l10n_co_hr_payroll_enterprise/models/res_config_settings.py b/l10n_co_hr_payroll_enterprise/models/res_config_settings.py new file mode 100644 index 000000000..fb39bf862 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/models/res_config_settings.py @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- +# +# Jorels S.A.S. - Copyright (C) 2019-2023 +# +# This file is part of l10n_co_hr_payroll_enterprise. +# +# This program 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 3 of the License, or +# (at your option) any later version. +# +# This program 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 program. If not, see . +# +# email: info@jorels.com +# + + +from odoo import fields, models, api + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + module_l10n_co_hr_payroll = fields.Boolean(string='Colombian Payroll') + + smmlv_value = fields.Monetary(related="company_id.smmlv_value", string="SMMLV", readonly=False, + currency_field='currency_id') + uvt_value = fields.Monetary(related="company_id.uvt_value", string="UVT", readonly=False, + currency_field='currency_id') + stm_value = fields.Monetary(related="company_id.stm_value", + string="Monthly transportation allowance", readonly=False, + currency_field='currency_id') + + # times + daily_overtime = fields.Float( + related="company_id.daily_overtime", + string="% Daily", + readonly=False + ) + overtime_night_hours = fields.Float( + related="company_id.overtime_night_hours", + string="% Night hours", + readonly=False + ) + hours_night_surcharge = fields.Float( + related="company_id.hours_night_surcharge", + string="% Night hours", + readonly=False + ) + sunday_holiday_daily_overtime = fields.Float( + related="company_id.sunday_holiday_daily_overtime", + string="% Sunday and Holiday daily", + readonly=False + ) + daily_surcharge_hours_sundays_holidays = fields.Float( + related="company_id.daily_surcharge_hours_sundays_holidays", + string="% Daily hours on sundays and holidays", + readonly=False + ) + sunday_night_overtime_holidays = fields.Float( + related="company_id.sunday_night_overtime_holidays", + string="% Sunday night and holidays", + readonly=False + ) + sunday_holidays_night_surcharge_hours = fields.Float( + related="company_id.sunday_holidays_night_surcharge_hours", + string="% Sunday and holidays night hours", + readonly=False + ) + + # Test + edi_payroll_is_not_test = fields.Boolean(related="company_id.edi_payroll_is_not_test", + string="Production environment", default=False, readonly=False) + + # Enable/disable electronic payroll for company + edi_payroll_enable = fields.Boolean(related="company_id.edi_payroll_enable", + string="Enable electronic payroll for this company", default=False, + readonly=False) + + # Test + edi_payroll_test_set_id = fields.Char(related="company_id.edi_payroll_test_set_id", string="TestSetId", + readonly=False) + + # Software ID and pin + edi_payroll_id = fields.Char(related="company_id.edi_payroll_id", string="Software ID", readonly=False) + edi_payroll_pin = fields.Char(related="company_id.edi_payroll_pin", string="Software PIN", readonly=False) + + # Consolidated payroll + edi_payroll_consolidated_enable = fields.Boolean(related="company_id.edi_payroll_consolidated_enable", + string="Enable consolidated electronic payroll for this company", + default=False, readonly=False) + + @api.model + def get_values(self): + res = super(ResConfigSettings, self).get_values() + res['edi_payroll_is_not_test'] = self.env.company.edi_payroll_is_not_test + res['edi_payroll_enable'] = self.env.company.edi_payroll_enable + res['edi_payroll_consolidated_enable'] = self.env.company.edi_payroll_consolidated_enable + return res diff --git a/l10n_co_hr_payroll_enterprise/report/hr_payslip_edi_report.xml b/l10n_co_hr_payroll_enterprise/report/hr_payslip_edi_report.xml new file mode 100644 index 000000000..59366a8e2 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/report/hr_payslip_edi_report.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + Edi payslip + hr.payslip + qweb-pdf + l10n_co_hr_payroll_enterprise.report_hr_payslip_co_template_translated + l10n_co_hr_payroll_enterprise.report_hr_payslip_co_template_translated + (object.name) + (object.state == 'posted') and ((object.name or 'SLIP').replace('/','_')+'.pdf') + + + report + + + + + Edi payslip + hr.payslip.edi + qweb-pdf + l10n_co_hr_payroll_enterprise.report_hr_payslip_edi_co_template_translated + l10n_co_hr_payroll_enterprise.report_hr_payslip_edi_co_template_translated + (object.name) + (object.state == 'posted') and ((object.name or 'SLIP').replace('/','_')+'.pdf') + + + report + + + + + + + + + + + + diff --git a/l10n_co_hr_payroll_enterprise/security/ir.model.access.csv b/l10n_co_hr_payroll_enterprise/security/ir.model.access.csv new file mode 100644 index 000000000..b9a91a075 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/security/ir.model.access.csv @@ -0,0 +1,8 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_l10n_co_hr_payroll_earn_line,access_l10n_co_hr_payroll_earn_line,model_l10n_co_hr_payroll_earn_line,hr_payroll.group_hr_payroll_user,1,0,0,0 +access_l10n_co_hr_payroll_deduction_line,access_l10n_co_hr_payroll_deduction_line,model_l10n_co_hr_payroll_deduction_line,hr_payroll.group_hr_payroll_user,1,0,0,0 +manager_l10n_co_hr_payroll_earn_line,manager_l10n_co_hr_payroll_earn_line,model_l10n_co_hr_payroll_earn_line,hr_payroll.group_hr_payroll_manager,1,1,1,1 +manager_l10n_co_hr_payroll_deduction_line,manager_l10n_co_hr_payroll_deduction_line,model_l10n_co_hr_payroll_deduction_line,hr_payroll.group_hr_payroll_manager,1,1,1,1 +access_hr_payslip_edi,access_hr_payslip_edi,model_hr_payslip_edi,hr_payroll.group_hr_payroll_user,1,0,0,0 +manager_hr_payslip_edi,manager_hr_payslip_edi,model_hr_payslip_edi,hr_payroll.group_hr_payroll_manager,1,1,1,1 +access_hr_rule_input_officer,hr.rule.input.office,model_hr_rule_input,hr_payroll.group_hr_payroll_user,1,1,1,1 \ No newline at end of file diff --git a/l10n_co_hr_payroll_enterprise/static/description/icon.png b/l10n_co_hr_payroll_enterprise/static/description/icon.png new file mode 100644 index 000000000..1afcd48e5 Binary files /dev/null and b/l10n_co_hr_payroll_enterprise/static/description/icon.png differ diff --git a/l10n_co_hr_payroll_enterprise/static/description/index.html b/l10n_co_hr_payroll_enterprise/static/description/index.html new file mode 100644 index 000000000..dba6b1140 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/static/description/index.html @@ -0,0 +1,43 @@ +
+
+

Nómina electrónica libre para Colombia por Jorels + SAS

+

Electronic payroll

+
+
+ +
+
+

l10n_co_hr_payroll_enterprise

+

Under LGPL v3 license

+
+ +

+ This module has been tested with the Odoo and you can use it freely + under the terms of the LGPL license. +

+ +

+ This module has been developed by Jorels Copyright (2019-2023) and you can use it freely and for free, + however if you want some kind of support, training, etc.; write to info@jorels.com + and contact us. +

+
+
+ +

+ Este módulo ha sido probado con Odoo y puede usarlo + libremente bajo los términos de la licencia LGPL. +

+ +

+ Este módulo ha sido desarrollado por Jorels SAS Copyright (2019-2023) y puede utilizarlo de forma + libre y gratuita, sin embargo si desea algún tipo de soporte, capacitación, etc .; escriba + a info@jorels.com y contáctenos. +

+
+
+
+ +
+
diff --git a/l10n_co_hr_payroll_enterprise/static/images/main_screenshot.png b/l10n_co_hr_payroll_enterprise/static/images/main_screenshot.png new file mode 100644 index 000000000..29a839750 Binary files /dev/null and b/l10n_co_hr_payroll_enterprise/static/images/main_screenshot.png differ diff --git a/l10n_co_hr_payroll_enterprise/views/hr_contract_views.xml b/l10n_co_hr_payroll_enterprise/views/hr_contract_views.xml new file mode 100644 index 000000000..25d51ea0a --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/views/hr_contract_views.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + hr.contract.form.l10n_co_hr_payroll.inherit + hr.contract + 20 + + + + + + + + + + + + \ No newline at end of file diff --git a/l10n_co_hr_payroll_enterprise/views/hr_payslip_edi_views.xml b/l10n_co_hr_payroll_enterprise/views/hr_payslip_edi_views.xml new file mode 100644 index 000000000..506e7f62b --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/views/hr_payslip_edi_views.xml @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + hr.payslip.edi.form + hr.payslip.edi + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + hr.payslip.edi.tree + hr.payslip.edi + + + + + + + + + + + + + + + + + + + Edi Payslips + hr.payslip.edi + tree,form + +

+ Create your first Edi Payslip! +

+
+
+ +
diff --git a/l10n_co_hr_payroll_enterprise/views/hr_payslip_views.xml b/l10n_co_hr_payroll_enterprise/views/hr_payslip_views.xml new file mode 100644 index 000000000..68d8a4534 --- /dev/null +++ b/l10n_co_hr_payroll_enterprise/views/hr_payslip_views.xml @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + hr.payslip.form.l10n_co_hr_payroll.inherit + hr.payslip + 20 + + + + + + + +