coati-payroll 0.0.12__py3-none-any.whl → 0.0.13__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of coati-payroll might be problematic. Click here for more details.

Files changed (244) hide show
  1. coati_payroll/__init__.py +7 -17
  2. coati_payroll/app.py +2 -13
  3. coati_payroll/audit_helpers.py +2 -13
  4. coati_payroll/auth.py +2 -13
  5. coati_payroll/cli.py +17 -14
  6. coati_payroll/config.py +2 -13
  7. coati_payroll/demo_data.py +2 -13
  8. coati_payroll/enums.py +2 -13
  9. coati_payroll/forms.py +7 -13
  10. coati_payroll/formula_engine/__init__.py +14 -13
  11. coati_payroll/formula_engine/ast/__init__.py +16 -1
  12. coati_payroll/formula_engine/ast/ast_visitor.py +15 -17
  13. coati_payroll/formula_engine/ast/expression_evaluator.py +12 -14
  14. coati_payroll/formula_engine/ast/safe_operators.py +16 -15
  15. coati_payroll/formula_engine/ast/type_converter.py +17 -17
  16. coati_payroll/formula_engine/data_sources.py +3 -13
  17. coati_payroll/formula_engine/engine.py +12 -13
  18. coati_payroll/formula_engine/exceptions.py +13 -13
  19. coati_payroll/formula_engine/execution/__init__.py +15 -13
  20. coati_payroll/formula_engine/execution/execution_context.py +12 -13
  21. coati_payroll/formula_engine/execution/step_executor.py +12 -14
  22. coati_payroll/formula_engine/execution/variable_store.py +13 -13
  23. coati_payroll/formula_engine/novelty_codes.py +3 -13
  24. coati_payroll/formula_engine/results/__init__.py +14 -13
  25. coati_payroll/formula_engine/results/execution_result.py +47 -35
  26. coati_payroll/formula_engine/steps/__init__.py +14 -14
  27. coati_payroll/formula_engine/steps/assignment_step.py +12 -13
  28. coati_payroll/formula_engine/steps/base_step.py +13 -13
  29. coati_payroll/formula_engine/steps/calculation_step.py +12 -13
  30. coati_payroll/formula_engine/steps/conditional_step.py +12 -13
  31. coati_payroll/formula_engine/steps/step_factory.py +11 -13
  32. coati_payroll/formula_engine/steps/tax_lookup_step.py +12 -13
  33. coati_payroll/formula_engine/tables/__init__.py +14 -13
  34. coati_payroll/formula_engine/tables/bracket_calculator.py +12 -13
  35. coati_payroll/formula_engine/tables/table_lookup.py +12 -14
  36. coati_payroll/formula_engine/tables/tax_table.py +13 -13
  37. coati_payroll/formula_engine/validation/__init__.py +14 -13
  38. coati_payroll/formula_engine/validation/schema_validator.py +12 -14
  39. coati_payroll/formula_engine/validation/security_validator.py +12 -13
  40. coati_payroll/formula_engine/validation/tax_table_validator.py +12 -13
  41. coati_payroll/formula_engine_examples.py +2 -13
  42. coati_payroll/i18n.py +2 -13
  43. coati_payroll/initial_data.py +2 -13
  44. coati_payroll/interes_engine.py +2 -13
  45. coati_payroll/liquidacion_engine/__init__.py +2 -13
  46. coati_payroll/liquidacion_engine/engine.py +2 -13
  47. coati_payroll/locale_config.py +2 -13
  48. coati_payroll/migrations/20260125_032900_initial_migration.py +2 -14
  49. coati_payroll/migrations/__init__.py +2 -13
  50. coati_payroll/model.py +83 -82
  51. coati_payroll/nomina_engine/__init__.py +2 -13
  52. coati_payroll/nomina_engine/calculators/__init__.py +2 -13
  53. coati_payroll/nomina_engine/calculators/benefit_calculator.py +2 -13
  54. coati_payroll/nomina_engine/calculators/concept_calculator.py +2 -1
  55. coati_payroll/nomina_engine/calculators/deduction_calculator.py +2 -13
  56. coati_payroll/nomina_engine/calculators/exchange_rate_calculator.py +2 -13
  57. coati_payroll/nomina_engine/calculators/perception_calculator.py +2 -13
  58. coati_payroll/nomina_engine/calculators/salary_calculator.py +2 -13
  59. coati_payroll/nomina_engine/domain/__init__.py +2 -13
  60. coati_payroll/nomina_engine/domain/calculation_items.py +2 -13
  61. coati_payroll/nomina_engine/domain/employee_calculation.py +2 -13
  62. coati_payroll/nomina_engine/domain/payroll_context.py +2 -13
  63. coati_payroll/nomina_engine/engine.py +2 -13
  64. coati_payroll/nomina_engine/processors/__init__.py +2 -13
  65. coati_payroll/nomina_engine/processors/accounting_processor.py +2 -13
  66. coati_payroll/nomina_engine/processors/accumulation_processor.py +2 -13
  67. coati_payroll/nomina_engine/processors/loan_processor.py +2 -13
  68. coati_payroll/nomina_engine/processors/novelty_processor.py +2 -13
  69. coati_payroll/nomina_engine/processors/vacation_processor.py +2 -13
  70. coati_payroll/nomina_engine/repositories/__init__.py +2 -13
  71. coati_payroll/nomina_engine/repositories/acumulado_repository.py +2 -13
  72. coati_payroll/nomina_engine/repositories/base_repository.py +2 -13
  73. coati_payroll/nomina_engine/repositories/config_repository.py +2 -13
  74. coati_payroll/nomina_engine/repositories/employee_repository.py +2 -13
  75. coati_payroll/nomina_engine/repositories/exchange_rate_repository.py +2 -13
  76. coati_payroll/nomina_engine/repositories/novelty_repository.py +2 -13
  77. coati_payroll/nomina_engine/repositories/planilla_repository.py +2 -13
  78. coati_payroll/nomina_engine/results/__init__.py +2 -13
  79. coati_payroll/nomina_engine/results/error_result.py +2 -13
  80. coati_payroll/nomina_engine/results/payroll_result.py +2 -13
  81. coati_payroll/nomina_engine/results/validation_result.py +2 -13
  82. coati_payroll/nomina_engine/services/__init__.py +2 -13
  83. coati_payroll/nomina_engine/services/accounting_voucher_service.py +2 -13
  84. coati_payroll/nomina_engine/services/employee_processing_service.py +2 -13
  85. coati_payroll/nomina_engine/services/payroll_execution_service.py +2 -13
  86. coati_payroll/nomina_engine/validators/__init__.py +2 -13
  87. coati_payroll/nomina_engine/validators/base_validator.py +2 -13
  88. coati_payroll/nomina_engine/validators/currency_validator.py +2 -13
  89. coati_payroll/nomina_engine/validators/employee_validator.py +2 -13
  90. coati_payroll/nomina_engine/validators/period_validator.py +2 -13
  91. coati_payroll/nomina_engine/validators/planilla_validator.py +2 -13
  92. coati_payroll/queue/__init__.py +2 -13
  93. coati_payroll/queue/driver.py +2 -13
  94. coati_payroll/queue/drivers/__init__.py +2 -13
  95. coati_payroll/queue/drivers/dramatiq_driver.py +9 -16
  96. coati_payroll/queue/drivers/huey_driver.py +2 -13
  97. coati_payroll/queue/drivers/noop_driver.py +2 -13
  98. coati_payroll/queue/selector.py +2 -13
  99. coati_payroll/queue/tasks.py +13 -20
  100. coati_payroll/rate_limiting.py +2 -13
  101. coati_payroll/rbac.py +12 -19
  102. coati_payroll/report_engine.py +2 -13
  103. coati_payroll/report_export.py +2 -13
  104. coati_payroll/schema_validator.py +2 -13
  105. coati_payroll/security.py +2 -13
  106. coati_payroll/static/schema_editor.js +862 -0
  107. coati_payroll/static/styles.css +5 -0
  108. coati_payroll/system_reports.py +2 -13
  109. coati_payroll/templates/auth/login.html +5 -0
  110. coati_payroll/templates/base.html +5 -1
  111. coati_payroll/templates/index.html +5 -0
  112. coati_payroll/templates/macros.html +5 -0
  113. coati_payroll/templates/modules/calculation_rule/form.html +5 -0
  114. coati_payroll/templates/modules/calculation_rule/index.html +5 -0
  115. coati_payroll/templates/modules/calculation_rule/schema_editor.html +292 -974
  116. coati_payroll/templates/modules/carga_inicial_prestacion/form.html +5 -0
  117. coati_payroll/templates/modules/carga_inicial_prestacion/index.html +5 -0
  118. coati_payroll/templates/modules/carga_inicial_prestacion/reporte.html +5 -0
  119. coati_payroll/templates/modules/config_calculos/index.html +5 -0
  120. coati_payroll/templates/modules/configuracion/index.html +24 -27
  121. coati_payroll/templates/modules/currency/form.html +5 -0
  122. coati_payroll/templates/modules/currency/index.html +5 -0
  123. coati_payroll/templates/modules/custom_field/form.html +5 -0
  124. coati_payroll/templates/modules/custom_field/index.html +5 -0
  125. coati_payroll/templates/modules/deduccion/form.html +5 -0
  126. coati_payroll/templates/modules/deduccion/index.html +5 -0
  127. coati_payroll/templates/modules/employee/form.html +5 -0
  128. coati_payroll/templates/modules/employee/index.html +5 -0
  129. coati_payroll/templates/modules/empresa/form.html +5 -0
  130. coati_payroll/templates/modules/empresa/index.html +5 -0
  131. coati_payroll/templates/modules/exchange_rate/form.html +5 -0
  132. coati_payroll/templates/modules/exchange_rate/import.html +5 -0
  133. coati_payroll/templates/modules/exchange_rate/index.html +5 -0
  134. coati_payroll/templates/modules/liquidacion/index.html +5 -0
  135. coati_payroll/templates/modules/liquidacion/nueva.html +5 -0
  136. coati_payroll/templates/modules/liquidacion/ver.html +5 -0
  137. coati_payroll/templates/modules/payroll_concepts/audit_log.html +5 -0
  138. coati_payroll/templates/modules/percepcion/form.html +5 -0
  139. coati_payroll/templates/modules/percepcion/index.html +5 -0
  140. coati_payroll/templates/modules/planilla/config.html +5 -0
  141. coati_payroll/templates/modules/planilla/config_deducciones.html +5 -0
  142. coati_payroll/templates/modules/planilla/config_empleados.html +5 -0
  143. coati_payroll/templates/modules/planilla/config_percepciones.html +5 -0
  144. coati_payroll/templates/modules/planilla/config_prestaciones.html +5 -0
  145. coati_payroll/templates/modules/planilla/config_reglas.html +5 -0
  146. coati_payroll/templates/modules/planilla/ejecutar_nomina.html +5 -0
  147. coati_payroll/templates/modules/planilla/form.html +5 -0
  148. coati_payroll/templates/modules/planilla/index.html +5 -0
  149. coati_payroll/templates/modules/planilla/listar_nominas.html +5 -0
  150. coati_payroll/templates/modules/planilla/log_nomina.html +5 -0
  151. coati_payroll/templates/modules/planilla/novedades/form.html +5 -0
  152. coati_payroll/templates/modules/planilla/novedades/index.html +5 -0
  153. coati_payroll/templates/modules/planilla/ver_nomina.html +5 -0
  154. coati_payroll/templates/modules/planilla/ver_nomina_empleado.html +5 -0
  155. coati_payroll/templates/modules/plugins/index.html +5 -0
  156. coati_payroll/templates/modules/prestacion/form.html +5 -0
  157. coati_payroll/templates/modules/prestacion/index.html +5 -0
  158. coati_payroll/templates/modules/prestacion_management/dashboard.html +5 -0
  159. coati_payroll/templates/modules/prestacion_management/initial_balance_bulk.html +5 -0
  160. coati_payroll/templates/modules/prestamo/approve.html +5 -0
  161. coati_payroll/templates/modules/prestamo/condonacion.html +5 -0
  162. coati_payroll/templates/modules/prestamo/detail.html +5 -0
  163. coati_payroll/templates/modules/prestamo/form.html +5 -0
  164. coati_payroll/templates/modules/prestamo/index.html +5 -0
  165. coati_payroll/templates/modules/prestamo/pago_extraordinario.html +5 -0
  166. coati_payroll/templates/modules/prestamo/tabla_pago_pdf.html +5 -0
  167. coati_payroll/templates/modules/report/admin_index.html +5 -0
  168. coati_payroll/templates/modules/report/detail.html +5 -0
  169. coati_payroll/templates/modules/report/execute.html +5 -0
  170. coati_payroll/templates/modules/report/index.html +5 -0
  171. coati_payroll/templates/modules/report/permissions.html +5 -0
  172. coati_payroll/templates/modules/settings/index.html +5 -0
  173. coati_payroll/templates/modules/shared/concept_form.html +19 -12
  174. coati_payroll/templates/modules/shared/concept_index.html +39 -27
  175. coati_payroll/templates/modules/tipo_planilla/form.html +5 -0
  176. coati_payroll/templates/modules/tipo_planilla/index.html +5 -0
  177. coati_payroll/templates/modules/user/form.html +5 -0
  178. coati_payroll/templates/modules/user/index.html +5 -0
  179. coati_payroll/templates/modules/user/profile.html +5 -0
  180. coati_payroll/templates/modules/vacation/account_detail.html +5 -0
  181. coati_payroll/templates/modules/vacation/account_form.html +5 -0
  182. coati_payroll/templates/modules/vacation/account_index.html +5 -0
  183. coati_payroll/templates/modules/vacation/dashboard.html +5 -0
  184. coati_payroll/templates/modules/vacation/initial_balance_bulk.html +5 -0
  185. coati_payroll/templates/modules/vacation/initial_balance_form.html +5 -0
  186. coati_payroll/templates/modules/vacation/leave_request_detail.html +5 -0
  187. coati_payroll/templates/modules/vacation/leave_request_form.html +5 -0
  188. coati_payroll/templates/modules/vacation/leave_request_index.html +5 -0
  189. coati_payroll/templates/modules/vacation/policy_detail.html +5 -0
  190. coati_payroll/templates/modules/vacation/policy_form.html +5 -0
  191. coati_payroll/templates/modules/vacation/policy_index.html +5 -0
  192. coati_payroll/templates/modules/vacation/register_taken_form.html +5 -0
  193. coati_payroll/translations/en/LC_MESSAGES/messages.mo +0 -0
  194. coati_payroll/translations/en/LC_MESSAGES/messages.po +2963 -3561
  195. coati_payroll/vacation_service.py +2 -13
  196. coati_payroll/version.py +3 -14
  197. coati_payroll/vistas/__init__.py +2 -13
  198. coati_payroll/vistas/calculation_rule.py +14 -24
  199. coati_payroll/vistas/carga_inicial_prestacion.py +2 -13
  200. coati_payroll/vistas/config_calculos.py +2 -13
  201. coati_payroll/vistas/configuracion.py +29 -39
  202. coati_payroll/vistas/constants.py +2 -13
  203. coati_payroll/vistas/currency.py +2 -13
  204. coati_payroll/vistas/custom_field.py +2 -13
  205. coati_payroll/vistas/employee.py +2 -13
  206. coati_payroll/vistas/empresa.py +2 -13
  207. coati_payroll/vistas/exchange_rate.py +2 -13
  208. coati_payroll/vistas/liquidacion.py +2 -13
  209. coati_payroll/vistas/payroll_concepts.py +2 -13
  210. coati_payroll/vistas/planilla/__init__.py +2 -13
  211. coati_payroll/vistas/planilla/association_routes.py +8 -17
  212. coati_payroll/vistas/planilla/config_routes.py +2 -13
  213. coati_payroll/vistas/planilla/export_routes.py +28 -35
  214. coati_payroll/vistas/planilla/helpers/__init__.py +2 -13
  215. coati_payroll/vistas/planilla/helpers/association_helpers.py +2 -13
  216. coati_payroll/vistas/planilla/helpers/excel_helpers.py +2 -13
  217. coati_payroll/vistas/planilla/helpers/form_helpers.py +2 -13
  218. coati_payroll/vistas/planilla/nomina_routes.py +2 -13
  219. coati_payroll/vistas/planilla/novedad_routes.py +2 -13
  220. coati_payroll/vistas/planilla/routes.py +2 -13
  221. coati_payroll/vistas/planilla/services/__init__.py +2 -13
  222. coati_payroll/vistas/planilla/services/export_service.py +4 -15
  223. coati_payroll/vistas/planilla/services/nomina_service.py +2 -13
  224. coati_payroll/vistas/planilla/services/novedad_service.py +3 -16
  225. coati_payroll/vistas/planilla/services/planilla_service.py +2 -13
  226. coati_payroll/vistas/planilla/validators/__init__.py +2 -13
  227. coati_payroll/vistas/planilla/validators/planilla_validators.py +2 -13
  228. coati_payroll/vistas/prestacion.py +2 -13
  229. coati_payroll/vistas/prestamo.py +2 -13
  230. coati_payroll/vistas/report.py +2 -13
  231. coati_payroll/vistas/settings.py +2 -13
  232. coati_payroll/vistas/tipo_planilla.py +2 -13
  233. coati_payroll/vistas/user.py +2 -13
  234. coati_payroll/vistas/vacation.py +15 -13
  235. coati_payroll/wsgi_server.py +37 -0
  236. {coati_payroll-0.0.12.dist-info → coati_payroll-0.0.13.dist-info}/METADATA +11 -4
  237. coati_payroll-0.0.13.dist-info/RECORD +248 -0
  238. coati_payroll/translations/es/LC_MESSAGES/messages.mo +0 -0
  239. coati_payroll/translations/es/LC_MESSAGES/messages.po +0 -7374
  240. coati_payroll-0.0.12.dist-info/RECORD +0 -248
  241. {coati_payroll-0.0.12.dist-info → coati_payroll-0.0.13.dist-info}/LICENSE +0 -0
  242. {coati_payroll-0.0.12.dist-info → coati_payroll-0.0.13.dist-info}/WHEEL +0 -0
  243. {coati_payroll-0.0.12.dist-info → coati_payroll-0.0.13.dist-info}/entry_points.txt +0 -0
  244. {coati_payroll-0.0.12.dist-info → coati_payroll-0.0.13.dist-info}/top_level.txt +0 -0
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Validator for payroll period."""
15
4
 
16
5
  from __future__ import annotations
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Validator for Planilla."""
15
4
 
