coati-payroll 0.0.9__tar.gz → 0.0.10__tar.gz

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 (262) hide show
  1. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/PKG-INFO +4 -2
  2. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/__init__.py +26 -0
  3. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/cli.py +90 -21
  4. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/config.py +3 -0
  5. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/initial_data.py +0 -1
  6. coati_payroll-0.0.10/coati_payroll/migrations/20260125_032900_initial_migration.py +55 -0
  7. coati_payroll-0.0.10/coati_payroll/migrations/__init__.py +14 -0
  8. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/plugin_manager.py +0 -1
  9. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/queue/selector.py +0 -1
  10. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/queue/tasks.py +0 -1
  11. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/report_engine.py +0 -1
  12. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/system_reports.py +0 -1
  13. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/version.py +1 -1
  14. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/config_calculos.py +0 -1
  15. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/liquidacion.py +0 -1
  16. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/plugins.py +0 -1
  17. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll.egg-info/PKG-INFO +4 -2
  18. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll.egg-info/SOURCES.txt +3 -0
  19. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll.egg-info/requires.txt +3 -1
  20. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/requirements.txt +3 -1
  21. coati_payroll-0.0.10/tests/test_alembic_migrations.py +221 -0
  22. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/LICENSE +0 -0
  23. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/README.md +0 -0
  24. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/app.py +0 -0
  25. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/audit_helpers.py +0 -0
  26. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/auth.py +0 -0
  27. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/demo_data.py +0 -0
  28. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/enums.py +0 -0
  29. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/forms.py +0 -0
  30. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/__init__.py +0 -0
  31. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/ast/__init__.py +0 -0
  32. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/ast/ast_visitor.py +0 -0
  33. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/ast/expression_evaluator.py +0 -0
  34. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/ast/safe_operators.py +0 -0
  35. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/ast/type_converter.py +0 -0
  36. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/data_sources.py +0 -0
  37. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/engine.py +0 -0
  38. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/exceptions.py +0 -0
  39. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/execution/__init__.py +0 -0
  40. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/execution/execution_context.py +0 -0
  41. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/execution/step_executor.py +0 -0
  42. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/execution/variable_store.py +0 -0
  43. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/novelty_codes.py +0 -0
  44. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/results/__init__.py +0 -0
  45. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/results/execution_result.py +0 -0
  46. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/steps/__init__.py +0 -0
  47. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/steps/assignment_step.py +0 -0
  48. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/steps/base_step.py +0 -0
  49. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/steps/calculation_step.py +0 -0
  50. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/steps/conditional_step.py +0 -0
  51. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/steps/step_factory.py +0 -0
  52. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/steps/tax_lookup_step.py +0 -0
  53. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/tables/__init__.py +0 -0
  54. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/tables/bracket_calculator.py +0 -0
  55. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/tables/table_lookup.py +0 -0
  56. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/tables/tax_table.py +0 -0
  57. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/validation/__init__.py +0 -0
  58. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/validation/schema_validator.py +0 -0
  59. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/validation/security_validator.py +0 -0
  60. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine/validation/tax_table_validator.py +0 -0
  61. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/formula_engine_examples.py +0 -0
  62. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/i18n.py +0 -0
  63. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/interes_engine.py +0 -0
  64. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/liquidacion_engine/__init__.py +0 -0
  65. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/liquidacion_engine/engine.py +0 -0
  66. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/locale_config.py +0 -0
  67. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/log.py +0 -0
  68. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/model.py +0 -0
  69. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/__init__.py +0 -0
  70. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/calculators/__init__.py +0 -0
  71. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/calculators/benefit_calculator.py +0 -0
  72. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/calculators/concept_calculator.py +0 -0
  73. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/calculators/deduction_calculator.py +0 -0
  74. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/calculators/exchange_rate_calculator.py +0 -0
  75. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/calculators/perception_calculator.py +0 -0
  76. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/calculators/salary_calculator.py +0 -0
  77. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/domain/__init__.py +0 -0
  78. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/domain/calculation_items.py +0 -0
  79. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/domain/employee_calculation.py +0 -0
  80. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/domain/payroll_context.py +0 -0
  81. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/engine.py +0 -0
  82. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/processors/__init__.py +0 -0
  83. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/processors/accounting_processor.py +0 -0
  84. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/processors/accumulation_processor.py +0 -0
  85. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/processors/loan_processor.py +0 -0
  86. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/processors/novelty_processor.py +0 -0
  87. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/processors/vacation_processor.py +0 -0
  88. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/repositories/__init__.py +0 -0
  89. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/repositories/acumulado_repository.py +0 -0
  90. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/repositories/base_repository.py +0 -0
  91. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/repositories/config_repository.py +0 -0
  92. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/repositories/employee_repository.py +0 -0
  93. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/repositories/exchange_rate_repository.py +0 -0
  94. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/repositories/novelty_repository.py +0 -0
  95. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/repositories/planilla_repository.py +0 -0
  96. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/results/__init__.py +0 -0
  97. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/results/error_result.py +0 -0
  98. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/results/payroll_result.py +0 -0
  99. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/results/validation_result.py +0 -0
  100. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/services/__init__.py +0 -0
  101. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/services/accounting_voucher_service.py +0 -0
  102. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/services/employee_processing_service.py +0 -0
  103. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/services/payroll_execution_service.py +0 -0
  104. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/services/snapshot_service.py +0 -0
  105. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/validators/__init__.py +0 -0
  106. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/validators/base_validator.py +0 -0
  107. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/validators/currency_validator.py +0 -0
  108. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/validators/employee_validator.py +0 -0
  109. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/validators/period_validator.py +0 -0
  110. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/nomina_engine/validators/planilla_validator.py +0 -0
  111. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/queue/__init__.py +0 -0
  112. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/queue/driver.py +0 -0
  113. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/queue/drivers/__init__.py +0 -0
  114. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/queue/drivers/dramatiq_driver.py +0 -0
  115. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/queue/drivers/huey_driver.py +0 -0
  116. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/queue/drivers/noop_driver.py +0 -0
  117. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/rate_limiting.py +0 -0
  118. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/rbac.py +0 -0
  119. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/report_export.py +0 -0
  120. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/schema_validator.py +0 -0
  121. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/security.py +0 -0
  122. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/static/logo/Icono-small.png +0 -0
  123. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/static/logo/Icono.png +0 -0
  124. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/static/logo/Icono.svg +0 -0
  125. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/static/styles.css +0 -0
  126. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/auth/login.html +0 -0
  127. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/base.html +0 -0
  128. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/index.html +0 -0
  129. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/macros.html +0 -0
  130. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/calculation_rule/form.html +0 -0
  131. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/calculation_rule/index.html +0 -0
  132. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/calculation_rule/schema_editor.html +0 -0
  133. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/carga_inicial_prestacion/form.html +0 -0
  134. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/carga_inicial_prestacion/index.html +0 -0
  135. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/carga_inicial_prestacion/reporte.html +0 -0
  136. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/config_calculos/index.html +0 -0
  137. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/configuracion/index.html +0 -0
  138. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/currency/form.html +0 -0
  139. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/currency/index.html +0 -0
  140. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/custom_field/form.html +0 -0
  141. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/custom_field/index.html +0 -0
  142. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/deduccion/form.html +0 -0
  143. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/deduccion/index.html +0 -0
  144. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/employee/form.html +0 -0
  145. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/employee/index.html +0 -0
  146. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/empresa/form.html +0 -0
  147. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/empresa/index.html +0 -0
  148. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/exchange_rate/form.html +0 -0
  149. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/exchange_rate/import.html +0 -0
  150. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/exchange_rate/index.html +0 -0
  151. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/liquidacion/index.html +0 -0
  152. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/liquidacion/nueva.html +0 -0
  153. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/liquidacion/ver.html +0 -0
  154. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/payroll_concepts/audit_log.html +0 -0
  155. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/percepcion/form.html +0 -0
  156. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/percepcion/index.html +0 -0
  157. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/config.html +0 -0
  158. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/config_deducciones.html +0 -0
  159. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/config_empleados.html +0 -0
  160. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/config_percepciones.html +0 -0
  161. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/config_prestaciones.html +0 -0
  162. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/config_reglas.html +0 -0
  163. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/ejecutar_nomina.html +0 -0
  164. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/form.html +0 -0
  165. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/index.html +0 -0
  166. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/listar_nominas.html +0 -0
  167. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/log_nomina.html +0 -0
  168. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/novedades/form.html +0 -0
  169. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/novedades/index.html +0 -0
  170. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/ver_nomina.html +0 -0
  171. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/planilla/ver_nomina_empleado.html +0 -0
  172. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/plugins/index.html +0 -0
  173. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/prestacion/form.html +0 -0
  174. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/prestacion/index.html +0 -0
  175. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/prestacion_management/dashboard.html +0 -0
  176. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/prestacion_management/initial_balance_bulk.html +0 -0
  177. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/prestamo/approve.html +0 -0
  178. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/prestamo/condonacion.html +0 -0
  179. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/prestamo/detail.html +0 -0
  180. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/prestamo/form.html +0 -0
  181. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/prestamo/index.html +0 -0
  182. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/prestamo/pago_extraordinario.html +0 -0
  183. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/prestamo/tabla_pago_pdf.html +0 -0
  184. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/report/admin_index.html +0 -0
  185. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/report/detail.html +0 -0
  186. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/report/execute.html +0 -0
  187. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/report/index.html +0 -0
  188. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/report/permissions.html +0 -0
  189. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/settings/index.html +0 -0
  190. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/shared/concept_form.html +0 -0
  191. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/shared/concept_index.html +0 -0
  192. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/tipo_planilla/form.html +0 -0
  193. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/tipo_planilla/index.html +0 -0
  194. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/user/form.html +0 -0
  195. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/user/index.html +0 -0
  196. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/user/profile.html +0 -0
  197. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/vacation/account_detail.html +0 -0
  198. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/vacation/account_form.html +0 -0
  199. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/vacation/account_index.html +0 -0
  200. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/vacation/dashboard.html +0 -0
  201. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/vacation/initial_balance_bulk.html +0 -0
  202. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/vacation/initial_balance_form.html +0 -0
  203. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/vacation/leave_request_detail.html +0 -0
  204. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/vacation/leave_request_form.html +0 -0
  205. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/vacation/leave_request_index.html +0 -0
  206. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/vacation/policy_detail.html +0 -0
  207. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/vacation/policy_form.html +0 -0
  208. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/vacation/policy_index.html +0 -0
  209. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/templates/modules/vacation/register_taken_form.html +0 -0
  210. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/translations/en/LC_MESSAGES/messages.mo +0 -0
  211. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/translations/en/LC_MESSAGES/messages.po +0 -0
  212. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/translations/es/LC_MESSAGES/messages.mo +0 -0
  213. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/translations/es/LC_MESSAGES/messages.po +0 -0
  214. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vacation_service.py +0 -0
  215. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/__init__.py +0 -0
  216. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/calculation_rule.py +0 -0
  217. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/carga_inicial_prestacion.py +0 -0
  218. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/configuracion.py +0 -0
  219. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/constants.py +0 -0
  220. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/currency.py +0 -0
  221. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/custom_field.py +0 -0
  222. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/employee.py +0 -0
  223. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/empresa.py +0 -0
  224. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/exchange_rate.py +0 -0
  225. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/payroll_concepts.py +0 -0
  226. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/__init__.py +0 -0
  227. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/association_routes.py +0 -0
  228. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/config_routes.py +0 -0
  229. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/export_routes.py +0 -0
  230. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/helpers/__init__.py +0 -0
  231. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/helpers/association_helpers.py +0 -0
  232. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/helpers/excel_helpers.py +0 -0
  233. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/helpers/form_helpers.py +0 -0
  234. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/nomina_routes.py +0 -0
  235. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/novedad_routes.py +0 -0
  236. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/routes.py +0 -0
  237. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/services/__init__.py +0 -0
  238. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/services/export_service.py +0 -0
  239. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/services/nomina_service.py +0 -0
  240. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/services/novedad_service.py +0 -0
  241. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/services/planilla_service.py +0 -0
  242. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/validators/__init__.py +0 -0
  243. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/planilla/validators/planilla_validators.py +0 -0
  244. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/prestacion.py +0 -0
  245. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/prestamo.py +0 -0
  246. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/report.py +0 -0
  247. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/settings.py +0 -0
  248. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/tipo_planilla.py +0 -0
  249. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/user.py +0 -0
  250. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll/vistas/vacation.py +0 -0
  251. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll.egg-info/dependency_links.txt +0 -0
  252. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll.egg-info/entry_points.txt +0 -0
  253. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/coati_payroll.egg-info/top_level.txt +0 -0
  254. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/pyproject.toml +0 -0
  255. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/setup.cfg +0 -0
  256. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/tests/test_ast_security.py +0 -0
  257. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/tests/test_ast_visitor.py +0 -0
  258. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/tests/test_cli.py +0 -0
  259. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/tests/test_plugin_manager.py +0 -0
  260. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/tests/test_plugins_cli.py +0 -0
  261. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/tests/test_plugins_ui.py +0 -0
  262. {coati_payroll-0.0.9 → coati_payroll-0.0.10}/tests/test_routes_map.py +0 -0
