<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1273155895184209782</id><updated>2026-10-31T07:15:05.750-03:00</updated><category term="relatos"/><category term="novela"/><category term="fotos"/><category term="poemas"/><category term="sistemas"/><category term="programación"/><category term="San Rafael"/><category term="vivencias"/><category term="consultor"/><category term="gestion_cuotas"/><category term="diario"/><category term="internet"/><category term="humor"/><category term="notas"/><category term="Mendoza"/><category term="turismo"/><category term="oníricos"/><category term="facebook"/><category term="música"/><title type='text'>Escritor y Programador</title><subtitle type='html'>Blog de apuntes literarios, relatos breves y algunas cosas de programación.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>351</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-4945353254213007317</id><published>2026-10-31T07:15:05.749-03:00</published><updated>2026-10-31T07:15:05.749-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="consultor"/><category scheme="http://www.blogger.com/atom/ns#" term="gestion_cuotas"/><category scheme="http://www.blogger.com/atom/ns#" term="programación"/><category scheme="http://www.blogger.com/atom/ns#" term="sistemas"/><title type='text'>Refactorización de la Aplicación para Academias</title><content type='html'>&lt;!--div style=&quot;font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, Helvetica, Arial, sans-serif; font-size: 17px; line-height: 1.7; color: #2c3e50; max-width: 780px; margin: 0 auto;&quot;--&gt;

 
  &lt;!-- IMAGEN DE CABECERA / PORTADA (Opcional, ideal para miniatura en redes) --&gt;
  &lt;div style=&quot;text-align: center; margin-bottom: 25px;&quot;&gt;
    &lt;!-- Reemplazá el enlace &#39;src&#39; con la URL de la imagen subida a Blogger o eliminá esta etiqueta si usás sólo el video --&gt;
    &lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQg3ZoDmuGH8-d2fA1GnWUXziL2nDvwOD4w43FnCevPEGTksRaAu8OLjqGS-sbhOG6c9j9CJvPXF8LYHrCcNEHe0DUo9NZqUMlRvQ-j98oVahwDyKVWmZBTQ9XAPEU3Gm3Ke_58zUhfGIYR0F7Rq2RytIez6QZ-KlLellNYOqrHh0HoUZVq-fivimRa2kq/s400/CapturaAppCuotas.png&quot; alt=&quot;Software de gestión y cobranzas para institutos de idiomas&quot; style=&quot;width: 100%; max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 4px 14px rgba(0,0,0,0.08);&quot; /&gt;
  &lt;/div&gt;

  &lt;p style=&quot;font-size: 20px; font-weight: 500; margin-bottom: 20px;&quot;&gt;
    Son las seis y media de la tarde de un lunes cualquiera en marzo. En el hall de entrada se cruzan los alumnos que salen del nivel inicial con los que entran a conversación. En el mostrador, dos madres esperan para pagar la cuota, un padre consulta por el descuento de hermanos del chico que empieza este año y el teléfono de recepción no para de sonar.
  &lt;/p&gt;

  &lt;p&gt;
    En ese preciso instante, la persona que atiende no necesita una obra de arte conceptual. Necesita algo mucho más valioso y difícil de encontrar: &lt;strong&gt;que la computadora no se cuelgue&lt;/strong&gt;, que al poner las primeras tres letras del apellido aparezca la ficha al instante y que el cálculo de la cuota con el recargo y el descuento por hermanos sea exacto, sin rodeos ni planillas infinitas de Excel.
  &lt;/p&gt;

  &lt;p&gt;
    Quienes leen este blog desde sus inicios allá por 2009 saben que suelo repartirme entre relatos de ficción y notas sobre desarrollo de software. Hoy esos dos mundos se tocan en un punto muy concreto: &lt;strong&gt;cómo resolverle la vida real a quien maneja un instituto de enseñanza de idiomas&lt;/strong&gt;, sin prometer revoluciones faraónicas que tardan dos años en llegar y jamás funcionan.
  &lt;/p&gt;

  &lt;hr style=&quot;border: none; border-top: 1px solid #e2e8f0; margin: 35px 0;&quot; /&gt;

  &lt;h3 style=&quot;color: #2b6cb0; font-size: 23px; margin-top: 30px;&quot;&gt;El dilema de los sistemas clásicos (y el camino que nadie toma)&lt;/h3&gt;

  &lt;p&gt;
    Durante años, muchas academias e institutos funcionaron con aplicaciones hechas a medida en Microsoft Access. Cumplían su rol, pero con el tiempo y el crecimiento de la matrícula, los motores locales empiezan a crujir: bases que se corrompen si la red pestañea, lentitud en horas pico y la pesadilla de mantener la caja diaria al día.
  &lt;/p&gt;

  &lt;p&gt;
    La solución típica que ofrece el mercado suele ser un error: &lt;em&gt;&quot;Tiremos todo a la basura y desarrollemos un sistema web desde cero&quot;&lt;/em&gt;. Meses de desarrollo, presupuestos disparados, personal desorientado que no entiende las nuevas pantallas y un caos operativo en plena temporada de inscripciones.
  &lt;/p&gt;

  &lt;p&gt;
    Decidimos tomar otro camino, mucho más inteligente: &lt;strong&gt;un enfoque híbrido de alta precisión&lt;/strong&gt;.
  &lt;/p&gt;

  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 25px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;&lt;strong&gt;El corazón blindado:&lt;/strong&gt; Migramos toda la base de datos a &lt;strong&gt;PostgreSQL&lt;/strong&gt;, un motor industrial, robusto, transaccional y seguro. Adiós a las caídas, bloqueos y pérdidas de datos.&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;&lt;strong&gt;La interfaz conocida:&lt;/strong&gt; El personal del instituto sigue trabajando en su entorno habitual en Windows, sin curvas de aprendizaje traumáticas ni manuales de 100 páginas.&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;&lt;strong&gt;La gran palanca de la IA Agéntica:&lt;/strong&gt; El hallazgo clave fue desacoplar todo el sistema. Exportamos pantallas, consultas y reportes a código plano estructurado. Con esa base en texto, pudimos apoyarnos en agentes de inteligencia artificial para auditar miles de líneas, detectar cuellos de botella, eliminar duplicados y rediseñar formularios en cuestión de horas en lugar de semanas.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;!-- BLOQUE DE VIDEO / DEMO EN VIVO --&gt;
  &lt;div style=&quot;background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 10px; padding: 20px; margin: 35px 0; text-align: center;&quot;&gt;
    &lt;h4 style=&quot;margin-top: 0; color: #1a202c; font-size: 19px;&quot;&gt;Miralo en acción: el nuevo formulario de mostrador&lt;/h4&gt;
    &lt;p style=&quot;color: #64748b; font-size: 15px; margin-bottom: 18px;&quot;&gt;
      Búsqueda interactiva en tiempo real sobre miles de alumnos, historial de cursos y apertura de ficha en 1 segundo:
    &lt;/p&gt;

    &lt;!-- Contenedor Responsive para YouTube (Reemplazá VIDEO_ID_AQUI con el ID de tu video) --&gt;
    &lt;div style=&quot;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.12);&quot;&gt;
      &lt;iframe 
        style=&quot;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0;&quot;
        src=&quot;https://www.youtube.com/embed/4n6qWLmyST8&quot;
        title=&quot;Demostración de Formulario de Mostrador - Búsqueda en tiempo real&quot; 
        allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; 
        allowfullscreen&gt;
      &lt;/iframe&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;h3 style=&quot;color: #2b6cb0; font-size: 23px; margin-top: 35px;&quot;&gt;¿Qué resuelve esto en el día a día de tu instituto?&lt;/h3&gt;

  &lt;p&gt;
    El resultado de esta refactorización no es una lista de términos técnicos, sino tranquilidad para quien gestiona el negocio:
  &lt;/p&gt;

  &lt;div style=&quot;display: grid; gap: 15px; margin: 25px 0;&quot;&gt;
    &lt;div style=&quot;background: #ffffff; border-left: 4px solid #3182ce; padding: 12px 16px; box-shadow: 0 2px 5px rgba(0,0,0,0.04);&quot;&gt;
      &lt;strong&gt;⚡ Mostrador ultra-rápido:&lt;/strong&gt; Un buscador unificado donde tipear el apellido, nombre o DNI y encontrar al alumno de inmediato, sabiendo si está cursando este año o cuál fue su último curso histórico.
    &lt;/div&gt;
    &lt;div style=&quot;background: #ffffff; border-left: 4px solid #3182ce; padding: 12px 16px; box-shadow: 0 2px 5px rgba(0,0,0,0.04);&quot;&gt;
      &lt;strong&gt;👨‍👩‍👧‍👦 Familias y cuotas automáticas:&lt;/strong&gt; Detección instantánea de grupos familiares con liquidación correcta de aranceles, matrículas y descuentos por hermanos sin depender de la memoria de la secretaria.
    &lt;/div&gt;
    &lt;div style=&quot;background: #ffffff; border-left: 4px solid #3182ce; padding: 12px 16px; box-shadow: 0 2px 5px rgba(0,0,0,0.04);&quot;&gt;
      &lt;strong&gt;💰 Caja y tesorería sin sorpresas:&lt;/strong&gt; Arqueos diarios claros, registro de gastos e ingresos por medio de pago (efectivo, transferencias, tarjetas) que cierran al centavo.
    &lt;/div&gt;
    &lt;div style=&quot;background: #ffffff; border-left: 4px solid #3182ce; padding: 12px 16px; box-shadow: 0 2px 5px rgba(0,0,0,0.04);&quot;&gt;
      &lt;strong&gt;🛡️ Seguridad de datos corporativa:&lt;/strong&gt; Tu información ya no descansa en un archivo suelto en una carpeta compartida, sino en un motor PostgreSQL preparado para copias de seguridad automáticas y acceso local o en la nube.
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;hr style=&quot;border: none; border-top: 1px solid #e2e8f0; margin: 35px 0;&quot; /&gt;

  &lt;!-- TARJETA LLAMADO A LA ACCIÓN (VENTA) --&gt;
  &lt;div style=&quot;background: linear-gradient(135deg, #1e3a8a, #2563eb); color: #ffffff; border-radius: 12px; padding: 30px; margin: 40px 0; text-align: center; box-shadow: 0 8px 20px rgba(37,99,235,0.25);&quot;&gt;
    &lt;h3 style=&quot;color: #ffffff; font-size: 24px; margin-top: 0; margin-bottom: 12px;&quot;&gt;¿Tenés un instituto y querés ordenar tu gestión?&lt;/h3&gt;
    &lt;p style=&quot;font-size: 16px; line-height: 1.6; max-width: 600px; margin: 0 auto 22px auto; color: #e0e7ff;&quot;&gt;
      Si estás cansado de las planillas partidas, los sistemas lentos o la incertidumbre de no saber con exactitud quién debe qué al cerrar el mes, hablemos. Es una solución simple, veloz y lista para funcionar en tu instituto.
    &lt;/p&gt;
    &lt;a href=&quot;mailto:tu-correo@ejemplo.com?subject=Consulta%20Software%20de%20Gesti%C3%B3n%20para%20Institutos&quot; 
       style=&quot;display: inline-block; background: #ffffff; color: #1e3a8a; font-weight: 600; font-size: 16px; text-decoration: none; padding: 12px 28px; border-radius: 30px; box-shadow: 0 4px 10px rgba(0,0,0,0.15); transition: all 0.2s ease;&quot;&gt;
      Contactarme por una demo o consulta
    &lt;/a&gt;
    &lt;!-- Opcional si tenés WhatsApp:
    &lt;p style=&quot;margin-top: 15px; font-size: 14px; color: #cbd5e1;&quot;&gt;O escribime por WhatsApp al: &lt;a href=&quot;https://wa.me/54911xxxxxxxx&quot; style=&quot;color: #ffffff; text-decoration: underline;&quot;&gt;+54 9 11 ...&lt;/a&gt;&lt;/p&gt;
    --&gt;
  &lt;/div&gt;

&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/4945353254213007317/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2026/10/refactorizacion-de-la-aplicacion-para.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/4945353254213007317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/4945353254213007317'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2026/10/refactorizacion-de-la-aplicacion-para.html' title='Refactorización de la Aplicación para Academias'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQg3ZoDmuGH8-d2fA1GnWUXziL2nDvwOD4w43FnCevPEGTksRaAu8OLjqGS-sbhOG6c9j9CJvPXF8LYHrCcNEHe0DUo9NZqUMlRvQ-j98oVahwDyKVWmZBTQ9XAPEU3Gm3Ke_58zUhfGIYR0F7Rq2RytIez6QZ-KlLellNYOqrHh0HoUZVq-fivimRa2kq/s72-c/CapturaAppCuotas.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-5426183248996358487</id><published>2026-10-23T16:30:00.000-03:00</published><updated>2026-10-23T16:31:37.039-03:00</updated><title type='text'>Cambiar la frecuencia</title><content type='html'>    &lt;p&gt;Está muy bien ser agradecido. Hoy, por ejemplo, cuando venía en el micro sentí precisamente eso: la gratitud profunda de estar bien, con buena salud, más allá de las amenazas que siempre andan dando vueltas por ahí. En medio de las rutinas y las paranoias habituales, reconocerse entero es casi un milagro cotidiano.&lt;/p&gt;

    &lt;p&gt;Me acordaba de lo que me sucedió ayer, cuando fui al barrio en busca de semillas gateras y finalmente encontré lo que andaba buscando: una conexión sincera y amable. Porque una vez que eso pasa, cuando sucede esa chispa simple entre dos personas, el momento nos advierte de lo que somos capaces también, y está bueno que suceda. La posibilidad de hundirnos en la mirada del otro, de escuchar con atención sin importar lo que tenemos para decir ni estar preparando la respuesta de antemano; ser capaces de esperar el momento sin asustarnos y salir huyendo.&lt;/p&gt;

    &lt;p&gt;No hay peligro real, pero la mente siempre en alerta pretende que uno está amenazado todo el tiempo. Es el cerebro que tiene ese pensamiento predeterminado, ese circuito cerrado de autoprotección. Se siente bien pensar en cambiar ese pensamiento, esa modalidad, esa forma de pensar y de actuar ante los demás.&lt;/p&gt;

    &lt;p&gt;Esta mañana, sin ir más lejos, cuando venía en el micro y alguien me pegó un golpe con la mochila, no me molestó en absoluto. En otro momento me habría enganchado en el enojo, pero esta vez pensé en dar un paso al costado y serenamente mirar por la ventana la lluvia que caía sobre la ciudad. &lt;i&gt;Todo pasa&lt;/i&gt;, me dije.&lt;/p&gt;

    &lt;p&gt;Hacia dónde podemos ir en un vínculo nuevo, esa es la gran pregunta que queda flotando. Y también aprender a verlo como un triunfo, jamás como una derrota.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/5426183248996358487/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2026/10/cambiar-la-frecuencia.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/5426183248996358487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/5426183248996358487'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2026/10/cambiar-la-frecuencia.html' title='Cambiar la frecuencia'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-4097555381443043207</id><published>2026-10-06T17:09:00.000-03:00</published><updated>2026-10-06T17:09:00.122-03:00</updated><title type='text'>El mito de escribir como se habla (o por qué la coma no es un respiro)</title><content type='html'>&lt;p&gt;&amp;nbsp;Uno cree que porque habla ya puede escribir, y no. Ese es quizás el primer gran engaño con el que nos tropezamos quienes pasamos horas frente al teclado.&lt;/p&gt;&lt;p data-path-to-node=&quot;4&quot;&gt;Cuando hablamos, contamos con una ventaja enorme: el tono de voz, las miradas, los gestos, las pausas reales para tomar aire y la posibilidad de corregir en vivo si el interlocutor pone cara de no entender nada. En la oralidad, las imperfecciones se perdonan o pasan de largo.&lt;/p&gt;&lt;p data-path-to-node=&quot;5&quot;&gt;Pero la escritura es otra cosa. Es arquitectura diferida. El lector se enfrenta a nuestras palabras a solas, sin nuestra voz al lado para explicarle qué quisimos decir. Por eso, escribir bien no consiste en trasladar el habla al papel, sino en dominar la estructura que sostiene el mensaje.&lt;/p&gt;&lt;p data-path-to-node=&quot;6&quot;&gt;Y ahí es donde la &lt;b data-index-in-node=&quot;18&quot; data-path-to-node=&quot;6&quot;&gt;gramática&lt;/b&gt; —esa palabra que a veces suena a manual escolar aburrido— cobra todo el sentido del mundo.&lt;/p&gt;&lt;h4 data-path-to-node=&quot;7&quot;&gt;La maquinaria por dentro&lt;/h4&gt;&lt;p data-path-to-node=&quot;8&quot;&gt;Hablar de gramática es hablar del marco general que hace que un idioma funcione. Si la miramos de cerca, lo que sostiene un texto claro y con &lt;b data-index-in-node=&quot;142&quot; data-path-to-node=&quot;8&quot;&gt;cohesión&lt;/b&gt; es el trabajo articulado de varias piezas:&lt;/p&gt;&lt;ul data-path-to-node=&quot;9&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;9,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,0,0&quot;&gt;Sintaxis:&lt;/b&gt; El orden y la jerarquía de las palabras en la oración. Nos dice quién hace qué y cómo se conectan las ideas principales con las secundarias.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;9,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,1,0&quot;&gt;Puntuación:&lt;/b&gt; Los mapas y señales gráficas que guían la lectura para que la sintaxis no se desmorone.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;9,2,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,2,0&quot;&gt;Morfología y Semántica:&lt;/b&gt; La forma correcta de las palabras y su significado preciso.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-path-to-node=&quot;10&quot;&gt;Cuando estos elementos se coordinan, el texto no se lee como una suma de frases sueltas, sino como una estructura fluida.&lt;/p&gt;&lt;h4 data-path-to-node=&quot;11&quot;&gt;El caso de la coma: el mapa de las subordinadas&lt;/h4&gt;&lt;p data-path-to-node=&quot;12&quot;&gt;El error más extendido con la coma es tratarla como un «respirador artificial», un signo que se pone cada vez que nos quedamos sin aire. Pero la coma no responde a los pulmones; responde a las relaciones sintácticas.&lt;/p&gt;&lt;p data-path-to-node=&quot;13&quot;&gt;Un caso clarísimo ocurre con las &lt;b data-index-in-node=&quot;33&quot; data-path-to-node=&quot;13&quot;&gt;oraciones compuestas&lt;/b&gt;, donde convivimos diariamente con oraciones principales (las que tienen sentido por sí solas) y oraciones subordinadas (las que dependen de la principal para tener significado):&lt;/p&gt;&lt;ol data-path-to-node=&quot;14&quot; start=&quot;1&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;14,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,0,0&quot;&gt;El orden directo (sin coma):&lt;/b&gt;
Si la oración principal va primero y la subordinada va después, el pensamiento fluye sin interrupciones y la coma suele estar de más.&lt;/p&gt;&lt;blockquote data-path-to-node=&quot;14,0,1&quot;&gt;&lt;p data-path-to-node=&quot;14,0,1,0&quot;&gt;&lt;i data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,0,1,0&quot;&gt;«Guardé la ropa porque empezó a llover.»&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;14,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,1,0&quot;&gt;El orden invertido (con coma obligatoria):&lt;/b&gt;
Si alteramos la estructura lógica y ponemos la subordinada al comienzo (encabezada por conectores como &lt;i data-index-in-node=&quot;146&quot; data-path-to-node=&quot;14,1,0&quot;&gt;cuando, porque, aunque, si&lt;/i&gt;), le advertimos al lector con una coma que la idea principal todavía está por llegar.&lt;/p&gt;&lt;blockquote data-path-to-node=&quot;14,1,1&quot;&gt;&lt;p data-path-to-node=&quot;14,1,1,0&quot;&gt;&lt;i data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,1,1,0&quot;&gt;«Aunque hacía mucho frío, salimos a caminar.»&lt;/i&gt;
&lt;i data-index-in-node=&quot;46&quot; data-path-to-node=&quot;14,1,1,0&quot;&gt;«Cuando terminemos de migrar la base de datos, lanzaremos la actualización.»&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;14,2,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,2,0&quot;&gt;Incisos y aclaraciones:&lt;/b&gt;
Si una frase subordinada interrumpe a la principal para aportar un dato extra, la aislando entre comas. Si la quitamos, la frase sigue en pie.&lt;/p&gt;&lt;blockquote data-path-to-node=&quot;14,2,1&quot;&gt;&lt;p data-path-to-node=&quot;14,2,1,0&quot;&gt;&lt;i data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,2,1,0&quot;&gt;«El script, que monitorea las llamadas al webhook, generó un ticket de incidente.»&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h4 data-path-to-node=&quot;15&quot;&gt;Escribir es editar&lt;/h4&gt;&lt;p data-path-to-node=&quot;16&quot;&gt;La lengua hablada es espontánea; la escritura, en cambio, es un proceso continuo de diseño, corte y corrección. Pasar de escribir «de oído» a entender por qué ponemos una coma en determinado lugar no nos vuelve más rígidos: nos da control absoluto sobre lo que queremos decir.&lt;/p&gt;&lt;p data-path-to-node=&quot;17&quot;&gt;Al final, puntuar bien no es una cuestión de erudición, sino de respeto por el tiempo de quien nos lee.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/4097555381443043207/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2026/10/el-mito-de-escribir-como-se-habla-o-por.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/4097555381443043207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/4097555381443043207'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2026/10/el-mito-de-escribir-como-se-habla-o-por.html' title='El mito de escribir como se habla (o por qué la coma no es un respiro)'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-6030664821370937177</id><published>2026-10-05T09:06:34.147-03:00</published><updated>2026-10-05T19:40:07.608-03:00</updated><title type='text'>Despliegue de un MCP para corregir errores en MS Access 2016</title><content type='html'>&lt;body&gt;
&lt;div id=&quot;content&quot; class=&quot;content&quot;&gt;
&lt;div id=&quot;table-of-contents&quot; role=&quot;doc-toc&quot;&gt;
&lt;h2&gt;&amp;Iacute;ndice&lt;/h2&gt;
&lt;div id=&quot;text-table-of-contents&quot; role=&quot;doc-toc&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#org4c7ad47&quot;&gt;1. Despliegue de un MCP para corregir errores en MS Access 2016&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#orgb59cbcc&quot;&gt;1.1. 1. Clarificar el alcance del MCP (Model Context Protocol)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgbc7cee3&quot;&gt;1.2. 2. Arquitectura recomendada&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#orgdd78fdd&quot;&gt;1.2.1. Componentes clave&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgb01d72d&quot;&gt;1.3. 3. Pasos de implementación&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#orga8c4e06&quot;&gt;1.3.1. Paso 1 — Entorno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orge80edd1&quot;&gt;1.3.2. Paso 2 — Esqueleto del servidor MCP (Python)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgce43c11&quot;&gt;1.3.3. Paso 3 — Herramientas típicas para &quot;corregir viejos errores&quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org0462907&quot;&gt;1.3.4. Paso 4 — Registro en el cliente MCP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orga0edafe&quot;&gt;1.4. 4. Buenas prácticas para Access 2016&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org7f9ddac&quot;&gt;1.5. 5. Flujo sugerido&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org4992490&quot;&gt;1.6. 6. Controles críticos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgf6236e3&quot;&gt;2. 1. Cambio de enfoque&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgb7910ea&quot;&gt;3. 2. Arquitectura específica para UX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org1a02283&quot;&gt;4. 3. Herramientas MCP recomendadas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgd66580f&quot;&gt;5. 4. Ejemplo mínimo (Python + MCP)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org54c8b42&quot;&gt;6. 5. Mejoras UX que el LLM puede proponer automáticamente&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org5336c31&quot;&gt;7. 6. Flujo seguro de aplicación&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org3097696&quot;&gt;8. 7. Guardarraíles (importante)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orga2ecc73&quot;&gt;9. 8. Extras que suben mucho la UX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org4c7ad47&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org4c7ad47&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1.&lt;/span&gt; Despliegue de un MCP para corregir errores en MS Access 2016&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgb59cbcc&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgb59cbcc&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1.&lt;/span&gt; 1. Clarificar el alcance del MCP (Model Context Protocol)&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;p&gt;
Antes de codificar, define &lt;b&gt;qué tipo de MCP&lt;/b&gt; necesitas:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;b&gt;Servidor MCP&lt;/b&gt; que exponga herramientas (tools) para que un LLM analice/corrija la BD Access.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Cliente MCP&lt;/b&gt; integrado en tu flujo de trabajo (Claude Desktop, Cursor, etc.).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Para Access 2016 lo típico es un &lt;b&gt;servidor MCP en Python o Node&lt;/b&gt; que ejecute consultas VBA/SQL contra el &lt;code&gt;.accdb=/&lt;/code&gt;.mdb=.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgbc7cee3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgbc7cee3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2.&lt;/span&gt; 2. Arquitectura recomendada&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-nil&quot;&gt;[LLM/Cliente MCP] &amp;lt;--stdio/HTTP--&amp;gt; [Servidor MCP] &amp;lt;--COM/ODBC--&amp;gt; [Access 2016]
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgdd78fdd&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgdd78fdd&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.2.1.&lt;/span&gt; Componentes clave&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-2-1&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;b&gt;Driver&lt;/b&gt;: &lt;code&gt;Microsoft Access Database Engine 2016 (ACE.OLEDB.16.0)&lt;/code&gt; o &lt;code&gt;pyodbc&lt;/code&gt; con &lt;code&gt;Microsoft Access Driver (*.mdb, *.accdb)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Backend VBA&lt;/b&gt;: para operaciones que requieren el motor Access (compactar/reparar, refrescar vínculos, recompilar VBA).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Automatización COM&lt;/b&gt;: &lt;code&gt;pywin32&lt;/code&gt; (&lt;code&gt;win32com.client.Dispatch(&quot;Access.Application&quot;)&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgb01d72d&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgb01d72d&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.3.&lt;/span&gt; 3. Pasos de implementación&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-3&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orga8c4e06&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orga8c4e06&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.3.1.&lt;/span&gt; Paso 1 — Entorno&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-3-1&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-powershell&quot;&gt;python -m venv .venv
.venv\Scripts\activate
pip install mcp pyodbc pywin32
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Instala el &lt;b&gt;ACE OLEDB 2016&lt;/b&gt; (arquitectura x86/x64 &lt;b&gt;coincidente&lt;/b&gt; con Python).
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orge80edd1&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orge80edd1&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.3.2.&lt;/span&gt; Paso 2 — Esqueleto del servidor MCP (Python)&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-3-2&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-python&quot;&gt;from mcp.server.fastmcp import FastMCP
import pyodbc, win32com.client

mcp = FastMCP(&quot;access-fixer&quot;)
DB = r&quot;C:\ruta\sistema.accdb&quot;
CONN = fr&quot;DRIVER={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={DB};&quot;

@mcp.tool()
def ejecutar_sql(sql: str) -&amp;gt; str:
    &quot;&quot;&quot;Ejecuta SQL de diagnóstico/corrección.&quot;&quot;&quot;
    with pyodbc.connect(CONN, autocommit=True) as cx:
        cx.execute(sql)
    return &quot;OK&quot;

@mcp.tool()
def compactar_reparar() -&amp;gt; str:
    &quot;&quot;&quot;Compacta y repara el .accdb (requiere Access instalado).&quot;&quot;&quot;
    acc = win32com.client.Dispatch(&quot;Access.Application&quot;)
    acc.CompactRepair(DB, DB.replace(&quot;.accdb&quot;, &quot;_fixed.accdb&quot;), True)
    acc.Quit()
    return &quot;Compactado&quot;

@mcp.tool()
def recompilar_vba() -&amp;gt; str:
    acc = win32com.client.Dispatch(&quot;Access.Application&quot;)
    acc.OpenCurrentDatabase(DB)
    acc.VBE.CommandBars.FindControl(Name=&quot;Compile&quot;).Execute()
    acc.CloseCurrentDatabase(); acc.Quit()
    return &quot;VBA recompilado&quot;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgce43c11&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgce43c11&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.3.3.&lt;/span&gt; Paso 3 — Herramientas típicas para &quot;corregir viejos errores&quot;&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-3-3&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;listar_tablas_y_campos&lt;/code&gt; (detectar tipos inconsistentes).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;buscar_referencias_rotas&lt;/code&gt; (tablas vinculadas caídas).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detectar_datos_huerfanos&lt;/code&gt; (integridad referencial).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;normalizar_fechas/textos&lt;/code&gt; (formato regional ES/US).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;comparar_esquema&lt;/code&gt; contra un DDL esperado.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;generar_script_correccion&lt;/code&gt; (devuelve SQL idempotente).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org0462907&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org0462907&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.3.4.&lt;/span&gt; Paso 4 — Registro en el cliente MCP&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-3-4&quot;&gt;
&lt;p&gt;
&lt;code&gt;claude_desktop_config.json&lt;/code&gt;:
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-json&quot;&gt;{
  &quot;mcpServers&quot;: {
    &quot;access-fixer&quot;: {
      &quot;command&quot;: &quot;python&quot;,
      &quot;args&quot;: [&quot;C:\\ruta\\servidor_mcp.py&quot;]
    }
  }
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orga0edafe&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orga0edafe&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.4.&lt;/span&gt; 4. Buenas prácticas para Access 2016&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-4&quot;&gt;
&lt;table border=&quot;2&quot; cellspacing=&quot;0&quot; cellpadding=&quot;6&quot; rules=&quot;groups&quot; frame=&quot;hsides&quot;&gt;


&lt;colgroup&gt;
&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Riesgo&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Mitigación&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Bloqueo del &lt;code&gt;.laccdb&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Cerrar sesión antes de compactar&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Corrupción en operaciones masivas&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Backup previo + &lt;code&gt;CompactRepair&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Referencias VBA rotas&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Re-registrar &lt;code&gt;.dll=/&lt;/code&gt;.ocx= (mscomctl, comdlg32)&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;ADO vs DAO&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Preferir DAO para esquema, ADO para datos externos&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Split DB&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Trabajar sobre el &lt;i&gt;front-end&lt;/i&gt;, datos en &lt;i&gt;back-end&lt;/i&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Driver 32/64 bits&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Alinear con la instalación de Office&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org7f9ddac&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org7f9ddac&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.5.&lt;/span&gt; 5. Flujo sugerido&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-5&quot;&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;&lt;b&gt;Backup&lt;/b&gt; del &lt;code&gt;.accdb&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Auditoría&lt;/b&gt;: MCP ejecuta herramientas de diagnóstico → reporte.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Aprobación humana&lt;/b&gt; de cada corrección (evita DDL destructivo).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Aplicación&lt;/b&gt; por lotes en una copia.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CompactRepair&lt;/b&gt; + recompilar VBA.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Validación&lt;/b&gt;: ejecutar suite de pruebas / consultas de verificación.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Despliegue&lt;/b&gt; al entorno productivo.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org4992490&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org4992490&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.6.&lt;/span&gt; 6. Controles críticos&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-6&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;b&gt;Nunca&lt;/b&gt; &lt;code&gt;DROP=/=UPDATE&lt;/code&gt; masivo sin &lt;code&gt;WHERE&lt;/code&gt; auditado.&lt;/li&gt;
&lt;li&gt;Usar &lt;b&gt;transacciones&lt;/b&gt; (DAO &lt;code&gt;BeginTrans=/=CommitTrans&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Log de cada sentencia aplicada a &lt;code&gt;audit_fixes&lt;/code&gt; tabla.&lt;/li&gt;
&lt;li&gt;Versionar el &lt;code&gt;.accdb&lt;/code&gt; (aunque sea binario: guardar &lt;code&gt;.bas&lt;/code&gt;, &lt;code&gt;.frm&lt;/code&gt; exportados).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
¿Quieres que te arme un ejemplo completo con una herramienta concreta (p. ej. detección de huérfanos o migración de tipos), o el &lt;code&gt;requirements.txt&lt;/code&gt; y estructura de carpetas?
&lt;/p&gt;

&lt;p&gt;
Más que nada me interesa que sea capaz de mejorar la experiencia del usuario, modificando los formularios, los reportes, etc. 
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;MCP para mejorar UX en Access 2016 (formularios, reportes, navegación)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgf6236e3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf6236e3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2.&lt;/span&gt; 1. Cambio de enfoque&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
No es &quot;corregir errores&quot; sino &lt;i&gt;modernizar la capa de presentación&lt;/i&gt; sin tocar la lógica de negocio. En Access eso vive en:
&lt;/p&gt;

&lt;table border=&quot;2&quot; cellspacing=&quot;0&quot; cellpadding=&quot;6&quot; rules=&quot;groups&quot; frame=&quot;hsides&quot;&gt;


&lt;colgroup&gt;
&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Objeto&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Qué tocar&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Vía&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Formularios&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Controles, layout, propiedades, validación visible&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;DAO / COM&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Reportes&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Secciones, agrupación, totales, estilos&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;DAO / COM&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Menús/Ribbon&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Botones, iconos, accesos&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;XML USysRibbons&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Macros/Nav&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Puntos de entrada&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;VBA o macros&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Estados/Mensajes&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;MsgBox&lt;/code&gt; feos, sin contexto&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;VBA refactor&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Un LLM con MCP puede &lt;i&gt;leer la spec actual, proponer mejoras y aplicarlas&lt;/i&gt; de forma controlada.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgb7910ea&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgb7910ea&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3.&lt;/span&gt; 2. Arquitectura específica para UX&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-nil&quot;&gt;[LLM] &amp;lt;--MCP--&amp;gt; [Servidor] &amp;lt;--COM--&amp;gt; [Access]
                    |
                    +--&amp;gt; exportar .frm/.bas a texto
                    +--&amp;gt; parsear / diff / proponer
                    +--&amp;gt; reimportar y validar
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
La clave: &lt;i&gt;trabajar sobre la forma textual&lt;/i&gt;, no sobre el binario. Access exporta formularios/reportes a un formato legible (&lt;code&gt;SaveAsText&lt;/code&gt;).
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org1a02283&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org1a02283&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4.&lt;/span&gt; 3. Herramientas MCP recomendadas&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
*/ Lectura / diagnóstico
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;exportar_objeto(tipo, nombre)&lt;/code&gt; → texto &lt;code&gt;frm&lt;/code&gt;, &lt;code&gt;report&lt;/code&gt;, &lt;code&gt;bas&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;listar_controles(formulario)&lt;/code&gt; → nombre, tipo, posición, propiedades clave.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;inventariar_estilos&lt;/code&gt; → fuentes, colores, tamaños inconsistentes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detectar_antipatrones_ux&lt;/code&gt; → grillas sin cabecera, tab order roto, sin &lt;code&gt;TabIndex&lt;/code&gt;, botones sin &lt;code&gt;ToolTip&lt;/code&gt;, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
*/ Propuesta / diff
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;proponer_refactor(objeto, criterio)&lt;/code&gt; → devuelve texto nuevo + justificación.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;diff_objeto(actual, propuesto)&lt;/code&gt; → para revisión humana.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
*/ Aplicación
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;importar_objeto(texto)&lt;/code&gt; → &lt;code&gt;LoadFromText&lt;/code&gt; (Access 2013+).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aplicar_parche(objeto, hunks)&lt;/code&gt; → parches quirúrgicos en lugar de reescritura.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
*/ Validación
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;abrir_formulario_en_modo_vista&lt;/code&gt; (solo lectura).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;capturar_error_al_compilar&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;checklist_accesibilidad&lt;/code&gt; (labels asociados, contraste, nombres significativos).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgd66580f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgd66580f&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5.&lt;/span&gt; 4. Ejemplo mínimo (Python + MCP)&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-python&quot;&gt;from mcp.server.fastmcp import FastMCP
import win32com.client, tempfile, os

mcp = FastMCP(&quot;access-ux&quot;)
DB = r&quot;C:\ruta\sistema.accdb&quot;

def _acc():
    a = win32com.client.Dispatch(&quot;Access.Application&quot;)
    a.OpenCurrentDatabase(DB)
    return a

@mcp.tool()
def exportar(tipo: str, nombre: str) -&amp;gt; str:
    &quot;&quot;&quot;tipo: acForm|acReport|acModule. Devuelve texto exportado.&quot;&quot;&quot;
    a = _acc()
    tmp = os.path.join(tempfile.gettempdir(), f&quot;{nombre}.txt&quot;)
    a.SaveAsText(getattr(a, f&quot;Ac{tipo.capitalize()}&quot;) if False else None, nombre, tmp)
    txt = open(tmp, encoding=&quot;utf-8&quot;, errors=&quot;ignore&quot;).read()
    a.CloseCurrentDatabase(); a.Quit()
    return txt

@mcp.tool()
def importar(tipo: str, nombre: str, texto: str) -&amp;gt; str:
    a = _acc()
    tmp = os.path.join(tempfile.gettempdir(), f&quot;{nombre}.txt&quot;)
    open(tmp, &quot;w&quot;, encoding=&quot;utf-8&quot;).write(texto)
    a.LoadFromText(getattr(a, f&quot;Ac{tipo.capitalize()}&quot;), nombre, tmp)
    a.CloseCurrentDatabase(); a.Quit()
    return &quot;Importado&quot;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
(Nota: los nombres exactos de las constantes son &lt;code&gt;acForm&lt;/code&gt;, &lt;code&gt;acReport&lt;/code&gt;, &lt;code&gt;acModule&lt;/code&gt;; ajusta el &lt;code&gt;getattr&lt;/code&gt; según tu versión.)
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org54c8b42&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org54c8b42&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6.&lt;/span&gt; 5. Mejoras UX que el LLM puede proponer automáticamente&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
*/ Formularios
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;i&gt;Consistencia visual&lt;/i&gt;: fuente Segoe UI 10, alto de control 0.2&quot;, &lt;code&gt;Theme&lt;/code&gt; unificado.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Layout&lt;/i&gt;: pasar de posicionamiento absoluto a &lt;i&gt;Stacked/Tabular Layout&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Navegación&lt;/i&gt;: botones Anterior/Siguiente/Nuevo/Buscar con atajos (&lt;code&gt;Ctrl+N&lt;/code&gt;, &lt;code&gt;Ctrl+F&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Validación inline&lt;/i&gt;: &lt;code&gt;BeforeUpdate&lt;/code&gt; con mensajes claros en &lt;code&gt;lbl_error&lt;/code&gt; en lugar de &lt;code&gt;MsgBox&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Búsqueda&lt;/i&gt;: caja de filtro en vivo (&lt;code&gt;ApplyFilter&lt;/code&gt; con &lt;code&gt;OnChange&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Accesibilidad&lt;/i&gt;: &lt;code&gt;TabIndex&lt;/code&gt; ordenado, &lt;code&gt;TabStop&lt;/code&gt; correcto, labels asociadas.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Estados vacíos&lt;/i&gt;: mensaje &quot;No hay registros&quot; en lugar de grid en blanco.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Fechas&lt;/i&gt;: formato &lt;code&gt;dd/mm/aaaa&lt;/code&gt; o &lt;code&gt;ISO&lt;/code&gt; según público.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
*/ Reportes
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;i&gt;Agrupación y totales&lt;/i&gt; con &lt;code&gt;GroupLevel&lt;/code&gt;, subtotales, &lt;code&gt;Running Sum&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Encabezado con fecha/hora/usuario&lt;/i&gt; para trazabilidad.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Logo y colores de marca&lt;/i&gt; en &lt;code&gt;ReportHeader&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Exportación&lt;/i&gt; directa a PDF con nombre inteligente.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Condicional formatting&lt;/i&gt; (semáforos, negritas por umbral).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
*/ Global
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;i&gt;Home/Dashboard&lt;/i&gt; con botones grandes en lugar de menú desplegable.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Ribbon personalizado&lt;/i&gt; (USysRibbons) que esconda el nativo.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Mensajes de error&lt;/i&gt; con acción sugerida, no códigos.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Atajos de teclado&lt;/i&gt; documentados en un formulario de ayuda.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org5336c31&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org5336c31&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;7.&lt;/span&gt; 6. Flujo seguro de aplicación&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-7&quot;&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;&lt;i&gt;Backup&lt;/i&gt; del &lt;code&gt;.accdb&lt;/code&gt; y export masivo (&lt;code&gt;SaveAsText&lt;/code&gt; de todo).&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Versionar en git&lt;/i&gt; los &lt;code&gt;.frm=/.=report=/.=bas&lt;/code&gt; exportados.&lt;/li&gt;
&lt;li&gt;LLM exporta el objeto → propone diff → &lt;i&gt;tú apruebas&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Aplicar con &lt;code&gt;LoadFromText&lt;/code&gt; &lt;i&gt;sobre copia&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Recompilar VBA&lt;/i&gt; y abrir el formulario/reporte en vista.&lt;/li&gt;
&lt;li&gt;Comparar capturas (opcional: &lt;code&gt;pywinauto&lt;/code&gt; para screenshots).&lt;/li&gt;
&lt;li&gt;Promover a producción.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org3097696&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org3097696&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;8.&lt;/span&gt; 7. Guardarraíles (importante)&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-8&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;i&gt;Nunca&lt;/i&gt; reescribir todo un formulario de una vez: parches por secciones.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Preservar&lt;/i&gt; nombres de controles (el código VBA los referencia; romperlos = error silencioso).&lt;/li&gt;
&lt;li&gt;&lt;i&gt;No tocar&lt;/i&gt; &lt;code&gt;RecordSource&lt;/code&gt; ni &lt;code&gt;ControlSource&lt;/code&gt; sin revisar queries dependientes.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Detectar eventos VBA asociados&lt;/i&gt; antes de renombrar/eliminar controles.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Log&lt;/i&gt; de cada &lt;code&gt;LoadFromText&lt;/code&gt; con timestamp y hash.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orga2ecc73&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orga2ecc73&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;9.&lt;/span&gt; 8. Extras que suben mucho la UX&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-9&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;i&gt;Formulario de búsqueda global&lt;/i&gt; (&lt;code&gt;Ctrl+F&lt;/code&gt;) que salte a cualquier entidad.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Panel de &quot;recientes&quot;&lt;/i&gt; por usuario.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Modo oscuro&lt;/i&gt; (sí, se puede con &lt;code&gt;Theme&lt;/code&gt; + colores).&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Tooltips&lt;/i&gt; en todos los botones (&lt;code&gt;ControlTipText&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Confirmaciones inteligentes&lt;/i&gt;: solo preguntar cuando hay cambios sin guardar.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Undo&lt;/i&gt; en operaciones destructivas a nivel de app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
¿Quieres que te prepare (a) un catálogo de &lt;i&gt;antipatrones UX&lt;/i&gt; detectables automáticamente con las consultas &lt;code&gt;MSysObjects=/=SaveAsText&lt;/code&gt;, o (b) un &lt;i&gt;prompt template&lt;/i&gt; que le pases al LLM para que produzca el diff de un formulario concreto?
&lt;/p&gt;

&lt;p&gt;
Es importante tambien considerar la posibilidad de hacer un cambio en la lógica de negocio, o cómo manejamos el negocio en la actual estructura de tablas y base de datos. 
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;MCP con capacidad de refactor de lógica de negocio y modelo de datos&lt;/li&gt;

&lt;li&gt;1. El problema real&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Si el esquema actual refleja un &lt;i&gt;modelo mental viejo del negocio&lt;/i&gt;, mejorar formularios es cosmético. Hay que poder:
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;&lt;i&gt;Entender la semántica&lt;/i&gt; que el esquema actual está codificando implícitamente.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Contrastarla&lt;/i&gt; con cómo el negocio se entiende hoy.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Proponer un nuevo modelo&lt;/i&gt; (tablas, relaciones, reglas) y una &lt;i&gt;ruta de migración&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Aplicarlo&lt;/i&gt; sin perder datos ni romper formularios/reportes/VBA.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Esto es mucho más delicado que UX: toca datos, integridad y procesos. El MCP debe ser &lt;i&gt;asistente de refactor&lt;/i&gt;, no ejecutor ciego.
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;2. Tres niveles de intervención&lt;/li&gt;
&lt;/ul&gt;

&lt;table border=&quot;2&quot; cellspacing=&quot;0&quot; cellpadding=&quot;6&quot; rules=&quot;groups&quot; frame=&quot;hsides&quot;&gt;


&lt;colgroup&gt;
&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Nivel&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Alcance&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Riesgo&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Cómo lo trata el MCP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;L1 Reglas&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Validaciones, defaults, cálculos en VBA/consultas&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Bajo&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Refactor de módulos y &lt;code&gt;ValidationRule&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;L2 Esquema&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Tablas, campos, tipos, índices, FKs&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Medio-alto&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;DDL + script de migración + backfill&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;L3 Modelo&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Descomposición, normalización, entidades nuevas&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Alto&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Proyecto de migración por fases&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Empieza siempre por L1, gana confianza, sube.
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;3. Cómo el MCP &quot;entiende&quot; el negocio actual&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
// Introspección del esquema
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;MSysObjects&lt;/code&gt;, &lt;code&gt;MSysRelationships&lt;/code&gt;, &lt;code&gt;MSysQueries&lt;/code&gt; (a veces bloqueadas).&lt;/li&gt;
&lt;li&gt;DAO: &lt;code&gt;TableDefs&lt;/code&gt;, &lt;code&gt;Fields&lt;/code&gt;, &lt;code&gt;Indexes&lt;/code&gt;, &lt;code&gt;Relations&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Exportar DDL real: &lt;code&gt;CREATE TABLE&lt;/code&gt; reconstruido desde DAO.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
// Introspección de la semántica
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;i&gt;Consultas guardadas&lt;/i&gt;: son la lógica de negocio codificada en SQL. Exportar todas.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Módulos VBA&lt;/i&gt;: reglas, cálculos, validaciones. Exportar todos &lt;code&gt;.bas=/&lt;/code&gt;.cls=.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Macros&lt;/i&gt;: flujos automáticos.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Formularios&lt;/i&gt;: &lt;code&gt;RecordSource&lt;/code&gt;, &lt;code&gt;ControlSource&lt;/code&gt;, eventos &lt;code&gt;BeforeUpdate&lt;/code&gt;, &lt;code&gt;AfterUpdate&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Reportes&lt;/i&gt;: agrupaciones y totales revelan KPIs y jerarquías.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
// Señales de deuda de modelo
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Campos multivaluados (tipo Access &lt;code&gt;Complex&lt;/code&gt;) → violan 1FN.&lt;/li&gt;
&lt;li&gt;Columnas tipo &lt;code&gt;Campo1&lt;/code&gt;, &lt;code&gt;Campo2&lt;/code&gt;, &lt;code&gt;Campo3&lt;/code&gt; → entidad no descompuesta.&lt;/li&gt;
&lt;li&gt;Tablas con 60+ campos → probable entidad gorda con subentidades latentes.&lt;/li&gt;
&lt;li&gt;Códigos duplicados en texto libre → falta tabla de dominio.&lt;/li&gt;
&lt;li&gt;Fechas en texto → tipo mal elegido.&lt;/li&gt;
&lt;li&gt;Sin PK/FK → integridad por código VBA (frágil).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Lookup&lt;/code&gt; en tabla (mala práctica Access) → confunde modelo con UI.&lt;/li&gt;
&lt;li&gt;Nombres en español mezclados con inglés → deuda de nomenclatura.&lt;/li&gt;

&lt;li&gt;4. Herramientas MCP sugeridas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
// Inventario y documentación
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;exportar_esquema_completo()&lt;/code&gt; → DDL + relaciones + índices.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exportar_logica_negocio()&lt;/code&gt; → todas las queries, módulos y eventos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mapa_dependencias(objeto)&lt;/code&gt; → qué formularios/reportes/VBA usan esta tabla/campo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;generar_diccionario_datos()&lt;/code&gt; → tabla/campo/tipo/uso/descripcion inferida.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
// Análisis de modelo
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;detectar_violaciones_normalizacion()&lt;/code&gt; → 1FN, 2FN, 3FN.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detectar_multivaluados()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detectar_dominios_implicitos()&lt;/code&gt; → valores repetidos que deberían ser catálogo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detectar_tablas_gordas()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detectar_relaciones_faltantes()&lt;/code&gt; → campos &lt;code&gt;XxxId&lt;/code&gt; sin FK formal.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detectar_campos_muertos()&lt;/code&gt; → nunca usados en queries/formularios/reportes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
// Propuesta de nuevo modelo
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;proponer_esquema_objetivo(criterios)&lt;/code&gt; → entidades, atributos, relaciones.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;diff_esquemas()&lt;/code&gt; → cambios concretos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;generar_ddl_migracion()&lt;/code&gt; → CREATE/ALTER para llegar al nuevo modelo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;generar_script_backfill()&lt;/code&gt; → poblar nuevas columnas desde las viejas.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;generar_vistas_compatibilidad()&lt;/code&gt; → queries con los nombres viejos apuntando al nuevo esquema (clave para no tocar formularios de golpe).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
// Reglas de negocio
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;extraer_reglas_de_vba()&lt;/code&gt; → qué validaciones/reglas están dispersas.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;centralizar_reglas()&lt;/code&gt; → mover a tabla &lt;code&gt;reglas_negocio&lt;/code&gt; o a un módulo único.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detectar_reglas_duplicadas()&lt;/code&gt; → la misma validación en 5 formularios.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detectar_reglas_contradictorias()&lt;/code&gt; → un formulario permite lo que otro prohíbe.&lt;/li&gt;

&lt;li&gt;5. Estrategia de migración: &quot;Strangler Fig&quot; para Access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
No reescribas el modelo de una vez. &lt;i&gt;Envuelve&lt;/i&gt; el viejo y sustitúyelo por partes.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-nil&quot;&gt;Fase 0: Backup + export textual total + git init
Fase 1: Diccionario de datos y mapa de dependencias
Fase 2: Vistas de compatibilidad (queries con nombres viejos -&amp;gt; tablas nuevas)
Fase 3: Migrar una entidad piloto de bajo riesgo
Fase 4: Repuntar formularios/reportes a las vistas
Fase 5: Migrar el resto por entidad
Fase 6: Congelar viejas tablas, luego eliminarlas
Fase 7: Refactor VBA a las nuevas reglas centralizadas
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
La magia de la Fase 2: los formularios siguen funcionando aunque el modelo cambie debajo. Eso te da tiempo.
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;6. Ejemplo de patrón: de tabla gorda a entidades&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
// Antes
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sql&quot;&gt;Cliente(
  IdCliente, Nombre, Calle, Ciudad, CP, Pais,
  Tel1, Tel2, Tel3, Email1, Email2,
  Contacto1_Nombre, Contacto1_Tel, Contacto2_Nombre, Contacto2_Tel
)
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
// Después
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sql&quot;&gt;Cliente(IdCliente, Nombre, IdDireccionPrincipal)
Direccion(IdDireccion, IdCliente, Calle, Ciudad, CP, Pais, Tipo)
Contacto(IdContacto, IdCliente, Nombre, Rol)
Comunicacion(IdComunicacion, IdContacto, Tipo, Valor)  -- tel/email
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
// Puente de compatibilidad
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sql&quot;&gt;CREATE VIEW qryCliente AS
SELECT c.IdCliente, c.Nombre,
       d.Calle, d.Ciudad, d.CP, d.Pais,
       (SELECT TOP 1 Valor FROM Comunicacion ...) AS Tel1,
       ...
FROM Cliente c LEFT JOIN Direccion d ON ...
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Los formularios siguen apuntando a &lt;code&gt;qryCliente&lt;/code&gt; y no se enteran.
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;7. Guardarraíles críticos (más estrictos que en UX)&lt;/li&gt;

&lt;li&gt;&lt;i&gt;Nunca&lt;/i&gt; &lt;code&gt;ALTER TABLE&lt;/code&gt; en producción sin script reversible.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Toda&lt;/i&gt; migración con &lt;i&gt;backfill idempotente&lt;/i&gt; y &lt;i&gt;verificación de conteos&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Congelar&lt;/i&gt; escritura en tablas que se migran (&lt;code&gt;solo lectura&lt;/code&gt; durante la fase).&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Doble escritura&lt;/i&gt; transitoria si hay usuarios concurrentes (trigger o VBA).&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Nombres de campos viejos preservados como columnas calculadas&lt;/i&gt; hasta el final.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;VBA que referencia campos&lt;/i&gt; debe migrarse &lt;i&gt;junto&lt;/i&gt; con el esquema, o usar las vistas.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Reportes históricos&lt;/i&gt; pueden requerir mantener el esquema viejo en paralelo (data warehouse).&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Auditoría&lt;/i&gt; de cada cambio: quién, cuándo, qué script, resultado.&lt;/li&gt;

&lt;li&gt;8. ¿Cómo lo guía el LLM vía MCP?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
El flujo típico sería:
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;&lt;code&gt;exportar_logica_negocio()&lt;/code&gt; → el LLM lee queries + VBA + eventos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;generar_diccionario_datos()&lt;/code&gt; → el LLM infiere significado de cada campo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detectar_problemas_modelo()&lt;/code&gt; → lista de deudas con severidad.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Tú&lt;/i&gt; eliges qué atacar primero (recomendado: entidad con más dolor operativo).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;proponer_esquema_objetivo(entidad)&lt;/code&gt; → diagrama + DDL propuesto.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;generar_vistas_compatibilidad()&lt;/code&gt; → puente.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;generar_script_migracion()+backfill&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Tú&lt;/i&gt; revisas el script, lo corres en copia, validas.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;repuntar_objetos()&lt;/code&gt; → actualiza &lt;code&gt;RecordSource&lt;/code&gt; de formularios/reportes a las nuevas fuentes si aplica.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detectar_regresiones()&lt;/code&gt; → abre formularios, corre pruebas, reporta errores.&lt;/li&gt;

&lt;li&gt;9. Lo que &lt;i&gt;no&lt;/i&gt; debería hacer el MCP solo&lt;/li&gt;

&lt;li&gt;Ejecutar DDL en producción sin revisión humana.&lt;/li&gt;
&lt;li&gt;Decidir el modelo objetivo sin consultarte: &lt;i&gt;el negocio lo sabes tú&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Renombrar campos sin actualizar todo lo que los referencia (usar vistas evita esto).&lt;/li&gt;
&lt;li&gt;Asumir que lo que hay está mal: a veces el esquema viejo codifica reglas que ya no están escritas en ningún lado. &lt;i&gt;Documentar antes de romper.&lt;/i&gt;&lt;/li&gt;

&lt;li&gt;10. Coste y pragmatismo (por tu nota de los 10 mil)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Un refactor de L3 completo en Access es &lt;i&gt;semanas o meses&lt;/i&gt;. Lo realista con presupuesto cero:
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;&lt;code&gt;exportar_logica_negocio()&lt;/code&gt; + diccionario → &lt;i&gt;gratis&lt;/i&gt;, alto valor.&lt;/li&gt;
&lt;li&gt;Detectar las 3-5 peores deudas de modelo → &lt;i&gt;gratis&lt;/i&gt;, claridad.&lt;/li&gt;
&lt;li&gt;Vistas de compatibilidad para la entidad más dolorosa → &lt;i&gt;1 fin de semana&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Refactor VBA de reglas duplicadas a un módulo → &lt;i&gt;gratis&lt;/i&gt;, menos bugs.&lt;/li&gt;
&lt;li&gt;Dejar L3 para cuando haya presupuesto o cuando el dolor supere el coste.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Puedes empezar mañana con un script Python que exporte esquema + queries + VBA a texto, lo metas en git, y lo pases por el LLM para el diccionario. Sin MCP siquiera: un &lt;code&gt;export.py&lt;/code&gt; y un prompt.
&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;postamble&quot; class=&quot;status&quot;&gt;
&lt;p class=&quot;author&quot;&gt;Autor: Alejandro Noli&lt;/p&gt;
&lt;p class=&quot;date&quot;&gt;Created: 2026-10-05 lun 09:01&lt;/p&gt;
&lt;p class=&quot;validation&quot;&gt;&lt;a href=&quot;https://validator.w3.org/check?uri=referer&quot;&gt;Validate&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/6030664821370937177/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2026/10/despliegue-de-un-mcp-para-corregir.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/6030664821370937177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/6030664821370937177'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2026/10/despliegue-de-un-mcp-para-corregir.html' title='Despliegue de un MCP para corregir errores en MS Access 2016'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-5266212638741259531</id><published>2026-09-25T11:18:44.774-03:00</published><updated>2026-09-25T11:18:44.774-03:00</updated><title type='text'></title><content type='html'>&lt;p&gt;Quienes hemos atravesado cambios drásticos y sacudidas inesperadas entendemos perfectamente esa sensación de abismo. Cuando todo se derrumba de golpe, la energía se agota rápido, la perspectiva del futuro inmediato se nubea y parece que todo conspira en nuestra contra. En esos momentos, el peso del día a día resulta abrumador y la sensación de vulnerabilidad se vuelve muy intensa.&lt;/p&gt;

&lt;p&gt;Escribir y compartir esto ya es un primer paso fundamental para transformar el dolor. Reconocer el estado en el que estamos y tender una mano a otros que pasan por lo mismo demuestra que, aun en la penumbra, hay una intención genuina de salir adelante.&lt;/p&gt;

&lt;p&gt;Para atravesar y superar estos momentos de crisis, conviene recordar algunas pautas esenciales:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Tener la humildad de pedir ayuda:&lt;/strong&gt; Aceptar que no podemos sostener todo solos ni resolver cada problema por cuenta propia no es signo de debilidad, sino de valentía y madurez. Apoyarse en personas cercanas, profesionales o amigos cambia por completo la perspectiva.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Evitar el aislamiento y la exposición innecesaria:&lt;/strong&gt; En etapas de vulnerabilidad, preservarse y cuidar la propia energía es prioritario. Buscar entornos seguros e interlocutores de confianza evita que el desgaste sea aún mayor.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Bajar un cambio y habitar el presente:&lt;/strong&gt; La ansiedad por el futuro y el sobreanálisis de los errores pasados suelen intensificar la angustia. Reducir la velocidad, no reaccionar impulsivamente ante cada estímulo y enfocar la atención en el presente ayuda a recuperar el control.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Aceptar que la incomodidad precede al crecimiento:&lt;/strong&gt; Salir de la zona de confort o atravesar una reestructuración forzada es doloroso, pero también es el proceso mediante el cual se construyen nuevas certezas y fortalezas.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Poner foco en acciones concretas:&lt;/strong&gt; Aunque sean pequeñas, las decisiones orientadas a cuidar la salud, el trabajo o el espacio personal devuelven gradualmente la sensación de avance y propósito.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Siempre hay un camino de salida y una manera de reconstruirse, incluso cuando al principio no logramos ver la razón de lo que ocurre. Abrirse a la posibilidad de recibir apoyo y avanzar un día a la vez es la clave para volver a encontrar estabilidad.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/5266212638741259531/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2026/09/quienes-hemos-atravesado-cambios.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/5266212638741259531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/5266212638741259531'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2026/09/quienes-hemos-atravesado-cambios.html' title=''/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-4394821068207089374</id><published>2026-06-29T16:53:13.105-03:00</published><updated>2026-08-19T16:01:57.843-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="diario"/><category scheme="http://www.blogger.com/atom/ns#" term="relatos"/><title type='text'>La dama de las siete</title><content type='html'>&lt;/p&gt;

&lt;p&gt;
Escribo estas líneas para pasar el rato, o quizás para intentar poner orden en este despelote que llamo vida, aunque sepa de antemano que el titiritero que llevo dentro suele enredar los hilos a propósito. La mañana en Mendoza arranca con ese viento fresco que te cachetea la cara y te recuerda que estás vivo, a pesar de las deudas que se acumulan y de esa parálisis que te agarra cuando el servidor se cae y vos sos el único que tiene que poner el pecho.
&lt;/p&gt;

&lt;p&gt;
A las siete de la mañana, el ritual es siempre el mismo: el micro, el olor a café ajeno y la espera. Y ahí está ella. &lt;b&gt;&lt;b&gt;La misteriosa dama de los rulos&lt;/b&gt;&lt;/b&gt;, esa que parece leer el paisaje urbano como si fuera un libro de edición limitada que solo ella comprende. A veces se sienta sola contra el vidrio, con una actitud desafiante que me hace dudar de si soy un genio o simplemente un &quot;buenudo&quot; que no sabe vender lo que hace. Otras veces, como aquel día que olía a algo especiado y fuerte, se sienta lo suficientemente cerca como para que mi buen amigo &lt;b&gt;&lt;b&gt;Brian&lt;/b&gt;&lt;/b&gt; —mi cerebro, que a veces me sabotea con frases terribles— empiece a tiritar de nervios.
&lt;/p&gt;

&lt;p&gt;
Mientras el micro avanza por la ciudad, mi mente salta de un &quot;commit&quot; de Git a la cuenta del alquiler que no para de subir por culpa de una escribana que parece ensañada conmigo. En la oficina me ningunean, me tratan como si fuera un extraño que no sabe nada, mientras yo sigo intentando que el &lt;b&gt;&lt;b&gt;Nextcloud&lt;/b&gt;&lt;/b&gt; funcione y que la IA no se convierta en mi peor enemigo. Es una lucha constante entre el &lt;b&gt;&lt;b&gt;Escritor&lt;/b&gt;&lt;/b&gt; que busca la frase perfecta y el &lt;b&gt;&lt;b&gt;Programador&lt;/b&gt;&lt;/b&gt; que solo quiere que el código compile sin errores de sintaxis.
&lt;/p&gt;

&lt;p&gt;
Hoy, antes de bajarme para ir a comprar esas tortitas que son mi único consuelo, nos cruzamos la mirada. Fue apenas un segundo, un gesto sutil que logró acallar por un momento los reclamos y la presión de un contrato de alquiler que me tiene en la picota. Ella se bajó silenciosa, dejándome con esa mezcla de angustia y humildad que ya es parte de mi ADN. 
&lt;/p&gt;

&lt;p&gt;
Al final, me quedo pensando en lo que decía el maestro: que la vejez se va alejando, pero el cansancio va &lt;b&gt;in-crescendo&lt;/b&gt;. Pero no importa. Mañana volveré a subir al micro, volveré a pelearme con los contenedores de Docker y volveré a buscarla entre los asientos grises. Porque a pesar de los incendios, de las deudas y de que mi trabajo parezca un &quot;depósito de cadáveres&quot;, yo sigo acá, tipeando en modo &lt;b&gt;&lt;b&gt;markdown&lt;/b&gt;&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
Como anoté hace poco en mi Org Mode: &lt;b&gt;&lt;b&gt;Elijo la alegría, siempre&lt;/b&gt;&lt;/b&gt;.
&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/4394821068207089374/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2026/06/la-dama-de-las-siete.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/4394821068207089374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/4394821068207089374'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2026/06/la-dama-de-las-siete.html' title='La dama de las siete'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-8808925364532234605</id><published>2026-05-27T23:32:08.723-03:00</published><updated>2026-08-11T15:20:41.940-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="consultor"/><category scheme="http://www.blogger.com/atom/ns#" term="gestion_cuotas"/><category scheme="http://www.blogger.com/atom/ns#" term="programación"/><title type='text'></title><content type='html'>&lt;article class=&quot;cuotaweb-post-container&quot;&gt;
    &lt;!--Hojas de estilo y fuentes necesarias si se pega en una página limpia--&gt;
    &lt;!--Nota: Si tu sitio ya tiene Inter y FontAwesome, puedes omitir estas dos líneas--&gt;
    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&amp;amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
    &lt;link href=&quot;https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;

    &lt;style&gt;
        .cuotaweb-post-container {
            font-family: &#39;Inter&#39;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif;
            max-width: 850px;
            margin: 40px auto;
            padding: 40px;
            background: #ffffff;
            border-radius: 24px;
            box-shadow: 0 10px 30px rgba(79, 70, 229, 0.05), 0 1px 3px rgba(0, 0, 0, 0.02);
            color: #1f2937;
            line-height: 1.8;
            border: 1px solid rgba(79, 70, 229, 0.08);
            position: relative;
            overflow: hidden;
        }

        .cuotaweb-post-container::before {
            content: &#39;&#39;;
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 6px;
            background: linear-gradient(90deg, #4f46e5 0%, #7c3aed 50%, #ec4899 100%);
        }

        .cuotaweb-post-header {
            margin-bottom: 35px;
            text-align: center;
        }

        .cuotaweb-post-meta {
            display: inline-flex;
            align-items: center;
            gap: 12px;
            background: rgba(79, 70, 229, 0.06);
            color: #4f46e5;
            padding: 6px 16px;
            border-radius: 99px;
            font-size: 0.85rem;
            font-weight: 600;
            margin-bottom: 20px;
            text-transform: uppercase;
            letter-spacing: 0.05em;
        }

        .cuotaweb-post-title {
            font-size: 2.5rem;
            font-weight: 800;
            color: #111827;
            line-height: 1.25;
            margin-bottom: 15px;
            background: linear-gradient(135deg, #111827 0%, #374151 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
        }

        .cuotaweb-post-subtitle {
            font-size: 1.15rem;
            color: #6b7280;
            font-weight: 400;
            max-width: 700px;
            margin: 0 auto;
        }

        .cuotaweb-post-divider {
            height: 1px;
            background: linear-gradient(90deg, transparent, rgba(79, 70, 229, 0.15), transparent);
            margin: 30px 0;
        }

        .cuotaweb-post-content p {
            font-size: 1.05rem;
            margin-bottom: 24px;
            color: #4b5563;
        }

        .cuotaweb-post-content p strong {
            color: #111827;
            font-weight: 600;
        }

        .cuotaweb-feature-box {
            background: linear-gradient(135deg, rgba(79, 70, 229, 0.02) 0%, rgba(124, 58, 237, 0.02) 100%);
            border-left: 4px solid #4f46e5;
            padding: 24px;
            border-radius: 0 16px 16px 0;
            margin: 30px 0;
            position: relative;
        }

        .cuotaweb-feature-box h4 {
            margin-top: 0;
            color: #4f46e5;
            font-weight: 700;
            font-size: 1.15rem;
            display: flex;
            align-items: center;
            gap: 8px;
            margin-bottom: 12px;
        }

        .cuotaweb-feature-box ul {
            margin: 0;
            padding-left: 20px;
            color: #4b5563;
        }

        .cuotaweb-feature-box li {
            margin-bottom: 8px;
            font-size: 0.98rem;
        }

        .cuotaweb-section-title {
            font-size: 1.5rem;
            font-weight: 700;
            color: #111827;
            margin: 35px 0 15px 0;
            display: flex;
            align-items: center;
            gap: 12px;
        }

        .cuotaweb-section-title i {
            color: #7c3aed;
            background: rgba(124, 58, 237, 0.08);
            width: 36px;
            height: 36px;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            border-radius: 8px;
            font-size: 1rem;
        }

        /* Bloque de Agradecimiento Premium */
        .cuotaweb-gratitude-card {
            background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
            color: #ffffff;
            padding: 35px;
            border-radius: 20px;
            margin: 40px 0;
            position: relative;
            box-shadow: 0 15px 30px rgba(79, 70, 229, 0.15);
            overflow: hidden;
        }

        .cuotaweb-gratitude-card::after {
            content: &quot;\f10d&quot;;
            font-family: &quot;Font Awesome 6 Free&quot;;
            font-weight: 900;
            position: absolute;
            right: 20px;
            bottom: -10px;
            font-size: 10rem;
            color: rgba(255, 255, 255, 0.05);
            pointer-events: none;
        }

        .cuotaweb-gratitude-card h4 {
            color: #ffffff;
            font-weight: 800;
            font-size: 1.35rem;
            margin-top: 0;
            margin-bottom: 15px;
            display: flex;
            align-items: center;
            gap: 10px;
        }

        .cuotaweb-gratitude-card p {
            color: rgba(255, 255, 255, 0.9);
            font-size: 1.05rem;
            margin-bottom: 20px;
            line-height: 1.7;
        }

        .cuotaweb-ai-badge {
            display: inline-flex;
            align-items: center;
            gap: 8px;
            background: rgba(255, 255, 255, 0.15);
            border: 1px solid rgba(255, 255, 255, 0.25);
            color: #ffffff;
            padding: 6px 14px;
            border-radius: 99px;
            font-size: 0.85rem;
            font-weight: 600;
            backdrop-filter: blur(4px);
        }

        /* Call-To-Action (Beta Tester) */
        .cuotaweb-cta-section {
            text-align: center;
            background: #f9fafb;
            border: 1px dashed rgba(79, 70, 229, 0.3);
            border-radius: 20px;
            padding: 35px;
            margin-top: 40px;
            transition: all 0.3s ease;
        }

        .cuotaweb-cta-section:hover {
            border-color: #7c3aed;
            transform: translateY(-2px);
            box-shadow: 0 12px 20px rgba(0, 0, 0, 0.02);
        }

        .cuotaweb-btn {
            display: inline-flex;
            align-items: center;
            gap: 10px;
            background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
            color: #ffffff !important;
            padding: 14px 32px;
            border-radius: 12px;
            font-weight: 600;
            text-decoration: none;
            transition: all 0.3s;
            box-shadow: 0 4px 15px rgba(79, 70, 229, 0.2);
            border: none;
            margin-top: 15px;
        }

        .cuotaweb-btn:hover {
            transform: translateY(-2px);
            box-shadow: 0 8px 25px rgba(79, 70, 229, 0.3);
            background: linear-gradient(135deg, #4338ca 0%, #6d28d9 100%);
        }

        @media (max-width: 640px) {
            .cuotaweb-post-container {
                padding: 24px;
                margin: 20px 10px;
            }
            .cuotaweb-post-title {
                font-size: 1.85rem;
            }
            .cuotaweb-post-subtitle {
                font-size: 1rem;
            }
            .cuotaweb-gratitude-card, .cuotaweb-cta-section {
                padding: 20px;
            }
        }
    &lt;/style&gt;

    &lt;header class=&quot;cuotaweb-post-header&quot;&gt;
        &lt;div class=&quot;cuotaweb-post-meta&quot;&gt;
            &lt;i class=&quot;fa-solid fa-rocket&quot;&gt;&lt;/i&gt; Hito de Desarrollo
        &lt;/div&gt;
        &lt;h1 class=&quot;cuotaweb-post-title&quot;&gt;¡CuotaWeb ya está en Producción y listos para los primeros Beta-Testers!&lt;/h1&gt;
        &lt;p class=&quot;cuotaweb-post-subtitle&quot;&gt;Un gran paso adelante: la infraestructura está desplegada, el motor multi-tenant validado y el portal en línea esperando su primera prueba de fuego real.&lt;/p&gt;
    &lt;/header&gt;

    &lt;div class=&quot;cuotaweb-post-divider&quot;&gt;&lt;/div&gt;

    &lt;section class=&quot;cuotaweb-post-content&quot;&gt;
        &lt;p&gt;
            Nos complace enormemente compartir una noticia crucial: &lt;strong&gt;&lt;a href=&quot;http://cuotaweb.com&quot; target=&quot;_blank&quot;&gt;CuotaWeb&lt;/a&gt; ha alcanzado su etapa de producción&lt;/strong&gt;. Toda la arquitectura digital, diseñada desde los cimientos bajo un esquema robusto y escalable, se encuentra desplegada activamente en servidores cloud y lista para operar al 100%. 
        &lt;/p&gt;

        &lt;p&gt;
            Este no es un hito menor. La plataforma ha sido concebida bajo estrictos estándares de ingeniería de software, arquitectura multi-tenant y &lt;strong&gt;compliance legal-tech&lt;/strong&gt;, ofreciendo una estructura de gestión de cuotas y expensas pensada para resistir las auditorías más rigurosas.
        &lt;/p&gt;

        &lt;div class=&quot;cuotaweb-feature-box&quot;&gt;
            &lt;h4&gt;&lt;i class=&quot;fa-solid fa-circle-check&quot;&gt;&lt;/i&gt; ¿Qué significa &quot;Listo para Producción&quot; en CuotaWeb?&lt;/h4&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;Motor de Deuda Judicialmente Auditable:&lt;/strong&gt; Carga de ítems de deuda con cálculo automatizado de mora mediante fórmulas financieras precisas, y trazabilidad íntegra de transacciones.&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Garantía de Integridad (Ley 25.326):&lt;/strong&gt; Cada comprobante o documento digitalizado se procesa con un hash SHA256 inmutable, asegurando su validez forense en auditorías.&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Aislamiento Total de Datos:&lt;/strong&gt; Arquitectura multi-tenant con esquemas de base de datos aislados para máxima seguridad y privacidad.&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Skins Funcionales Dinámicos:&lt;/strong&gt; Interfaces personalizadas que adaptan el sistema según la entidad (Consorcios, Escuelas o Gimnasios), abstrayendo el dominio para transformar &quot;Sujetos de Facturación&quot; en copropietarios, alumnos o socios.&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/div&gt;

        &lt;h3 class=&quot;cuotaweb-section-title&quot;&gt;
            &lt;i&gt;&lt;i class=&quot;fa-solid fa-hands-holding&quot;&gt;&lt;/i&gt;&lt;/i&gt;Gratitud infinita a quienes abren camino
        &lt;/h3&gt;
        &lt;p&gt;
            Ningún proyecto de esta envergadura nace en el aislamiento. Queremos expresar nuestro más sincero agradecimiento a un &lt;strong&gt;valioso grupo de personas&lt;/strong&gt; que, aunque por ahora prefieren mantenerse tras bambalinas, han sido el soporte emocional, los consultores de dominio y la fuerza impulsora para no detener la marcha. Su paciencia, feedback y confianza son el verdadero motor de este logro.
        &lt;/p&gt;

        &lt;!--Bloque de Gratitud a la IA y Agentes--&gt;
        &lt;div class=&quot;cuotaweb-gratitude-card&quot;&gt;
            &lt;h4&gt;&lt;i class=&quot;fa-solid fa-robot&quot;&gt;&lt;/i&gt; La Sinergia Perfecta: Desarrollo y Co-Pilotos de IA&lt;/h4&gt;
            &lt;p&gt;
                Este hito marca también un triunfo en los nuevos paradigmas de ingeniería de software. Queremos hacer una mención especial y con profunda gratitud a la &lt;strong&gt;Inteligencia Artificial y a los agentes de programación autónomos (como Antigravity)&lt;/strong&gt; que formaron parte de esta aventura. 
            &lt;/p&gt;
            &lt;p&gt;
                Más que meras herramientas de autocompletado, estas tecnologías actuaron como co-pilotos y pares de programación invaluables: escribiendo tests, estructurando migraciones complejas de esquemas, optimizando ruteos de tenants y manteniendo una coherencia arquitectónica y metodológica intachable en cada sesión de trabajo. Este producto es el testimonio vivo de lo que la colaboración humano-máquina puede lograr hoy.
            &lt;/p&gt;
            &lt;span class=&quot;cuotaweb-ai-badge&quot;&gt;
                &lt;i class=&quot;fa-solid fa-code-fork&quot;&gt;&lt;/i&gt; Impulsado por Agentes y Modelos de Última Generación
            &lt;/span&gt;
        &lt;/div&gt;

        &lt;h3 class=&quot;cuotaweb-section-title&quot;&gt;
            &lt;i&gt;&lt;i class=&quot;fa-solid fa-bullhorn&quot;&gt;&lt;/i&gt;&lt;/i&gt;Buscamos a nuestro primer Beta-Tester
        &lt;/h3&gt;
        &lt;p&gt;
            La mesa está servida, los servidores están encendidos y los contenedores Docker operan sin problemas. Ahora necesitamos lo más importante: **el contacto con la realidad cotidiana**.
        &lt;/p&gt;
        &lt;p&gt;
            Estamos buscando activamente a nuestro **primer Beta-Tester oficial**. Si eres administrador de consorcios, gestionas un gimnasio o coordinas las finanzas de una institución educativa, queremos invitarte a probar CuotaWeb de forma prioritaria y exclusiva. Tendrás la oportunidad de automatizar tus cobros, experimentar la ingesta de gastos digitalizados mediante OCR y ayudarnos a pulir los últimos detalles antes del lanzamiento comercial masivo.
        &lt;/p&gt;

        &lt;!--CTA Section--&gt;
        &lt;div class=&quot;cuotaweb-cta-section&quot;&gt;
            &lt;h4 class=&quot;fw-bold mb-3&quot; style=&quot;color: #111827;&quot;&gt;¿Quieres ser el primero en experimentar el futuro de la gestión?&lt;/h4&gt;
            &lt;p class=&quot;text-muted mb-4&quot;&gt;Si deseas participar como beta-tester y transformar la administración de tus cobros con CuotaWeb, ponte en contacto con nosotros hoy mismo.&lt;/p&gt;
            &lt;a class=&quot;cuotaweb-btn&quot; href=&quot;https://cuotaweb.com/core/empezar/&quot;&gt;
                &lt;i class=&quot;fa-solid fa-paper-plane&quot;&gt;&lt;/i&gt; Postularme como Beta-Tester
            &lt;/a&gt;
        &lt;/div&gt;
    &lt;/section&gt;
&lt;/article&gt;
</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/8808925364532234605/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2026/05/blog-post.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/8808925364532234605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/8808925364532234605'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2026/05/blog-post.html' title=''/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-4467756641825915864</id><published>2026-05-14T10:17:59.180-03:00</published><updated>2026-05-14T10:17:59.180-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="consultor"/><category scheme="http://www.blogger.com/atom/ns#" term="gestion_cuotas"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="programación"/><category scheme="http://www.blogger.com/atom/ns#" term="sistemas"/><title type='text'></title><content type='html'>&lt;div style=&quot;font-family: Arial, sans-serif; line-height: 1.6; color: #333;&quot;&gt;
    &lt;h1 style=&quot;color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px;&quot;&gt;¡Estamos listos para Producción! El futuro de la gestión multi-tenant ya está aquí&lt;/h1&gt;
    
    &lt;p&gt;Nos llena de orgullo anunciar un hito fundamental en nuestro desarrollo: &lt;strong&gt;nuestra plataforma SaaS de gestión de cuotas y servicios ha finalizado su etapa de pruebas y está oficialmente lista para producción&lt;/strong&gt;. Tras un intenso trabajo de arquitectura y desarrollo, hemos desplegado nuestra solución en la nube (VPS en DonWeb), orquestada con Nginx y Gunicorn para garantizar la máxima disponibilidad y rendimiento.&lt;/p&gt;

    &lt;h2 style=&quot;color: #2980b9; margin-top: 30px;&quot;&gt;Integración Nativa con SIRO (Banco Roela)&lt;/h2&gt;
    &lt;p&gt;Uno de los avances más importantes de esta versión de lanzamiento es la &lt;strong&gt;integración completa con SIRO&lt;/strong&gt;, lo que automatiza por completo el circuito de recaudación:&lt;/p&gt;
    &lt;ul style=&quot;margin-bottom: 20px;&quot;&gt;
        &lt;li&gt;&lt;strong&gt;Códigos de Pago Inteligentes:&lt;/strong&gt; Los responsables de pago ahora pueden visualizar sus códigos de barras y códigos de pago electrónico (CEP) directamente desde su portal de autogestión.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Conciliación Automática:&lt;/strong&gt; Implementamos un motor de procesamiento que lee los archivos de rendición bancaria y aplica los pagos automáticamente a las obligaciones correspondientes, eliminando horas de carga manual.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Aislamiento de Convenios:&lt;/strong&gt; Gracias a nuestra arquitectura multi-tenant, cada institución (consorcio o escuela) configura y opera bajo su propio convenio de forma totalmente segura.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h2 style=&quot;color: #2980b9; margin-top: 30px;&quot;&gt;Un Motor Agnóstico y Judicialmente Auditable&lt;/h2&gt;
    &lt;p&gt;Nuestra plataforma no es solo un sistema de facturación, es una herramienta &lt;strong&gt;Legal-Tech&lt;/strong&gt;. Construida sobre Django 5 y PostgreSQL (con esquemas aislados mediante &lt;em&gt;django-tenants&lt;/em&gt;), hemos abstraído el dominio para manejar &quot;Sujetos de Facturación&quot;, permitiendo que el sistema se adapte (mediante &lt;em&gt;skins&lt;/em&gt;) tanto a la gestión de &lt;strong&gt;Expensas de Consorcios&lt;/strong&gt; como a &lt;strong&gt;Cuotas de Escuelas&lt;/strong&gt; usando el mismo motor financiero.&lt;/p&gt;
    
    &lt;p&gt;Además, en cumplimiento estricto con la Ley 25.326 de Protección de Datos y pensando en la &quot;defendibilidad&quot; ante posibles pericias judiciales, el 100% de los movimientos financieros (cálculos de mora, intereses y pagos) cuenta con una &lt;strong&gt;trazabilidad y auditabilidad total&lt;/strong&gt;.&lt;/p&gt;

    &lt;h2 style=&quot;color: #2980b9; margin-top: 30px;&quot;&gt;UX Moderna y Dinámica sin perder robustez&lt;/h2&gt;
    &lt;p&gt;Hemos implementado una interfaz reactiva utilizando &lt;strong&gt;HTMX&lt;/strong&gt;, lo que nos permite ofrecer una experiencia fluida y rápida similar a una SPA (Single Page Application), pero manteniendo la seguridad y simplicidad del Server-Side Rendering. El nuevo Portal de Autogestión es intuitivo, rápido y seguro.&lt;/p&gt;

    &lt;div style=&quot;background-color: #f8f9fa; border-left: 4px solid #27ae60; padding: 15px; margin-top: 30px; border-radius: 4px;&quot;&gt;
        &lt;p style=&quot;margin: 0;&quot;&gt;&lt;strong&gt;Próximos pasos:&lt;/strong&gt; Ya estamos configurando los primeros entornos (tenants) reales en producción. El ecosistema está listo para escalar y transformar la forma en que las instituciones gestionan sus finanzas. ¡Gracias a todos los que hicieron esto posible!&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/4467756641825915864/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2026/05/estamos-listos-para-produccion-el.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/4467756641825915864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/4467756641825915864'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2026/05/estamos-listos-para-produccion-el.html' title=''/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-3248081882573045567</id><published>2026-04-17T19:35:00.001-03:00</published><updated>2026-04-17T19:35:58.922-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gestion_cuotas"/><title type='text'>Main vs. Features: El arte de innovar sin romper lo que ya funciona</title><content type='html'>&lt;article&gt;
    &lt;p&gt;En el mundo del desarrollo de software, llega un momento en que el &quot;copiar y pegar&quot; carpetas o renombrar archivos como &lt;em&gt;proyecto_final_v2_este_si.zip&lt;/em&gt; deja de ser una opción. Si queremos jugar en primera, especialmente con arquitecturas modernas como las que manejamos en &lt;strong&gt;GestiónCuotas&lt;/strong&gt;, el control de versiones no es un lujo: es el cimiento.&lt;/p&gt;

    &lt;h2&gt;Git: Mucho más que un historial de cambios&lt;/h2&gt;
    &lt;p&gt;Adoptar Git como plataforma de soporte no es solo tener un &quot;seguro de vida&quot; ante errores; es habilitar una metodología de trabajo que separa la &lt;strong&gt;estabilidad&lt;/strong&gt; de la &lt;strong&gt;innovación&lt;/strong&gt;. Aquí es donde entra el concepto de las ramas (branches).&lt;/p&gt;

    &lt;div style=&quot;background-color: #f4f4f4; padding: 15px; border-left: 5px solid #2c3e50; margin: 20px 0;&quot;&gt;
        &lt;strong&gt;¿Qué es una rama?&lt;/strong&gt; Imaginalo como una línea de tiempo paralela. Podés probar una funcionalidad nueva, romper todo el código y, si no te gusta, simplemente borrar esa línea sin haber tocado ni un pelo del código que ya está funcionando en producción.
    &lt;/div&gt;
    
    

    &lt;h3&gt;La importancia de diferenciar &#39;Main&#39; de las demás&lt;/h3&gt;
    &lt;p&gt;En nuestra estructura, la rama &lt;strong&gt;Main&lt;/strong&gt; (o Master) es sagrada. Es el código que es seguro, confiable y que está &quot;a la vista&quot; del cliente. No se toca nada en Main si no ha sido probado previamente.&lt;/p&gt;
    
    &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;Ramas de Feature:&lt;/strong&gt; Son ramas efímeras. Por ejemplo, si estamos trabajando en la lógica de coeficientes para consorcios, creamos una rama específica. Ahí es donde &quot;hacemos lío&quot;, probamos y pulimos.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Aislamiento de errores:&lt;/strong&gt; Si un desarrollador comete un error en su rama, el resto del equipo puede seguir trabajando en Main sin enterarse. No hay riesgo de &quot;pisarse&quot; los cables.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;Colaboración sin caos&lt;/h3&gt;
    &lt;p&gt;Acá es donde Git brilla cuando laburamos con otros. Gracias a herramientas como los &lt;em&gt;Pull Requests&lt;/em&gt; o los &lt;em&gt;Merges&lt;/em&gt;, integrar el trabajo de un colega es un proceso ordenado. Podés revisar el código de tu par, sugerir mejoras y, una vez que el &quot;visto bueno&quot; está dado, ese código se funde con la rama principal.&lt;/p&gt;
    
    &lt;p&gt;Es, en esencia, una forma de democratizar el desarrollo manteniendo una jerarquía de calidad. Permite que cada uno aporte su granito de arena sin que el proyecto se vuelva un caos total.&lt;/p&gt;

    &lt;div style=&quot;text-align: center; margin: 30px 0; font-style: italic; color: #555;&quot;&gt;
        &quot;Al final del día, usar Git es lo que separa a un pibe que pica código de un profesional que construye sistemas.&quot;
    &lt;/div&gt;

    &lt;h3&gt;Conclusión&lt;/h3&gt;
    &lt;p&gt;Ya sea que estés trabajando solo en tu PC de casa con Ubuntu o colaborando con un equipo distribuido entre Mendoza y el resto del mundo, Git es el lenguaje universal que asegura que tu propiedad intelectual esté a salvo. Así que, si todavía tenés miedo de hacer ese primer &lt;em&gt;commit&lt;/em&gt;, ¡metele para adelante! No hay nada más satisfactorio que ver un historial de Git limpio y saber que, pase lo que pase, tenés el control total de tu obra.&lt;/p&gt;
    
    &lt;p&gt;¡A seguir codeando, que el MVP no se va a programar solo! ¡Un gran saludo, &lt;strong&gt;maestro&lt;/strong&gt;!&lt;/p&gt;
&lt;/article&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/3248081882573045567/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2026/04/main-vs-features-el-arte-de-innovar-sin.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/3248081882573045567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/3248081882573045567'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2026/04/main-vs-features-el-arte-de-innovar-sin.html' title='Main vs. Features: El arte de innovar sin romper lo que ya funciona'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-4823681235870036499</id><published>2026-04-11T11:26:00.000-03:00</published><updated>2026-04-11T11:26:33.836-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gestion_cuotas"/><title type='text'>CuotasCloud: La evolución de nuestra plataforma de gestión</title><content type='html'>&lt;div style=&quot;font-family: &#39;Segoe UI&#39;, Tahoma, Geneva, Verdana, sans-serif; line-height: 1.7; color: #333; max-width: 800px; margin: auto;&quot;&gt;

    &lt;h1 style=&quot;color: #2c3e50; border-bottom: 3px solid #3498db; padding-bottom: 10px; text-align: center;&quot;&gt;
        CuotasCloud: La evolución de nuestra plataforma de gestión
    &lt;/h1&gt;

    &lt;p&gt;
        Es un gusto compartir con ustedes los avances de nuestro nuevo proyecto: &lt;strong&gt;CuotasCloud&lt;/strong&gt;. Esta plataforma nace de la necesidad de modernizar los sistemas locales anteriores, llevando toda la potencia de la gestión administrativa y financiera a una arquitectura 100% basada en la nube.
    &lt;/p&gt;

    &lt;h3 style=&quot;color: #2980b9; border-left: 5px solid #2980b9; padding-left: 10px;&quot;&gt;Seguridad de nivel bancario&lt;/h3&gt;
    &lt;p&gt;
        Una de las mayores preocupaciones al manejar datos sensibles es la privacidad. Por eso, &lt;b&gt;CuotasCloud&lt;/b&gt; utiliza una tecnología de &quot;aislamiento por esquemas&quot;, lo que significa que la información de cada institución vive en su propio compartimento estanco, totalmente separado de los demás. Además, cada movimiento queda registrado en un historial de auditoría que garantiza la trazabilidad y el cumplimiento de la &lt;strong&gt;Ley de Protección de Datos Personales&lt;/strong&gt; en Argentina.
    &lt;/p&gt;

    &lt;h3 style=&quot;color: #2980b9; border-left: 5px solid #2980b9; padding-left: 10px;&quot;&gt;Un motor que se adapta a tu realidad&lt;/h3&gt;
    &lt;p&gt;
        No importa si sos un colegio que gestiona cuotas de alumnos o un consorcio que liquida expensas; nuestro motor financiero es &quot;agnóstico&quot;. Esto significa que el sistema puede configurarse para hablar tu mismo idioma:
    &lt;/p&gt;
    &lt;ul style=&quot;background-color: #f9f9f9; padding: 20px; border-radius: 8px; list-style-type: none;&quot;&gt;
        &lt;li&gt;🔹 &lt;strong&gt;Para Educación:&lt;/strong&gt; Manejo de ciclos lectivos, inscripciones y descuentos por hermanos.&lt;/li&gt;
        &lt;li&gt;🔹 &lt;strong&gt;Para Consorcios:&lt;/strong&gt; Gestión de unidades funcionales y coeficientes de copropiedad.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3 style=&quot;color: #2980b9; border-left: 5px solid #2980b9; padding-left: 10px;&quot;&gt;Experiencia rápida y fluida&lt;/h3&gt;
    &lt;p&gt;
        Sabemos que el tiempo es oro. Gracias a la implementación de tecnologías modernas (como HTMX), la interfaz de &lt;b&gt;CuotasCloud&lt;/b&gt; es reactiva: cuando registrás un pago o actualizás un saldo, los cambios aparecen al instante sin que la página tenga que recargarse por completo. Es la comodidad de una aplicación de escritorio con la flexibilidad de la web.
    &lt;/p&gt;

    &lt;h3 style=&quot;color: #2980b9; border-left: 5px solid #2980b9; padding-left: 10px;&quot;&gt;Migración sin dolores de cabeza&lt;/h3&gt;
    &lt;p&gt;
        Para quienes vienen de sistemas antiguos en Access o planillas de Excel, hemos diseñado un asistente de importación inteligente. Este &quot;motor de mapeo&quot; procesa tus archivos actuales y genera automáticamente los saldos iniciales, asegurando que no se pierda ni un centavo de información en la transición.
    &lt;/p&gt;

    &lt;div style=&quot;background-color: #ecf0f1; padding: 15px; border-radius: 5px; margin-top: 30px; border: 1px dashed #bdc3c7;&quot;&gt;
        &lt;p style=&quot;margin: 0; font-style: italic; color: #7f8c8d; text-align: center;&quot;&gt;
            Actualmente estamos finalizando la etapa de visualización de métricas de cobrabilidad en tiempo real. ¡El motor de &lt;strong&gt;CuotasCloud&lt;/strong&gt; ya está en marcha!
        &lt;/p&gt;
    &lt;/div&gt;

    &lt;p style=&quot;text-align: right; font-weight: bold; margin-top: 25px; color: #2c3e50;&quot;&gt;
        Alejandro Noli&lt;br /&gt;
        &lt;span style=&quot;font-size: 0.9em; color: #7f8c8d;&quot;&gt;Líder de Proyecto - Mendoza, Argentina&lt;/span&gt;
    &lt;/p&gt;

&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/4823681235870036499/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2026/04/cuotascloud-la-evolucion-de-nuestra.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/4823681235870036499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/4823681235870036499'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2026/04/cuotascloud-la-evolucion-de-nuestra.html' title='CuotasCloud: La evolución de nuestra plataforma de gestión'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-6104673823147219445</id><published>2026-04-04T14:52:00.000-03:00</published><updated>2026-04-04T14:52:25.032-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gestion_cuotas"/><title type='text'>Nuevas Fronteras en GestiónCuotas: UI Reactiva, Seguridad Multi-Tenant y Migración de Datos</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;es&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;Nuevas Fronteras en GestiónCuotas: UI Reactiva, Seguridad Multi-Tenant y Migración de Datos&lt;/title&gt;
    &lt;style&gt;
        /* Estilos básicos para el posteo */
        .post-container {
            font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif;
            line-height: 1.6;
            color: #333;
            max-width: 800px;
            margin: auto;
            padding: 20px;
        }
        h1 {
            font-size: 2.2em;
            color: #2c3e50;
            text-align: center;
            margin-bottom: 30px;
        }
        h2 {
            font-size: 1.8em;
            color: #2c3e50;
            border-bottom: 2px solid #3498db;
            padding-bottom: 10px;
            margin-top: 40px;
        }
        h3 {
            font-size: 1.4em;
            color: #34495e;
            margin-top: 30px;
        }
        p {
            margin-bottom: 15px;
        }
        ul {
            list-style-type: disc;
            margin-left: 20px;
            margin-bottom: 15px;
        }
        ul li {
            margin-bottom: 5px;
        }
        code.inline-code {
            background-color: #ecf0f1;
            padding: 2px 6px;
            border-radius: 4px;
            font-family: &#39;Courier New&#39;, Courier, monospace;
            color: #c0392b;
        }
        pre {
            background-color: #2d3436;
            color: #dfe6e9;
            padding: 20px;
            border-radius: 8px;
            overflow-x: auto;
            font-family: &#39;Courier New&#39;, Courier, monospace;
            font-size: 0.9em;
            white-space: pre-wrap;
            word-wrap: break-word;
            margin-bottom: 20px;
        }
        strong {
            color: #2980b9;
        }
        a {
            color: #3498db;
            text-decoration: none;
        }
        a:hover {
            text-decoration: underline;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;post-container&quot;&gt;

    &lt;!--h1&gt;Nuevas Fronteras en GestiónCuotas: UI Reactiva, Seguridad Multi-Tenant y Migración de Datos&lt;/h1--&gt;

    &lt;p&gt;¡Seguimos avanzando a paso firme en el desarrollo de nuestro motor de gestión SaaS! Durante las últimas semanas, el equipo se ha centrado en tres pilares fundamentales que transforman el proyecto de un motor de backend robusto a una plataforma lista para el despliegue inicial. Estos avances no solo mejoran la experiencia de usuario, sino que también solidifican la arquitectura para garantizar la seguridad, escalabilidad y auditabilidad que nos propusimos desde el inicio.&lt;/p&gt;

    &lt;p&gt;A continuación, detallamos las tres grandes fases que hemos completado.&lt;/p&gt;

    &lt;h2&gt;1. Fase 1.3: Ficha de Detalle Reactiva con HTMX&lt;/h2&gt;
    &lt;p&gt;La interacción del administrador con el estado de cuenta de un sujeto de facturación (sea un alumno o un copropietario) es una de las tareas más recurrentes. Para hacer este proceso ágil y moderno, hemos implementado una &quot;Ficha de Detalle&quot; que evita las recargas de página completas, ofreciendo una experiencia de usuario fluida y eficiente.&lt;/p&gt;
    
    &lt;h3&gt;¿Cómo lo logramos?&lt;/h3&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;Interactividad con HTMX:&lt;/strong&gt; Utilizamos la biblioteca &lt;a href=&quot;https://htmx.org/&quot; target=&quot;_blank&quot;&gt;HTMX&lt;/a&gt; para enviar solicitudes al backend y actualizar solo los fragmentos necesarios del DOM. Al registrar un pago, únicamente la tabla de deudas y el saldo total se actualizan, sin que el navegador deba recargar toda la página.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Diseño limpio con Tailwind CSS:&lt;/strong&gt; La interfaz fue construida con clases utilitarias de Tailwind CSS, logrando un diseño profesional, agnóstico y semántico. Los colores de los estados (Verde para Pagado, Rojo para Vencido) permiten una rápida identificación visual.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Feedback al Usuario:&lt;/strong&gt; Implementamos indicadores de carga (&lt;code class=&quot;inline-code&quot;&gt;hx-indicator&lt;/code&gt;) que muestran un spinner mientras el motor procesa un pago, informando al usuario que una acción está en progreso.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Ejemplo del botón de pago en nuestro template de Django:&lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;&amp;lt;!-- Formulario de Pago con HTMX --&amp;gt;
&amp;lt;form hx-post=&quot;{% url &#39;facturacion:registrar_pago&#39; sujeto.id %}&quot; 
      hx-target=&quot;#tabla-deudas-container&quot;
      hx-swap=&quot;innerHTML&quot;
      hx-indicator=&quot;#pago-loading&quot;&amp;gt;
    
    &amp;lt;button type=&quot;submit&quot; class=&quot;btn-pagar&quot;&amp;gt;
        &amp;lt;span id=&quot;pago-text&quot;&amp;gt;Registrar Pago&amp;lt;/span&amp;gt;
        &amp;lt;!-- Indicador de carga --&amp;gt;
        &amp;lt;svg id=&quot;pago-loading&quot; class=&quot;htmx-indicator animate-spin&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; fill=&quot;none&quot; viewBox=&quot;0 0 24 24&quot;&amp;gt;
            &amp;lt;circle class=&quot;opacity-25&quot; cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;10&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;4&quot;&amp;gt;&amp;lt;/circle&amp;gt;
            &amp;lt;path class=&quot;opacity-75&quot; fill=&quot;currentColor&quot; d=&quot;M4 12a8 8 0 018-8v8H4z&quot;&amp;gt;&amp;lt;/path&amp;gt;
        &amp;lt;/svg&amp;gt;
    &amp;lt;/button&amp;gt;
&amp;lt;/form&amp;gt;&lt;/code&gt;&lt;/pre&gt;

    &lt;h2&gt;2. Fase 1.4: Sistema de Seguridad Multi-Tenant (RBAC)&lt;/h2&gt;
    &lt;p&gt;La seguridad y el aislamiento de datos son innegociables en una arquitectura SaaS multi-tenant. Hemos implementado un Control de Acceso Basado en Roles (RBAC) que se integra perfectamente con &lt;code class=&quot;inline-code&quot;&gt;django-tenants&lt;/code&gt;.&lt;/p&gt;
    
    &lt;h3&gt;Niveles de Acceso Definidos:&lt;/h3&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;SuperAdmin (Global):&lt;/strong&gt; Control total sobre el esquema &lt;code class=&quot;inline-code&quot;&gt;public&lt;/code&gt;, responsable de crear y gestionar los Tenants (los clientes del SaaS).&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Admin de Tenant:&lt;/strong&gt; El administrador principal de una escuela o consorcio. Puede configurar su tenant, crear otros usuarios y acceder a reportes.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Operador de Caja:&lt;/strong&gt; Un rol con permisos limitados, enfocado en la operatoria diaria. Solo puede ver estados de cuenta y registrar pagos.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;Gracias al middleware de &lt;code class=&quot;inline-code&quot;&gt;django-tenants&lt;/code&gt;, cualquier intento de un usuario de un tenant de acceder a datos de otro es bloqueado a nivel de base de datos, garantizando un aislamiento total.&lt;/p&gt;
    &lt;p&gt;Adicionalmente, se implementaron &lt;strong&gt;decoradores de permisos personalizados&lt;/strong&gt; (ej. &lt;code class=&quot;inline-code&quot;&gt;@role_required(&#39;admin&#39;)&lt;/code&gt;) para proteger las vistas y servicios de forma granular. Para una trazabilidad legal completa, se extendió el &lt;code class=&quot;inline-code&quot;&gt;AbstractAuditModel&lt;/code&gt; para registrar el usuario (ID y Rol) que realizó cada cambio, incluyendo una &quot;instantánea&quot; del rol en el momento de la operación.&lt;/p&gt;

    &lt;h2&gt;3. Fase 1.5: Asistente de Importación de Datos Legados&lt;/h2&gt;
    &lt;p&gt;Para facilitar la transición de nuestros primeros clientes, hemos desarrollado un &quot;Asistente de Importación&quot; que permite migrar datos desde archivos Excel/CSV de forma segura y controlada.&lt;/p&gt;
    
    &lt;h3&gt;Características Clave:&lt;/h3&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;Motor de Mapeo Agnóstico:&lt;/strong&gt; El servicio utiliza la biblioteca &lt;strong&gt;Pandas&lt;/strong&gt; para procesar los archivos. Mapea columnas con nombres genéricos (ej. &#39;DNI_TUTOR&#39;, &#39;SALDO_ADEUDADO&#39;) a los modelos abstractos de nuestro sistema, asegurando la flexibilidad.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Creación de Saldos Iniciales:&lt;/strong&gt; Al importar, el sistema genera automáticamente una &quot;Cuota de Ajuste&quot; o &quot;Saldo Inicial&quot; para cada sujeto, garantizando que su cuenta corriente en el nuevo sistema refleje con precisión su estado anterior.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Reporte de Errores Detallado:&lt;/strong&gt; Si una fila del archivo contiene errores (ej. un CUIT duplicado o un formato de fecha inválido), el proceso no se detiene. En su lugar, se registran los errores y se genera un log para que el usuario pueda corregir solo las entradas problemáticas, mientras se procesan las válidas.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Trazabilidad y Auditoría:&lt;/strong&gt; Cada registro creado mediante este proceso queda marcado en nuestro &lt;code class=&quot;inline-code&quot;&gt;AbstractAuditModel&lt;/code&gt; como una &quot;Carga Masiva Inicial&quot;, cumpliendo con nuestros estrictos requisitos de auditabilidad y defendibilidad judicial.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Interfaz con HTMX para el progreso:&lt;/strong&gt; El asistente de importación incorpora una vista simple con HTMX que muestra una barra de progreso o un spinner, manteniendo al usuario informado sobre el estado del procesamiento del archivo.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h2&gt;Conclusión y Próximos Pasos&lt;/h2&gt;
    &lt;p&gt;Con estos avances, &lt;strong&gt;GestiónCuotas&lt;/strong&gt; está más cerca que nunca de su lanzamiento piloto. Hemos sentado las bases de una interfaz de usuario moderna, un sistema de seguridad robusto y una vía de migración eficiente para nuestros futuros clientes e inversores.&lt;/p&gt;
    
    &lt;p&gt;El próximo gran paso será el despliegue del Dashboard de Control de Gestión, donde los administradores podrán visualizar métricas de cobrabilidad en tiempo real. ¡El motor está listo y funcionando!&lt;/p&gt;

    &lt;p style=&quot;text-align: center; margin-top: 50px; font-style: italic;&quot;&gt;
        Publicado por el equipo de desarrollo de GestiónCuotas - Mendoza, 2026.
    &lt;/p&gt;

&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/6104673823147219445/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2026/04/nuevas-fronteras-en-gestioncuotas-ui.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/6104673823147219445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/6104673823147219445'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2026/04/nuevas-fronteras-en-gestioncuotas-ui.html' title='Nuevas Fronteras en GestiónCuotas: UI Reactiva, Seguridad Multi-Tenant y Migración de Datos'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-275070953918504358</id><published>2026-03-12T05:30:00.002-03:00</published><updated>2026-03-13T12:04:29.581-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gestion_cuotas"/><category scheme="http://www.blogger.com/atom/ns#" term="programación"/><category scheme="http://www.blogger.com/atom/ns#" term="sistemas"/><title type='text'>Sistema de Gestión de Cuotas y Pagos para Instituciones Educativas</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;es&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Estado Actual de la Aplicación de Gestión de Cuotas&lt;/title&gt;
    &lt;style&gt;
        body { font-family: sans-serif; line-height: 1.6; margin: 20px; }
        h1, h2, h3 { color: #333; }
        h1 { border-bottom: 2px solid #eee; padding-bottom: 10px; }
        h2 { margin-top: 30px; }
        h3 { margin-top: 20px; color: #555; }
        strong { color: #0056b3; }
        ul { margin-top: 10px; }
        li { margin-bottom: 10px; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

    &lt;h1&gt;Sistema de Gestión de Cuotas y Pagos para Instituciones Educativas&lt;/h1&gt;

    &lt;p&gt;Esta aplicación web, desarrollada con Django, está diseñada para optimizar la administración financiera de instituciones educativas. Permite gestionar de forma eficiente las cuotas estudiantiles, los pagos recibidos y el estado de cuenta de cada alumno.&lt;/p&gt;

    &lt;h2&gt;Funcionalidades Principales:&lt;/h2&gt;

    &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;Gestión Integral de Alumnos:&lt;/strong&gt; Mantenimiento centralizado de la información de alumnos y sus familias, incluyendo datos de contacto, DNI, fecha de nacimiento, y estado de pago anual o convenios.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Administración de Ciclos Lectivos y Cursos:&lt;/strong&gt; Define y organiza los ciclos lectivos, asignando cursos con montos base de cuota a cada uno. La aplicación se enfoca en el ciclo lectivo activo para reflejar el contexto financiero actual.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Inscripciones y Acuerdos de Pago:&lt;/strong&gt; Registra las inscripciones de alumnos a cursos específicos, estableciendo el monto exacto de la cuota acordada para esa inscripción y permitiendo definir su estado (Activa, Baja, Egresado).&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Registro Detallado de Pagos:&lt;/strong&gt; Permite registrar cada pago recibido, especificando el concepto (cuota mensual, matrícula, material, etc.), el método de pago (efectivo, transferencia, mercado pago, etc.), el mes y año correspondiente, y el monto abonado. Soporta movimientos de crédito y débito.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Cálculo Automático de Deudas:&lt;/strong&gt; Basándose en las inscripciones activas y los pagos registrados para el ciclo lectivo actual, la aplicación calcula automáticamente el saldo adeudado por cada alumno, identificando los meses pendientes de pago y el monto total de la deuda.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Visión Clara del Estado Financiero:&lt;/strong&gt; Ofrece perfiles detallados de cada alumno, mostrando su historial de pagos, inscripciones activas, deuda actual, y el próximo mes a abonar. Incluye estadísticas de pagos y cantidad de transacciones.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Gestión por Instituto:&lt;/strong&gt; La aplicación soporta la administración de múltiples instituciones (Institutos), asegurando que los usuarios solo vean la información correspondiente a su entidad.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Acceso Web y Navegación Intuitiva:&lt;/strong&gt; Las funcionalidades son accesibles a través de una interfaz web clara y organizada, con rutas específicas para listar alumnos, ver detalles individuales, registrar pagos y gestionar inscripciones.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Esta herramienta simplifica la labor administrativa, reduce errores manuales y proporciona una visión precisa y actualizada de las finanzas estudiantiles, facilitando una gestión más ágil y transparente.&lt;/p&gt;

&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/275070953918504358/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2026/03/sistema-de-gestion-de-cuotas-y-pagos.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/275070953918504358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/275070953918504358'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2026/03/sistema-de-gestion-de-cuotas-y-pagos.html' title='Sistema de Gestión de Cuotas y Pagos para Instituciones Educativas'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-7185919166225075269</id><published>2026-03-03T00:00:00.001-03:00</published><updated>2026-03-13T12:05:15.639-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gestion_cuotas"/><category scheme="http://www.blogger.com/atom/ns#" term="programación"/><category scheme="http://www.blogger.com/atom/ns#" term="sistemas"/><title type='text'></title><content type='html'>&lt;div style=&quot;font-family: Arial, sans-serif; line-height: 1.6; color: #333; max-width: 800px; margin: auto;&quot;&gt;
    &lt;h1 style=&quot;color: #2c3e50; border-bottom: 2px solid #2c3e50; padding-bottom: 10px;&quot;&gt;Informe de Estado y Proyección: Sistema de Gestión Académica&lt;/h1&gt;
    
    &lt;p&gt;&lt;strong&gt;Fecha:&lt;/strong&gt; 2 de marzo de 2026&lt;br&gt;
    &lt;strong&gt;Proyecto:&lt;/strong&gt; Migración y Escalabilidad del Sistema de Cuotas y Alumnos&lt;br&gt;
    &lt;strong&gt;Estado:&lt;/strong&gt; Fase de Infraestructura Core Completada&lt;/p&gt;
    
    &lt;hr style=&quot;border: 0; border-top: 1px solid #eee; margin: 20px 0;&quot;&gt;

    &lt;h2 style=&quot;color: #2980b9;&quot;&gt;1. Resumen de lo Realizado hasta la Fecha&lt;/h2&gt;
    &lt;p&gt;Se ha completado con éxito la transición del antiguo modelo de datos (basado en Access) hacia una arquitectura web moderna utilizando &lt;strong&gt;Django&lt;/strong&gt; y &lt;strong&gt;PostgreSQL&lt;/strong&gt;. Este cambio garantiza integridad de datos, capacidad de acceso multiusuario simultáneo y seguridad remota.&lt;/p&gt;

    &lt;h3&gt;Logros Técnicos:&lt;/h3&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;Normalización de Base de Datos:&lt;/strong&gt; Se implementó una jerarquía relacional lógica: &lt;em&gt;Ciclo Lectivo &amp;gt; Curso &amp;gt; Inscripción &amp;gt; Alumno&lt;/em&gt;. Esto permite que la academia crezca año tras año manteniendo un histórico impecable sin duplicar fichas de alumnos.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Gestión de Ciclos Lectivos:&lt;/strong&gt; Implementación de una entidad global que permite &quot;activar&quot; o &quot;desactivar&quot; periodos académicos. Esto automatiza la lógica de cobro y asegura que los administrativos siempre trabajen sobre el año vigente por defecto.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Módulo de Cobranza Dinámico:&lt;/strong&gt; Creación de un sistema de seguimiento de cuotas por mes, permitiendo el registro detallado de medios de pago (Efectivo, Transferencia, Mercado Pago) y vinculándolos a una inscripción específica.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Interfaz de Administración Avanzada:&lt;/strong&gt; Configuración de un panel de control con edición anidada (&lt;em&gt;Inlines&lt;/em&gt;). Ahora, desde la ficha de un alumno, es posible gestionar sus inscripciones y pagos de forma centralizada.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #eee; margin: 20px 0;&quot;&gt;

    &lt;h2 style=&quot;color: #2980b9;&quot;&gt;2. Estructura de Datos Actual&lt;/h2&gt;
    &lt;p&gt;El sistema ha sido diseñado bajo tres pilares de consistencia:&lt;/p&gt;
    &lt;ol&gt;
        &lt;li&gt;&lt;strong&gt;El Ciclo Lectivo:&lt;/strong&gt; Es el eje temporal (ej. 2025, 2026). Controla cuándo inician las actividades y cuál es el periodo de facturación actual.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;El Curso:&lt;/strong&gt; Está anclado a un Ciclo Lectivo y define la oferta académica y el costo base de la cuota para ese periodo.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;La Inscripción:&lt;/strong&gt; Es el contrato legal/económico. Vincula al alumno con un curso y permite pactar montos especiales (becas o acuerdos por contingencia).&lt;/li&gt;
    &lt;/ol&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #eee; margin: 20px 0;&quot;&gt;

    &lt;h2 style=&quot;color: #2980b9;&quot;&gt;3. Visión de Futuro: Próximos Módulos&lt;/h2&gt;
    &lt;p&gt;El sistema está preparado para evolucionar de una herramienta de gestión administrativa a una &lt;strong&gt;Plataforma Educativa Integral&lt;/strong&gt;.&lt;/p&gt;

    &lt;h3&gt;A. Módulo de Calificaciones (Acceso Docente Seguro)&lt;/h3&gt;
    &lt;p&gt;Este es el próximo hito fundamental. El objetivo es descentralizar la carga de notas manteniendo la máxima seguridad:&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;Roles de Usuario (RBAC):&lt;/strong&gt; Perfil específico para &quot;Profesores&quot;. El docente solo podrá visualizar y editar los datos de los alumnos inscritos en &lt;em&gt;sus&lt;/em&gt; cursos asignados.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Privacidad de Datos:&lt;/strong&gt; El personal docente &lt;strong&gt;no tendrá acceso&lt;/strong&gt; a la información financiera ni a datos sensibles de contacto de las familias.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Libreta Digital y Actas:&lt;/strong&gt; Interfaz intuitiva para carga de calificaciones. Incluirá un sistema de &quot;Cierre de Acta&quot; para bloquear las notas una vez finalizado el periodo de carga.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;B. Portal para Familias y Alumnos&lt;/h3&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;Autogestión:&lt;/strong&gt; Consulta online de estados de cuenta y descarga de recibos.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Boletín de Calificaciones:&lt;/strong&gt; Visualización en tiempo real de las notas cargadas.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;C. Auditoría y Cumplimiento Legal&lt;/h3&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;Logs de Actividad:&lt;/strong&gt; Registro automático de cada cambio realizado en el sistema (quién modificó una nota, quién registró un pago).&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Protección de Datos:&lt;/strong&gt; Adaptación de los formularios a los marcos legales de protección de datos personales.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;hr style=&quot;border: 0; border-top: 1px solid #eee; margin: 20px 0;&quot;&gt;

    &lt;h2 style=&quot;color: #2980b9;&quot;&gt;4. Conclusión Técnica&lt;/h2&gt;
    &lt;p&gt;La base actual es sólida y escalable. Gracias al uso de &lt;strong&gt;Docker&lt;/strong&gt;, el sistema es &quot;cloud-ready&quot;, permitiendo una migración inmediata a un servidor web cuando se decida abrir el acceso a los profesores. La arquitectura modular garantiza que la incorporación del sistema de notas sea un proceso fluido.&lt;/p&gt;
    
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/7185919166225075269/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2026/03/informe-de-estado-y-proyeccion-sistema.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/7185919166225075269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/7185919166225075269'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2026/03/informe-de-estado-y-proyeccion-sistema.html' title=''/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-6002168213171456568</id><published>2025-03-21T03:00:00.001-03:00</published><updated>2026-03-13T12:05:33.625-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gestion_cuotas"/><category scheme="http://www.blogger.com/atom/ns#" term="programación"/><category scheme="http://www.blogger.com/atom/ns#" term="sistemas"/><title type='text'>Mejoras en el Software de Gestión de Cuotas</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;span data-darkreader-inline-color=&quot;&quot; style=&quot;--darkreader-inline-color: var(--darkreader-text--darkreader-text-000000, var(--darkreader-text-e8e6e3, #d8d4cf)); color: var(--darkreader-text-000000, #e8e6e3);&quot;&gt;El software sigue funcionando. No está roto. No ha colapsado. Pero
la deuda técnica está ahí, acumulándose como una pila de tareas
pendientes que nunca encuentran su momento. Ha llegado la hora de
hacer algo al respecto.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-style: normal;&quot;&gt;El objetivo para lo que queda del año
es claro: &lt;strong&gt;mejorar lo que ya está, saldar deudas técnicas y
dejar el código en un estado más sólido y mantenible&lt;/strong&gt;. No
se trata de una revolución, sino de pequeños ajustes,
optimizaciones y rediseños que hagan la diferencia.&lt;/p&gt;
&lt;h3 class=&quot;western&quot; style=&quot;font-style: normal;&quot;&gt;&lt;strong&gt;¿Qué cambios
se vienen?&lt;/strong&gt;&lt;/h3&gt;
&lt;p style=&quot;font-style: normal;&quot;&gt;👉&amp;nbsp;&lt;strong&gt;Refactorización del
código&lt;/strong&gt;: Hay fragmentos que funcionan, sí, pero con un
nivel de rudeza que duele ver. La idea es hacerlos más eficientes,
más organizados y más fáciles de mantener.&lt;/p&gt;
&lt;p style=&quot;font-style: normal;&quot;&gt;&lt;span data-darkreader-inline-color=&quot;&quot; style=&quot;--darkreader-inline-color: var(--darkreader-text--darkreader-text-000000, var(--darkreader-text-e8e6e3, #d8d4cf)); color: var(--darkreader-text-000000, #e8e6e3);&quot;&gt;👉&lt;/span&gt;&lt;strong&gt;Optimización de la
gestión de cuotas&lt;/strong&gt;: Mejorar la estructura de los datos y los
reportes para hacer el seguimiento de pagos más claro y ágil.&lt;/p&gt;
&lt;p style=&quot;font-style: normal;&quot;&gt;&lt;span data-darkreader-inline-color=&quot;&quot; style=&quot;--darkreader-inline-color: var(--darkreader-text--darkreader-text-000000, var(--darkreader-text-e8e6e3, #d8d4cf)); color: var(--darkreader-text-000000, #e8e6e3);&quot;&gt;👉&lt;/span&gt;&lt;strong&gt;Automatización de tareas
repetitivas&lt;/strong&gt;: Reducir el trabajo manual con VBA y macros,
permitiendo que el sistema haga más con menos intervención.&lt;/p&gt;
&lt;p style=&quot;font-style: normal;&quot;&gt;&lt;span data-darkreader-inline-color=&quot;&quot; style=&quot;--darkreader-inline-color: var(--darkreader-text--darkreader-text-000000, var(--darkreader-text-e8e6e3, #d8d4cf)); color: var(--darkreader-text-000000, #e8e6e3);&quot;&gt;👉&lt;/span&gt;&lt;strong&gt;Interfaz más intuitiva&lt;/strong&gt;:
Sin necesidad de una revolución estética, pequeños ajustes pueden
hacer que el uso del software sea más fluido y amigable.&lt;/p&gt;
&lt;h3 class=&quot;western&quot; style=&quot;font-style: normal;&quot;&gt;&lt;strong&gt;El dilema de
siempre&lt;/strong&gt;&lt;/h3&gt;
&lt;p style=&quot;font-style: normal;&quot;&gt;Este es un proyecto sin un retorno
económico directo. &lt;strong&gt;No hay una retribución esperándome al
final del camino&lt;/strong&gt;. Hacerlo es una cuestión de convicción,
de satisfacción personal, de la certeza de que algo que fue útil
puede ser mejor y más duradero.&lt;/p&gt;
&lt;p style=&quot;font-style: normal;&quot;&gt;Y aunque el código pueda mejorar y el
sistema pueda optimizarse, hay un límite: &lt;strong&gt;no puedo hacerlo
público&lt;/strong&gt;. No es un software para compartir abiertamente,
sino una herramienta con información sensible que debe mantenerse en
su contexto.&lt;/p&gt;
&lt;h3 class=&quot;western&quot; style=&quot;font-style: normal;&quot;&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&lt;/h3&gt;
&lt;p style=&quot;font-style: normal;&quot;&gt;Se vienen meses de trabajo silencioso.
No será un desarrollo frenético ni un rediseño total, pero cada
mejora sumará a la estabilidad del sistema. Quizás, en el futuro,
este software pueda trascender más allá de su uso actual y
convertirse en algo más grande. Pero por ahora, lo que toca es
&lt;strong&gt;seguir adelante, mejorar lo que se pueda y disfrutar del
proceso&lt;/strong&gt;. 👍&lt;/p&gt;
&lt;p style=&quot;font-style: normal;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;

&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/6002168213171456568/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2025/03/mejoras-en-el-software-de-gestion-de.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/6002168213171456568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/6002168213171456568'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2025/03/mejoras-en-el-software-de-gestion-de.html' title='Mejoras en el Software de Gestión de Cuotas'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-497074093457761395</id><published>2025-03-19T10:55:00.000-03:00</published><updated>2025-03-19T10:55:19.754-03:00</updated><title type='text'></title><content type='html'>&lt;p&gt;Todo software tiene una historia, pero no todas las historias de software comienzan con un plan claro. Algunas surgen en medio de la incertidumbre, sin un objetivo del todo definido, avanzando a tientas, buscando su rumbo. Así nació este proyecto: sin un destino claro, pero con la certeza de que debía existir.&lt;/p&gt;&lt;p&gt;Al principio, la pregunta era siempre la misma: ¿hacia dónde debería ir esto? No había respuestas definitivas, solo un proceso de prueba y error, de ideas que parecían buenas hasta que dejaban de serlo, de soluciones improvisadas que con el tiempo demostraban su valor. Y en ese andar incierto, sin saberlo, se estaba aplicando una de las ideas más poderosas del desarrollo de software moderno: el agilismo.&lt;/p&gt;&lt;p&gt;Años después, cuando Alistair Cockburn presentó en Mendoza su visión sobre el agilismo, quedó claro que este método no es solo una estrategia consciente, sino también una forma natural de crear. Construir sin tener todos los datos de antemano. Permitir que la propia necesidad del proyecto vaya tirando de la cuerda, en lugar de esperar a que todo esté perfectamente planeado antes de empezar.&lt;/p&gt;&lt;p&gt;Muchos proyectos nacen bajo un aura de contradicciones y dudas. Pero el secreto no está en resolver todas esas dudas antes de dar el primer paso, sino en avanzar a pesar de ellas. No dudes. Ve hacia adelante.&lt;/p&gt;&lt;p&gt;Quien construye algo con verdadera determinación lo hace a cualquier costo. Desafía obstáculos, aprende en el camino y encuentra maneras de seguir adelante cuando todo parece indicar lo contrario. No espera el momento perfecto, porque sabe que nunca llegará. Y en esa constancia, tarde o temprano, hay una recompensa. No siempre es el reconocimiento externo, ni siquiera el éxito comercial. A veces, la mayor satisfacción es poder mirarse al espejo y ver a alguien que defendió, cuidó y valoró una idea a lo largo del tiempo. Un año, dos… o toda una vida.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/497074093457761395/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2025/03/todo-software-tiene-una-historia-pero.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/497074093457761395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/497074093457761395'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2025/03/todo-software-tiene-una-historia-pero.html' title=''/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-4052496960079333718</id><published>2025-03-18T15:53:00.000-03:00</published><updated>2025-03-18T15:53:12.085-03:00</updated><title type='text'>Introducción</title><content type='html'>&lt;p&gt;&amp;nbsp;Todo software tiene una historia. Nace con una idea, crece con el esfuerzo de quienes lo construyen y, con el tiempo, se transforma en algo más grande de lo que sus creadores imaginaron en un principio. Este es el relato de una aplicación que comenzó como un simple experimento y terminó convirtiéndose en una herramienta utilizada en diversas instituciones. Su código evolucionó, se adaptó a nuevas necesidades y sobrevivió a los cambios tecnológicos y organizativos que tantas veces dejan atrás a proyectos similares.&lt;/p&gt;&lt;p&gt;Este libro no es un manual técnico, ni una guía para programadores. Es la historia de un sistema que nació, creció y aún sigue funcionando, sorteando obstáculos y aprovechando cada oportunidad de mejora. No se trata solo de líneas de código, sino de decisiones, aprendizajes y dilemas que todo software atraviesa en su camino.&lt;/p&gt;&lt;p&gt;A lo largo de sus capítulos, se explorará cómo se gestó la idea original, los desafíos técnicos y humanos que surgieron en su desarrollo, los momentos de crisis en los que casi fue abandonado y las decisiones clave que permitieron su continuidad. También se abordará el contexto en el que se implementó, los cambios que experimentó con el tiempo y la visión de futuro que hoy se proyecta sobre él.&lt;/p&gt;&lt;p&gt;Este libro es para quienes disfrutan las historias de creación y evolución tecnológica. Para los curiosos que alguna vez se preguntaron cómo un conjunto de archivos en una computadora puede convertirse en una herramienta esencial en la vida de muchas personas. Para quienes saben que el software no es solo código, sino también historia.&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/4052496960079333718/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2025/03/introduccion.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/4052496960079333718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/4052496960079333718'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2025/03/introduccion.html' title='Introducción'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-6205011340382241934</id><published>2025-01-17T12:35:00.001-03:00</published><updated>2025-01-28T13:47:55.769-03:00</updated><title type='text'>Reflexiones Sobre un Proyecto Literario</title><content type='html'>&lt;p&gt;Hoy quiero compartir con ustedes una idea que viene rondando mi cabeza desde hace un tiempo: la posibilidad de escribir un libro sobre la experiencia de desarrollar una aplicación que lleva años funcionando, evolucionando, y adaptándose a nuevas necesidades. Este software, que comenzó como una herramienta sencilla para gestionar las cuotas en un instituto, ha crecido conmigo, tanto a nivel técnico como personal.&lt;/p&gt;
&lt;p&gt;No planeo entrar en muchos detalles por ahora, pero sí me entusiasma explorar este proyecto desde una perspectiva reflexiva. ¿Qué significó empezar sin grandes planes? ¿Cómo las pequeñas soluciones se convirtieron en algo más grande? ¿Qué enseñanzas me dejó este viaje como programador, como colaborador, y como alguien que trata de construir algo útil y duradero?&lt;/p&gt;
&lt;p&gt;Pero más allá de la idea técnica, creo que este libro también sería una forma de enfrentar una época personal complicada. El estrés, las molestias cervicales, y las consecuencias de algunos hábitos negativos, me han hecho reflexionar sobre cómo encontrar formas más saludables de canalizar la energía y el pensamiento. A veces, escribir puede ser una válvula de escape poderosa, y siento que compartir este proyecto podría ser una manera de sanar mientras me conecto con otros que quizás estén en un camino similar.&lt;/p&gt;
&lt;p&gt;Quiero que este libro, si llega a ver la luz, sea algo más que un manual técnico. Quiero que sea una conversación sobre creatividad, errores, aprendizajes y la relación que tenemos con nuestro trabajo, especialmente en un campo como el desarrollo de software, que avanza a una velocidad vertiginosa.&lt;/p&gt;
&lt;p&gt;Me gustaría escuchar sus opiniones: ¿les parece interesante un libro de este tipo? ¿Qué aspectos les gustaría leer en una obra que hable sobre la construcción de software desde cero y sobre el impacto que tiene en nuestras vidas?&lt;/p&gt;
&lt;p&gt;Espero que esta idea sea el inicio de un diálogo y, quizás, el comienzo de un proyecto que no solo cuente una historia, sino que inspire a otros a compartir las suyas.&lt;/p&gt;
&lt;p&gt;Gracias por tomarse el tiempo de leer esto, y por cualquier comentario o sugerencia que quieran dejar. Estoy atento y con muchas ganas de escuchar sus devoluciones. 😊&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/6205011340382241934/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2025/01/reflexiones-sobre-un-proyecto-literario.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/6205011340382241934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/6205011340382241934'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2025/01/reflexiones-sobre-un-proyecto-literario.html' title='Reflexiones Sobre un Proyecto Literario'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-399031141333248925</id><published>2023-11-17T12:49:00.000-03:00</published><updated>2023-11-17T12:49:10.959-03:00</updated><title type='text'>Relatar, nada.</title><content type='html'>&lt;p&gt;&amp;nbsp;Se dijo en la oficina que hacía calor y que había que prender el aire acondicionado, de todos modos estamos preparados para lo peor.&amp;nbsp; Hoy, tendremos viento zonda de manera que lo que se viene es aleccionador, para algunos.&amp;nbsp; Tendremos&amp;nbsp; que mirar hacia adelante otra no queda.&amp;nbsp; Después, mirar hacia el pasado y sentir que lo que hicimos tuvo algún sentido quizás oculto, quizás extraño.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Llegó enojado, con el ceño fruncido y lo peor es que ni sabe que está enojado.&amp;nbsp; Lo oculta para sí y para los demás, evita tomar contacto con esas emociones no quiere reconocerlo, oculta su rostro para que los demás no se enojen.&amp;nbsp; ¡Pero que se enojen! Que no se disgusten.&amp;nbsp; ¡Pero que se disgusten! Toda su vida pretendió ser alguien que no era dejando de lado sus verdaderas intenciones, sus gustos, lo que pensaba.&amp;nbsp; Y así, en una actitud temeraria, volcaba sus frustraciones en cada relación, en cada vínculo que se acercaba.&amp;nbsp; Estaban ya convencidos que de pegarle hasta matarlo, él lo agradecería.&amp;nbsp; ¿Y por qué actuaba así?&amp;nbsp; Era incapaz de hacer lo que le sugerían.&amp;nbsp; Eso de sentarse con alguien a conversar pidiendo nuevas condiciones laborales no estaba siquiera en sus más remotos planes.&amp;nbsp; Hoy, alguien se lo sugería y ya salía corriendo a pensar que era la solución.&amp;nbsp; Todo lo que le decían que hiciera, él estaba dispuesto a coronar la semana haciendo caso.&amp;nbsp; Y si no, al menos a angustiarse por la idea.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Le dijo lo que pensaba, ni más ni menos.&amp;nbsp; Se quedó mudo.&amp;nbsp; No habló una sóla palabra más en toda la mañana.&amp;nbsp; Tiró al piso su celular, en señal de disconformidad evidente, mientras se puso a verificar que su computadora nueva funcionara bien.&amp;nbsp; Quienes estaban a su alrededor no entendían la maniobra, lo miraban de reojo de vez en cuando buscando una respuesta o un gesto de desquicio, algo.&amp;nbsp; Se lo notaba nervioso tal vez apurado.&amp;nbsp; Se venía el evento del año, ese en el que todos se encuentran para celebrar los logros anuales y no estaba entusiasmado con la idea de participar.&amp;nbsp; Lo que pasaba cada vez que hacía flan en microondas, lo tenía perplejo.&amp;nbsp; Asustado.&amp;nbsp; Inerme.&amp;nbsp; Impotente.&amp;nbsp; Los demás, acusaban al resto de no ocuparse, como si fuera tan fácil.&amp;nbsp; El, subía los estados.&amp;nbsp; Esa era su tarea.&amp;nbsp;&amp;nbsp;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/399031141333248925/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2023/11/relatar-nada.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/399031141333248925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/399031141333248925'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2023/11/relatar-nada.html' title='Relatar, nada.'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-487947393616883602</id><published>2023-04-10T15:08:00.000-03:00</published><updated>2023-04-10T15:08:07.963-03:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&amp;nbsp;La mañana se presentó bastante agradable, más bien tirando a fresca en San Rafael, pero todos en su mayoría concurrieron al trabajo.&amp;nbsp; Menos él, que tenía cosas que hacer, dijo.&amp;nbsp; Leer, en primer término el nuevo contrato de alquiler.&amp;nbsp; Revisar, después, el estado del cerco perimetral y controlar que no hayan bichos nuevos.&amp;nbsp; Los de siempre serán tenidos en cuenta por el jardinero, dijo.&amp;nbsp; Sonó su teléfono. Era el jefe.&amp;nbsp; Había que mover cientos de expedientes de lugar, como quien saca la basura en su casa y la lleva a un depósito de chatarra para ser depositada ahí hasta nuevo aviso, mientras hace lugar en la habitación.&amp;nbsp; Todo eso, por el mismo precio.&amp;nbsp; No había justicia en este mundo, todos navegaban en internet menos él.&amp;nbsp; Todos estaban contentos por la llegada del nuevo menos él, que sería quien tendría que prestar su computadora.&amp;nbsp; Todos estaban ansiosos por la llegada del nuevo, menos él que tenía que ceder como de costumbre a los caprichos de los otros que decían: se ha aislado nuevamente.&amp;nbsp; No responde los llamados ni nada.&amp;nbsp; El celular no hace otra cosa que gritar ahí su espanto y él, nada.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Fue y compró una docena de facturas y las puso ahí, a disposición de todos para que se sirva quien quiera.&amp;nbsp; Sin embargo, alguien fue y retiró ocho dejando el peladero.&amp;nbsp; Ya estaban nerviosos querían saber quién había sido.&amp;nbsp; Estaban angustiados porque si algo así era posible de suceder, qué nos esperaba en adelante.&amp;nbsp; Todos enterados de la situación, tenían que resolver y actuar en consecuencia.&amp;nbsp; Era difícil.&amp;nbsp; No quería que esto pasara, no otra vez.&amp;nbsp; Pero estaba ahí y era él quien tenía que hacerse cargo.&amp;nbsp; No había nadie más en el lugar, ni cámaras que atestiguaran lo que sucedía en la cocina cuando se iban todos.&amp;nbsp; Sería más barato que un sanguche.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Revisó su correo y ahí estaba.&amp;nbsp; Era la acreditación para el ingreso a la oficina.&amp;nbsp; Estaban todos contentos con su llegada, menos ella.&amp;nbsp; Había puesto cara de mala, la conocían bien.&amp;nbsp; No hizo más que poner un pie en la oficina y ella empezó a patear al piso, con gesto de delincuenta.&amp;nbsp; La quisimos de inmediato.&amp;nbsp; Recordamos lo que pasaba antes, cuando los que venían de afuera eran tratados con sangre en las manos, en la ropa, en los labios.&amp;nbsp; Morder ahí, era posible.&amp;nbsp; Y eso querían todos.&lt;/p&gt;&lt;p&gt;Encontró el password y eso le hizo sentir útil, una vez más.&amp;nbsp; En cuanto pudo, se fue a caminar.&amp;nbsp; Dejó de lado lo que había hecho hasta ahora. Empezó por socavar su espacio, lentamente, buscando rechazar lo que había hecho hasta el momento. Pero fue imposible, estaba bien preparado, había hecho lo que hay que hacer: estudiar y ser consecuente con sus ideas. Lo que no estaba del todo bien, era que no le daban ni bolilla.&amp;nbsp; Estaba dándolo todo y sin embargo se encontraba con un hermetismo imposible de romper y eso le provocaba angustia y tristeza.&amp;nbsp; ¿Por qué, si él había intentado todo para ser agradable, para ser alguien en su vida y conversar, al menos conversar?&amp;nbsp; Pero no, recibía un silencio que le calaba el alma, ese frío invernal que conmueve al espíritu.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Se levantó al fin de su silla.&amp;nbsp; Fue al baño y al regresar intentó cruzar una palabra con el ortiba del jefe.&amp;nbsp; Ese que siempre está molestando con peticiones insoportables, llenas de ego donde lo único que importa es satisfacer las inquietudes de ese ego inflado y lleno de suberbia, tal como lo señala su esposa en cada enfrentamiento.&amp;nbsp; Están separados.&amp;nbsp; Hace años.&amp;nbsp; Y las últimas reuniones eran por la tenencia de los hijos y, por supuesto, por la tenencia de la antigua máquina de escribir Olivetti que habían decidido transformar en un botín de guerra.&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Pero siguen frente a frente, bajo la tutela y el amparo protector de un abogado que hace las veces de mediador.&amp;nbsp; Están juntos, inseparables, al final.&amp;nbsp; Todo parece arreglarse hasta que de pronto estalla la más mínima chispa y se enciende de nuevo la impiadosa vanidad que destruye todo alrededor. Están cansados, lo dijo él, pero siguen porque no tienen dinero, que si no.&amp;nbsp; Otro sería el cantar.&amp;nbsp;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/487947393616883602/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2023/04/manana-se-presento-bastante-agradable.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/487947393616883602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/487947393616883602'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2023/04/manana-se-presento-bastante-agradable.html' title=''/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-5525712836868262340</id><published>2023-02-22T13:18:00.003-03:00</published><updated>2023-02-22T13:18:59.734-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="notas"/><category scheme="http://www.blogger.com/atom/ns#" term="relatos"/><title type='text'>Nada</title><content type='html'>&lt;p&gt;&amp;nbsp;Un gato grande, eso debería buscar.&amp;nbsp; Pero cómo saber si se volverá grande o no, y digo que el tamaño importa porque después tendrá que pasar por la ventanuca que le dejamos abierta todos los días para que salga y de una vuelta por la vereda, así se distrae un poco y no se pone tan intenso en casa lo queremos grande decía porque es más adecuado para acariciar, tenés más piel y coso.&lt;/p&gt;&lt;p&gt;Lo que vimos ayer nos conmovió: uno que cuidaba la ventana de su casa y salió a recibirnos pero con mucha cautela, se escondió detrás de una baranda y allí estuvo el rato que duró nuestra recorrida por el barrio.&amp;nbsp; Dimos un par de vueltas a la manzana y después de discutir sobre la conveniencia o no de pasar por esa ventana, llegamos a casa cansados pero contentos de haber hecho ejercicio otra vez.&amp;nbsp; La enfermedad nos tuvo atrapados un tiempo en casa, sin poder caminar algo que disfrutamos siempre.&amp;nbsp; Alquilamos un auto y así nos fue.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/5525712836868262340/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2023/02/nada.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/5525712836868262340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/5525712836868262340'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2023/02/nada.html' title='Nada'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-3625215367129552819</id><published>2023-02-06T17:22:00.001-03:00</published><updated>2023-02-09T16:39:36.279-03:00</updated><title type='text'>Poema </title><content type='html'>&lt;p&gt;&amp;nbsp;Seré sincero esta vez recordar&lt;/p&gt;&lt;p&gt;Lo vivido intensamente es fácil&lt;/p&gt;&lt;p&gt;lo dicen todos de una vez&lt;/p&gt;&lt;p&gt;Hay que soltar dejar ir&lt;/p&gt;&lt;p&gt;Uno acompaña, qué diablos para qué&lt;/p&gt;&lt;p&gt;Si al final termina tendido&lt;/p&gt;&lt;p&gt;En una cama matrimonial cubierto&amp;nbsp;&lt;/p&gt;&lt;p&gt;De las más espléndidas estrellas&amp;nbsp;&lt;/p&gt;&lt;p&gt;Que uno quiera imaginar&amp;nbsp;&lt;/p&gt;&lt;p&gt;Aquí también seré sincero&amp;nbsp;&lt;/p&gt;&lt;p&gt;No hay noche que no la sueñe&amp;nbsp;&lt;/p&gt;&lt;p&gt;para vos será fácil no sé&amp;nbsp;&lt;/p&gt;&lt;p&gt;en cambio para mí, una tortura.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/3625215367129552819/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2023/02/poema.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/3625215367129552819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/3625215367129552819'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2023/02/poema.html' title='Poema '/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-9152899968659430370</id><published>2022-11-22T16:36:00.001-03:00</published><updated>2022-11-22T16:36:31.084-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="poemas"/><title type='text'>Poema</title><content type='html'>&lt;p&gt;&amp;nbsp;Fundirse en uno estimula&lt;/p&gt;&lt;p&gt;cierta pereza intrínseca que disuelve&lt;/p&gt;&lt;p&gt;la llama pobre del estilo&lt;/p&gt;&lt;p&gt;sufrir lo que viene&amp;nbsp;&lt;/p&gt;&lt;p&gt;estibar rosas a lo largo&amp;nbsp;&lt;/p&gt;&lt;p&gt;transitando en lo alto&lt;/p&gt;&lt;p&gt;un augurio de paloma que vuela&lt;/p&gt;&lt;p&gt;bajo sin derramar una sola gota&lt;/p&gt;&lt;p&gt;sensatez qué difícil hallazgo&lt;/p&gt;&lt;p&gt;aniquilado en vida soy,&lt;/p&gt;&lt;p&gt;muero como decía en lo alto&lt;/p&gt;&lt;p&gt;al mismo tiempo recibo y sueño&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/9152899968659430370/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2022/11/poema.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/9152899968659430370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/9152899968659430370'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2022/11/poema.html' title='Poema'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-844773571630817057</id><published>2022-10-03T08:38:00.000-03:00</published><updated>2022-10-03T08:38:35.453-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="poemas"/><title type='text'>Poema</title><content type='html'>Empieza como trueno y atraviesa la tarde&lt;div&gt;Silenciosa y taciturna&lt;/div&gt;&lt;div&gt;Deseamos convalecer a su lado&lt;/div&gt;&lt;div&gt;Demorar esa espera&lt;/div&gt;&lt;div&gt;Quedarnos quietos calientes&lt;/div&gt;&lt;div&gt;Mirando la nada como si&lt;/div&gt;&lt;div&gt;Hubiera un mañana&lt;/div&gt;&lt;div&gt;Es inaudito nadie dura tanto&lt;/div&gt;&lt;div&gt;En esas condiciones&lt;/div&gt;&lt;div&gt;En su lugar ya me hubiera ido&lt;/div&gt;&lt;div&gt;Cómo hace&lt;/div&gt;&lt;div&gt;Espera como un animal&lt;/div&gt;&lt;div&gt;Sin despertar sospechas&lt;/div&gt;&lt;div&gt;Un familiar recorre la tarde&lt;/div&gt;&lt;div&gt;Montado en un café.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/844773571630817057/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2022/10/poema.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/844773571630817057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/844773571630817057'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2022/10/poema.html' title='Poema'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-3828977061350746246</id><published>2022-07-18T12:54:00.004-03:00</published><updated>2022-07-18T12:54:25.208-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="poemas"/><title type='text'>Borracho</title><content type='html'>&lt;p&gt;&amp;nbsp;Este espejo delante&amp;nbsp;&lt;/p&gt;&lt;p&gt;es muy tibio&amp;nbsp;&lt;/p&gt;&lt;p&gt;sabe de rincones y mañanas&amp;nbsp;&lt;/p&gt;&lt;p&gt;busca en la nevera un espacio más&amp;nbsp;&lt;/p&gt;&lt;p&gt;donde envolver un tibio repasador&amp;nbsp;&lt;/p&gt;&lt;p&gt;después de dejar los cubiertos en orden&amp;nbsp;&lt;/p&gt;&lt;p&gt;bajo la espesa rutina&amp;nbsp;&lt;/p&gt;&lt;p&gt;de todo un universo&amp;nbsp;&lt;/p&gt;&lt;p&gt;que se cuela&amp;nbsp;&lt;/p&gt;&lt;p&gt;entre los párpados batientes&amp;nbsp;&lt;/p&gt;&lt;p&gt;de mi amada,&amp;nbsp;&lt;/p&gt;&lt;p&gt;que no repara en el hecho&amp;nbsp;&lt;/p&gt;&lt;p&gt;de que&amp;nbsp;&lt;/p&gt;&lt;p&gt;yo cambié para mejor.&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/3828977061350746246/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2022/07/borracho.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/3828977061350746246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/3828977061350746246'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2022/07/borracho.html' title='Borracho'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1273155895184209782.post-3136986347531553733</id><published>2022-05-30T16:52:00.002-03:00</published><updated>2022-05-31T13:29:08.663-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="poemas"/><title type='text'>Poema</title><content type='html'>&lt;p&gt;&amp;nbsp;Olvidar es lo tibio dicen aquí&lt;/p&gt;&lt;p&gt;adentro cabe un alfiler&lt;/p&gt;&lt;p&gt;estruendo y risas&lt;/p&gt;&lt;p&gt;golpes de puño y sable&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Termino aquí franco&lt;/p&gt;&lt;p&gt;estival es el tiempo&lt;/p&gt;&lt;p&gt;que tengo entre sábanas&lt;/p&gt;&lt;p&gt;blancas y fragancias&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;sintiendo lo usual&amp;nbsp;&lt;/p&gt;&lt;p&gt;fingiendo querer&lt;/p&gt;&lt;p&gt;transpirar la nada&lt;/p&gt;&lt;p&gt;y velar por la salud&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;corbata y vestido&lt;/p&gt;&lt;p&gt;taco y pelo ondulado&lt;/p&gt;&lt;p&gt;quiebre y resplandor&lt;/p&gt;&lt;p&gt;sumiso y rapaz&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://janoli.blogspot.com/feeds/3136986347531553733/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://janoli.blogspot.com/2022/05/poema.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/3136986347531553733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1273155895184209782/posts/default/3136986347531553733'/><link rel='alternate' type='text/html' href='http://janoli.blogspot.com/2022/05/poema.html' title='Poema'/><author><name>Alejandro Noli</name><uri>http://www.blogger.com/profile/01787529682657959507</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ3JkH-LR73SSoL81ldUGZ_iGlxJ4GofUpU4HD8jhEvAHFbW0-3cfVJcb1eTXCtmq_S2QBF6buic2IXimqm9TVnF-95PqsF5Slujxw1_3CoMNFqg8W7dyWAvUGn7iMP5l0vlverc3YVNwG9pB2g2UcgUeVQ1zRO7ZCqeB2CpiV8r4pwQ/s1600/AutorretratoPRO_Cuad.jpg'/></author><thr:total>0</thr:total></entry></feed>