dmencu 3.4.0 → 3.5.1
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.
- package/CLAUDE.md +87 -0
- package/ayuda/muestra.md +14 -0
- package/dist/server/app-dmencu.js +5 -2
- package/dist/server/def-config.d.ts +1 -1
- package/dist/server/def-config.js +2 -1
- package/dist/server/server/app-dmencu.js +5 -2
- package/dist/server/server/def-config.d.ts +1 -1
- package/dist/server/server/def-config.js +2 -1
- package/dist/server/server/table-tem.d.ts +1 -0
- package/dist/server/server/table-tem.js +25 -21
- package/dist/server/server/table-tem_edicion.d.ts +2 -0
- package/dist/server/server/table-tem_edicion.js +62 -0
- package/dist/server/table-tem.d.ts +1 -0
- package/dist/server/table-tem.js +25 -21
- package/dist/server/table-tem_edicion.d.ts +2 -0
- package/dist/server/table-tem_edicion.js +62 -0
- package/dist/test/app-para-tests.d.ts +9 -8
- package/dist/test/app-para-tests.js +8 -2
- package/dist/test/test-tem-edicion.d.ts +1 -0
- package/dist/test/test-tem-edicion.js +103 -0
- package/dist/test/test.d.ts +1 -0
- package/dist/test/test.js +3 -2
- package/install/validar_manzana_casa_tem_trg.sql +25 -0
- package/package.json +3 -2
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# CLAUDE.md — dmencu
|
|
2
|
+
|
|
3
|
+
App que corre sobre Backend-Plus y PostgreSQL para crear operativos de campo y definir encuestas a partir de metadatos. Funciona en dispositivos moviles mediante offline-first (PWA con service worker). Gestiona hoja de ruta (Hdr), asignación de cargas por encuestador y supervisor, y el motor de tareas y acciones. Las preguntas del formulario se definen por metadatos (basada en meta-enc).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Nombres de operativos
|
|
8
|
+
|
|
9
|
+
- El número del operativo (por ejemplo `274`) identifica la onda: en `274`, `27` es el año y `4` es el trimestre.
|
|
10
|
+
- Al hablar del operativo en general (documentación, explicaciones, mensajes, nombres de funciones o textos de interfaz), **no usar el código numérico**. Usar la descripción, por ejemplo "la encuesta trimestral", "el operativo vigente" o "la onda actual".
|
|
11
|
+
- El código sólo aparece cuando es un identificador técnico que el sistema exige (por ejemplo, valores de la columna `operativo`) o cuando se habla de una onda concreta.
|
|
12
|
+
- Esta regla aplica a cualquier operativo, no sólo a una app en particular.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Estructura de archivos
|
|
17
|
+
|
|
18
|
+
Las tablas están definidas siguiendo la convención de `backend-plus`: cada tabla tiene su propio archivo con el prefijo `tabla-`, ubicado en `src/server/`. El frontend en `src/client` y en `src/common` lo que sea común a ambos.
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
> 📝 Antes de trabajar con cualquier tabla, leer su archivo `tabla-*.ts` correspondiente. Ahí están los nombres exactos de columnas, labels, descripciones y cualquier lógica de validación definida a nivel de tabla.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
### Stack
|
|
26
|
+
|
|
27
|
+
- **Backend**: Node.js + TypeScript, usando `backend-plus` como framework base (autenticación, tablas, procedimientos, API REST)
|
|
28
|
+
- **Frontend**: dos capas
|
|
29
|
+
- Pantallas estándar generadas por backend-plus (HTML/JS "CRUDs con grillas edditables")
|
|
30
|
+
- Pantalla de relevamiento y dm en **React**
|
|
31
|
+
- **Base de datos**: PostgreSQL, esquema `base` (dos usuarios de db: un owner con el que se crean las tablas y SP; y un admin que es el que usa el backend para acceder a los datos)
|
|
32
|
+
- **Deploy**: servicio systemd en Ubuntu. Los desarrolladores pueden usar Windows también.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Convenciones de código
|
|
37
|
+
|
|
38
|
+
- **Todos los tipos deben ser explícitos**. Prohibido usar `any`, casts vía `unknown`, o cualquier magia sin justificación.
|
|
39
|
+
- Si existe código de bajo nivel inevitablemente sin tipado estricto, debe estar estrictamente encapsulado en ubicaciones muy delimitadas y tratado como excepción, no como norma.
|
|
40
|
+
- **Preservar el estilo existente** al modificar archivos: incluyendo el uso de `var` donde ya se usa.
|
|
41
|
+
- **No tocar el formato de lo que ya existe**: el diff de un cambio debe mostrar sólo las líneas que cambian de verdad.
|
|
42
|
+
- No reindentar, no reformatear, no quitar ni agregar espacios al final de las líneas, y no agregar ni quitar el salto de línea final del archivo.
|
|
43
|
+
- Respetar el fin de línea de cada archivo: hay archivos con CRLF y otros con LF. Las líneas nuevas van con el mismo fin de línea que el resto del archivo.
|
|
44
|
+
- En Windows no editar con `sed -i` ni herramientas que reescriban el archivo completo, porque pueden convertir CRLF a LF.
|
|
45
|
+
- Antes de commitear, revisar `git diff --stat` contra `git diff --ignore-all-space --ignore-cr-at-eol --stat`. Si dan distinto, hay cambios de formato que hay que revertir.
|
|
46
|
+
- Los nombres de tablas, columnas y variables de dominio van **en castellano**, consistente con el esquema de base de datos.
|
|
47
|
+
- El código sigue las convenciones de `backend-plus` para definición de tablas, procedimientos y endpoints.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Contexto de base de datos — esquema `base`
|
|
52
|
+
|
|
53
|
+
Todos los objetos pertenecen al esquema `base`. Los nombres están en castellano.
|
|
54
|
+
|
|
55
|
+
### Scripts de actualización
|
|
56
|
+
|
|
57
|
+
- Los SQL de `install/` (listados en `def-config.ts`) sólo se aplican al instalar la base con el dump.
|
|
58
|
+
- Todo cambio de estructura, función o trigger que tenga que llegar a bases ya instaladas lleva además un script en `operaciones/`, con el nombre `AAAA-MM-DD-actualizar_descripcion_con_snake_case.sql` (por ejemplo `2026-10-15-actualizar_validar_manzana_casa_tem.sql`).
|
|
59
|
+
- El script empieza con `--set role <app>_owner;` comentado y `set search_path = base;`. Si hacen falta permisos para el usuario admin, se usa un nombre ficticio (`<app>_admin`) y se deja comentado, para que cada instalación ponga el suyo.
|
|
60
|
+
- Tiene que poder correrse más de una vez sin romper nada (`create or replace`, `drop ... if exists`, `add column if not exists`).
|
|
61
|
+
|
|
62
|
+
## Casos de prueba
|
|
63
|
+
|
|
64
|
+
Los tests cubren funcionalidades críticas del sistema. Es necesario definir una batería de tests para cada funcionalidad crítica que se implemente o extienda.
|
|
65
|
+
|
|
66
|
+
### Framework y comando
|
|
67
|
+
|
|
68
|
+
- **Framework**: Mocha
|
|
69
|
+
- **Comando**: `npm run test`
|
|
70
|
+
- **Archivo principal**: `test.ts`
|
|
71
|
+
|
|
72
|
+
### Lógica de negocio en PostgreSQL
|
|
73
|
+
|
|
74
|
+
Muchas reglas de negocio críticas están implementadas como **funciones almacenadas y triggers en PostgreSQL**, no en el backend Node.js. Esto es una decisión arquitectónica deliberada: garantiza que esas reglas no puedan saltearse aunque alguien modifique el backend.
|
|
75
|
+
|
|
76
|
+
Ejemplos de lógica que vive en la base de datos:
|
|
77
|
+
|
|
78
|
+
> ⚠️ Si Claude Code necesita entender o modificar una regla de negocio importante, debe buscar primero si existe una función o trigger en PostgreSQL que la implemente — no asumir que toda la lógica está en TypeScript. Reimplementar en el backend lógica que ya existe en la base de datos introduce duplicación y riesgo de inconsistencia.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Documentación
|
|
83
|
+
|
|
84
|
+
Mantener actualizada la documentación en la medida que se agreguen o modifiquen las funcionalidades.
|
|
85
|
+
|
|
86
|
+
- `docs/` es la documentación para desarrolladores.
|
|
87
|
+
- `ayuda/` es la ayuda en línea para usuarios que se ve en el menú según rol, permisos y modo (ver `docs/ayuda-online.md`). Al agregar o cambiar una opción de menú o una funcionalidad que usan las personas, agregar o actualizar su tema en `ayuda/`.
|
package/ayuda/muestra.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: muestra
|
|
3
|
+
titulo: Muestra (TEM)
|
|
4
|
+
orden: 85
|
|
5
|
+
modo: GABINETE
|
|
6
|
+
permisos: [campo.administrar, encuestas.procesar]
|
|
7
|
+
menu: [configurar/muestra, configurar/muestra/tem, configurar/muestra/tem_edicion]
|
|
8
|
+
---
|
|
9
|
+
En **configurar → muestra** están las encuestas del operativo.
|
|
10
|
+
|
|
11
|
+
- **TEM**: la lista completa de encuestas, con su estado, resultado, asignaciones y domicilio. Es de consulta: lo único que se puede cambiar ahí es si la encuesta está **habilitada**.
|
|
12
|
+
- **edición TEM**: los datos de la encuesta que se corrigen a mano: cita, resultado de supervisión, fin de campo, proie, manzana y casa. Muestra también área, zona, dominio y la ubicación (comuna, fracción, radio) como referencia.
|
|
13
|
+
|
|
14
|
+
La **manzana** y la **casa** sólo se pueden modificar en las encuestas de **dominio 5**, y las cambia el subcoordinador o un rol superior. En otro dominio, el sistema rechaza el cambio al grabar.
|