@@ -1,18 +1,19 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: coati-payroll
3
- Version: 0.0.9
3
+ Version: 0.0.10
4
4
  Summary: A jurisdiction-agnostic payroll calculation engine.
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
7
7
  License-File: LICENSE
8
+ Requires-Dist: alembic==1.18.1
8
9
  Requires-Dist: argon2-cffi
9
10
  Requires-Dist: babel
10
11
  Requires-Dist: configobj
11
12
  Requires-Dist: cryptography
12
13
  Requires-Dist: dramatiq[redis]
13
14
  Requires-Dist: email_validator
14
- Requires-Dist: huey
15
15
  Requires-Dist: flask
16
+ Requires-Dist: flask-alembic==3.2.0
16
17
  Requires-Dist: flask-babel
17
18
  Requires-Dist: flask-caching
18
19
  Requires-Dist: flask-limiter
@@ -23,6 +24,7 @@ Requires-Dist: flask-session
23
24
  Requires-Dist: flask-sqlalchemy
24
25
  Requires-Dist: flask_weasyprint
25
26
  Requires-Dist: flask-wtf
27
+ Requires-Dist: huey
26
28
  Requires-Dist: mysql-connector-python
27
29
  Requires-Dist: openpyxl
28
30
  Requires-Dist: orjson