16
5
  from __future__ import annotations
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Queue module for background job processing.
15
4
 
16
5
  This module provides a unified interface for background job processing
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Abstract base class for queue drivers."""
15
4
 
16
5
  from __future__ import annotations
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Queue driver implementations."""
15
4
 
16
5
  from __future__ import annotations
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Dramatiq driver for high-performance queue processing with Redis."""
15
4
 
16
5
  from __future__ import annotations
@@ -20,6 +9,10 @@ from typing import Any, Callable
20
9
  from coati_payroll.log import log
21
10
  from coati_payroll.queue.driver import QueueDriver
22
11
 
12
+ # Error messages
13
+ ERROR_DRAMATIQ_NOT_AVAILABLE = "Dramatiq driver not available"
14
+ ERROR_HUEY_NOT_AVAILABLE = "Huey driver not available"
15
+
23
16
 
24
17
  class DramatiqDriver(QueueDriver):
25
18
  """Queue driver using Dramatiq with Redis backend.
@@ -179,7 +172,7 @@ class DramatiqDriver(QueueDriver):
179
172
  Dictionary with queue statistics
180
173
  """
181
174
  if not self._available or not self._broker:
182
- return {"error": "Dramatiq driver not available"}
175
+ return {"error": ERROR_DRAMATIQ_NOT_AVAILABLE}
183
176
 
184
177
  try:
185
178
  import redis
@@ -224,7 +217,7 @@ class DramatiqDriver(QueueDriver):
224
217
  Dictionary with task status (limited in Dramatiq without results backend)
225
218
  """
