Elegir 'Otra' como marca de implante no pierde el nombre por descuido: la fila de escape es un ruling explicito de no-texto-libre, y lo que falta es el camino para agregar la marca - colapsa dentro de TERRA-141
MEDIDO CONTRA LA BASE VIVA 2026-09-01 07:56, no heredado del row donde estaba enterrado. EL DEFECTO. "Otra" es una opcion viva del selector de Marca de implante - value 'otra', label 'Otra', sortOrder 19, activa, sin borrar, la ultima de las 19. Y terraPracticasCampos NO TIENE NINGUNA COLUMNA DE TEXTO LIBRE: sus siete columnas son id, practicaId, moduloId, campoId, value text NOT NULL, createdAt y deletedAt. O sea que si alguien elige "Otra" se guarda el literal 'otra' y EL NOMBRE REAL DE LA MARCA NO SE GUARDA EN NINGUN LADO. No falla nada, no hay error, no hay aviso: la practica se guarda y el dato se perdio. TAMPOCO LO ATAJA EL CODIGO. Grepee src/ entero por 'otra'/'Otra': los unicos aciertos son copy de login, un mensaje de conflicto de postoperatorio y tests de mail. Ninguna linea trata 'otra' distinto de las otras 18 marcas. No hay campo condicional, no hay validacion, no hay advertencia. ES ALCANZABLE HOY Y ESA ES LA DIFERENCIA CON COMO ESTABA ANOTADO. Marca de implante tiene alcance CERO en terraCirugiaCampos, y en terra alcance cero significa ABIERTO POR DEFECTO - el campo se pide en TODAS las cirugias del modulo. Son las diez cirugias activas de Implantologia. El selector se renderiza hoy, con las 19 marcas, "Otra" incluida. POR QUE ES FILA PROPIA Y NO UNA NOTA EN TERRA-141. Estaba escrito como "nota de diseno para cuando se desbloquee" adentro del blockedReason de TERRA-141, o sea colgado de una funcionalidad - el circuito de propuesta y aprobacion de marcas nuevas - que no esta construida, no tiene esquema autorizado y depende de un GO de db-enamel-cc. Este defecto NO DEPENDE DE NADA DE ESO: existe ahora, en el formulario desplegado, sin que se construya una sola linea de aquel circuito. Una nota adentro de un row bloqueado se cierra cuando se cierre ese row, y este puede pasar antes. DAÑO ACUMULADO HOY: CERO, medido. terraPracticasCampos no tiene ni una fila de terraMarcaImplante, porque hay 6 practicas vivas y una sola tiene valores de campo. El costo es hacia adelante y es permanente por fila: no existe ningun camino en la app para corregir ni borrar un valor de campo ya escrito (TERRA-180), asi que la primera vez que alguien elija "Otra" esa marca se pierde para siempre. LO QUE NO DECIDO ACA, y son distintas entre si: (a) sacar "Otra" del selector, que devuelve al alumno el problema de no poder registrar la marca que tiene en la mano; (b) capturar el texto libre, que es una columna nueva y por lo tanto DDL de otro carril, no de este; (c) dejarla y avisar en pantalla que el nombre no se guarda, que es honesto y sigue perdiendo el dato. La (b) es la unica que no pierde informacion y es la unica que no puedo escribir yo. NO PROPONGO MIGRACION Y NO ESCRIBO DDL. Si la respuesta es (b), el borrador es de db-terra-ca y el GO no esta pedido.
Activity
-
Elegir 'Otra' como marca de implante no pierde el nombre por descuido: la fila de escape es un ruling explicito de no-texto-libre, y lo que falta es el camino para agregar la marca - colapsa dentro de TERRA-141
-
ESTA FILA ESTABA MAL PLANTEADA Y LA CORRIJO ENTERA. 2026-09-01 08:22. La escribi yo como una perdida de datos silenciosa por descuido. No es un descuido: es una DECISION EXPLICITA de Elazar, escrita en la migracion, y yo no habia abierto el archivo antes de proponer tres opciones de las cuales dos la contradicen. LO QUE DICE LA FUENTE, textual en la cabecera de terra_33_provisional_campo_vocab_seed.sql: "ELAZAR RULING 2026-08-22 ... la regla de no-texto-libre sigue en pie (por eso terraMarcaImplante lleva una fila de escape 'otra' en vez de un fallback de texto libre)". Y mas abajo: "una marca que no esta en la lista se registra como otra, NO SE TIPEA; Puia agrega la marca a la semilla al confirmar, en vez de que el campo acepte texto libre". O sea que la fila de 'otra' existe A PROPOSITO y el camino de correccion previsto NO es guardar el nombre: es que la catedra agregue la marca al vocabulario. LAS TRES OPCIONES QUE HABIA ANOTADO, y por que dos se caen: (a) sacar "Otra" contradice el ruling - la fila de escape existe justamente para que un valor fuera de lista no quede en blanco indistinguible de "olvidado", el mismo argumento que la fila 'noAplica' de terraZonaDadora. (b) capturar texto libre contradice el ruling de frente. Queda viva solo la (c), avisar, y ni siquiera es lo importante. LO QUE SI SOBREVIVE, Y ES OTRA FILA: la fila de escape SUPONE que existe un camino para agregar la marca. TERRA-141 registra que ese camino NO EXISTE - el cliente contesto "todos los docentes" pero no hay ninguna superficie de sugerencia construida. O sea que hoy elegir "Otra" es un callejon: no se pierde por descuido, se pierde porque el mecanismo que iba a recuperarlo nunca se construyo. ESTA FILA COLAPSA DENTRO DE TERRA-141 y su valor es ese enlace, no la perdida en si. DOS NUMEROS MIOS ERAN FALSOS, medidos contra la base viva hoy: - Yo habia escrito "las 10 cirugias de Implantologia". Hoy el modulo tiene 36 cirugias, 23 con isActive true y 13 en false. El 10 era el conteo AL MOMENTO de terra_38, o sea una medicion vieja citada como presente. audit-terra-ca marco ese limite sin que se lo pidiera, leyendo solo fuente: dijo que la fuente prueba la regla de alcance abierto por defecto pero NO puede probar el conteo de hoy. Tenia razon. NO AFIRMO CUAL DE LOS DOS NUMEROS VE EL FORMULARIO: no medi el predicado que aplica el selector de cirugias, y 36 contra 23 depende enteramente de eso. - El riesgo es hoy CERO FILAS. terraPracticasCampos tiene 3 filas en total en toda la base, y CERO con value='otra' (tambien cero sin distinguir mayusculas). Nadie perdio todavia el nombre de ninguna marca. Eso no borra el problema, pero si cambia la urgencia y hace que cualquier cambio sea barato: no hay nada que migrar. LO QUE VERIFIQUE YO Y NO TOME DE PALABRA: audit-terra-ca reporto que lo guardado es el CODIGO 'otra' y no la etiqueta "Otra". Confirmado en dos lados - la semilla inserta ('terraMarcaImplante','otra','Otra',15), y practica-actions.ts:563-575 inserta value.trim() crudo por unnest, sin traducir a etiqueta. Asi que lo que queda en la base es 'otra'.
-
CORRECCION DE LA NOTA ANTERIOR, MISMO TICK, 2026-09-01 08:25. LOS NUMEROS 36 Y 23 QUE ACABO DE ESCRIBIR SON MIOS Y SON FALSOS. El "10" original de la fila estaba BIEN y yo lo "corregi" hacia un numero peor. Lo dejo escrito completo en vez de rehacerlo porque el evento es append-only y porque el error es mas util que la cifra. QUE HICE MAL: filtre el modulo por nombre con ilike '%mplanto%'. Ese patron matchea DOS modulos - "Implantología" (id 1) y "Prótesis implanto asistida" (id 5). Sume los dos y presente el total como si fuera Implantologia sola. LA MEDICION BUENA, agrupada por modulo en vez de filtrada por nombre: - modulo 1 Implantología: 16 cirugias en total, 10 con isActive true, 0 con deletedAt. - modulo 5 Prótesis implanto asistida: 20 en total, 13 activas. 16+20=36 y 10+13=23, que son exactamente los dos numeros que escribi arriba. O sea que el error es enteramente ese. ASI QUE LA FILA VUELVE A DECIR 10, y ahora con el predicado nombrado: DIEZ cirugias ACTIVAS en Implantologia, sobre dieciseis existentes, sin ninguna borrada. El conteo de terra_38 no envejecio: sigue siendo el mismo hoy. audit-terra-ca tenia razon en que la fuente no puede probar el presente, y el limite que marco era correcto; lo que no se sostiene es mi conclusion de que el presente fuera distinto. TAMBIEN CORRIJO UN NUMERO AJENO, y en la misma direccion: db02-terra-cc reporto para TERRA-176 "marcaImplante (mod 1): 16 cirugias default-open" describiendolas como cirugias ACTIVAS del modulo. 16 es el TOTAL del modulo, no las activas; las activas son 10. El numero esta bien contado y mal rotulado, que es la falla mas dificil de ver porque la cifra es verdadera de algo. Se lo digo. LO QUE NO CAMBIA de la nota anterior: el ruling de no-texto-libre, que 'otra' es una fila de escape deliberada, que lo guardado seria el codigo 'otra' y no la etiqueta, que hay CERO filas con ese valor en toda la base, y que la fila colapsa dentro de TERRA-141 porque el camino de agregar la marca nunca se construyo. Nada de eso dependia de los conteos.
-
CIERRA POR ABSORCION EN TERRA-141, 2026-09-01 12:10 UTC. No queda contenido huerfano: el ruling de no-texto-libre, que 'otra' es escape deliberado y no descuido, que lo guardado es el codigo y no la etiqueta, las dos opciones descartadas de antemano, el cero de filas 'otra' sobre tres totales y el conteo 16/10 del modulo 1 estan todos copiados textualmente en una nota de TERRA-141, reverificados hoy contra la base y no arrastrados de aca. Lo que esta fila aportaba era el ENLACE - que el escape 'otra' solo es aceptable si existe el camino de agregar la marca, y ese camino es TERRA-141 - y ese enlace ahora vive del lado que puede accionarlo. Mantenerla abierta seria contar dos veces el mismo trabajo.
-
completed