@@ -30,6 +30,7 @@ from datetime import datetime
30
30
  # Third party packages
31
31
  # <-------------------------------------------------------------------------> #
32
32
  from flask import Flask, flash, redirect, url_for
33
+ from flask_alembic import Alembic
33
34
  from flask_babel import Babel
34
35
  from flask_login import LoginManager
35
36
  from flask_session import Session
@@ -87,6 +88,7 @@ def _patched_create_session_model(db, table_name, schema=None, bind_key=None, se
87
88
  fs_sqlalchemy.create_session_model = _patched_create_session_model
88
89
 
89
90
  # Third party libraries
91
+ alembic = Alembic()
90
92
  session_manager = Session()
91
93
  login_manager = LoginManager()
92
94
  babel = Babel()
@@ -156,7 +158,17 @@ def create_app(config) -> Flask:
156
158
  log.warning("Using default SECRET_KEY in production! This can cause issues.")
157
159
 
158
160
  log.trace("create_app: initializing app")
161
+
162
+ # Configure Alembic migrations directory
163
+ from os.path import abspath, dirname, join
164
+
165
+ migrations_dir = abspath(join(dirname(__file__), "migrations"))
166
+ app.config.setdefault("ALEMBIC", {})
167
+ app.config["ALEMBIC"]["script_location"] = migrations_dir
168
+
169
+ # Initialize database and alembic
159
170
  db.init_app(app)
171
+ alembic.init_app(app)
160
172
 
161
173
  # Mostrar la URI de la base de datos para diagnóstico
162
174
  try:
@@ -406,6 +418,20 @@ def ensure_database_initialized(app: Flask | None = None) -> None:
406
418
  _db.session.add(nuevo)
407
419
  _db.session.commit()
408
420
 
421
+ # Handle database migrations with Alembic
422
+ # Check if AUTO_MIGRATE is enabled and run migrations if database is already initialized
423
+ from coati_payroll.config import AUTO_MIGRATE
424
+
425
+ if AUTO_MIGRATE:
426
+ try:
427
+ log.trace("ensure_database_initialized: AUTO_MIGRATE enabled, running alembic.upgrade()")
428
+ alembic.upgrade()
429
+ log.info("Database migrated successfully with alembic.upgrade()")
430
+ except Exception as exc:
431
+ log.warning(f"Error during automatic database migration: {exc}")
432
+ # Don't fail initialization if migration fails
433
+ pass
434
+
409
435
  # Initialize language from environment variable if provided
410
436
  try:
411
437
  from coati_payroll.locale_config import initialize_language_from_env
@@ -903,26 +903,29 @@ def database_restore(ctx, backup_file, yes):
903
903
  sys.exit(1)
904
904
 
905
905
 
906
+ def _database_migrate_upgrade():
907
+ """Apply database migrations to latest version.
908
+
909
+ Helper function used by both migrate and upgrade commands.
910
+ """
911
+ from coati_payroll import alembic
912
+
913
+ click.echo("Applying database migrations...")
914
+ alembic.upgrade()
915
+
916
+
906
917
  @database.command("migrate")
907
918
  @with_appcontext
908
919
  @pass_context
909
920
  def database_migrate(ctx):
910
- """Generate database migration."""
921
+ """Apply database migrations to latest version."""
911
922
  try:
912
- # Try to use flask-migrate
913
- try:
914
- from flask_migrate import Migrate, init, migrate # noqa: F401
915
-
916
- click.echo("Generating database migration...")
917
- # This would need proper setup
918
- output_result(ctx, "Migration support requires flask-migrate setup")
919
-
920
- except ImportError:
921
- output_result(ctx, "flask-migrate not installed. Run: pip install flask-migrate", None, False)
922
- sys.exit(1)
923
+ _database_migrate_upgrade()
924
+ output_result(ctx, "Database migrated successfully to latest version")
923
925
 
924
926
  except Exception as e:
925
- output_result(ctx, f"Failed to generate migration: {e}", None, False)
927
+ output_result(ctx, f"Failed to apply migrations: {e}", None, False)
928
+ log.exception("Failed to apply migrations")
926
929
  sys.exit(1)
927
930
 
928
931
 
@@ -930,20 +933,86 @@ def database_migrate(ctx):
930
933
  @with_appcontext
931
934
  @pass_context
932
935
  def database_upgrade(ctx):
933
- """Apply database migrations."""
936
+ """Apply database migrations (alias for migrate)."""
937
+ try:
938
+ _database_migrate_upgrade()
939
+ output_result(ctx, "Database migrated successfully to latest version")
940
+
941
+ except Exception as e:
942
+ output_result(ctx, f"Failed to apply migrations: {e}", None, False)
943
+ log.exception("Failed to apply migrations")
944
+ sys.exit(1)
945
+
946
+
947
+ @database.command("downgrade")
948
+ @click.argument("revision", default="-1")
949
+ @with_appcontext
950
+ @pass_context
951
+ def database_downgrade(ctx, revision):
952
+ """Downgrade database to a previous migration.
953
+
954
+ Args:
955
+ revision: Target revision (default: -1 for one step back, or 'base' for all the way back)
956
+ """
957
+ try:
958
+ from coati_payroll import alembic
959
+
960
+ click.echo(f"Downgrading database to revision: {revision}...")
961
+ alembic.downgrade(revision)
962
+ output_result(ctx, f"Database downgraded successfully to revision: {revision}")
963
+
964
+ except Exception as e:
965
+ output_result(ctx, f"Failed to downgrade database: {e}", None, False)
966
+ log.exception("Failed to downgrade database")
967
+ sys.exit(1)
968
+
969
+
970
+ @database.command("current")
971
+ @with_appcontext
972
+ @pass_context
973
+ def database_current(ctx):
974
+ """Show current migration revision."""
934
975
  try:
976
+ from coati_payroll.model import db
977
+
978
+ # Get current revision
979
+ revision = None
935
980
  try:
936
- from flask_migrate import upgrade # noqa: F401
981
+ revision = db.session.execute(db.text("SELECT version_num FROM alembic_version")).scalar()
982
+ except Exception:
983
+ pass
937
984
 
938
- click.echo("Applying database migrations...")
939
- output_result(ctx, "Migration support requires flask-migrate setup")
985
+ if revision:
986
+ output_result(ctx, f"Current database revision: {revision}", {"revision": revision})
987
+ else:
988
+ output_result(ctx, "No migration version found (database not stamped)", None, False)
940
989
 
941
- except ImportError:
942
- output_result(ctx, "flask-migrate not installed. Run: pip install flask-migrate", None, False)
943
- sys.exit(1)
990
+ except Exception as e:
991
+ output_result(ctx, f"Failed to get current revision: {e}", None, False)
992
+ log.exception("Failed to get current revision")
993
+ sys.exit(1)
994
+
995
+
996
+ @database.command("stamp")
997
+ @click.argument("revision", default="head")
998
+ @with_appcontext
999
+ @pass_context
1000
+ def database_stamp(ctx, revision):
1001
+ """Stamp the database with a specific revision without running migrations.
1002
+
1003
+ Args:
1004
+ revision: Target revision to stamp (default: 'head' for latest)
1005
+ """
1006
+ try:
1007
+ from coati_payroll import alembic
1008
+
1009
+ click.echo(f"Stamping database with revision: {revision}...")
1010
+ alembic.stamp(revision)
1011
+ output_result(ctx, f"Database stamped successfully with revision: {revision}")
944
1012
 
945
1013
  except Exception as e:
946
- output_result(ctx, f"Failed to apply migrations: {e}", None, False)
1014
+ output_result(ctx, f"Failed to stamp database: {e}", None, False)
1015
+ log.exception("Failed to stamp database")
947
1016
  sys.exit(1)
948
1017
 
949
1018
 
@@ -99,6 +99,9 @@ DESARROLLO = any(
99
99
  str(environ.get(var, "")).strip().lower() in VALORES_TRUE for var in [*DEBUG_VARS, *FRAMEWORK_VARS, *GENERIC_VARS]
100
100
  )
101
101
 
102
+ # Auto-migrate configuration - enables automatic database migrations on startup
103
+ AUTO_MIGRATE = environ.get("COATI_AUTO_MIGRATE", "0").strip().lower() in VALORES_TRUE
104
+
102
105
  # < --------------------------------------------------------------------------------------------- >
103
106
  # Directorios base de la aplicacion
104
107
  DIRECTORIO_ACTUAL: Path = Path(path.abspath(path.dirname(__file__)))
@@ -34,7 +34,6 @@ from __future__ import annotations
34
34
  # <-------------------------------------------------------------------------> #
35
35
  from coati_payroll.i18n import _l as _
36
36
 
37
-
38
37
  # American currencies (North, Central, South America, and Caribbean)
39
38
  # Currency names are marked for translation
40
39
  CURRENCIES = [
@@ -0,0 +1,55 @@
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.
14
+ """Initial migration - mark existing database schema
15
+
16
+ Revision ID: 20260125_032900
17
+ Revises:
18
+ Create Date: 2026-01-25 03:29:00
19
+
20
+ This is the initial migration that marks the existing database schema as the base.
21
+ This migration doesn't create or modify any tables - it assumes that the database
22
+ was already initialized using db.create_all() before implementing flask-alembic.
23
+
24
+ For new databases, the schema will be created by db.create_all() in the
25
+ ensure_database_initialized() function, and then this migration will be stamped
26
+ as 'head' to mark the database as up to date.
27
+
28
+ For existing databases, this migration should be stamped as 'head' without running
29
+ any actual migrations, as the database already contains all the tables.
30
+ """
31
+
32
+
33
+ # revision identifiers, used by Alembic.
34
+ revision = "20260125_032900"
35
+ down_revision = None
36
+ branch_labels = None
37
+ depends_on = None
38
+
39
+
40
+ def upgrade():
41
+ """Upgrade to this revision.
42
+
43
+ This is a no-op migration because we assume the database schema was already
44
+ created by db.create_all(). This migration simply marks the schema version.
45
+ """
46
+ pass
47
+
48
+
49
+ def downgrade():
50
+ """Downgrade from this revision.
51
+
52
+ This is a no-op migration. Downgrading from the initial migration would
53
+ require dropping all tables, which should be done with db.drop_all() instead.
54
+ """
55
+ pass
@@ -0,0 +1,14 @@
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.
14
+ """Database migrations for Coati Payroll."""
@@ -9,7 +9,6 @@ from flask import Flask
9
9
  from coati_payroll.log import log
10
10
  from coati_payroll.model import PluginRegistry, db
11
11
 
12
-
13
12
  PLUGIN_DISTRIBUTION_PREFIX = "coati-payroll-plugin-"
14
13
 
15
14
 
@@ -21,7 +21,6 @@ from coati_payroll.log import log
21
21
  from coati_payroll.queue.driver import QueueDriver
22
22
  from coati_payroll.queue.drivers import DramatiqDriver, HueyDriver, NoopQueueDriver
23
23
 
24
-
25
24
  _cached_driver: QueueDriver | None = None
26
25
 
27
26
 
@@ -46,7 +46,6 @@ from coati_payroll.model import (
46
46
  from coati_payroll.nomina_engine import NominaEngine
47
47
  from coati_payroll.queue import get_queue_driver
48
48
 
49
-
50
49
  # Get the queue driver
51
50
  queue = get_queue_driver()
52
51
 
@@ -51,7 +51,6 @@ from coati_payroll.model import (
51
51
  )
52
52
  from coati_payroll.log import log
53
53
 
54
-
55
54
  # ============================================================================
56
55
  # Whitelisted entities and fields for custom reports
57
56
  # ============================================================================
@@ -45,7 +45,6 @@ from coati_payroll.model import (
45
45
  )
46
46
  from coati_payroll.enums import TipoDetalle
47
47
 
48
-
49
48
  # ============================================================================
50
49
  # System Report Registry
51
50
  # ============================================================================
@@ -15,4 +15,4 @@
15
15
  Canonical version of coati_payroll.
16
16
  """
17
17
 
18
- __version__ = "0.0.9"
18
+ __version__ = "0.0.10"
@@ -23,7 +23,6 @@ from coati_payroll.i18n import _
23
23
  from coati_payroll.model import ConfiguracionCalculos, db
24
24
  from coati_payroll.rbac import require_write_access
25
25
 
26
-
27
26
  config_calculos_bp = Blueprint("config_calculos", __name__, url_prefix="/config-calculos")
28
27
 
29
28
 
@@ -29,7 +29,6 @@ from coati_payroll.liquidacion_engine import ejecutar_liquidacion, recalcular_li
29
29
  from coati_payroll.vistas.planilla.helpers import check_openpyxl_available
30
30
  from coati_payroll.vistas.planilla.services import ExportService
31
31
 
32
-
33
32
  liquidacion_bp = Blueprint("liquidacion", __name__, url_prefix="/liquidaciones")
34
33
 
35
34
  # Constants
@@ -6,7 +6,6 @@ from coati_payroll.i18n import _
6
6
  from coati_payroll.model import PluginRegistry, db
7
7
  from coati_payroll.rbac import require_write_access
8
8
 
9
-
10
9
  plugins_bp = Blueprint("plugins", __name__, url_prefix="/plugins")
11
10
 
12
11
  # Constants
@@ -1,18 +1,19 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: coati-payroll
3
- Version: 0.0.9
3
+ Version: 0.0.10
4
4
  Summary: A jurisdiction-agnostic payroll calculation engine.
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
7
7
  License-File: LICENSE
8
+ Requires-Dist: alembic==1.18.1
8
9
  Requires-Dist: argon2-cffi
9
10
  Requires-Dist: babel
10
11
  Requires-Dist: configobj
11
12
  Requires-Dist: cryptography
12
13
  Requires-Dist: dramatiq[redis]
13
14
  Requires-Dist: email_validator
14
- Requires-Dist: huey
15
15
  Requires-Dist: flask
16
+ Requires-Dist: flask-alembic==3.2.0
16
17
  Requires-Dist: flask-babel
17
18
  Requires-Dist: flask-caching
18
19
  Requires-Dist: flask-limiter
@@ -23,6 +24,7 @@ Requires-Dist: flask-session
23
24
  Requires-Dist: flask-sqlalchemy
24
25
  Requires-Dist: flask_weasyprint
25
26
  Requires-Dist: flask-wtf
27
+ Requires-Dist: huey
26
28
  Requires-Dist: mysql-connector-python
27
29
  Requires-Dist: openpyxl
28
30
  Requires-Dist: orjson
@@ -67,6 +67,8 @@ coati_payroll/formula_engine/validation/security_validator.py
67
67
  coati_payroll/formula_engine/validation/tax_table_validator.py
68
68
  coati_payroll/liquidacion_engine/__init__.py
69
69
  coati_payroll/liquidacion_engine/engine.py
70
+ coati_payroll/migrations/20260125_032900_initial_migration.py
71
+ coati_payroll/migrations/__init__.py
70
72
  coati_payroll/nomina_engine/__init__.py
71
73
  coati_payroll/nomina_engine/engine.py
72
74
  coati_payroll/nomina_engine/calculators/__init__.py
@@ -248,6 +250,7 @@ coati_payroll/vistas/planilla/services/novedad_service.py
248
250
  coati_payroll/vistas/planilla/services/planilla_service.py
249
251
  coati_payroll/vistas/planilla/validators/__init__.py
250
252
  coati_payroll/vistas/planilla/validators/planilla_validators.py
253
+ tests/test_alembic_migrations.py
251
254
  tests/test_ast_security.py
252
255
  tests/test_ast_visitor.py
253
256
  tests/test_cli.py
@@ -1,11 +1,12 @@
1
+ alembic==1.18.1
1
2
  argon2-cffi
2
3
  babel
3
4
  configobj
4
5
  cryptography
5
6
  dramatiq[redis]
6
7
  email_validator
7
- huey
8
8
  flask
9
+ flask-alembic==3.2.0
9
10
  flask-babel
10
11
  flask-caching
11
12
  flask-limiter
@@ -16,6 +17,7 @@ flask-session
16
17
  flask-sqlalchemy
17
18
  flask_weasyprint
18
19
  flask-wtf
20
+ huey
19
21
  mysql-connector-python
20
22
  openpyxl
21
23
  orjson
@@ -1,11 +1,12 @@
1
+ alembic==1.18.1
1
2
  argon2-cffi
2
3
  babel
3
4
  configobj
4
5
  cryptography
5
6
  dramatiq[redis]
6
7
  email_validator
7
- huey
8
8
  flask
9
+ flask-alembic==3.2.0
9
10
  flask-babel
10
11
  flask-caching
11
12
  flask-limiter
@@ -16,6 +17,7 @@ flask-session
16
17
  flask-sqlalchemy
17
18
  flask_weasyprint
18
19
  flask-wtf
20
+ huey
19
21
  mysql-connector-python
20
22
  openpyxl
21
23
  orjson