diff --git a/backend/alembic/versions/7c8d9e0f1a2b_add_annex30_duration_days.py b/backend/alembic/versions/7c8d9e0f1a2b_add_annex30_duration_days.py deleted file mode 100644 index b742dc80..00000000 --- a/backend/alembic/versions/7c8d9e0f1a2b_add_annex30_duration_days.py +++ /dev/null @@ -1,29 +0,0 @@ -"""add annex30_duration_days to company_certification - -Revision ID: 7c8d9e0f1a2b -Revises: d1a2b3c4e5f6 -Create Date: 2026-04-24 16:50:00.000000 - -""" - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '7c8d9e0f1a2b' -down_revision = 'd1a2b3c4e5f6' -branch_labels = None -depends_on = None - - -def upgrade() -> None: - op.add_column( - "company_certification", - sa.Column("annex30_duration_days", sa.Integer(), nullable=True), - schema="a76", - ) - - -def downgrade() -> None: - op.drop_column("company_certification", "annex30_duration_days", schema="a76") diff --git a/backend/alembic/versions/a1b2c3d4e5f6_create_doda_alta_log.py b/backend/alembic/versions/a1b2c3d4e5f6_create_doda_alta_log.py index e6796361..79050fd7 100644 --- a/backend/alembic/versions/a1b2c3d4e5f6_create_doda_alta_log.py +++ b/backend/alembic/versions/a1b2c3d4e5f6_create_doda_alta_log.py @@ -1,7 +1,7 @@ """create doda_alta_log table Revision ID: a1b2c3d4e5f6 -Revises: 7c8d9e0f1a2b +Revises: d1a2b3c4e5f6 Create Date: 2026-04-26 10:00:00.000000 """ @@ -12,7 +12,7 @@ import sqlalchemy as sa # revision identifiers, used by Alembic. revision = "a1b2c3d4e5f6" -down_revision = "7c8d9e0f1a2b" +down_revision = "d1a2b3c4e5f6" branch_labels = None depends_on = None diff --git a/backend/api/v1/modules/a76/general_catalogs/company/dto.py b/backend/api/v1/modules/a76/general_catalogs/company/dto.py index 39f71b25..97421872 100644 --- a/backend/api/v1/modules/a76/general_catalogs/company/dto.py +++ b/backend/api/v1/modules/a76/general_catalogs/company/dto.py @@ -99,7 +99,6 @@ class CompanyCreateDTO(BaseModel): annex30_certification_date: Optional[date] = None annex30_certification_number: Optional[str] = Field(None, max_length=50) annex30_modality: Optional[str] = Field(None, max_length=3) - annex30_duration_days: Optional[int] = Field(None, description="Modality duration in days") annex30_company_type: Optional[str] = Field(None, max_length=50) annex30_renewal_date: Optional[date] = None annex30_final_certification_date: Optional[date] = None @@ -329,7 +328,6 @@ class CompanyResponseDTO(BaseModel): annex30_certification_date: Optional[date] = None annex30_certification_number: Optional[str] = None annex30_modality: Optional[str] = None - annex30_duration_days: Optional[int] = None annex30_company_type: Optional[str] = None annex30_renewal_date: Optional[date] = None annex30_final_certification_date: Optional[date] = None diff --git a/backend/api/v1/modules/a76/general_catalogs/company/service.py b/backend/api/v1/modules/a76/general_catalogs/company/service.py index 0c55a9d5..962292d8 100644 --- a/backend/api/v1/modules/a76/general_catalogs/company/service.py +++ b/backend/api/v1/modules/a76/general_catalogs/company/service.py @@ -136,7 +136,7 @@ class CompanyService: "is_certified_company", "certified_company_registration", "certified_company_start_date", "certified_company_end_date", "annex30_certification_date", "annex30_certification_number", - "annex30_modality", "annex30_duration_days", "annex30_company_type", "annex30_renewal_date", + "annex30_modality", "annex30_company_type", "annex30_renewal_date", "annex30_final_certification_date", "is_seciit_company", "is_oea_company", "ctpat_svi", "trusted_exporter_number", "neec_company" ] @@ -251,7 +251,7 @@ class CompanyService: "is_certified_company", "certified_company_registration", "certified_company_start_date", "certified_company_end_date", "annex30_certification_date", "annex30_certification_number", - "annex30_modality", "annex30_duration_days", "annex30_company_type", "annex30_renewal_date", + "annex30_modality", "annex30_company_type", "annex30_renewal_date", "annex30_final_certification_date", "is_seciit_company", "is_oea_company", "ctpat_svi", "trusted_exporter_number", "neec_company" ] diff --git a/backend/api/v1/modules/a76/general_catalogs/company/submodels/certification.py b/backend/api/v1/modules/a76/general_catalogs/company/submodels/certification.py index 7ca28af4..088071e5 100644 --- a/backend/api/v1/modules/a76/general_catalogs/company/submodels/certification.py +++ b/backend/api/v1/modules/a76/general_catalogs/company/submodels/certification.py @@ -4,7 +4,7 @@ Modelo de certificaciones de empresa from typing import Optional, TYPE_CHECKING from datetime import date -from sqlalchemy import Integer, String, ForeignKey, Boolean, Date +from sqlalchemy import String, ForeignKey, Boolean, Date, Integer from sqlalchemy.orm import Mapped, mapped_column, relationship from core.database import Base from api.v1.common.base_models import TimestampMixin @@ -37,7 +37,6 @@ class CompanyCertification(Base, TimestampMixin): annex30_certification_date: Mapped[Optional[date]] = mapped_column(Date) annex30_certification_number: Mapped[Optional[str]] = mapped_column(String(50)) annex30_modality: Mapped[Optional[str]] = mapped_column(String(3)) - annex30_duration_days: Mapped[Optional[int]] = mapped_column(Integer) annex30_company_type: Mapped[Optional[str]] = mapped_column(String(50)) annex30_renewal_date: Mapped[Optional[date]] = mapped_column(Date) annex30_final_certification_date: Mapped[Optional[date]] = mapped_column(Date) diff --git a/frontend/src/routes/dashboard/general_catalogs/company_information/edit/[[id]]/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/company_information/edit/[[id]]/+page.svelte index 61b19a4d..b4e3e714 100644 --- a/frontend/src/routes/dashboard/general_catalogs/company_information/edit/[[id]]/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/company_information/edit/[[id]]/+page.svelte @@ -112,7 +112,6 @@ annex30_certification_date: '', annex30_certification_number: '', annex30_modality: '', - annex30_duration_days: 0, annex30_company_type: '', annex30_renewal_date: '', annex30_final_certification_date: '', @@ -301,7 +300,6 @@ annex30_certification_date: toInputDate(item.annex30_certification_date), annex30_certification_number: item.annex30_certification_number || '', annex30_modality: item.annex30_modality || '', - annex30_duration_days: item.annex30_duration_days || 0, annex30_company_type: item.annex30_company_type || '', annex30_renewal_date: toInputDate(item.annex30_renewal_date), annex30_final_certification_date: toInputDate(item.annex30_final_certification_date), @@ -534,31 +532,24 @@ } } - // Auto-cálculo de duración y fecha de renovación del Anexo 30 - $effect(() => { - const modality = formData.annex30_modality; - const certDateStr = formData.annex30_certification_date; - - // 1. Mapear modalidad a días + const annex30DurationDays = $derived.by(() => { const modalityDaysMap: Record = { - 'A': 365, - 'AA': 730, - 'AAA': 1095 + A: 365, + AA: 730, + AAA: 1095 }; + return modalityDaysMap[formData.annex30_modality] ?? 0; + }); - if (modality && modalityDaysMap[modality]) { - formData.annex30_duration_days = modalityDaysMap[modality]; - } else if (!modality) { - formData.annex30_duration_days = 0; - } - - // 2. Calcular fecha de renovación - if (certDateStr && formData.annex30_duration_days > 0) { + // Auto-cálculo de fecha de renovación del Anexo 30 + $effect(() => { + const certDateStr = formData.annex30_certification_date; + if (certDateStr && annex30DurationDays > 0) { // Usamos el formato ISO para evitar problemas de zona horaria al crear el objeto Date const certDate = new Date(certDateStr + 'T00:00:00'); if (!isNaN(certDate.getTime())) { const renewalDate = new Date(certDate); - renewalDate.setDate(certDate.getDate() + formData.annex30_duration_days); + renewalDate.setDate(certDate.getDate() + annex30DurationDays); formData.annex30_renewal_date = renewalDate.toISOString().split('T')[0]; } } @@ -630,7 +621,6 @@ annex30_certification_date: toDbDate(formData.annex30_certification_date), annex30_certification_number: clean(formData.annex30_certification_number), annex30_modality: clean(formData.annex30_modality), - annex30_duration_days: Number(formData.annex30_duration_days) || 0, annex30_company_type: clean(formData.annex30_company_type), annex30_renewal_date: toDbDate(formData.annex30_renewal_date), annex30_final_certification_date: toDbDate(formData.annex30_final_certification_date), @@ -1039,26 +1029,26 @@

Anexo 30

- +
- +
- +
- - -
-
- +
- +
- +