1import{Bn as e,Cn as t,D as a,Dn as n,En as r,In as i,Ln as s,On as o,Qn as d,R as l,Rn as c,_n as u,b as m,bn as h,d as p,ir as f,k as g,nr as y,qn as v,rr as w,sn as b,w as x}from"./index-sNh_Zb1w.js";var k='## One medical record was blocking the entire clinical research workflow\n\nA medical technology company had been stuck on medical record processing for half a year.\n\nTheir business was to provide AI-assisted research tools for hospitals and research teams. To support disease diagnosis model training, treatment prognosis analysis, and clinical cohort screening, they needed to obtain medical record data from multiple partner hospitals.\n\nBut medical records are not uniform data tables. They often exist as PDFs, scans, or images. A 10-page inpatient record may include admission notes, progress notes, lab results, operation records, and other sections.\n\nWorse, hospitals use different medical record formats. The same field may appear in different locations. The same test item may be named differently by different departments. Some records use single-column layouts, some use two columns, and some scans include tables, stamps, handwritten signatures, and physician comments.\n\nThe team first tried open-source OCR tools. OCR could recognize text, but it could not understand the structure of the medical record.\n\nFor example, progress notes were originally arranged chronologically, but the recognized output disrupted the order. Lab values and units were mixed together, so the backend could not determine which result belonged to which indicator. The key diagnosis description in the discharge summary was mixed with nearby paragraphs and lost its clinical context.\n\nThis meant that even recognized text could not directly enter the research workflow.\n\nMedical research does not need one long block of continuous text. It needs structured data that can be located, extracted, val
1idated, and analyzed. Diagnosis names, surgery dates, medication plans, lab indicators, and cohort criteria must each correspond to the right location and the right meaning.\n\nUsing misaligned text to run models makes the conclusions untrustworthy.\n\nUsing misaligned text to run models makes the conclusions untrustworthy.\n\n<figure style="margin: 28px 0;">\n <img src="/customer-story-examples/medical-record-example.webp" alt="Medical record parsing example" style="width: 100%; border-radius: 12px; display: block;" />\n <figcaption style="margin-top: 10px; text-align: center; color: rgba(255, 255, 255, 0.58); font-size: 14px; line-height: 1.6;">SoMark medical record parsing example</figcaption>\n</figure>\n\n## Restoring medical record structure is no longer the hard part\n\nAfter several evaluations, they chose the SoMark Document Intelligence API as the first entry point of the medical research data pipeline. SoMark handles the most basic and most critical step: turning complex PDFs and scanned medical records into clearly structured Markdown / JSON data.\n\nThe head of the data team described their first test:\n\n"We uploaded a scanned discharge summary from a top-tier hospital. It included both printed content and a doctor\'s handwritten signature. The returned result restored admission diagnosis, discharge diagnosis, discharge disposition, and the past medical history table according to the original structure."\n\nFor medical records, which are strongly structured and highly specialized, SoMark mainly solved several key problems.\n\nFirst, it preserves section structure.\n\nIn a medical record, admission notes, progress notes, operation records, and discharge summaries are not ordinary paragraphs. They are different types of clinical information. The parsed result restores these section boundaries with heading hierarchy, allowing the backend system to know which content belongs to admission notes and which comes from the discharge summary. This is essential for downstream medical information extraction. The word "diagnosis" may mean different things in an admission note and a discharge summary.\n\nSecond, SoMark handles tables in medical records.\n\nLab reports, vital sign records, and examination reports contain many tables. Traditional OCR often breaks them into scattered lines, losing the relationship between item, value, unit, and reference range. With SoMark, indicators such as HbA1c, blood glucose, creatinine, and white blood cell count can be connected to exact values and units, then enter downstream structured extraction.\n\nThird, SoMark handles complex scanned layouts.\n\nMany hospital records are not native electronic documents. They are scanned PDFs that may contain printed text, handwritten signatures, annotations, and stamps. During parsing, SoMark uses document layout structure to preserve positional relationships as much as possible and avoid mixing content from different regions.\n\nFor medical data processing, this is critical. A medical record is not an ordinary article. One wrong row, unit, or section can affect downstream judgment.\n\nFourth, SoMark\'s returned coordinates and element information also provide a basis for privacy field de-identification.\n\nMedical records contain names, ID numbers, inpatient numbers, contact information, and other personal health information. Backend systems can use location information to identify these fields and then let internal modules complete de-identification before data enters research analysis.\n\nIn this way, a data preprocessing problem that had blocked the team for half a year was solved in one week.\n\n## Product rollout empowers institutional research\n\nWith structured medical record data from SoMark, the company\'s internal medical NLP engine could finally take over downstream work:\n\n- patient cohort feature extraction: automatically extract age, sex, primary diagnosis code (ICD-10), admission route, and other basic fields from admission records and cover pages;\n\n- clinical core entity recognition: extract diagnosis names and confirmation times, operation names and dates, medication plans and courses, and key laboratory indicators;\n\n- research cohort eligibility: determine whether a record meets predefined inclusion criteria and mark specific reasons for exclusion;\n\n- structured database ingestion: write extracted entities into a unified common data model (CDM) for later statistical analysis or model training.\n\nThe whole process runs entirely on the company\'s own servers and does not depend on any external AI service, ensuring medical data privacy and compliance. Since launching the SoMark-driven medical record parsing pipeline, the company\'s efficie
1ncy in structuring and ingesting medical records has improved greatly. Steps that previously required repeated manual intervention are now mostly automated. The human role shifted from processing data to reviewing exceptions, allowing the team to focus on product iteration rather than being trapped in data preprocessing.\n\n<table><tr><td>Metric</td><td>Before (traditional manual workflow)</td><td>After (SoMark + internal pipeline)</td><td>Improvement</td></tr><tr><td>Time to structure and ingest one medical record</td><td>20-30 min / record</td><td>3-5 min / record</td><td>~85% faster</td></tr><tr><td>Recall of key clinical fields</td><td>~70% (manual experience-dependent)</td><td>>92% (automated)</td><td>+22 points</td></tr><tr><td>Cross-center data standardization cycle</td><td>Several months (manual mapping)</td><td>2-3 weeks (semi-automated configuration)</td><td>Greatly shortened</td></tr><tr><td>Data processing staffing</td><td>3-5 full-time people</td><td>1 part-time maintainer</td><td>80% leaner</td></tr><tr><td>Research project delivery cycle</td><td>Usually delayed 3-6 months</td><td>Completed 2-3 months earlier</td><td>Significantly accelerated</td></tr></table>\n\nFor medical research projects, the meaning of this change is deeper. Records from different hospitals and formats are first converted into unified structured text, then enter the same medical data model. Multi-center data governance, real-world evidence generation, and rapid subject screening -- work that once required extensive manual coordination -- now has a reusable data foundation. Historical paper records gradually turn from dormant archives into research assets that continue producing analytical value.\n\nSince the product launch, medical institution customers have improved efficiency in the data preparation stage by 5x. Researchers can step away from tedious data entry and spend time on analysis and research itself. Research projects no longer need to be delayed and can often finish two to three months earlier.\n\nThe premise is that structured parsing is done correctly.\n\nNo matter how strong an NLP engine is, it cannot work with chaotic input. No matter how good a model is, training data with errors cannot be trusted. SoMark\'s structured parsing guards the first entrance of AI-assisted medical research.\n',M={class:"story-page"},S={class:"story-main"},T={class:"metric-list"},R={class:"metric-value"},I={class:"metric-label"},C={class:"story-article"},D={class:"content-block"},$=["innerHTML"],L={class:"toc-nav"},_=["href"],A={class:"cta-section"},F={class:"cta-actions"},z=l(o({__name:"StoryMedicalRecords",setup(o){const l=b(),z=[{label:"Structure entry",value:"Manual editing"},{label:"Ingestion time",value:"3-5 min"},{label:"Field recall",value:"> 92%"}],P=d(""),B=d([]);(()=>{const e=k.search(/^####\s+/m),t=(e>=0?k.slice(e).trim():k.trim()).replace(/^####\s+/gm,"## ").replace(/^#####\s+/gm,"### ");B.value=[...t.matchAll(/^(##|###)\s+(.+)$/gm)].map((e,t)=>({id:`story-sec-${t+1}`,text:e[2].trim(),level:"##"===e[1]?2:3}));let a=0;P.value=p.parse(t).replace(/<h([23])>([\s\S]*?)<\/h\1>/g,e=>{const t=B.value[a];return a+=1,t?e.replace(/<h([23])>/,`<h$1 id="${t.id}">`):e})})();const O=()=>{l.push("/playground")},j=()=>{window.open(g,"_blank","noopener,noreferrer")},H=d(null),E=d(null),N=d(null),W=d(null),q=d("normal"),U=d({}),G=d({}),J=()=>{if(!H.value||!E.value||!N.value)return;if(window.innerWidth<=900)return q.value="normal",U.value={},void(G.value={});const e=H.value.getBoundingClientRect();if(!(e.top<=96))return q.value="normal",U.value={},void(G.value={});const t=E.value.getBoundingClientRect(),a=N.value.getBoundingClientRect(),n=Math.max(t.height,a.height);if(e.bottom<=96+n+8){q.value="bottom";const n=H.value.offsetHeight;return U.value={top:`${Math.max(0,n-t.height-8)}px`,left:t.left-e.left+"px",width:`${t.width}px`},void(G.value={top:`${Math.max(0,n-a.height-8)}px`,left:a.left-e.left+"px",width:`${a.width}px`})}q.value="fixed",U.value={top:"96px",left:`${t.left}px`,width:`${t.width}px`},G.value={top:"96px",left:`${a.left}px`,width:`${a.width}px`}};return i(()=>{J(),window.addEventListener("scroll",J,{passive:!0}),window.addEventListener("resize",J)}),s(()=>{window.removeEventListener("scroll",J),window.removeEventListener("resize",J)}),(i,s)=>(c(),t("div",M,[s[7]||(s[7]=h("div",{class:"story-bg","aria-hidden":"true"},null,-1)),n(x),h("main",S,[h("section",{class:"story-hero"},[h("div",{class:"hero-copy"},[s[0]||(s[0]=h("p",{class:"story-kicker"},"User Story",-1)),h("h1",null,f("Medical Records to Research Data")),h("p",{class:"story-lead"},f("SoMark turns clinical PDFs into structured records for review and research.")),s[1]||(s[1]=h("div",{class:"story-meta"},[h("span",null,"Industry: Healthcare"),h("span",null,"Scenario: Medical records")],-1))])]),h("section",{ref_key:"storyLayoutRef",ref:H,class:y(["story-layout",{"rails-fixed":"fixed"===q.value,"rails-bottom":"bottom"===q.value}])},[h("aside",{ref_key:"leftRailRef",ref:E,class:"left-rail","aria-label":"Key metrics"},[h("div",{class:"left-rail-inner",style:w(U.value)},[h("div",T,[(c(),t(u,null,e(z,e=>h("div",{key:e.label,class:"metric-item"},[h("div",R,f(e.value),1),h("div",I,f(e.label),1)])),64))])],4)],512),h("article",C,[h("section",D,[h("div",{class:"markdown-body",innerHTML:P.value},null,8,$)])]),h("aside",{ref_key:"rightRailRef",ref:N,class:"right-rail","aria-label":"Table of contents"},[h("div",{class:"right-rail-inner",style:w(G.value)},[h("nav",L,[s[2]||(s[2]=h("p",{class:"toc-title"},"Contents",-1)),(c(!0),t(u,null,e(B.value,e=>(c(),t("a",{key:e.id,href:`#${e.id}`,class:y({"is-sub":3===e.level})},f(e.text),11,_))),128))])],4)],512)],2),h("section",A,[s[5]||(s[5]=h("h2",null,[r("Ready to turn your documents"),h("br"),r("into structured data?")],-1)),s[
16]||(s[6]=h("p",null,[r("Try SoMark on real-world files â"),h("br"),r("see structured results instantly.")],-1)),h("div",F,[n(a,{onClick:O},{default:v(()=>[...s[3]||(s[3]=[r("Try now",-1)])]),_:1}),n(a,{variant:"secondary",onClick:j},{default:v(()=>[...s[4]||(s[4]=[r("Request demo",-1)])]),_:1})])])]),h("div",{ref_key:"footerRef",ref:W},[n(m)],512)]))}}),[["__scopeId","data-v-89b37d4d"]]);export{z as default};
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.