PageSourceSearch

https://nessy-blog.netlify.app/cesar-ai-v2/

html nessy-blog.netlify.app collected 2026-10-03 11:11:55 UTC 52,717 bytes, 160 lines download raw bytes

1<!DOCTYPE html><html lang="es"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="ie=edge"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><style data-href="/styles.152614f15db64dfc7b3d.css" id="gatsby-global-css">@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:100;src:local("Montserrat Thin "),local("Montserrat-Thin"),url(/static/montserrat-latin-100-191cc9f50f3b76b9617cb383f19acb7d.woff2) format("woff2"),url(/static/montserrat-latin-100-370318464551d5f25b0f0a78f374faac.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:100;src:local("Montserrat Thin italic"),local("Montserrat-Thinitalic"),url(/static/montserrat-latin-100italic-bdeaeb79db315697bd173a55b097dc18.woff2) format("woff2"),url(/static/montserrat-latin-100italic-ecf7d49386e8f265878e735db34a7c4b.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:200;src:local("Montserrat Extra Light "),local("Montserrat-Extra Light"),url(/static/montserrat-latin-200-85d5ef9db7f2dc6979172a4a3b2c57cb.woff2) format("woff2"),url(/static/montserrat-latin-200-1fc98e126a3d152549240e6244d7e669.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:200;src:local("Montserrat Extra Light italic"),local("Montserrat-Extra Lightitalic"),url(/static/montserrat-latin-200italic-49095760a498d024fe1a85a078850df9.woff2) format("woff2"),url(/static/montserrat-latin-200italic-fe46cf8b9462c820457d3bf537e4057f.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:300;src:local("Montserrat Light "),local("Montserrat-Light"),url(/static/montserrat-latin-300-7c3daf12b706645b5d3710f863a4da04.woff2) format("woff2"),url(/static/montserrat-latin-300-8dc95fab9cf98d02ca8d76e97d3dff60.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:300;src:local("Montserrat Light italic"),local("Montserrat-Lightitalic"),url(/static/montserrat-latin-300italic-f20b178ca2024a5eac8e42e6649db86c.woff2) format("woff2"),url(/static/montserrat-latin-300italic-3fe16939288856e8e828fa2661bf2354.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:400;src:local("Montserrat Regular "),local("Montserrat-Regular"),url(/static/montserrat-latin-400-bc3aa95dca08f5fee5291e34959c27bc.woff2) format("woff2"),url(/static/montserrat-latin-400-8102c4838f9e3d08dad644290a9cb701.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:400;src:local("Montserrat Regular italic"),local("Montserrat-Regularitalic"),url(/static/montserrat-latin-400italic-5cad650422a7184467af5a4d17b264c4.woff2) format("woff2"),url(/static/montserrat-latin-400italic-d191f22af3bb50902b99ac577f81a322.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:500;src:local("Montserrat Medium "),local("Montserrat-Medium"),url(/static/montserrat-latin-500-92d16e458625f4d2c8940f6bdca0ff09.woff2) format("woff2"),url(/static/montserrat-latin-500-8b763220218ffc11c57c84ddb80e7b26.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:500;src:local("Montserrat Medium italic"),local("Montserrat-Mediumitalic"),url(/static/montserrat-latin-500italic-47bfcca6b69d6a9acca7a8bff17193e2.woff2) format("woff2"),url(/static/montserrat-latin-500italic-72c01f753c3940c0b9cb6bf2389caddf.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:600;src:local("Montserrat SemiBold "),local("Montserrat-SemiBold"),url(/static/montserrat-latin-600-6fb1b5623e528e27c18658fecf5ee0ee.woff2) format("woff2"),url(/static/montserrat-latin-600-7c839d15a6f54e7025ba8c0c4b333e8f.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:600;src:local("Montserrat SemiBold italic"),local("Montserrat-SemiBolditalic"),url(/static/montserrat-latin-600italic-60789af1c9338ed1a9546722ec54b4f7.woff2) format("woff2"),url(/static/montserrat-latin-600italic-f3d4de8d0afb19e777c79032ce828e3d.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:700;src:local("Montserrat Bold "),local("Montserrat-Bold"),url(/static/montserrat-latin-700-39d93cf678c740f9f6b2b1cfde34bee3.woff2) format("woff2"),url(/static/montserrat-latin-700-80f10bd382f0df1cd650fec59f3c9394.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:700;src:local("Montserrat Bold italic"),local("Montserrat-Bolditalic"),url(/static/montserrat-latin-700italic-ba136d97b14e82284dd595e257f11c47.woff2) format("woff2"),url(/static/montserrat-latin-700italic-8c98142b425630821139c24bd1698700.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:800;src:local("Montserrat ExtraBold "),local("Montserrat-ExtraBold"),url(/static/montserrat-latin-800-b7018be9ed6cd94da8b6675b3a468c3b.woff2) format("woff2"),url(/static/montserrat-latin-800-9a9befcf50d64f9d2d19d8b1d1984add.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:800;src:local("Montserrat ExtraBold italic"),local("Montserrat-ExtraBolditalic"),url(/static/montserrat-latin-800italic-540ffdd223d1a9ad3d4e678e1a23372e.woff2) format("woff2"),url(/static/montserrat-latin-800italic-897086f99f4e1f45e6b1e9368527d0bc.woff) format("woff")}@font-face{font-family:Montserrat;font-style:normal;font-display:swap;font-weight:900;src:local("Montserrat Black "),local("Montserrat-Black"),url(/static/montserrat-latin-900-58cd789700850375b834e8b6776002eb.woff2) format("woff2"),url(/static/montserrat-latin-900-26d42c9428780e545a540bbb50c84bce.woff) format("woff")}@font-face{font-family:Montserrat;font-style:italic;font-display:swap;font-weight:900;src:local("Montserrat Black italic"),local("Montserrat-Blackitalic"),url(/static/montserrat-latin-900italic-451157bc8861fe54f523b3669a3def71.woff2) format("woff2"),url(/static/montserrat-latin-900italic-a8ec4957e1c24f5793305763ad9845b3.woff) format("woff")}@font-face{font-family:Merriweather;font-style:normal;font-display:swap;font-weight:300;src:local("Merriweather Light "),local("Merriweather-Light"),url(/static/merriweather-latin-300-b1158cfcd4aacb9d8fb61625e37af46a.woff2) format("woff2"),url(/static/merriweather-latin-300-cc7de05e166e90320d7d896e0f72a19d.woff) format("woff")}@font-face{font-family:Merriweather;font-style:italic;font-display:swap;font-weight:300;src:local("Merriweather Light italic"),local("Merriweather-Lightitalic"),url(/static/merriweather-latin-300italic-8fe52a48089d6ebe46db0b8e7cc66263.woff2) format("woff2"),url(/static/merriweather-latin-300italic-e1331f5397c2a673f9d3765138debdb5.woff) format("woff")}@font-face{font-family:Merriweather;font-style:normal;font-display:swap;font-weight:400;src:local("Merriweather Regular "),local("Merriweather-Regular"),url
1(/static/merriweather-latin-400-8276fdb72ae8f4714d4e6eba704cc39f.woff2) format("woff2"),url(/static/merriweather-latin-400-69f09800f4f6479d06e44eba837df872.woff) format("woff")}@font-face{font-family:Merriweather;font-style:italic;font-display:swap;font-weight:400;src:local("Merriweather Regular italic"),local("Merriweather-Regularitalic"),url(/static/merriweather-latin-400italic-3a9be9ea9f7aa4af6de7307df21d9fc0.woff2) format("woff2"),url(/static/merriweather-latin-400italic-d76079ed7541a433a54f79316de086e9.woff) format("woff")}@font-face{font-family:Merriweather;font-style:normal;font-display:swap;font-weight:700;src:local("Merriweather Bold "),local("Merriweather-Bold"),url(/static/merriweather-latin-700-fa534be7ffa380e39a7f6e03bf9a5e03.woff2) format("woff2"),url(/static/merriweather-latin-700-ba56ea84b8084b7ff9677f50d3cd81bd.woff) format("woff")}@font-face{font-family:Merriweather;font-style:italic;font-display:swap;font-weight:700;src:local("Merriweather Bold italic"),local("Merriweather-Bolditalic"),url(/static/merriweather-latin-700italic-1ef5edaaa20ae53ea50399884c5e48c6.woff2) format("woff2"),url(/static/merriweather-latin-700italic-534bc9e7ce93c73d73426e46acd78092.woff) format("woff")}@font-face{font-family:Merriweather;font-style:normal;font-display:swap;font-weight:900;src:local("Merriweather Black "),local("Merriweather-Black"),url(/static/merriweather-latin-900-7528fb70e8a4a82c7305e72ff43ac25f.woff2) format("woff2"),url(/static/merriweather-latin-900-3799b6e2f5ed3fcccf9d7a708d7419fa.woff) format("woff")}@font-face{font-family:Merriweather;font-style:italic;font-display:swap;font-weight:900;src:local("Merriweather Black italic"),local("Merriweather-Blackitalic"),url(/static/merriweather-latin-900italic-e1b4d2aaa78e12ad84aaf8a56321e4c2.woff2) format("woff2"),url(/static/merriweather-latin-900italic-2ae22f731b3424e8dbb4b37f7ca6e708.woff) format("woff")}
2
3
4/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden]{display:none}:root{--maxWidth-none:"none";--maxWidth-xs:20rem;--maxWidth-sm:24rem;--maxWidth-md:28rem;--maxWidth-lg:32rem;--maxWidth-xl:36rem;--maxWidth-2xl:42rem;--maxWidth-3xl:48rem;--maxWidth-4xl:56rem;--maxWidth-full:"100%";--maxWidth-wrapper:var(--maxWidth-4xl);--spacing-px:"1px";--spacing-0:0;--spacing-1:0.25rem;--spacing-2:0.5rem;--spacing-3:0.75rem;--spacing-4:1rem;--spacing-5:1.25rem;--spacing-6:1.5rem;--spacing-8:2rem;--spacing-10:2.5rem;--spacing-12:3rem;--spacing-16:4rem;--spacing-20:5rem;--spacing-24:6rem;--spacing-32:8rem;--fontFamily-sans:Montserrat,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--fontFamily-serif:"Merriweather","Georgia",Cambria,"Times New Roman",Times,serif;--font-body:var(--fontFamily-sans);--font-heading:var(--fontFamily-sans);--fontWeight-normal:400;--fontWeight-medium:500;--fontWeight-semibold:600;--fontWeight-bold:700;--fontWeight-extrabold:800;--fontWeight-black:700;--fontSize-root:18px;--lineHeight-none:1;--lineHeight-tight:1.1;--lineHeight-normal:1.5;--lineHeight-relaxed:1.625;--fontSize-0:0.833rem;--fontSize-1:1rem;--fontSize-2:1.2rem;--fontSize-3:1.44rem;--fontSize-4:1.728rem;--fontSize-5:2.074rem;--fontSize-6:2.488rem;--fontSize-7:2.986rem;--color-primary:#3bc0bf;--color-text:#2e353f;--color-text-light:#4f5969;--color-heading:#062a3a;--color-heading-black:#000;--color-accent:#d1dce5;--color-cta:#f154b1}*,:after,:before{box-sizing:border-box}html{line-height:var(--lineHeight-normal);font-size:var(--fontSize-root);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,html{min-height:100%}body{font-family:var(--font-body);font-size:var(--fontSize-1);color:var(--color-text)}footer{padding:var(--spacing-6) var(--spacing-0)}hr{background:var(--color-accent);height:1px;border:0}.h1,h1,h2,h3,h4,h5,h6{font-family:var(--font-heading);margin-top:var(--spacing-12);margin-bottom:var(--spacing-6);line-height:var(--lineHeight-tight);letter-spacing:-.025em}h2,h3,h4,h5,h6{font-weight:var(--fontWeight-bold)}.h1,h1,h2,h3,h4,h5,h6{color:var(--color-heading)}.h1,h1{font-weight:var(--fontWeight-black);font-size:var(--fontSize-6);margin:var(--spacing-6) 0}h2{font-size:var(--fontSize-5)}h3{font-size:var(--fontSize-4)}h4{font-size:var(--fontSize-3)}h5{font-size:var(--fontSize-2)}h6{font-size:var(--fontSize-1)}h1>a{color:var(--color-heading);text-decoration:none}h2>a,h3>a,h4>a,h5>a,h6>a{text-decoration:none;color:inherit}p{line-height:var(--lineHeight-relaxed);--baseline-multiplier:0.179;--x-height-multiplier:0.35;margin:var(--spacing-0) var(--spacing-0) var(--spacing-8) var(--spacing-0);padding:var(--spacing-0)}ol,ul{margin-left:var(--spacing-0);margin-right:var(--spacing-0);padding:var(--spacing-0) var(--spacing-4);margin-bottom:var(--spacing-8);list-style-position:outside;list-style-image:none}ol li,ul li{padding-left:var(--spacing-0)}li>p,ol li,ul li{margin-bottom:calc(var(--spacing-8)/2)}li :last-child{margin-bottom:var(--spacing-0)}li>ul{margin-left:var(--spacing-8);margin-top:calc(var(--spacing-8)/2)}blockquote{color:var(--color-text-light);margin-left:calc(var(--spacing-6)*-1);margin-right:var(--spacing-8);padding:var(--spacing-0) var(--spacing-0) var(--spacing-0) var(--spacing-6);border-left:var(--spacing-1) solid var(--color-primary);font-size:var(--fontSize-2);font-style:italic;margin-bottom:var(--spacing-8)}blockquote>:last-child{margin-bottom:var(--spacing-0)}blockquote>ol,blockquote>ul{list-style-position:inside}table{margin-bottom:var(--spacing-8);border-spacing:.25rem}table thead tr th{border-bottom:1px solid var(--color-accent)}a{color:var(--color-heading);font-weight:700}a:focus,a:hover{text-decoration:none}.bold{font-weight:var(--fontWeight-bold)}.global-wrapper{margin:var(--spacing-4) auto;max-width:var(--maxWidth-wrapper);padding:var(--spacing-6) var(--spacing-8);background-color:#fff}.global-wrapper[data-is-root-path=true] .bio{margin-bottom:var(--spacing-20)}.global-header{margin-bottom:var(--spacing-12)}.main-heading{font-size:var(--fontSize-7);margin:0}.post-list-item{margin-bottom:var(--spacing-8);margin-top:var(--spacing-8);display:flex;align-items:center}.post-list-item p{margin-bottom:var(--spacing-0)}.post-list-item h2{font-size:var(--fontSize-4);color:var(--color-heading);margin-bottom:0;margin-top:var(--spacing-0)}.post-list-item header{margin-bottom:var(--spacing-4)}.post-tags{margin-bottom:var(--spacing-3)}.post-tags a{margin-right:var(--spacing-2);border-radius:9999px;background-color:var(--color-primary);text-decoration:none;line-height:1;color:#fff;padding:.25em .75em;font-size:75%;font-weight:700}.post-list-item .author-avatar{height:36px;width:36px}.author-info{display:flex;align-items:center;margin-top:var(--spacing-3)}.header-link-home{color:var(--color-heading);font-weight:var(--fontWeight-bold);font-family:var(--font-heading);text-decoration:none;font-size:var(--fontSize-2);display:inline-flex;align-items:center}.bio{display:flex;margin-bottom:var(--spacing-12)}.bio p{margin-bottom:var(--spacing-0)}.blog-post header h1{margin:var(--spacing-0) var(--spacing-0) var(--spacing-4) var(--spacing-0)}.blog-post header p{font-size:var(--fontSize-2);font-family:var(--font-heading)}.blog-post-nav ul{margin:var(--spacing-0)}.gatsby-highlight{margin-bottom:var(--spacing-8)}.index-logo{width:70px;height:70px;margin-right:10px}.post-logo{width:50px;height:50px;margin-right:8px}.footer-text{text-align:center}.author-avatar{width:70px;height:70px;margin-right:10px;border-radius:50%}.social-link{margin-left:var(--spacing-2);margin-right:var(--spacing-8)}.social-box{display:inline-block}.nav-button{background-color:var(--color-heading);padding:5px 8px;color:#fff;text-decoration:none;border-radius:5px}.figure-caption{text-align:center;font-style:italic}img{max-width:100%}.imagePostContainer{width:40%;display:inline-block}.summaryPostContainer{width:60%;display:inline-block;padding-left:20px}table{display:table;overflow:auto;width:100%;border-collapse:collapse;margin:2rem 0}table td,table th{padding:6px 13px;border:1px solid #dfe2e5}table tr:nth-child(2n){background-color:#f6f8fa}td,th{text-align:left;vertical-align:top}.header-container{display:flex;justify-content:space-between;align-items:center;margin:0 auto;max-width:var(--maxWidth-wrapper);padding:0 var(--spacing-8)}.header{padding:var(--spacing-6);background-color:var(--color-heading);color:#fff}.h1,.header h1{font-size:var(--fontSize-4);margin:0}.h1>a,.header h1>a{color:#fff;text-decoration:none;display:inline-flex;align-items:center}
4.navigation{display:flex;justify-content:space-between}.navigation a{text-decoration:none;padding:var(--spacing-2) var(--spacing-4);display:block;color:#fff}#menu-toggle{display:none}#menu-toggle+label{display:none;padding:var(--spacing-4)}.text-muted{color:var(--color-text-light)}@media (max-width:767px){table{display:block;max-width:100%}}@media (max-width:42rem){blockquote{padding:var(--spacing-0) var(--spacing-0) var(--spacing-0) var(--spacing-4);margin-left:var(--spacing-0)}ol,ul{list-style-position:inside}body{background:none}.main-heading{font-size:var(--fontSize-3)}.global-wrapper{box-shadow:none;margin-top:var(--spacing-0)}.global-wrapper,.header{padding:var(--spacing-4)}.header-container{padding:0}.navigation{display:none;position:absolute;z-index:0;flex-direction:column;background-color:var(--color-heading);left:0;right:0;top:112px}.navigation a{padding:var(--spacing-4)}#close-menu{display:none}#menu-toggle+label,#open-menu{display:block}#menu-toggle:checked~.navigation{display:flex}#menu-toggle:checked+label #open-menu{display:none}#menu-toggle:checked+label #close-menu{display:block}h1{font-size:var(--fontSize-4)}h2{font-size:var(--fontSize-3)}h3{font-size:var(--fontSize-2)}h4,h5,h6{font-size:var(--fontSize-1)}ol,ul{padding:var(--spacing-0)}.imagePostContainer{display:none}.summaryPostContainer{width:100%;padding-left:0}}code[class*=language-],pre[class*=language-]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;-webkit-hyphens:none;hyphens:none}code[class*=language-]::selection,code[class*=language-] ::selection,pre[class*=language-]::selection,pre[class*=language-] ::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}</style><meta name="generator" content="Gatsby 2.32.13"/><link rel="sitemap" type="application/xml" href="/sitemap.xml"/><link rel="alternate" type="application/rss+xml" title="RSS Feed del blog de Nessy" href="/rss.xml"/><link rel="manifest" href="/manifest.webmanifest" crossorigin="anonymous"/><meta name="theme-color" content="#062a3a"/><link rel="apple-touch-icon" sizes="192x192" href="/android-chrome-192x192.png"/><link rel="apple-touch-icon" sizes="384x384" href="/android-chrome-384x384.png"/><title data-react-helmet="true">Nueva versión de Cesar AI (v2) | El Blog de Nessy</title><meta data-react-helmet="true" name="description" content="Actualizamos Cesar AI, la herramienta que transforma información de un paciente a FHIR usando inteligencia artificial."/><meta data-react-helmet="true" name="image" content="https://blog.codeness.io/static/46a23edbf331f36477adde482b4d6f2c/f3583/Cesar.AI.png"/><meta data-react-helmet="true" property="og:image" content="https://blog.codeness.io/static/46a23edbf331f36477adde482b4d6f2c/f3583/Cesar.AI.png"/><meta data-react-helmet="true" property="og:image:width" content="1200"/><meta data-react-helmet="true" property="og:image:height" content="630"/><meta data-react-helmet="true" property="og:title" content="Nueva ver
4sión de Cesar AI (v2)"/><meta data-react-helmet="true" property="og:description" content="Actualizamos Cesar AI, la herramienta que transforma información de un paciente a FHIR usando inteligencia artificial."/><meta data-react-helmet="true" property="og:type" content="website"/><meta data-react-helmet="true" name="twitter:card" content="summary"/><meta data-react-helmet="true" name="twitter:creator" content="NessyHealth"/><meta data-react-helmet="true" name="twitter:image" content="https://blog.codeness.io/static/46a23edbf331f36477adde482b4d6f2c/f3583/Cesar.AI.png"/><meta data-react-helmet="true" name="twitter:title" content="Nueva versión de Cesar AI (v2)"/><meta data-react-helmet="true" name="twitter:description" content="Actualizamos Cesar AI, la herramienta que transforma información de un paciente a FHIR usando inteligencia artificial."/><link as="script" rel="preload" href="/webpack-runtime-0e2fcd59ed7d4ab6bbc1.js"/><link as="script" rel="preload" href="/styles-540f25bd5e5cb35d6f53.js"/><link as="script" rel="preload" href="/framework-29ba174b433dc5858bed.js"/><link as="script" rel="preload" href="/app-bb36b33bda458262cac0.js"/><link as="script" rel="preload" href="/a9a7754c-3bcea21576f028ee7e1a.js"/><link as="script" rel="preload" href="/commons-4eaec22c9a4ba53659fe.js"/><link as="script" rel="preload" href="/dffd9eda1bde23af0ce146d568b45c289f422d0a-07f2cd2b717c3d63858e.js"/><link as="script" rel="preload" href="/cd7d5f864fc9e15ed8adef086269b0aeff617554-66f6549d9c1d83fef11e.js"/><link as="script" rel="preload" href="/component---src-templates-blog-post-js-d9c3ab606ab3552d77ab.js"/><link as="fetch" rel="preload" href="/page-data/cesar-ai-v2/page-data.json" crossorigin="anonymous"/><link as="fetch" rel="preload" href="/page-data/sq/d/3832538981.json" crossorigin="anonymous"/><link as="fetch" rel="preload" href="/page-data/app-data.json" crossorigin="anonymous"/></head><body><div id="___gatsby"><div style="outline:none" tabindex="-1" id="gatsby-focus-wrapper"><header class="header"><div class="header-container"><div class="h1"><a href="/"><img class="index-logo" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSI2ODAuMzE1cHgiIGhlaWdodD0iNjgwLjMxNXB4IiB2aWV3Qm94PSIwIDAgNjgwLjMxNSA2ODAuMzE1IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2ODAuMzE1IDY4MC4zMTUiCgkgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPGc+CgkJPGc+CgkJCTxnPgoJCQkJPHBhdGggZmlsbD0iI0ZGRkZGRiIgc3Ryb2tlPSIjMUQ3NDc1IiBzdHJva2Utd2lkdGg9IjExLjc0MjMiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTE3OS43NDEsNzMuMjg5bDEyLjQ4NSw1MC44NjIKCQkJCQljMCwwLDU4LjcyLTI3LjI4Miw5Ni42MzQsMTguMDMxbDI4LjIwNy01NS45NDZjMCwwLDE0LjMzNC0xNy41NzItMTYuNjQ2LTMwLjA1NUMyNjguOTc5LDQxLjM4NCwxODAuNjY3LDMxLjIxMiwxNzkuNzQxLDczLjI4OXoKCQkJCQkiLz4KCQkJCTxnPgoJCQkJCTxwYXRoIGZpbGw9IiNBMTFEMjEiIGQ9Ik0yMDcuMjA1LDEwMC41ODZsMTMuMDMxLTIuNTZsLTMuNjkxLTE4Ljc5N2wtMTMuMDMxLDIuNTZsLTIuNTYxLTEzLjAzbC0xNS43NjQsMy4wOTcKCQkJCQkJYy0wLjAwNiwwLjEwOC0wLjAxNSwwLjIxLTAuMDE4LDAuMzE4bDEwLjgzOCw0NC4xNDRsMTMuNzU1LTIuNzAyTDIwNy4yMDUsMTAwLjU4NnoiLz4KCQkJCTwvZz4KCQkJPC9nPgoJCQk8cGF0aCBmaWxsPSIjNDFCRkJGIiBzdHJva2U9IiMxRDc0NzUiIHN0cm9rZS13aWR0aD0iMTEuNzQyMyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNjIyLjg5LDM1OS4yMjkKCQkJCWMtOTkuNzg5LDY2LjUyNy0xNzguNDEyLDI4LjIyNS0xNzguNDEyLDI4LjIyNXMtNDEuMzI4LTEwMC43OTMtMTY3LjMyMi01OC40NjFjMCwwLDcuMjA3LTM3LjY4NCwyNi4zMjktNTcuMDUyCgkJCQljMTQuMDMtMTYuNTk2LDIyLjQ1Ny0zNy44NzUsMjIuNDU3LTYxLjA4MWMwLTUzLjAyNC00NC4wMTQtOTYuMDExLTk4LjMwOC05Ni4wMTFjLTM1LjkyNCwwLTY3LjM0MywxOC44MjItODQuNDk1LDQ2LjkxOAoJCQkJYy0zLjU1Ny0wLjMzOS03LjE2Ny0wLjUxOC0xMC44MjktMC41MThjLTUzLjY2LDAtOTcuMTU5LDM3LjMyOC05Ny4xNTksODMuMzc2YzAsNDYuMDQ3LDQzLjQ5OSw4My4zNzgsOTcuMTU5LDgzLjM3OAoJCQkJYzIwLjAxLDAsMzguNTk4LTUuMiw1NC4wNTMtMTQuMDk2Yy00My4wNTEsMTM5LjU2OSw4LjE0MiwxODQuNDI0LDguMTQyLDE4NC40MjRzLTU3Lj
4Q1NCwyOC4yMjItNjYuNTI1LDgwLjYzNgoJCQkJYzk4Ljc3OCw1My40MiwxMzAuMDI3LTI2LjIwNywxMzAuMDI3LTI2LjIwN3M1OC40NjEsMzcuMjk1LDE0MS4xMTUsMTYuMTI1YzM3LjI5NSw3Mi41NzUsMTAyLjgxMyw1MS40MDksMTAyLjgxMyw1MS40MDkKCQkJCXMxOS4xNS0zOS4zMTMtNy4wNTctOTIuNzMzYzkwLjcyMS00My4zNCwxNDAuMTEtMTU4LjI1MSwxNDAuMTEtMTU4LjI1MVM2MzcuMDAxLDM1NC4xOSw2MjIuODksMzU5LjIyOXoiLz4KCQkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8xXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyMDkuODgxOCIgeTE9IjI1Ny4xMzQ4IiB4Mj0iMjA5Ljg4MTgiIHkyPSIyNTcuMTM0OCI+CgkJCQk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojRkZGRkZGIi8+CgkJCQk8c3RvcCAgb2Zmc2V0PSIwLjc4MyIgc3R5bGU9InN0b3AtY29sb3I6IzU2NkM2QztzdG9wLW9wYWNpdHk6MC4zNTQxIi8+CgkJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojMDMzRjNFO3N0b3Atb3BhY2l0eTowIi8+CgkJCTwvbGluZWFyR3JhZGllbnQ+CgkJCTxwYXRoIGZpbGw9InVybCgjU1ZHSURfMV8pIiBkPSJNMjA5Ljg4MiwyNTcuMTM1Ii8+CgkJCTxnPgoJCQkJPHBhdGggZD0iTTIyOS45MjgsMTgzLjQxMWMtNi4zNTksMTYuMzQ5LTIwLjgsMjUuOTg4LTMyLjI2MSwyMS41MzJjLTExLjQ1Ny00LjQ1OC0xNS41OTItMjEuMzIxLTkuMjM2LTM3LjY3MgoJCQkJCWM2LjM2LTE2LjM0NiwyMC44LTI1Ljk4NCwzMi4yNTktMjEuNTI5QzIzMi4xNSwxNTAuMTk5LDIzNi4yODYsMTY3LjA2MiwyMjkuOTI4LDE4My40MTF6Ii8+CgkJCQk8cGF0aCBmaWxsPSIjRkZGRkZGIiBkPSJNMjMwLjg0NiwxNjIuNTc2YzAsNy44NjgtNC42NSwxNC4yNDktMTAuMzg4LDE0LjI0OWMtNS43MzUsMC0xMC4zODUtNi4zODEtMTAuMzg1LTE0LjI0OQoJCQkJCWMwLTcuODY2LDQuNjQ5LTE0LjI0NiwxMC4zODUtMTQuMjQ2QzIyNi4xOTYsMTQ4LjMzLDIzMC44NDYsMTU0LjcxLDIzMC44NDYsMTYyLjU3NnoiLz4KCQkJCTxlbGxpcHNlIGZpbGw9IiNGRkZGRkYiIGN4PSIxOTcuNzA0IiBjeT0iMTg5Ljg4NiIgcng9IjYuOTI1IiByeT0iOS40OTYiLz4KCQkJPC9nPgoJCTwvZz4KCTwvZz4KPC9nPgo8L3N2Zz4K" alt="Volver al inicio"/>El Blog de Nessy</a></div><input type="checkbox" id="menu-toggle"/><label for="menu-toggle"><svg id="open-menu" xmlns="http://www.w3.org/2000/svg" style="height:28px;width:28px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16M4 18h16"></path></svg><svg id="close-menu" xmlns="http://www.w3.org/2000/svg" style="height:28px;width:28px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"></path></svg></label><nav class="navigation" role="navigation"><a href="/">Inicio</a><a href="/about">Sobre nosotros</a></nav></div></header><div class="global-wrapper" data-is-root-path="false"><main><article class="blog-post" itemscope="" itemType="http://schema.org/Article"><div class="post-tags"><a title="Ver artículos sobre Proyectos" href="/tags/proyectos/">Proyectos</a></div><header><h1 itemProp="headline">Nueva versión de Cesar AI (v2)</h1><p>16 de  enero, 2025</p></header><section class="post-body" itemProp="articleBody"><p><a href="https://cesar-ai.web.app/">Cesar AI</a> es una aplicación web que transforma información de un paciente (en cualquier formato) a un recurso Patient de  <a href="https://blog.codeness.io/que-es-hl7-fhir/">HL7 FHIR</a>.</p>
5<p>Es un experimento <a href="https://blog.codeness.io/construyendo-cesar-ai/">que construí el año 2023</a>, con la idea de que podría ayudar a acelerar procesos de integración entre distintos sistemas informáticos en salud.</p>
6<p>Ahora año 2026, aprovechando la <a href="https://hl7chile.cl/fhir-connectathon-2026/">Connectathon 2026</a>, actualizamos la herramienta para que funcione (no lo estaba 😭) y para que use los últimos perfiles de HL7 Chile.</p>
7<p>A continuación te explico sobre los cambios que hicimos.</p>
8<h2>Contexto - de dónde viene Cesar AI</h2>
9<p>Luego del <a href="https://blog.codeness.io/nuestra-experiencia-en-la-emprendethon-2023/">evento de la Emprendethon año 2023</a>, comencé a pensar en qué tipo de soluciones podrían ayudar a acelerar los <a href="https://blog.codeness.io/interoperabilidad/">proyectos de interoperabilidad en salud</a>.</p>
10<p>Si bien aprender a usar los <a href="https://blog.codeness.io/estandares-interoperabilidad/">estándares de interoperabilidad</a> como FHIR es importante, a veces no es tan sencillo hacerlo.</p>
11<p>Imagina un Centro Médico que quiere interoperar y que tiene su propia base de datos. En esta, tendrá información bajo un cierto esquema, que probablemente es muy diferente al formato de datos en FHIR. Así que para lograrlo, tenemos que escribir código que transforme desde el formato del Centro Médico a FHIR, lo cual toma tiempo y puede ser costoso.</p>
12<p>¿Qué pasa si esa transformación se hace automáticamente? ¿Es posible crear un algoritmo que pase de un formato a otro de manera automática?</p>
13<p><span
14      class="gatsby-resp-image-wrapper"
15      style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; "
16    >
17      <a
18    class="gatsby-resp-image-link"
19    href="/static/46a23edbf331f36477adde482b4d6f2c/c1b63/Cesar.AI.png"
20    style="display: block"
21    target="_blank"
22    rel="noopener"
23  >
24    <span
25    class="gatsby-resp-image-background-image"
26    style="padding-bottom: 52.53164556962025%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC9klEQVQozw3R20+bdRzH8V6ZXSxOM2+MMXHsn5gX7n/wwsS4eDHhwmRbXDbNiJmoS9TIaW6ETDe1FCZQtnVAqRQohxY61tNGD7TjWaUt0PLw9OHpiR542idvfxevfH6H5Jt88zF9+rHBJx0Gn3W3uGAROSN4hBfCK4MLaZE5g4t5g/6iwXLFQK0boBsYZUH8FzcMpGWDVZuB6Vpni+/uGnT0CCMt2h1N2leFl0KiyRfJOhd36rTvN+jRdJbKTdRqExpNDK0FqR
26ZHIZ3Uoo7P1sTkC1SRtTLX+lS+NB9xxdnkslfn0osGV6QWX2vwTRWuH0N3qcViqUH+SFxqYmCugR6povsNcksGwccNTA8f1LDbanT2VvjqT4WrNoXr7go3YgaXn2c5f7Obj7p+5fxP/XyfzOI60tFqx2jpfaLrG6TD27jH54mMp4nYWpiejhR4Mpqlq6dG1+gxNx1lbszl+CFSp8P2jDdPvMG7p09z6uRJrnp8LIlti1WdvY3XbCXi7Ms5QiEvLrOXzUdioH0txsvdML23ZbruZ7k1JfOjS+aWN8vnA/9w9swHfHjuHG1tbVz6d4EptUAmc4C0Esb/PMTC3Dz+YADf4ziRMbFyz1iM4cUEg7+V6HtYpteh8stchr6QSqfDx9vvvc+JU2/xzpk2vvWFcJTqyKkiIaeHjbVZpESCV9EgrkcrrJsPMS1PNPBOHnOvW+OOeY87k7sMruX5PVrij2SFAemAnwMxBrN57uVLTO4W2d8qsTnvJTE3QXzBT3x2FffEGit/yZji0jZydYu/+1M8sMhYXAUsvgJDEY0h6RDLToERpcKwXMCc0bBJGntRUX2gQMtTouZU2ZvURCkaK8OaKGVmFbvbyfhADutYAasrj9WnYo0Jr4WMyviOeNsWuaXyNKqSDqrwTEVfVlGdhySnVPxWldkhVZRyu4C9v8j03TxTYwdMLypMB4RNISn8l2daEuLiHFawBxWkdYWGW+FwQSE1oxB+ouAZVZgZUvgf3CrMV7VvwCcAAAAASUVORK5CYII='); background-size: cover; display: block;"
27  ></span>
28  <img
29        class="gatsby-resp-image-image"
30        alt="Cesar.AI.png"
31        title="Cesar.AI.png"
32        src="/static/46a23edbf331f36477adde482b4d6f2c/f058b/Cesar.AI.png"
33        srcset="/static/46a23edbf331f36477adde482b4d6f2c/c26ae/Cesar.AI.png 158w,
34/static/46a23edbf331f36477adde482b4d6f2c/6bdcf/Cesar.AI.png 315w,
35/static/46a23edbf331f36477adde482b4d6f2c/f058b/Cesar.AI.png 630w,
36/static/46a23edbf331f36477adde482b4d6f2c/40601/Cesar.AI.png 945w,
37/static/46a23edbf331f36477adde482b4d6f2c/c1b63/Cesar.AI.png 1200w"
38        sizes="(max-width: 630px) 100vw, 630px"
39        style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"
40        loading="lazy"
41      />
42  </a>
43    </span></p>
44<h2>Ahora sí… Los cambios que hicimos</h2>
45<p>La herramienta tenía 2 problemas:</p>
46<ol>
47<li>No funcionaba debido a la depreciación de la API de OpenAI.</li>
48<li>No usaba los últimos perfiles de HL7 Chile.</li>
49</ol>
50<h3>Cambio #1: Actualización de la API de OpenAI</h3>
51<p>Cuando construí Cesar AI el Q1 del 2023, usé el modelo <code class="language-text">text-davinci-003</code> de OpenAI, que fue dado de baja, al parecer, <a href="https://platform.openai.com/docs/deprecations">en enero de 2024</a>. Espero que la herramienta haya estado funcionando bien… pero al parecer llevaba mucho tiempo sin hacerlo 😭</p>
52<p>Cuento corto, ahora la actualicé para que use <code class="language-text">gpt-4o-mini</code>, que si bien no es lo último, me permitió no tener que hacer tantos cambios en el prompt. Posiblemente lo actualizaré a 5.1 en unas semanas.</p>
53<h3>Cambio #2: Actualización de la forma en que el LLM procesa los datos</h3>
54<p>En la primera versión de Cesar AI, el trabajo del LLM era procesar la información del paciente y te entregaba un CSV estructurado. Luego, el código de la aplicación misma se encargaba de convertir el CSV a FHIR:</p>
55<div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">Input de usuario (csv, txt, json) → LLM → CSV → Código de la aplicación → FHIR</code></pre></div>
56<p>Esto fue porque en esos tiempos no existía la posibilidad de que los modelos entregaran respuestas de tipo JSON de forma nativa, y no había una manera de forzar que el texto generado fuera un JSON válido (de manera simple). Además, generar un JSON consume más tokens que generar un CSV, es decir, es más costoso (por eso herramientas como <a href="https://github.com/toon-format/toon">Toon</a> están siendo tan populares).</p>
57<p>Luego, <a href="https://openai.com/index/new-models-and-developer-products-announced-at-devday">OpenAI introdujo soporte de respuestas tipo JSON (“JSON Mode”)</a>, pero esto no estaba libre de problemas. Una cosa es que te respondiera un JSON, pero otra muy distinta es que ese JSON tuviera la estructura correcta. Recién en <a href="https://openai.com/index/introducing-structured-outputs-in-the-api">Agosto del 2024 comenzaron a soportar “output” estructurado</a>, donde puedes especificar cómo debe ser la respuesta del LLM.</p>
58<p>Así que ahora, cuando solicitamos que el LLM genere un JSON, le decimos que debe tener la siguiente estructura:</p>
59<div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">rut: string | null - RUT del paciente
60nombres: string - Nombres de pila (sin apellidos)
61apellido_paterno: string - Apellido paterno
62apellido_materno: string | null - Apellido materno (opcional)
63genero: enum[&quot;male&quot;, &quot;female&quot;, &quot;other&quot;, &quot;unknown&quot;] - Género
64telefono: string | null - Número de teléfono
65email: string | null - Correo electrónico
66address: string | null - Dirección
67birthday: string - Fecha de nacimiento (formato YYYY-MM-DD)</code></pre></div>
68<p>Y el código de la aplicación se encarga de convertir eso a FHIR válido:</p>
69<div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">Input de usuario (csv, txt, json) → LLM → JSON (formato propio) → Código de la aplicación → FHIR</code></pre></div>
70<p><span
71      class="gatsby-resp-image-wrapper"
72      style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; "
73    >
74      <a
75    class="gatsby-resp-image-link"
76    href="/static/fbe4be667e62e631e680acf96992cf61/c1b63/cesar-ai-flow.png"
77    style="display: block"
78    target="_blank"
79    rel="noopener"
80  >
81    <span
82    class="gatsby-resp-image-background-image"
83    style="padding-bottom: 52.53164556962025%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABbUlEQVQoz6VSTU/CQBDt39F40RhN/E0kJiReCQkHiFgOROMB4cIPMMDBI+rBtAJ+ERSVcmjLQltoy9LPLd26pYmJiIkJ77A7MztvJvNmqWANUJc3uCdiYuHwCPwF/kt+6cLBUMfYX/Dx0nMUmC/wuyiFkOfYtqqqxNE0rVKp1Go1AMDKWlHQcRzP80KyDCQIDYSQoiilUimZTCYSiVwuB6ea5Qadftjt/Oz0olC4rtcJB0LY+/x4bT8Tm6o273gwmHsewzA0TRNaNpslV6t1DxSHbRum5Rzs7e9u72xtbHa77wLPN1m20WjYlkVVxSfdNV3bGY5G+Xw+nU6nUimaPhEEIcD+DELS+TiTOYzFjuJxXZ8OeK7D3r49PJIZqQAHyEWqFs4simK5XC4WixzHEdcwDGU89jEmQ5EE27KXBevJHTDm/Xm0LUyUm0wmRNvvDMKUJIkEZVk2TfMHmRGuwKwfMSP8pfOKPa/zw74A8DJb22Wz5SYAAAAASUVORK5CYII='); background-size: cover; display: block;"
84  ></span>
85  <img
86        class="gatsby-resp-image-image"
87        alt="Input (csv, txt, json) -&gt; LLM -&gt; JSON -&gt; FHIR"
88        title="Input (csv, txt, json) -&gt; LLM -&gt; JSON -&gt; FHIR"
89        src="/static/fbe4be667e62e631e680acf96992cf61/f058b/cesar-ai-flow.png"
90        srcset="/static/fbe4be667e62e631e680acf96992cf61/c26ae/cesar-ai-flow.png 158w,
91/static/fbe4be667e62e631e680acf96992cf61/6bdcf/cesar-ai-flow.png 315w,
92/static/fbe4be667e62e631e680acf96992cf61/f058b/cesar-ai-flow.png 630w,
93/static/fbe4be667e62e631e680acf96992cf61/40601/cesar-ai-flow.png 945w,
94/static/fbe4be667e62e631e680acf96992cf61/c1b63/cesar-ai-flow.png 1200w"
95        sizes="(max-width: 630px) 100vw, 630px"
96        style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"
97        loading="lazy"
98      />
99  </a>
100    </span></p>
101<p>Si bien generar este JSON requiere más tokens que generar un CSV, es decir, es más costoso, ahora nos aseguramos de que tenga la estructura correcta, lo cual es mucho más fácil de lograr que al pedir un CSV.</p>
102<p>¿Por qué no generar el JSON FHIR directamente? Bueno, si has escrito un recurso FHIR a mano, te darás cuenta de que es bastante verboso. Esta simplificación es para reducir el costo de generación (tokens!), y para reducir la posibilidad de errores al momento de que el LLM genere el JSON.</p>
103<h3>Cambio #3: Actualización de los perfiles de HL7 Chile</h3>
104<p>Una vez arreglé el problema de la API de OpenAI, me di cuenta de que el LLM no cumplía con los perfiles de HL7 Chile actuales. Así que lo primero que hice fue lograr que el resultado fuera compatible con <a href="https://hl7chile.cl/fhir/ig/clcore/StructureDefinition-CorePacienteCl.html">CL Paciente</a>.</p>
105<p>Algunos problemas que tuve estaban relacionados con códigos que se usan en la dirección. Por ejemplo, los datos que tenía antes usaba “Región Metropolitana” como <code class="language-text">display</code>, pero el perfil de HL7 Chile te pide “Metropolitana de Santiago”.</p>
106<div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">El nombre de display para CSCodRegionCL#13 debe ser &#39;Metropolitana de Santiago&#39;,no &#39;Región Metropolitana&#39;</code></pre></div>
107<p>Luego me puse ambicioso y quise que el resultado cumpliera con <a href="https://interoperabilidad.minsal.cl/fhir/ig/nid/0.4.9/StructureDefinition-MINSALPaciente.html">MINSAL Paciente</a>, que es el que usamos durante la Connectathon 2026.</p>
108<p>Aquí tuve que hacer más cambios, ya que este pide más información que <a href="https://hl7chile.cl/fhir/ig/clcore/StructureDefinition-CorePacienteCl.html">CL Paciente</a>. Por ejemplo, <code class="language-text">birthDate</code> y <code class="language-text">isDeceased</code> son obligatorios en Minsal Paciente, pero no en CL Paciente. Agregué estos campos, y por supuesto que <code class="language-text">isDeceased</code> es <code class="language-text">false</code> por defecto.</p>
109<h3>Cambio #4: Visualización del JSON</h3>
110<p>Esto es más un detalle que una mejora, pero pensé que sería útil tener un formateador de JSON más bonito en la interfaz. Así que, le pedí a <a href="https://claude.com/product/claude-code">Claude Code</a> que mejorara ese aspecto e instaló <a href="https://github.com/TexteaInc/json-viewer">json-viewer</a>.</p>
111<h2>Resultado</h2>
112<p>Ahora la herramienta funciona y cumple con los perfiles de HL7 Chile actuales. Está disponible en <a href="https://cesar.codeness.io/">cesar.codeness.io</a>.</p>
113<p><span
114      class="gatsby-resp-image-wrapper"
115      style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; "
116    >
117      <a
118    class="gatsby-resp-image-link"
119    href="/static/1d6ed27b1f17e0eac2a79dfc24ae42a0/d2c28/cesar-ai-v2.png"
120    style="display: block"
121    target="_blank"
122    rel="noopener"
123  >
124    <span
125    class="gatsby-resp-image-background-image"
126    style="padding-bottom: 52.53164556962025%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAACHElEQVQoz2WTS3ObMBSF+f/TVRdddCabPFbdtYtOZ5JV06btTNtF3ThOwBgDDgbMG0kIcU8v4L4m8nw+XGEdH12EdbfUlB8GxI+G4h0TGuyDmSQkBGuJ588u4K8b1BnQHgxk2kMlPbpYk4409VyL7w2Ji4wsP+wI8/itxzFM350W+HhzjaYtp7rHkzGtk05N7WlE1nbXgdKU1HYHsQ0hvADtxkdpuyiYUYUXonI2yB82SO59NOsthDvT2BtU/pbEXQF5+ghr5WYU+S6icEedkDCdhtFM16FnRhVNyy3Zo0oSqKqaalG3kKxNUZEX+CgWCamzkKylm8JZ3WLjusiLAkIKRv63f9X3iJIDqrKE5HtSdYyaVI0B+Df1QwF1HsDyEz
126k3gh2GYYDhxcYYrmmGP4oTp1mO6pBAlPyndQ1RlZNKoaCMRuVx/TqCFaTqaEhPu32cmwxzXtDxk9VmSqX4emRKORqGNapPGSwvkWM2aE7XjwmP+gcaINgw4B7mWYaWtzwaztvu/hoGDeW3FVlR1tM/R+ZpzPEA6R5hnKLMc7QtPxClmcmMpGTDXlMZ1HRY1WS9dTy8vL/Byf0XYnDhfMO583WscbL6jBc/P2AR+fMZNAMG7u/I2Oee0cYQz6Dat0jWNaz3TkxX9gNd2g4ubZuuHFbmnW3jzXKJV4sVrjcxFkGFH34BNy4nvLhAFOWUPuY47HOKtxm/ZS39AmclQpfmLsCbAAAAAElFTkSuQmCC'); background-size: cover; display: block;"
127  ></span>
128  <img
129        class="gatsby-resp-image-image"
130        alt="Screenshot de Cesar AI v2"
131        title="Screenshot de Cesar AI v2"
132        src="/static/1d6ed27b1f17e0eac2a79dfc24ae42a0/f058b/cesar-ai-v2.png"
133        srcset="/static/1d6ed27b1f17e0eac2a79dfc24ae42a0/c26ae/cesar-ai-v2.png 158w,
134/static/1d6ed27b1f17e0eac2a79dfc24ae42a0/6bdcf/cesar-ai-v2.png 315w,
135/static/1d6ed27b1f17e0eac2a79dfc24ae42a0/f058b/cesar-ai-v2.png 630w,
136/static/1d6ed27b1f17e0eac2a79dfc24ae42a0/40601/cesar-ai-v2.png 945w,
137/static/1d6ed27b1f17e0eac2a79dfc24ae42a0/78612/cesar-ai-v2.png 1260w,
138/static/1d6ed27b1f17e0eac2a79dfc24ae42a0/d2c28/cesar-ai-v2.png 4000w"
139        sizes="(max-width: 630px) 100vw, 630px"
140        style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"
141        loading="lazy"
142      />
143  </a>
144    </span></p>
145<p>Si pillas algún problema o tienes alguna sugerencia, puedes escribirme a mi <a href="https://www.linkedin.com/in/codewithnico/">LinkedIn</a>.</p></section><hr/><footer><div class="bio"><div class="author-avatar gatsby-image-wrapper" style="position:relative;overflow:hidden;display:inline-block;width:70px;height:70px"><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEqUlEQVQ4y22T2XMUVRSH58kHtRDIOpnp7pnuniXbJJMdshEyIQnZYFgCRCKEJJCwC0mUFMpigEBYEtawhCAJBgEt1iqg1BIpKUuLguJBLV98sKzywb/h83SHzdKHU32r77nf/f3OPceRYMzCini9VL5lOP2VuFLqUNKiqBlLUcLNqFkr0SRUWSuhxbK3QHIacAaqSDBn22cnz8/C8RImG0nBGtySrGYuQ8teiTeniUC4iuRwBWaoEm84ije/E092i52jpC/ElVxLoq/8FfAlTDaU9EV4spaj5XUQyKkjMiOTmSGDUMCL36tieD2YGRGBtkuskdz3UEONorZeoJEXCstE2dznsGb0gnUYuUuIFGbRUJhCrplId1MthekBprz9DlPeegO3kYlR3PVc7cpJqKVUhDmsmrmlXprUR89fjV7cQ1p+PeVhnfLsIHvWr+Dvn+7y682z9K9vJqC5mD49BqNoI0ZJj5zpsJVa9pMC1ThcyXV28b25begzN2KW78aXs5gsbwxb3m3g6/Fh/vjhPs9ujzO27wM6Fs8hLjYWvbRHcnehF72PN281WmYT7tQGHJY66wbbqtzoqzyAUtTNqmiE7y4c4kTPOp5eO8mnOzbQ29JEX+ciQkGdpMIu/FUHMUo/FCEbbOuWSofVBp6cVvTCzZhlH+GbewSlbDe961r5/avLPL1+kd9ujPDZzg08GBng3qmdVBZlo5Rux1dzFHP2DrG/RRy2i9MlOGy7Itko3opPLHirBglFhzm9byd/PrrDXw9v8WB0kMObWngydoibxz5maSSbUN1B9JoTmJFPbGdeqaUWbhKg9JPVAkZJt2z2YcwdIjD/Agf6h3l8a4SHE2d4NHGRKwf3MLJ7CwPdzTRE2whGL2DUHMes2Dtpu2CtAJf/F2jWDKHXj5Kx9DIT54d5cuM0T66Mc3toP6N9a9nUuYLUxs8x549J7rH/Ab5m2Xpho/oI/nln0edfob1riHuXDvP07jVujwzS3VZLdbSF5MYv8TWcs93Yrl63bD2K97VHMSr346s/hdpwmc6uo5wb2Mq2zR00L6yhqthPbW09/uglzPqzGFUDrx4lr91uP7tttBdtU9qLOadfXvoQrpJe2lat4fGd0/Rva6dlUTndrdUsq5uJK7dF7A5K7gGMWdv/3TZ2Y0tT6nmtGAVtApcRTC1FDeYRidSI3XF+vHWeqyd3cfV4Lw3VFUyNV1ED+eKsEWOGDER+mz1p7tR51uhVoKXORgsWyIyGUMx0NH8WeuoMFH8eo4N7eXZ/gu+/OMPYUB/eQJgkPR3Vl4HLE8Stp0leLkqwREYvIkBDmtQUkC9TvhK+bNxmGE8wB5cklkdq+eWb6/z87R2qqqPEa2kCScepJZOgBCSC9jpR9RPrCuBIVFNw+7JEYQ5aIIckb7oNtEIVpdOcfjpXtbFkQSNvTnWR5EnB6Uklzu0nQRWQliKwZOLdAaYnaDhinSZOgShyWBGw6s+24YovbK9VuSTG5Ze6eXCJMivHLXsuI0OshwRowXwC8zAtXoAxiTpxcsACTKp6DhT7L1RbSj3B3EmY/LfCJfV2etJs27FJBlPj3EyLU/gHBhzbgqfkxlYAAAAASUVORK5CYII=" alt="Nicolás Gómez" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/c454b7eddf2624b2e434eb2b68050446/31406/nico.png 1x,
146/static/c454b7eddf2624b2e434eb2b68050446/1edbf/nico.png 1.5x,
147/static/c454b7eddf2624b2e434eb2b68050446/b3779/nico.png 2x" /><img loading="lazy" width="70" height="70" srcset="/static/c454b7eddf2624b2e434eb2b68050446/31406/nico.png 1x,
148/static/c454b7eddf2624b2e434eb2b68050446/1edbf/nico.png 1.5x,
149/static/c454b7eddf2624b2e434eb2b68050446/b3779/nico.png 2x" src="/static/c454b7eddf2624b2e434eb2b68050446/31406/nico.png" alt="Nicolás Gómez" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div><div><p><b>Nicolás Gómez</b></p><p>Ingeniero Civil en Computación PUC.</p><div class="social-box"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="linkedin" class="svg-inline--fa fa-linkedin fa-w-14 " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
149<path fill="currentColor" d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path></svg><a class="social-link" href="https://www.linkedin.com/in/codewithnico" target="_blank" rel="noreferrer">codewithnico</a></div><div class="social-box"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitter-square" class="svg-inline--fa fa-twitter-square fa-w-14 " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-48.9 158.8c.2 2.8.2 5.7.2 8.5 0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3.6 10.4.8 15.8.8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3a65.447 65.447 0 0 1-29.2-54.6c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34z"></path></svg><a class="social-link" href="https://twitter.com/codewithnico" target="_blank" rel="noreferrer">codewithnico</a></div><div class="social-box"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github fa-w-16 " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg><a class="social-link" href="https://github.com/muZk" target="_blank" rel="noreferrer">muZk</a></div></div></div></footer></article><nav class="blog-post-nav"><ul style="display:flex;flex-wrap:wrap;justify-content:space-between;list-style:none;padding:0"><li><a class="nav-button" rel="prev" href="/nuestra-experiencia-en-la-connectathon-2025/">← <!-- -->Nuestra experiencia en la Connectathon 2025</a></li><li><a class="nav-button" rel="next" href="/archivo-del-nessy-letter/">Archivo del Nessy Letter<!-- --> →</a></li></ul></nav></main><footer class="footer-text"><hr/>Hecho por Codeness con<!-- --> <span role="img" aria-label="cariño">❤️</span><br/>© <!-- -->2026<!-- --> <a target="_blank" rel="noreferrer" href="https://codeness.io">Codeness</a></footer></div></div><div id="gatsby-announcer" style="position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0" aria-live="assertive" aria-atomic="true"></div></div>
149<script>
150    (function(f, a, t, h, o, m){
151      a[h]=a[h]||function(){
152        (a[h].q=a[h].q||[]).push(arguments)
153      };
154      o=f.createElement('script'),
155      m=f.getElementsByTagName('script')[0];
156      o.async=1; o.src=t; o.id='fathom-script';
157      m.parentNode.insertBefore(o,m)
158    })(document, window, '//cdn.usefathom.com/tracker.js', 'fathom');
159    fathom('set', 'siteId', 'FCIFLVPZ');
160  </script>
160<script id="gatsby-script-loader">/*<![CDATA[*/window.pagePath="/cesar-ai-v2/";/*]]>*/</script>
160<script id="gatsby-chunk-mapping">/*<![CDATA[*/window.___chunkMapping={"polyfill":["/polyfill-bf692ef827d0e4700f4a.js"],"app":["/app-bb36b33bda458262cac0.js"],"component---src-pages-404-js":["/component---src-pages-404-js-b39ffbf5b0e2e5bdb5d5.js"],"component---src-pages-index-js":["/component---src-pages-index-js-9de70264320e1ab1fceb.js"],"component---src-pages-tags-js":["/component---src-pages-tags-js-940a3c6554b99af4a03f.js"],"component---src-pages-using-typescript-tsx":["/component---src-pages-using-typescript-tsx-cb93bb1ff43e0c30b513.js"],"component---src-templates-blog-post-js":["/component---src-templates-blog-post-js-d9c3ab606ab3552d77ab.js"],"component---src-templates-page-js":["/component---src-templates-page-js-e5139abca30ce747910b.js"],"component---src-templates-tags-js":["/component---src-templates-tags-js-17f9a7d51b0978ceeb16.js"]};/*]]>*/</script>
160<script src="/polyfill-bf692ef827d0e4700f4a.js" nomodule=""></script>
160<script src="/component---src-templates-blog-post-js-d9c3ab606ab3552d77ab.js" async=""></script>
160<script src="/cd7d5f864fc9e15ed8adef086269b0aeff617554-66f6549d9c1d83fef11e.js" async=""></script>
160<script src="/dffd9eda1bde23af0ce146d568b45c289f422d0a-07f2cd2b717c3d63858e.js" async=""></script>
160<script src="/commons-4eaec22c9a4ba53659fe.js" async=""></script>
160<script src="/a9a7754c-3bcea21576f028ee7e1a.js" async=""></script>
160<script src="/app-bb36b33bda458262cac0.js" async=""></script>
160<script src="/framework-29ba174b433dc5858bed.js" async=""></script>
160<script src="/styles-540f25bd5e5cb35d6f53.js" async=""></script>
160<script src="/webpack-runtime-0e2fcd59ed7d4ab6bbc1.js" async=""></script>
160</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.