diff --git a/.gitignore b/.gitignore index 0af971f5..17d85cdc 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,4 @@ node_modules/ # Docker *.dockerignore +postgres-data/ \ No newline at end of file diff --git a/estructura.txt b/estructura.txt deleted file mode 100644 index aa2beccb..00000000 --- a/estructura.txt +++ /dev/null @@ -1,1190 +0,0 @@ -. -├── azure.crt -├── backend -│   ├── alembic -│   │   ├── env.py -│   │   ├── README -│   │   ├── script.py.mako -│   │   └── versions -│   │   ├── 531bf8cdae06_create_material_types_table.py -│   │   └── 7937209f9718_seed_initial_data.py -│   ├── alembic.ini -│   ├── api -│   │   └── v1 -│   │   ├── common -│   │   │   ├── base_models.py -│   │   │   ├── crud_routes.py -│   │   │   ├── dto_mixins.py -│   │   │   └── tenant_crud_routes.py -│   │   ├── modules -│   │   │   ├── a24 -│   │   │   │   ├── fa -│   │   │   │   │   └── fa_classes -│   │   │   │   │   └── models.py -│   │   │   │   └── inv -│   │   │   │   ├── inv_classes -│   │   │   │   │   └── models.py -│   │   │   │   └── location -│   │   │   │   ├── dto.py -│   │   │   │   ├── __init__.py -│   │   │   │   ├── models.py -│   │   │   │   ├── routes.py -│   │   │   │   └── service.py -│   │   │   ├── a76 -│   │   │   │   ├── classes -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── __init__.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── service.py -│   │   │   │   │   └── test_classes.py -│   │   │   │   ├── clients_and_providers -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── __init__.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── service.py -│   │   │   │   │   └── test_client_and_provider.py -│   │   │   │   ├── country_rule_oct -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── services.py -│   │   │   │   │   └── test_country_rule_oct.py -│   │   │   │   ├── customs_brokers -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   └── services.py -│   │   │   │   ├── fraction_rule_octave -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── services.py -│   │   │   │   │   └── test_fraction_rule_octave.py -│   │   │   │   ├── general_catalogs -│   │   │   │   │   ├── classification_concepts -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   ├── company -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   ├── service.py -│   │   │   │   │   │   └── test_company.py -│   │   │   │   │   ├── concepts -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   ├── customs_broker_concepts -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   ├── doda -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   ├── electronic_notices -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   ├── equivalencies -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   ├── error_catalogs -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   ├── exchange_rate -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   ├── services.py -│   │   │   │   │   │   └── test_exchange_rate.py -│   │   │   │   │   ├── identifiers -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   ├── inpc -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   ├── legends -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   ├── multi_currency_types -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   ├── packages -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   ├── services.py -│   │   │   │   │   │   └── test_package.py -│   │   │   │   │   ├── ports -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   ├── prevalidators -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   ├── seal -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   ├── services.py -│   │   │   │   │   │   └── test_seal.py -│   │   │   │   │   ├── signatures -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   ├── unit_conversions -│   │   │   │   │   │   ├── dto.py -│   │   │   │   │   │   ├── __init__.py -│   │   │   │   │   │   ├── models.py -│   │   │   │   │   │   ├── routes.py -│   │   │   │   │   │   └── service.py -│   │   │   │   │   └── units_of_measure -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── __init__.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   └── service.py -│   │   │   │   ├── invoices -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── schemas.py -│   │   │   │   │   └── services.py -│   │   │   │   ├── parts -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── __init__.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── service.py -│   │   │   │   │   └── test_parts.py -│   │   │   │   ├── pedmientos -│   │   │   │   │   ├── dtos -│   │   │   │   │   │   ├── pedimento_config_additional.py -│   │   │   │   │   │   ├── pedimento_config_calculations.py -│   │   │   │   │   │   ├── pedimento_config_parameters.py -│   │   │   │   │   │   ├── pedimento_config_surcharges.py -│   │   │   │   │   │   ├── pedimento_config_update_rectification.py -│   │   │   │   │   │   ├── pedimento_config_updates.py -│   │   │   │   │   │   ├── pedimento_customs_offices.py -│   │   │   │   │   │   ├── pedimento_dates.py -│   │   │   │   │   │   ├── pedimento_decrementables.py -│   │   │   │   │   │   ├── pedimento_incrementables.py -│   │   │   │   │   │   ├── pedimento_indexes.py -│   │   │   │   │   │   ├── pedimento_payments.py -│   │   │   │   │   │   ├── pedimento_rectification_destination.py -│   │   │   │   │   │   ├── pedimento_rectification_origin.py -│   │   │   │   │   │   ├── pedimentos.py -│   │   │   │   │   │   ├── pedimento_transport_means.py -│   │   │   │   │   │   └── pedimento_validation.py -│   │   │   │   │   ├── models -│   │   │   │   │   │   ├── pedimento_config_additional.py -│   │   │   │   │   │   ├── pedimento_config_calculations.py -│   │   │   │   │   │   ├── pedimento_config_parameters.py -│   │   │   │   │   │   ├── pedimento_config_surcharges.py -│   │   │   │   │   │   ├── pedimento_config_update_rectification.py -│   │   │   │   │   │   ├── pedimento_config_updates.py -│   │   │   │   │   │   ├── pedimento_customs_offices.py -│   │   │   │   │   │   ├── pedimento_dates.py -│   │   │   │   │   │   ├── pedimento_decrementables.py -│   │   │   │   │   │   ├── pedimento_incrementables.py -│   │   │   │   │   │   ├── pedimento_indexes.py -│   │   │   │   │   │   ├── pedimento_payments.py -│   │   │   │   │   │   ├── pedimento_rectification_destination.py -│   │   │   │   │   │   ├── pedimento_rectification_origin.py -│   │   │   │   │   │   ├── pedimentos.py -│   │   │   │   │   │   ├── pedimento_transport_means.py -│   │   │   │   │   │   └── pedimento_validation.py -│   │   │   │   │   ├── router.py -│   │   │   │   │   ├── routes -│   │   │   │   │   │   ├── pedimento_config_additional.py -│   │   │   │   │   │   ├── pedimento_config_calculations.py -│   │   │   │   │   │   ├── pedimento_config_parameters.py -│   │   │   │   │   │   ├── pedimento_config_surcharges.py -│   │   │   │   │   │   ├── pedimento_config_update_rectification.py -│   │   │   │   │   │   ├── pedimento_config_updates.py -│   │   │   │   │   │   ├── pedimento_customs_offices.py -│   │   │   │   │   │   ├── pedimento_dates.py -│   │   │   │   │   │   ├── pedimento_decrementables.py -│   │   │   │   │   │   ├── pedimento_incrementables.py -│   │   │   │   │   │   ├── pedimento_indexes.py -│   │   │   │   │   │   ├── pedimento_payments.py -│   │   │   │   │   │   ├── pedimento_rectification_destination.py -│   │   │   │   │   │   ├── pedimento_rectification_origin.py -│   │   │   │   │   │   ├── pedimentos.py -│   │   │   │   │   │   ├── pedimento_transport_means.py -│   │   │   │   │   │   └── pedimento_validation.py -│   │   │   │   │   └── services -│   │   │   │   │   ├── pedimento_config_additional.py -│   │   │   │   │   ├── pedimento_config_calculations.py -│   │   │   │   │   ├── pedimento_config_parameters.py -│   │   │   │   │   ├── pedimento_config_surcharges.py -│   │   │   │   │   ├── pedimento_config_update_rectification.py -│   │   │   │   │   ├── pedimento_config_updates.py -│   │   │   │   │   ├── pedimento_customs_offices.py -│   │   │   │   │   ├── pedimento_dates.py -│   │   │   │   │   ├── pedimento_decrementables.py -│   │   │   │   │   ├── pedimento_incrementables.py -│   │   │   │   │   ├── pedimento_indexes.py -│   │   │   │   │   ├── pedimento_payments.py -│   │   │   │   │   ├── pedimento_rectification_destination.py -│   │   │   │   │   ├── pedimento_rectification_origin.py -│   │   │   │   │   ├── pedimentos.py -│   │   │   │   │   ├── pedimento_transport_means.py -│   │   │   │   │   └── pedimento_validation.py -│   │   │   │   ├── permission_rule_oct -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── services.py -│   │   │   │   │   └── test_permission_rule_oct.py -│   │   │   │   ├── router.py -│   │   │   │   └── transportation -│   │   │   │   ├── drivers -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   └── services.py -│   │   │   │   ├── trailers -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   └── services.py -│   │   │   │   ├── transporters -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   └── services.py -│   │   │   │   └── vehicles -│   │   │   │   ├── dto.py -│   │   │   │   ├── models.py -│   │   │   │   ├── routes.py -│   │   │   │   └── services.py -│   │   │   ├── core -│   │   │   │   ├── auth -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── __init__.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   └── service.py -│   │   │   │   ├── licenses -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── __init__.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   └── service.py -│   │   │   │   ├── router.py -│   │   │   │   ├── tenants -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── __init__.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   └── service.py -│   │   │   │   └── user_tenant -│   │   │   │   ├── dto.py -│   │   │   │   ├── models.py -│   │   │   │   ├── routes.py -│   │   │   │   └── service.py -│   │   │   └── public -│   │   │   ├── __init__.py -│   │   │   ├── reference_data -│   │   │   │   ├── code_pedimento_regimens -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_code_pedimento_regimens.py -│   │   │   │   ├── conftest.py -│   │   │   │   ├── containers -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_containers.py -│   │   │   │   ├── countries -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_countries.py -│   │   │   │   ├── currency_types -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_currency_types.py -│   │   │   │   ├── customs_sections -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_customs_sections.py -│   │   │   │   ├── customs_warehouses -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_customs_warehouses.py -│   │   │   │   ├── incoterms -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_incoterms.py -│   │   │   │   ├── invoice_types -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_invoice_types.py -│   │   │   │   ├── material_types -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_material_types.py -│   │   │   │   ├── payment_methods -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_payment_methods.py -│   │   │   │   ├── pedimento_codes -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_pedimento_codes.py -│   │   │   │   ├── pedimento_regimens -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_pedimento_regimens.py -│   │   │   │   ├── router.py -│   │   │   │   ├── sectors -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_sectors.py -│   │   │   │   ├── states -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_states.py -│   │   │   │   ├── trailer_types -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   └── services.py -│   │   │   │   ├── transport_modes -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_transport_modes.py -│   │   │   │   ├── transport_types -│   │   │   │   │   ├── dto.py -│   │   │   │   │   ├── models.py -│   │   │   │   │   ├── routes.py -│   │   │   │   │   ├── seed.py -│   │   │   │   │   └── test_transport_types.py -│   │   │   │   └── valuation_methods -│   │   │   │   ├── dto.py -│   │   │   │   ├── models.py -│   │   │   │   ├── routes.py -│   │   │   │   ├── seed.py -│   │   │   │   └── test_valuation_methods.py -│   │   │   └── router.py -│   │   └── router.py -│   ├── core -│   │   ├── config.py -│   │   ├── database.py -│   │   ├── __init__.py -│   │   ├── middleware.py -│   │   └── security.py -│   ├── Dockerfile -│   ├── main.py -│   ├── __pycache__ -│   └── requirements.txt -├── docker-compose.yml -├── docs -│   ├── a76.json -│   ├── ARCHITECTURE.md -│   ├── KEYCLOAK_SETUP.md -│   ├── MICROSOFT_SSO_SETUP.md -│   └── VERIFICAR_MICROSOFT_CONFIG.md -├── estructura.txt -├── frontend -│   ├── components.json -│   ├── Dockerfile -│   ├── e2e -│   │   └── demo.test.ts -│   ├── eslint.config.js -│   ├── messages -│   │   ├── en.json -│   │   └── es.json -│   ├── node_modules -│   ├── package.json -│   ├── playwright.config.ts -│   ├── pnpm-lock.yaml -│   ├── pnpm-workspace.yaml -│   ├── project.inlang -│   │   ├── cache -│   │   │   └── plugins -│   │   │   ├── 2sy648wh9sugi -│   │   │   └── ygx0uiahq6uw -│   │   ├── project_id -│   │   └── settings.json -│   ├── README.md -│   ├── src -│   │   ├── app.css -│   │   ├── app.d.ts -│   │   ├── app.html -│   │   ├── demo.spec.ts -│   │   ├── hooks.server.ts -│   │   ├── hooks.ts -│   │   ├── lib -│   │   │   ├── api -│   │   │   │   └── dashboard -│   │   │   │   ├── a76 -│   │   │   │   │   ├── classes.ts -│   │   │   │   │   ├── clients-providers.ts -│   │   │   │   │   ├── customs-brokers.ts -│   │   │   │   │   ├── general_catalogs -│   │   │   │   │   │   ├── classification-concepts.ts -│   │   │   │   │   │   ├── company.ts -│   │   │   │   │   │   ├── concepts.ts -│   │   │   │   │   │   ├── customs-broker-concepts.ts -│   │   │   │   │   │   ├── doda.ts -│   │   │   │   │   │   ├── electronic-notices.ts -│   │   │   │   │   │   ├── equivalencies.ts -│   │   │   │   │   │   ├── error-catalogs.ts -│   │   │   │   │   │   ├── exchange-rate.ts -│   │   │   │   │   │   ├── identifiers.ts -│   │   │   │   │   │   ├── index.ts -│   │   │   │   │   │   ├── inpc.ts -│   │   │   │   │   │   ├── legends.ts -│   │   │   │   │   │   ├── locations.ts -│   │   │   │   │   │   ├── multi-currency-types.ts -│   │   │   │   │   │   ├── packages.ts -│   │   │   │   │   │   ├── ports.ts -│   │   │   │   │   │   ├── prevalidators.ts -│   │   │   │   │   │   ├── seal.ts -│   │   │   │   │   │   ├── signatures.ts -│   │   │   │   │   │   ├── um-ace.ts -│   │   │   │   │   │   ├── um-customs-ame.ts -│   │   │   │   │   │   ├── um-customs-mex.ts -│   │   │   │   │   │   ├── um-oma.ts -│   │   │   │   │   │   ├── unit-conversions.ts -│   │   │   │   │   │   ├── unit-measures.ts -│   │   │   │   │   │   └── units-of-measure.ts -│   │   │   │   │   ├── index.ts -│   │   │   │   │   ├── invoices.ts -│   │   │   │   │   ├── pedimento-dates.ts -│   │   │   │   │   ├── pedimento-payments.ts -│   │   │   │   │   ├── pedimentos.ts -│   │   │   │   │   ├── pedimento-transport.ts -│   │   │   │   │   └── pedimento-validation.ts -│   │   │   │   └── refrence_data -│   │   │   │   ├── code_pedimento_regimens.ts -│   │   │   │   ├── containers.ts -│   │   │   │   ├── countries.ts -│   │   │   │   ├── currency_types.ts -│   │   │   │   ├── customs_sections.ts -│   │   │   │   ├── customs_warehouses.ts -│   │   │   │   ├── incoterms.ts -│   │   │   │   ├── invoice_types.ts -│   │   │   │   ├── material_types.ts -│   │   │   │   ├── payment_methods.ts -│   │   │   │   ├── pedimento_codes.ts -│   │   │   │   ├── pedimento_regimens.ts -│   │   │   │   ├── sectors.ts -│   │   │   │   ├── states.ts -│   │   │   │   ├── transport_modes.ts -│   │   │   │   ├── transport_types.ts -│   │   │   │   └── valuation_methods.ts -│   │   │   ├── api.ts -│   │   │   ├── assets -│   │   │   │   └── favicon.svg -│   │   │   ├── auth.ts -│   │   │   ├── components -│   │   │   │   ├── dashboard -│   │   │   │   │   ├── classes -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   └── data-table.svelte -│   │   │   │   │   ├── clients_and_providers -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   ├── company -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   └── data-table-actions.svelte -│   │   │   │   │   ├── customs_brokers -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-dialog.svelte -│   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   ├── details-dialog.svelte -│   │   │   │   │   │   └── edit-dialog.svelte -│   │   │   │   │   ├── exchange-rate -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   └── data-table.svelte -│   │   │   │   │   ├── general_catalogs -│   │   │   │   │   │   └── simple-data-table.svelte -│   │   │   │   │   ├── identifiers -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   └── data-table.svelte -│   │   │   │   │   ├── invoices -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   ├── locations -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   └── data-table.svelte -│   │   │   │   │   ├── packages -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   └── data-table.svelte -│   │   │   │   │   ├── pedimentos -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   └── edit -│   │   │   │   │   │   ├── dates-tab-form.svelte -│   │   │   │   │   │   ├── general-tab-form.svelte -│   │   │   │   │   │   ├── payments-tab-form.svelte -│   │   │   │   │   │   ├── transport-tab-form.svelte -│   │   │   │   │   │   └── validation-tab-form.svelte -│   │   │   │   │   ├── ports -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   └── data-table-actions.svelte -│   │   │   │   │   ├── reference_data -│   │   │   │   │   │   ├── code_pedimento_regimens -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── containers -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── countries -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── currency_types -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── customs_sections -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── customs_warehouses -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── incoterms -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── invoice_types -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── material_types -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── payment_methods -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── pedimento_codes -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── pedimento_regimens -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── sectors -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── states -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── transport_modes -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   ├── transport_types -│   │   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   │   └── valuation_methods -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   ├── delete-dialog.svelte -│   │   │   │   │   │   └── details-dialog.svelte -│   │   │   │   │   ├── seal -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   ├── data-table.svelte -│   │   │   │   │   │   └── index.ts -│   │   │   │   │   └── units_of_measure -│   │   │   │   │   ├── ace -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   └── data-table.svelte -│   │   │   │   │   ├── american -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   └── data-table-actions.svelte -│   │   │   │   │   ├── customs -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   └── data-table.svelte -│   │   │   │   │   ├── general -│   │   │   │   │   │   ├── columns.ts -│   │   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   │   ├── data-table-actions.svelte -│   │   │   │   │   │   └── data-table.svelte -│   │   │   │   │   └── oma -│   │   │   │   │   ├── columns.ts -│   │   │   │   │   ├── create-edit-dialog.svelte -│   │   │   │   │   └── data-table-actions.svelte -│   │   │   │   ├── login-form.svelte -│   │   │   │   ├── sidebar -│   │   │   │   │   ├── app-sidebar.svelte -│   │   │   │   │   ├── modules.ts -│   │   │   │   │   ├── nav-main.svelte -│   │   │   │   │   ├── nav-projects.svelte -│   │   │   │   │   ├── nav-user.svelte -│   │   │   │   │   └── team-switcher.svelte -│   │   │   │   └── ui -│   │   │   │   ├── alert -│   │   │   │   │   ├── alert-description.svelte -│   │   │   │   │   ├── alert.svelte -│   │   │   │   │   ├── alert-title.svelte -│   │   │   │   │   └── index.ts -│   │   │   │   ├── alert-dialog -│   │   │   │   │   ├── alert-dialog-action.svelte -│   │   │   │   │   ├── alert-dialog-cancel.svelte -│   │   │   │   │   ├── alert-dialog-content.svelte -│   │   │   │   │   ├── alert-dialog-description.svelte -│   │   │   │   │   ├── alert-dialog-footer.svelte -│   │   │   │   │   ├── alert-dialog-header.svelte -│   │   │   │   │   ├── alert-dialog-overlay.svelte -│   │   │   │   │   ├── alert-dialog-title.svelte -│   │   │   │   │   ├── alert-dialog-trigger.svelte -│   │   │   │   │   └── index.ts -│   │   │   │   ├── avatar -│   │   │   │   │   ├── avatar-fallback.svelte -│   │   │   │   │   ├── avatar-image.svelte -│   │   │   │   │   ├── avatar.svelte -│   │   │   │   │   └── index.ts -│   │   │   │   ├── badge -│   │   │   │   │   ├── badge.svelte -│   │   │   │   │   └── index.ts -│   │   │   │   ├── breadcrumb -│   │   │   │   │   ├── breadcrumb-ellipsis.svelte -│   │   │   │   │   ├── breadcrumb-item.svelte -│   │   │   │   │   ├── breadcrumb-link.svelte -│   │   │   │   │   ├── breadcrumb-list.svelte -│   │   │   │   │   ├── breadcrumb-page.svelte -│   │   │   │   │   ├── breadcrumb-separator.svelte -│   │   │   │   │   ├── breadcrumb.svelte -│   │   │   │   │   └── index.ts -│   │   │   │   ├── button -│   │   │   │   │   ├── button.svelte -│   │   │   │   │   └── index.ts -│   │   │   │   ├── card -│   │   │   │   │   ├── card-action.svelte -│   │   │   │   │   ├── card-content.svelte -│   │   │   │   │   ├── card-description.svelte -│   │   │   │   │   ├── card-footer.svelte -│   │   │   │   │   ├── card-header.svelte -│   │   │   │   │   ├── card.svelte -│   │   │   │   │   ├── card-title.svelte -│   │   │   │   │   └── index.ts -│   │   │   │   ├── collapsible -│   │   │   │   │   ├── collapsible-content.svelte -│   │   │   │   │   ├── collapsible.svelte -│   │   │   │   │   ├── collapsible-trigger.svelte -│   │   │   │   │   └── index.ts -│   │   │   │   ├── data-table -│   │   │   │   │   ├── data-table.svelte.ts -│   │   │   │   │   ├── flex-render.svelte -│   │   │   │   │   ├── index.ts -│   │   │   │   │   └── render-helpers.ts -│   │   │   │   ├── dialog -│   │   │   │   │   ├── dialog-close.svelte -│   │   │   │   │   ├── dialog-content.svelte -│   │   │   │   │   ├── dialog-description.svelte -│   │   │   │   │   ├── dialog-footer.svelte -│   │   │   │   │   ├── dialog-header.svelte -│   │   │   │   │   ├── dialog-overlay.svelte -│   │   │   │   │   ├── dialog-title.svelte -│   │   │   │   │   ├── dialog-trigger.svelte -│   │   │   │   │   └── index.ts -│   │   │   │   ├── dropdown-menu -│   │   │   │   │   ├── dropdown-menu-checkbox-item.svelte -│   │   │   │   │   ├── dropdown-menu-content.svelte -│   │   │   │   │   ├── dropdown-menu-group-heading.svelte -│   │   │   │   │   ├── dropdown-menu-group.svelte -│   │   │   │   │   ├── dropdown-menu-item.svelte -│   │   │   │   │   ├── dropdown-menu-label.svelte -│   │   │   │   │   ├── dropdown-menu-radio-group.svelte -│   │   │   │   │   ├── dropdown-menu-radio-item.svelte -│   │   │   │   │   ├── dropdown-menu-separator.svelte -│   │   │   │   │   ├── dropdown-menu-shortcut.svelte -│   │   │   │   │   ├── dropdown-menu-sub-content.svelte -│   │   │   │   │   ├── dropdown-menu-sub-trigger.svelte -│   │   │   │   │   ├── dropdown-menu-trigger.svelte -│   │   │   │   │   └── index.ts -│   │   │   │   ├── field -│   │   │   │   │   ├── field-content.svelte -│   │   │   │   │   ├── field-description.svelte -│   │   │   │   │   ├── field-error.svelte -│   │   │   │   │   ├── field-group.svelte -│   │   │   │   │   ├── field-label.svelte -│   │   │   │   │   ├── field-legend.svelte -│   │   │   │   │   ├── field-separator.svelte -│   │   │   │   │   ├── field-set.svelte -│   │   │   │   │   ├── field.svelte -│   │   │   │   │   ├── field-title.svelte -│   │   │   │   │   └── index.ts -│   │   │   │   ├── input -│   │   │   │   │   ├── index.ts -│   │   │   │   │   └── input.svelte -│   │   │   │   ├── label -│   │   │   │   │   ├── index.ts -│   │   │   │   │   └── label.svelte -│   │   │   │   ├── select -│   │   │   │   │   ├── index.ts -│   │   │   │   │   ├── select-content.svelte -│   │   │   │   │   ├── select-group-heading.svelte -│   │   │   │   │   ├── select-group.svelte -│   │   │   │   │   ├── select-item.svelte -│   │   │   │   │   ├── select-label.svelte -│   │   │   │   │   ├── select-scroll-down-button.svelte -│   │   │   │   │   ├── select-scroll-up-button.svelte -│   │   │   │   │   ├── select-separator.svelte -│   │   │   │   │   └── select-trigger.svelte -│   │   │   │   ├── separator -│   │   │   │   │   ├── index.ts -│   │   │   │   │   └── separator.svelte -│   │   │   │   ├── sheet -│   │   │   │   │   ├── index.ts -│   │   │   │   │   ├── sheet-close.svelte -│   │   │   │   │   ├── sheet-content.svelte -│   │   │   │   │   ├── sheet-description.svelte -│   │   │   │   │   ├── sheet-footer.svelte -│   │   │   │   │   ├── sheet-header.svelte -│   │   │   │   │   ├── sheet-overlay.svelte -│   │   │   │   │   ├── sheet-title.svelte -│   │   │   │   │   └── sheet-trigger.svelte -│   │   │   │   ├── sidebar -│   │   │   │   │   ├── constants.ts -│   │   │   │   │   ├── context.svelte.ts -│   │   │   │   │   ├── index.ts -│   │   │   │   │   ├── sidebar-content.svelte -│   │   │   │   │   ├── sidebar-footer.svelte -│   │   │   │   │   ├── sidebar-group-action.svelte -│   │   │   │   │   ├── sidebar-group-content.svelte -│   │   │   │   │   ├── sidebar-group-label.svelte -│   │   │   │   │   ├── sidebar-group.svelte -│   │   │   │   │   ├── sidebar-header.svelte -│   │   │   │   │   ├── sidebar-input.svelte -│   │   │   │   │   ├── sidebar-inset.svelte -│   │   │   │   │   ├── sidebar-menu-action.svelte -│   │   │   │   │   ├── sidebar-menu-badge.svelte -│   │   │   │   │   ├── sidebar-menu-button.svelte -│   │   │   │   │   ├── sidebar-menu-item.svelte -│   │   │   │   │   ├── sidebar-menu-skeleton.svelte -│   │   │   │   │   ├── sidebar-menu-sub-button.svelte -│   │   │   │   │   ├── sidebar-menu-sub-item.svelte -│   │   │   │   │   ├── sidebar-menu-sub.svelte -│   │   │   │   │   ├── sidebar-menu.svelte -│   │   │   │   │   ├── sidebar-provider.svelte -│   │   │   │   │   ├── sidebar-rail.svelte -│   │   │   │   │   ├── sidebar-separator.svelte -│   │   │   │   │   ├── sidebar.svelte -│   │   │   │   │   └── sidebar-trigger.svelte -│   │   │   │   ├── skeleton -│   │   │   │   │   ├── index.ts -│   │   │   │   │   └── skeleton.svelte -│   │   │   │   ├── switch -│   │   │   │   │   ├── index.ts -│   │   │   │   │   └── switch.svelte -│   │   │   │   ├── table -│   │   │   │   │   ├── index.ts -│   │   │   │   │   ├── table-body.svelte -│   │   │   │   │   ├── table-caption.svelte -│   │   │   │   │   ├── table-cell.svelte -│   │   │   │   │   ├── table-footer.svelte -│   │   │   │   │   ├── table-header.svelte -│   │   │   │   │   ├── table-head.svelte -│   │   │   │   │   ├── table-row.svelte -│   │   │   │   │   └── table.svelte -│   │   │   │   ├── tabs -│   │   │   │   │   ├── index.ts -│   │   │   │   │   ├── tabs-content.svelte -│   │   │   │   │   ├── tabs-list.svelte -│   │   │   │   │   ├── tabs.svelte -│   │   │   │   │   └── tabs-trigger.svelte -│   │   │   │   ├── textarea -│   │   │   │   │   ├── index.ts -│   │   │   │   │   └── textarea.svelte -│   │   │   │   └── tooltip -│   │   │   │   ├── index.ts -│   │   │   │   ├── tooltip-content.svelte -│   │   │   │   └── tooltip-trigger.svelte -│   │   │   ├── hooks -│   │   │   │   └── is-mobile.svelte.ts -│   │   │   ├── paraglide -│   │   │   │   ├── messages -│   │   │   │   │   ├── en.js -│   │   │   │   │   ├── es.js -│   │   │   │   │   └── _index.js -│   │   │   │   ├── messages.js -│   │   │   │   ├── registry.js -│   │   │   │   ├── runtime.js -│   │   │   │   └── server.js -│   │   │   ├── server -│   │   │   │   └── api.ts -│   │   │   ├── sso.ts -│   │   │   ├── stores -│   │   │   │   └── company.svelte.ts -│   │   │   └── utils.ts -│   │   └── routes -│   │   ├── api -│   │   │   └── company -│   │   │   └── my-companies -│   │   │   └── +server.ts -│   │   ├── auth -│   │   │   └── callback -│   │   │   ├── +page.server.ts -│   │   │   └── +page.svelte -│   │   ├── dashboard -│   │   │   ├── classes -│   │   │   │   └── +page.svelte -│   │   │   ├── clients_and_providers -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── customs_brokers -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── general_catalogs -│   │   │   │   ├── classification_concepts -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── company_information -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── concepts -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── customs_broker_concepts -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── doda -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── electronic_notices -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── equivalencies -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── error_catalogs -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── exchange-rate -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── identifiers -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── inpc -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── legends -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── locations -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── multi_currency_types -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── packages -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── +page.svelte -│   │   │   │   ├── ports -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── prevalidators -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── seal -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── signatures -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── unit_conversions -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   └── units_of_measure -│   │   │   │   ├── ace -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── american -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── customs -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── general -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   └── oma -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── invoices -│   │   │   │   ├── exportacion -│   │   │   │   │   ├── exportacion -│   │   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   │   └── +page.svelte -│   │   │   │   │   └── reparacion -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   └── importacion -│   │   │   │   ├── cambio_regimen -│   │   │   │   │   ├── new -│   │   │   │   │   │   └── +page.svelte -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── compras_mexicanas -│   │   │   │   │   ├── new -│   │   │   │   │   │   └── +page.svelte -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── definitiva -│   │   │   │   │   ├── new -│   │   │   │   │   │   └── +page.svelte -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   └── temporal -│   │   │   │   ├── new -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── +layout.server.ts -│   │   │   ├── +layout.svelte -│   │   │   ├── +layout.ts -│   │   │   ├── +page.svelte -│   │   │   ├── pedimentos -│   │   │   │   ├── edit -│   │   │   │   │   └── [id] -│   │   │   │   │   ├── +page.server.ts -│   │   │   │   │   └── +page.svelte -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   └── reference_data -│   │   │   ├── code_pedimento_regimens -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── containers -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── countries -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── currency_types -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── customs_sections -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── customs_warehouses -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── incoterms -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── invoice_types -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── material_types -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── +page.svelte -│   │   │   ├── payment_methods -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── pedimento_codes -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── pedimento_regimens -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── sectors -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── states -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── transport_modes -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   ├── transport_types -│   │   │   │   ├── +page.server.ts -│   │   │   │   └── +page.svelte -│   │   │   └── valuation_methods -│   │   │   ├── +page.server.ts -│   │   │   └── +page.svelte -│   │   ├── demo -│   │   │   ├── +page.svelte -│   │   │   └── paraglide -│   │   │   └── +page.svelte -│   │   ├── +layout.svelte -│   │   ├── login -│   │   │   ├── +page.server.ts -│   │   │   └── +page.svelte -│   │   ├── logout -│   │   │   └── +server.ts -│   │   ├── +page.server.ts -│   │   ├── +page.svelte -│   │   ├── page.svelte.spec.ts -│   │   └── register -│   │   └── +page.svelte -│   ├── svelte.config.js -│   ├── tsconfig.json -│   ├── vite.config.ts -│   └── vitest-setup-client.ts -├── pnpm-lock.yaml -├── README.md -├── scripts -│   ├── backend-entrypoint.sh -│   ├── frontend-entrypoint.sh -│   ├── health-check.sh -│   ├── init_first_time.sh -│   ├── keycloak-entrypoint.sh -│   ├── postgres-app-entrypoint.sh -│   └── postgres-keycloak-entrypoint.sh -└── start.sh - -245 directories, 943 files diff --git a/frontend/src/lib/components/dashboard/invoices/columns.ts b/frontend/src/lib/components/dashboard/invoices/columns.ts index d7f03fc5..bee37d2d 100644 --- a/frontend/src/lib/components/dashboard/invoices/columns.ts +++ b/frontend/src/lib/components/dashboard/invoices/columns.ts @@ -1,89 +1,250 @@ -/** - * Definición de columnas para la tabla de facturas - */ +import type { ColumnDef } from "@tanstack/table-core"; +import { renderComponent, renderSnippet } from "$lib/components/ui/data-table/index.js"; +import { createRawSnippet } from "svelte"; +import DataTableActions from "./data-table-actions.svelte"; import type { Invoice } from '$lib/api/dashboard/a76/invoices'; -import DataTableActions from './data-table-actions.svelte'; -export function createColumns() { +/** + * Formatea un número como moneda MXN + */ +function formatCurrencyMXN(value?: number | null): string { + if (value === null || value === undefined) return '-'; + return new Intl.NumberFormat('es-MX', { + style: 'currency', + currency: 'MXN', + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }).format(value); +} + +/** + * Formatea un número como moneda USD + */ +function formatCurrencyUSD(value?: number | null): string { + if (value === null || value === undefined) return '-'; + return new Intl.NumberFormat('es-MX', { + style: 'currency', + currency: 'USD', + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }).format(value); +} + +/** + * Formatea una fecha + */ +function formatDate(date?: string | null): string { + if (!date) return '-'; + return new Date(date).toLocaleDateString('es-MX', { + year: 'numeric', + month: '2-digit', + day: '2-digit' + }); +} + +/** + * Obtiene el color del badge según el tipo de operación + */ +function getOperationTypeColor(type?: string | null): string { + if (!type) return 'bg-gray-100 text-gray-800'; + return type === 'imp' ? 'bg-blue-100 text-blue-800' : 'bg-green-100 text-green-800'; +} + +/** + * Obtiene el color del badge según el semáforo fiscal + */ +function getTrafficLightColor(status?: string | null): string { + if (!status) return 'bg-gray-100 text-gray-800'; + + const statusLower = status.toLowerCase(); + if (statusLower.includes('verde') || statusLower === 'green') return 'bg-green-100 text-green-800'; + if (statusLower.includes('amarillo') || statusLower === 'yellow') return 'bg-yellow-100 text-yellow-800'; + if (statusLower.includes('rojo') || statusLower === 'red') return 'bg-red-100 text-red-800'; + + return 'bg-gray-100 text-gray-800'; +} + +export function createColumns(onSuccess?: () => void): ColumnDef[] { return [ { - accessorKey: 'id', - header: 'ID', - cell: (info: any) => info.getValue(), - enableSorting: true - }, - { - accessorKey: 'operation_type', - header: 'Tipo', - cell: (info: any) => { - const type = info.getValue(); - return type === 'imp' ? 'Importación' : type === 'exp' ? 'Exportación' : '-'; + accessorKey: "id", + header: "ID", + cell: ({ row }) => { + const idSnippet = createRawSnippet<[{ id: number }]>((getId) => { + const { id } = getId(); + return { + render: () => + `
#${id}
` + }; + }); + return renderSnippet(idSnippet, { id: row.original.id }); } }, { - accessorKey: 'invoice_number', - header: 'Número de Factura', - cell: (info: any) => info.getValue() || '-' - }, - { - accessorKey: 'invoice_type', - header: 'Tipo Factura', - cell: (info: any) => info.getValue() || '-' - }, - { - accessorKey: 'project_number', - header: 'Proyecto', - cell: (info: any) => info.getValue() || '-' - }, - { - accessorKey: 'compliance_mx.pedimento', - header: 'Pedimento', - cell: (info: any) => { - const row = info.row.original; - return row.compliance_mx?.pedimento || '-'; + accessorKey: "operation_type", + header: "Operación", + cell: ({ row }) => { + const type = row.original.operation_type; + const colorClass = getOperationTypeColor(type); + const label = type === 'imp' ? 'IMP' : type === 'exp' ? 'EXP' : 'N/A'; + + const typeSnippet = createRawSnippet<[{ label: string; colorClass: string }]>((getType) => { + const { label, colorClass } = getType(); + return { + render: () => + ` + ${label} + ` + }; + }); + return renderSnippet(typeSnippet, { label, colorClass }); } }, { - accessorKey: 'invoice_date', - header: 'Fecha Factura', - cell: (info: any) => { - const date = info.getValue(); - if (!date) return '-'; - return new Date(date).toLocaleDateString('es-MX'); + accessorKey: "invoice_number", + header: "Número de Factura", + cell: ({ row }) => { + const numberSnippet = createRawSnippet<[{ number?: string | null }]>((getNumber) => { + const { number } = getNumber(); + return { + render: () => + `${number || 'N/A'}` + }; + }); + return renderSnippet(numberSnippet, { number: row.original.invoice_number }); } }, { - accessorKey: 'financials.value_mn', - header: 'Valor MN', - cell: (info: any) => { - const row = info.row.original; - const value = row.financials?.value_mn; - if (value === null || value === undefined) return '-'; - return new Intl.NumberFormat('es-MX', { - style: 'currency', - currency: 'MXN' - }).format(value); + accessorKey: "invoice_type", + header: "Tipo", + cell: ({ row }) => { + const typeSnippet = createRawSnippet<[{ type?: string | null }]>((getType) => { + const { type } = getType(); + return { + render: () => + `
${type || '-'}
` + }; + }); + return renderSnippet(typeSnippet, { type: row.original.invoice_type }); } }, { - accessorKey: 'traffic_light_status', - header: 'Semáforo', - cell: (info: any) => info.getValue() || '-' - }, - { - accessorKey: 'capture_date', - header: 'Fecha Captura', - cell: (info: any) => { - const date = info.getValue(); - if (!date) return '-'; - return new Date(date).toLocaleDateString('es-MX'); + accessorKey: "project_number", + header: "Proyecto", + cell: ({ row }) => { + const projectSnippet = createRawSnippet<[{ project?: string | null }]>((getProject) => { + const { project } = getProject(); + return { + render: () => + `
${project || '-'}
` + }; + }); + return renderSnippet(projectSnippet, { project: row.original.project_number }); } }, { - id: 'actions', - header: 'Acciones', - cell: (info: any) => DataTableActions, - enableSorting: false + accessorKey: "compliance_mx.pedimento", + header: "Pedimento", + cell: ({ row }) => { + const pedimento = row.original.compliance_mx?.pedimento; + + const pedimentoSnippet = createRawSnippet<[{ pedimento?: string | null }]>((getPedimento) => { + const { pedimento } = getPedimento(); + return { + render: () => + `
${pedimento || '-'}
` + }; + }); + return renderSnippet(pedimentoSnippet, { pedimento }); + } + }, + { + accessorKey: "financials.value_mn", + header: () => { + const headerSnippet = createRawSnippet(() => { + return { + render: () => `
Valor MN
` + }; + }); + return renderSnippet(headerSnippet, {}); + }, + cell: ({ row }) => { + const valueMN = row.original.financials?.value_mn; + + const valueSnippet = createRawSnippet<[{ value: string }]>((getValue) => { + const { value } = getValue(); + return { + render: () => + `
${value}
` + }; + }); + return renderSnippet(valueSnippet, { value: formatCurrencyMXN(valueMN) }); + } + }, + { + accessorKey: "financials.value_me", + header: () => { + const headerSnippet = createRawSnippet(() => { + return { + render: () => `
Valor ME
` + }; + }); + return renderSnippet(headerSnippet, {}); + }, + cell: ({ row }) => { + const valueME = row.original.financials?.value_me; + + const valueSnippet = createRawSnippet<[{ value: string }]>((getValue) => { + const { value } = getValue(); + return { + render: () => + `
${value}
` + }; + }); + return renderSnippet(valueSnippet, { value: formatCurrencyUSD(valueME) }); + } + }, + { + accessorKey: "traffic_light_status", + header: "Semáforo", + cell: ({ row }) => { + const status = row.original.traffic_light_status; + const colorClass = getTrafficLightColor(status); + + const statusSnippet = createRawSnippet<[{ status?: string | null; colorClass: string }]>((getStatus) => { + const { status, colorClass } = getStatus(); + return { + render: () => + ` + ${status || '-'} + ` + }; + }); + return renderSnippet(statusSnippet, { status, colorClass }); + } + }, + { + accessorKey: "invoice_date", + header: "Fecha Factura", + cell: ({ row }) => { + const dateSnippet = createRawSnippet<[{ date: string }]>((getDate) => { + const { date } = getDate(); + return { + render: () => + `
${date}
` + }; + }); + return renderSnippet(dateSnippet, { date: formatDate(row.original.invoice_date) }); + } + }, + { + id: "actions", + cell: ({ row }) => { + return renderComponent(DataTableActions, { invoice: row.original, onSuccess }); + } } ]; } + +// Mantener compatibilidad hacia atrás +export const columns = createColumns(); diff --git a/frontend/src/lib/components/dashboard/invoices/data-table-actions.svelte b/frontend/src/lib/components/dashboard/invoices/data-table-actions.svelte index 4b5f2e65..bbb7a09f 100644 --- a/frontend/src/lib/components/dashboard/invoices/data-table-actions.svelte +++ b/frontend/src/lib/components/dashboard/invoices/data-table-actions.svelte @@ -3,26 +3,24 @@ import { Button } from '$lib/components/ui/button'; import * as DropdownMenu from '$lib/components/ui/dropdown-menu'; import { Ellipsis, Eye, Pencil, Trash2 } from 'lucide-svelte'; - import { goto } from '$app/navigation'; + import DetailsDialog from './details-dialog.svelte'; + import DeleteDialog from './delete-dialog.svelte'; interface Props { invoice: Invoice; + onSuccess?: () => void; } - let { invoice }: Props = $props(); + let { invoice, onSuccess }: Props = $props(); + + let showDetails = $state(false); + let showDelete = $state(false); - function dispatchView() { - window.dispatchEvent(new CustomEvent('invoiceView', { detail: invoice })); + function handleEdit() { + // Redirigir a la página de edición + window.location.href = `/dashboard/invoices/edit/${invoice.id}`; } - function dispatchDelete() { - window.dispatchEvent(new CustomEvent('invoiceDelete', { detail: invoice })); - } - - function dispatchEdit() { - window.dispatchEvent(new CustomEvent('invoiceEdit', { detail: invoice })); - } - @@ -38,20 +36,36 @@ Acciones - + showDetails = true}> Ver Detalles - + Editar - + showDelete = true} class="text-destructive"> Eliminar - \ No newline at end of file + + + +{#if showDetails} + showDetails = false} + /> +{/if} + +{#if showDelete} + showDelete = false} + {onSuccess} + /> +{/if} \ No newline at end of file diff --git a/frontend/src/lib/components/dashboard/invoices/data-table.svelte b/frontend/src/lib/components/dashboard/invoices/data-table.svelte index 14c41b7e..ef98de23 100644 --- a/frontend/src/lib/components/dashboard/invoices/data-table.svelte +++ b/frontend/src/lib/components/dashboard/invoices/data-table.svelte @@ -83,18 +83,10 @@ {#each row.getVisibleCells() as cell (cell.id)} - {#if cell.column.id === 'actions'} - {@const cellDef = cell.column.columnDef.cell} - {#if cellDef && typeof cellDef === 'function'} - {@const Component = cellDef(cell.getContext())} - - {/if} - {:else} - - {/if} + {/each} diff --git a/frontend/src/lib/components/dashboard/invoices/delete-dialog.svelte b/frontend/src/lib/components/dashboard/invoices/delete-dialog.svelte index f33d7937..c813bbae 100644 --- a/frontend/src/lib/components/dashboard/invoices/delete-dialog.svelte +++ b/frontend/src/lib/components/dashboard/invoices/delete-dialog.svelte @@ -5,27 +5,26 @@ import { companyStore } from "$lib/stores/company.svelte"; import { LoaderCircle } from 'lucide-svelte'; - let { - open = $bindable(false), - item, - onSuccess - }: { - open: boolean; - item: Invoice | null; + interface Props { + invoice: Invoice; + onClose: () => void; onSuccess?: () => void; - } = $props(); + } + + let { invoice, onClose, onSuccess }: Props = $props(); + let open = $state(true); let loading = $state(false); let error = $state(null); async function handleDelete() { - if (!item || !companyStore.activeCompany) return; + if (!invoice || !companyStore.activeCompany) return; loading = true; error = null; try { - const response = await invoicesApi.delete(item.id, companyStore.activeCompany.id); + const response = await invoicesApi.delete(invoice.id, companyStore.activeCompany.id); if (response.error) { error = response.error; @@ -33,7 +32,7 @@ } // Éxito - open = false; + onClose(); if (onSuccess) { onSuccess(); } @@ -48,8 +47,10 @@ function handleOpenChange(newOpen: boolean) { if (!newOpen) { error = null; + onClose(); + } else { + open = newOpen; } - open = newOpen; } @@ -59,30 +60,30 @@ ¿Estás seguro?

Esta acción no se puede deshacer. Se eliminará permanentemente esta factura:

- {#if item} + {#if invoice}
ID: - {item.id} + {invoice.id}
Número de Factura: - {item.invoice_number || 'N/A'} + {invoice.invoice_number || 'N/A'}
Tipo: - {item.operation_type === 'imp' ? 'Importación' : - item.operation_type === 'exp' ? 'Exportación' : 'N/A'} + {invoice.operation_type === 'imp' ? 'Importación' : + invoice.operation_type === 'exp' ? 'Exportación' : 'N/A'}
Proyecto: - {item.project_number || 'N/A'} + {invoice.project_number || 'N/A'}
Pedimento: - {item.compliance_mx?.pedimento || 'N/A'} + {invoice.compliance_mx?.pedimento || 'N/A'}
{/if} diff --git a/frontend/src/lib/components/dashboard/invoices/details-dialog.svelte b/frontend/src/lib/components/dashboard/invoices/details-dialog.svelte index e517faa3..12bc4862 100644 --- a/frontend/src/lib/components/dashboard/invoices/details-dialog.svelte +++ b/frontend/src/lib/components/dashboard/invoices/details-dialog.svelte @@ -5,13 +5,13 @@ import { Badge } from '$lib/components/ui/badge'; import { Button } from '$lib/components/ui/button'; - let { - open = $bindable(false), - invoice - }: { - open: boolean; - invoice: Invoice | null; - } = $props(); + interface Props { + invoice: Invoice; + onClose: () => void; + } + + let { invoice, onClose }: Props = $props(); + let open = $state(true); function formatDate(dateString: string | null | undefined): string { if (!dateString) return '-'; @@ -32,7 +32,7 @@ } - (open = v)}> + { open = v; if (!v) onClose(); }}> Detalles de Factura #{invoice?.id} diff --git a/frontend/src/lib/components/dashboard/invoices/edit/compliance-tab-form.svelte b/frontend/src/lib/components/dashboard/invoices/edit/compliance-tab-form.svelte new file mode 100644 index 00000000..15ef3ab6 --- /dev/null +++ b/frontend/src/lib/components/dashboard/invoices/edit/compliance-tab-form.svelte @@ -0,0 +1,60 @@ + + + + + Cumplimiento Aduanal + Información de cumplimiento y aduanas + + +
+
+ + +
+
+ + +
+
+

Más campos por implementar...

+
+
\ No newline at end of file diff --git a/frontend/src/lib/components/dashboard/invoices/edit/financials-tab-form.svelte b/frontend/src/lib/components/dashboard/invoices/edit/financials-tab-form.svelte new file mode 100644 index 00000000..14e4b9ff --- /dev/null +++ b/frontend/src/lib/components/dashboard/invoices/edit/financials-tab-form.svelte @@ -0,0 +1,53 @@ + + + + + Información Financiera + Valores, monedas y datos financieros + + +
+
+ + +
+
+ + +
+
+

Más campos por implementar...

+
+
\ No newline at end of file diff --git a/frontend/src/lib/components/dashboard/invoices/edit/general-tab-form.svelte b/frontend/src/lib/components/dashboard/invoices/edit/general-tab-form.svelte new file mode 100644 index 00000000..42f9cba2 --- /dev/null +++ b/frontend/src/lib/components/dashboard/invoices/edit/general-tab-form.svelte @@ -0,0 +1,224 @@ + + + + + Información General + + Edita los datos principales de la factura + + + +
+ +
+
+ + { + formData.operation_type = v ? parseInt(v) : null; + }} + > + + + {formData.operation_type !== null + ? operationOptions.find(o => o.value === formData.operation_type)?.label + : 'Selecciona tipo...'} + + + + {#each operationOptions as option} + {option.label} + {/each} + + +
+ +
+ + { + formData.invoice_type = v ?? ''; + }} + > + + + {formData.invoice_type + ? `${formData.invoice_type} - ${filteredInvoiceTypes().find(t => t.key === formData.invoice_type)?.description || ''}` + : 'Selecciona tipo...'} + + + + {#each filteredInvoiceTypes() as type} + + {type.key} - {type.description} + + {/each} + + +
+
+ + +
+
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+ +
+ + { + formData.traffic_light_status = v ?? 'green'; + }} + > + + + {trafficLightOptions.find(t => t.value === formData.traffic_light_status)?.label || 'Verde'} + + + + {#each trafficLightOptions as option} + {option.label} + {/each} + + +
+
+ + +
+ +