216983623a
feat(application): guard avisos en CreateRubroCommandHandler (CAT-002)
2026-04-19 08:22:55 -03:00
9e50a929ae
feat(application): RubroTreeBuilder + GetRubroTree con tieneAvisos (CAT-002)
2026-04-19 08:20:36 -03:00
673194e249
feat(application): IAvisoQueryRepository + NullAvisoQueryRepository (CAT-002)
2026-04-19 08:18:56 -03:00
ddd28ea4d5
feat(domain): excepciones regla de oro rama/hoja (CAT-002)
2026-04-19 08:17:45 -03:00
205f9c76ad
Merge pull request 'feat: CAT-001 Árbol N-ario de Rubros' ( #30 ) from feature/CAT-001 into main
2026-04-19 10:49:37 +00:00
389dda6e5e
fix(tests): consolidar V016 en SqlTestFixture post issue #29
...
Rebase de CAT-001 sobre main (post #29 ) requiere:
- EnsureV016SchemaAsync en SqlTestFixture
- Rubro_History en TablesToIgnore central (el commit original b1be4a5 se skipeo por ser obsoleto post consolidacion)
- catalogo:rubros:gestionar en seed canonical de Permiso + RolPermiso admin
- RubroRepositoryTests refactorizado al patron [Collection] + SqlTestFixture
- RubrosControllerTests apunta a TestConnectionStrings.ApiTestDb
- Counts de permisos admin actualizados 24 -> 25 en 5 tests
Verify: App 819/819 + Api 251/251 + vitest 349/349 verde post-rebase.
2026-04-19 07:49:18 -03:00
bd2febf411
fix(frontend): MoveRubroDialog type cast para zodResolver output (CAT-001)
2026-04-19 07:42:56 -03:00
46ef3878de
feat(frontend): MoveRubroDialog + wire en RubrosPage + aria-describedby (CAT-001)
...
Implementa MoveRubroDialog con flattenExcludingSubtree para prevenir ciclos en UI,
lo conecta en RubrosPage y agrega DialogDescription en RubroFormDialog.
2026-04-19 07:42:55 -03:00
022a36a90c
test(application): GetRubroByIdQueryHandlerTests dedicado (CAT-001)
2026-04-19 07:42:55 -03:00
f07802f769
fix(frontend): corregir tipos zodResolver en RubroFormDialog (CAT-001)
...
- Reemplaza z.union([z.coerce.number(), z.literal('')]) por z.string().transform+pipe para evitar inferencia unknown en zodResolver
- Simplifica RubroFormValues a {nombre: string, tarifarioBaseId?: number | null}
- Actualiza RubrosPage: tarifarioId ya llega como number|null del schema transform
2026-04-19 07:42:55 -03:00
b22e9fe59a
feat(frontend): rubros feature + CategoryTree + CRUD dialogs (CAT-001)
...
Co-Authored-By: none
2026-04-19 07:42:54 -03:00
5e2323e0bc
feat(api): RubrosController + integration tests e2e + audit verification (CAT-001)
2026-04-19 07:42:54 -03:00
f8e9d18379
feat(infrastructure): RubroRepository Dapper + DI + integration tests (CAT-001)
2026-04-19 07:42:53 -03:00
d9fc9a2867
feat(application): Rubros commands/queries + RubroTreeBuilder + audit (CAT-001)
2026-04-19 07:42:26 -03:00
dcb2e5ada6
feat(domain): Rubro entity + domain exceptions (CAT-001)
2026-04-19 07:42:26 -03:00
9f78425a93
fix(bd): V016 COLLATE order — SQL Server requiere COLLATE antes de NOT NULL (CAT-001)
2026-04-19 07:42:25 -03:00
0d50d4f3cc
feat(bd): V016 create Rubro table con SYSTEM_VERSIONING (CAT-001)
...
- dbo.Rubro: adjacency list, self-FK, soft-delete, temporal retention 10y
- Filtered unique index UQ_Rubro_ParentId_Nombre_Activo + covering IX_Rubro_ParentId_Activo
- Permission catalogo:rubros:gestionar seeded + assigned to admin role
- V016_ROLLBACK.sql: full reversal script
- RubrosOptions class (MaxDepth=10) + appsettings.json Rubros section
- services.Configure<RubrosOptions> registered in Infrastructure DI
- database/README.md updated with V013-V016 entries
2026-04-19 07:42:25 -03:00
9886524645
Merge pull request 'fix: issue #29 — integration tests flakiness (DB split + SqlTestFixture consolidado)' ( #34 ) from fix/issue-29-flakiness into main
2026-04-19 10:41:27 +00:00
bcbba2c012
Merge pull request 'chore(frontend): limpiar lint errors pre-existentes' ( #33 ) from chore/frontend-lint-preexisting into main
2026-04-19 10:41:16 +00:00
3cb89f80a3
Merge pull request 'chore(tests): dotnet format sobre archivos pre-existentes' ( #32 ) from chore/dotnet-format-testfixtures into main
2026-04-19 10:41:14 +00:00
18ce4f6841
Merge pull request 'chore(frontend): DialogDescription en dialogs para a11y' ( #31 ) from chore/dialog-aria-describedby into main
2026-04-19 10:41:09 +00:00
8daadc8a77
fix(tests): timestamp determinístico en QueryAsync_Limit_EmitsCursor
...
DATETIME2(3) + cursor roundtrip via O format perdía sub-ms de
DateTime.UtcNow causando ~37% flake rate. Timestamp fijo con sub-ms=0
elimina la ambigüedad.
Fixes residual flake del issue #29 .
2026-04-19 07:40:32 -03:00
a0dcc7258b
docs(database): actualiza README con V013-V015 y sección Test DBs
...
Agrega filas V013, V014, V015 a la tabla de migraciones. Actualiza
convención de "3 bases" (SIGCM2, SIGCM2_Test_App, SIGCM2_Test_Api).
Añade sección "Bases de datos de integration tests" con tabla de
propósito y referencia al script de creación.
2026-04-18 21:44:45 -03:00
e5b6c06f64
refactor(tests): Api.Tests apunta a SIGCM2_Test_Api via TestConnectionStrings
...
Todos los archivos de Api.Tests reemplazan la connection string hardcodeada
por TestConnectionStrings.ApiTestDb. Cada proyecto de tests ahora tiene su
propia base de datos aislada, eliminando la contención entre Application.Tests
y Api.Tests que causaba flakiness.
2026-04-18 21:44:40 -03:00
e0b9cba948
refactor(tests): Application.Tests elimina Respawner inline; usa SqlTestFixture compartido
...
6 clases que instanciaban Respawner directamente migran a recibir SqlTestFixture
vía ICollectionFixture. 8 clases restantes solo actualizan ConnectionString a
TestConnectionStrings.AppTestDb. Cada clase ahora es responsable únicamente de
sus seeds específicos; la limpieza de la base queda centralizada en el fixture.
2026-04-18 21:44:36 -03:00
03a695feb9
refactor(tests): DatabaseCollection centraliza ICollectionFixture<SqlTestFixture>
...
Registra la colección "Database" con SqlTestFixture como fixture compartido
para Application.Tests (elimina el ctor-con-string inline en cada test class).
Agrega Using global a ambos proyectos para evitar usings por archivo.
2026-04-18 21:44:24 -03:00
e987228f14
refactor(tests): SqlTestFixture usa TestConnectionStrings; ctor interno para Api.Tests
...
Agrega ctor parameterless que apunta a SIGCM2_Test_App (requerido por
xUnit ICollectionFixture<T>). El ctor con string se marca internal y
expone via InternalsVisibleTo a SIGCM2.Api.Tests. TestWebAppFactory
apunta a SIGCM2_Test_Api. Se agrega propiedad Connection pública para
que los tests que necesitan queries ad-hoc la usen.
2026-04-18 21:44:19 -03:00
d4a2b3bc3e
feat(tests): añade TestConnectionStrings y script de creación de DBs de test
...
Introduce SIGCM2_Test_App y SIGCM2_Test_Api como bases aisladas para
Application.Tests y Api.Tests respectivamente. TestConnectionStrings.cs
centraliza las connection strings; create-test-api-db.sql documenta
el setup idempotente de ambas bases con COLLATE Modern_Spanish_CI_AS.
2026-04-18 21:44:12 -03:00
50a3c87b14
chore(frontend): limpiar lint errors pre-existentes
...
11 errores en archivos pre-existentes (0 en rubros/). Categorización:
2 bugs reales removidos, 1 FP con disable comentado, 8 FPs suprimidos con eslint-disable-next-line.
Files:
- src/web/src/components/ui/badge.tsx — react-refresh/only-export-components (FP: shadcn/ui co-ubica badgeVariants con el componente por diseño)
- src/web/src/components/ui/button.tsx — react-refresh/only-export-components (FP: ídem, buttonVariants)
- src/web/src/components/ui/form.tsx — react-refresh/only-export-components (FP: shadcn/ui co-ubica useFormField hook)
- src/web/src/pages/admin/audit/AuditFilters.tsx — react-refresh/only-export-components x2 (FP: EMPTY_FILTERS y toApiFilter co-ubicados con el componente que los consume)
- src/web/src/features/permisos/components/RolPermisosEditor.tsx — react-hooks/set-state-in-effect (FP: patrón válido de derived state desde prop externa asignados)
- src/web/src/features/users/components/PermisosEditor.tsx — react-hooks/set-state-in-effect (FP: ídem, permisoData → mapa local de overrides)
- src/web/src/pages/admin/audit/AuditPage.tsx — react-hooks/set-state-in-effect (FP: acumulación de páginas paginadas desde query externa)
- src/web/src/features/users/pages/CreateUserPage.tsx — @typescript-eslint/no-unused-vars (FP: _created existe por contrato de callback, no se necesita el valor)
- src/web/src/lib/dateFormat.ts — @typescript-eslint/no-unused-vars (FP: _opts reservado para extensibilidad futura; formato hardcodeado por compatibilidad Intl)
- src/web/src/tests/api/axiosClient.test.ts — @typescript-eslint/no-unused-vars (bug real: requestCount incrementado en mock handler pero nunca asercionado; variable eliminada)
2026-04-18 21:00:00 -03:00
9957724c40
chore(tests): dotnet format sobre archivos pre-existentes (surfaced durante CAT-001)
...
Fix mecánico de whitespace detectado por dotnet format --verify-no-changes durante la verify phase de CAT-001 (PR #30 ). Sin cambios funcionales.
2026-04-18 20:56:23 -03:00
1cb69cbaf3
chore(frontend): DialogDescription en dialogs para a11y (silencia Radix warning)
2026-04-18 20:55:36 -03:00
8353f73230
Merge pull request 'refactor(udt-011): Quartz jobs usan TimeProvider ( closes #24 )' ( #28 ) from fix/UDT-011-quartz-jobs-timeprovider into main
2026-04-18 14:08:11 +00:00
01ad4cbfbc
test(udt-011): Quartz jobs verifican TimeProvider injection
2026-04-18 11:07:47 -03:00
67da544bb4
refactor(udt-011): AuditRetentionEnforcerJob usa TimeProvider inyectado
2026-04-18 11:07:43 -03:00
b79dfb2f34
refactor(udt-011): AuditPartitionManagerJob usa TimeProvider inyectado
2026-04-18 11:07:40 -03:00
ff912cc6a9
refactor(udt-011): AuditIntegrityCheckJob usa TimeProvider inyectado
2026-04-18 11:07:36 -03:00
8d2618e6e5
Merge pull request 'UDT-011: Localización Temporal Argentina (infra transversal)' ( #25 ) from feature/UDT-011 into main
2026-04-18 13:57:49 +00:00
a5fd3e90fb
Merge branch 'main' into feature/UDT-011
2026-04-18 10:56:09 -03:00
50f713dc10
Merge pull request 'fix(web): cleanup 25 TS errors preexistentes en main ( closes #26 )' ( #27 ) from fix/ADM-011-web-ts-cleanup into main
...
fix(web): cleanup 25 TS errors preexistentes en main (closes #26 )
2026-04-18 13:55:33 +00:00
b5ec0c25a9
fix(web/tests): alinear updateUserPermisosOverrides mock con UsuarioPermisos shape (TS2339)
2026-04-18 10:54:44 -03:00
a39427865f
fix(web/tests): eliminar imports no usados en tests (TS6133)
2026-04-18 10:54:40 -03:00
202d267e16
fix(web): migrar SeccionForm a sintaxis Zod v4 (errorMap → error, coerce.number<number>())
2026-04-18 10:54:28 -03:00
8b369b69ee
fix(web): migrar MedioForm a sintaxis Zod v4 (TS2322 — coerce.number<number>())
2026-04-18 10:54:23 -03:00
d16da502f4
fix(web): corregir import type-only de ButtonProps en pagination.tsx (TS1484)
2026-04-18 10:54:19 -03:00
408c97559b
chore(web/udt-011): grep final confirma 0 anti-patterns en src/web/src fuera de dateFormat.ts
2026-04-18 10:27:13 -03:00
ef4b02be3b
fix(web/udt-011): AuditFilters datetime-local usa parseArgentinaDateTimeToUtc (fix BUG-FE-05)
2026-04-18 10:26:56 -03:00
03a02c63d5
refactor(web/udt-011): eliminar 4 funciones formatDate duplicadas y formatOccurredAt, usar dateFormat utility (fix BUG-FE-01, BUG-FE-02)
2026-04-18 10:26:29 -03:00
71d0928389
fix(web/udt-011): NuevaVigenciaModal preview usa prevCivilDate+formatCivilDate sin Date() (fix BUG-FE-04)
2026-04-18 10:24:15 -03:00
20b5863908
fix(web/udt-011): IngresosBrutosFormModal default vigenciaDesde usa todayArgentina
2026-04-18 10:22:47 -03:00
7e23a16062
fix(web/udt-011): TipoDeIvaFormModal default vigenciaDesde usa todayArgentina (fix BUG-FE-03)
2026-04-18 10:22:43 -03:00