226
219
  if not self._available:
227
- return {"status": "error", "error": "Dramatiq driver not available"}
220
+ return {"status": "error", "error": ERROR_DRAMATIQ_NOT_AVAILABLE}
228
221
 
229
222
  try:
230
223
  # Dramatiq messages don't have built-in result tracking
@@ -251,7 +244,7 @@ class DramatiqDriver(QueueDriver):
251
244
  Dictionary with aggregated status (limited without Results backend)
252
245
  """
253
246
  if not self._available:
254
- return {"error": "Dramatiq driver not available"}
247
+ return {"error": ERROR_DRAMATIQ_NOT_AVAILABLE}
255
248
 
256
249
  total = len(task_ids)
257
250
 
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Huey driver for filesystem-based queue processing (fallback mode)."""
15
4
 
16
5
  from __future__ import annotations
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
 
15
4
  """No-op queue driver for test environments.
16
5
 
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Automatic queue driver selection based on environment."""
15
4
 
16
5
  from __future__ import annotations
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Background tasks for payroll processing.
15
4
 
16
5
  This module defines tasks that can be executed in the background:
@@ -46,6 +35,10 @@ from coati_payroll.model import (
46
35
  from coati_payroll.nomina_engine import NominaEngine
47
36
  from coati_payroll.queue import get_queue_driver
48
37
 
38
+ # Error messages
39
+ ERROR_PLANILLA_NOT_FOUND = "Planilla not found"
40
+ ERROR_NO_ACTIVE_EMPLOYEES = "No active employees found"
41
+
49
42
  # Get the queue driver
50
43
  queue = get_queue_driver()
51
44
 
@@ -169,7 +162,7 @@ def retry_failed_nomina(nomina_id: str, usuario: str | None = None) -> dict[str,
169
162
  if not planilla:
170
163
  return {
171
164
  "success": False,
172
- "error": "Planilla not found",
165
+ "error": ERROR_PLANILLA_NOT_FOUND,
173
166
  }
174
167
 
175
168
  # Reset nomina state for retry
@@ -325,7 +318,7 @@ def calculate_employee_payroll(
325
318
  return {
326
319
  "empleado_id": empleado_id,
327
320
  "success": False,
328
- "error": "Planilla not found",
321
+ "error": ERROR_PLANILLA_NOT_FOUND,
329
322
  }
330
323
 
331
324
  # Initialize engine for single employee
@@ -414,7 +407,7 @@ def process_payroll_parallel(
414
407
  if not empleados:
415
408
  return {
416
409
  "success": False,
417
- "error": "No active employees found",
410
+ "error": ERROR_NO_ACTIVE_EMPLOYEES,
418
411
  }
419
412
 
420
413
  # Create nomina record first
@@ -518,11 +511,11 @@ def process_large_payroll(
518
511
  if not planilla:
519
512
  log.error(f"Planilla {planilla_id} not found")
520
513
  nomina.estado = NominaEstado.ERROR
521
- nomina.errores_calculo = {"error": "Planilla not found"}
514
+ nomina.errores_calculo = {"error": ERROR_PLANILLA_NOT_FOUND}
522
515
  db.session.commit()
523
516
  return {
524
517
  "success": False,
525
- "error": "Planilla not found",
518
+ "error": ERROR_PLANILLA_NOT_FOUND,
526
519
  }
527
520
 
528
521
  # Get all active employees
@@ -531,11 +524,11 @@ def process_large_payroll(
531
524
  if not empleados:
532
525
  log.warning(f"No active employees found for planilla {planilla_id}")
533
526
  nomina.estado = NominaEstado.ERROR
534
- nomina.errores_calculo = {"error": "No active employees found"}
527
+ nomina.errores_calculo = {"error": ERROR_NO_ACTIVE_EMPLOYEES}
535
528
  db.session.commit()
536
529
  return {
537
530
  "success": False,
538
- "error": "No active employees found",
531
+ "error": ERROR_NO_ACTIVE_EMPLOYEES,
539
532
  }
540
533
 
541
534
  # Initialize progress tracking
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Rate limiting configuration for the application.
15
4
 
16
5
  This module configures rate limiting to protect against brute force attacks
coati_payroll/rbac.py CHANGED
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Role-Based Access Control (RBAC) utilities.
15
4
 
16
5
  This module provides decorators and utilities for implementing role-based
@@ -41,6 +30,10 @@ from flask_login import current_user
41
30
  from coati_payroll.enums import TipoUsuario
42
31
  from coati_payroll.i18n import _
43
32
 
33
+ # Constants
34
+ MESSAGE_LOGIN_REQUIRED = "Favor iniciar sesión para acceder al sistema."
35
+ ROUTE_AUTH_LOGIN = "auth.login"
36
+
44
37
 
45
38
  def require_role(*allowed_roles: str):
46
39
  """Decorator to restrict access to specific user roles.
@@ -65,8 +58,8 @@ def require_role(*allowed_roles: str):
65
58
  @wraps(f)
66
59
  def decorated_function(*args, **kwargs):
67
60
  if not current_user.is_authenticated:
68
- flash(_("Favor iniciar sesión para acceder al sistema."), "warning")
69
- return redirect(url_for("auth.login"))
61
+ flash(_(MESSAGE_LOGIN_REQUIRED), "warning")
62
+ return redirect(url_for(ROUTE_AUTH_LOGIN))
70
63
 
71
64
  # Check if user has required role
72
65
  if current_user.tipo not in allowed_roles:
@@ -99,8 +92,8 @@ def require_read_access():
99
92
  @wraps(f)
100
93
  def decorated_function(*args, **kwargs):
101
94
  if not current_user.is_authenticated:
102
- flash(_("Favor iniciar sesión para acceder al sistema."), "warning")
103
- return redirect(url_for("auth.login"))
95
+ flash(_(MESSAGE_LOGIN_REQUIRED), "warning")
96
+ return redirect(url_for(ROUTE_AUTH_LOGIN))
104
97
 
105
98
  # All authenticated users can read
106
99
  return f(*args, **kwargs)
@@ -132,8 +125,8 @@ def require_write_access():
132
125
  @wraps(f)
133
126
  def decorated_function(*args, **kwargs):
134
127
  if not current_user.is_authenticated:
135
- flash(_("Favor iniciar sesión para acceder al sistema."), "warning")
136
- return redirect(url_for("auth.login"))
128
+ flash(_(MESSAGE_LOGIN_REQUIRED), "warning")
129
+ return redirect(url_for(ROUTE_AUTH_LOGIN))
137
130
 
138
131
  # Only admin and hhrr can write
139
132
  if current_user.tipo not in [TipoUsuario.ADMIN, TipoUsuario.HHRR]:
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Report execution engine for system and custom reports.
15
4
 
16
5
  This module provides the core functionality for executing reports:
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Report export functionality for Excel format.
15
4
 
16
5
  Provides utilities to export report results to Excel files with proper
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Schema validation for formula engine calculation rules.
15
4
 
16
5
  This module provides validation functions for JSON schemas used by the
coati_payroll/security.py CHANGED
@@ -1,16 +1,5 @@
1
- # Copyright 2025 BMO Soluciones, S.A.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 - 2026 BMO Soluciones, S.A.
14
3
  """Security module - HTTP Security Headers and Security Utilities.
15
4
 
16
5
  This module implements security best practices for Flask applications,