Skip to main content
WeeMed Logo

Dedicated to creating intelligent information systems for healthcare institutions through innovative technology, enhancing medical service quality

WeeMed Technologies Inc.

VAT: 00085209

Follow Us

Quick Navigation

  • About Us
  • What We're Building
  • Solutions
  • EAP Marketplace
  • Services
  • Technology
  • News
  • Careers
  • Contact Us

Legal & Corporate Info

Privacy PolicyTerms of ServiceSecurity PolicyESG Sustainability

Contact Us

Phone
+886-4-23016388
Email
service@weemed.ai
Address
20F-1, No. 186, Sec. 2, Taiwan Blvd., West Dist., Taichung City
© 2024-2026 WeeMed Technologies Inc. All rights reserved.
ESG SustainabilityPrivacy PolicyTerms of ServiceSecurity Policy
WeemedAI Logo
Home
About
Products
What We're Building
Services
Contact

Intake AI · the part that actually hurts

Move one cell wrongand it becomes a wrong medical record

New files arrive every month, and the format keeps changing. Until now there was one way through: a person reads every cell, works out what it means, and moves it into the system. Get it right and nobody notices. Get it wrong and nobody notices either — the wrong cell quietly becomes a medical record, and the next person to read it has no way of knowing it is wrong. And this is worth eight years of work because whether a person's health record can be picked up by whoever cares for them next depends entirely on every cell having been moved correctly. When the foundation is wrong, the cleverer the thing built on top, the more dangerous it gets. This page is about the engine in our platform that does this work — we call it Intake AI — how it works, and where we deliberately keep AI out of it.

Where it hurts

One cell often holds two facts

In the "other hospital" column, one cell holds a hospital name, a line break, and two letters. Those two letters are an abbreviated condition. One cell, two facts, one line break between them. Whoever moves the data has to know that the tail end is a condition and which diagnosis it maps to. Miss it, and this person's history is short by one item — and nobody will notice it is missing.

Elsewhere in the same sheet: a name and a chart number crammed into one cell. A blood pressure reading 120/2 — a diastolic of 2 is impossible, so it is a typo, but what it was meant to say is gone. One column is titled only "column 16". Another is labelled blood pressure and actually holds heart rate — move it by the label and this person's blood pressure becomes their pulse.

None of this is exceptional. This is the norm. Forms get filled in while people are busy, the column names were inherited from whoever had the job before, and the format changes every year. And moving a cell wrong throws no error. It sits in the record until the next time someone makes a decision based on it.

General Hospital\nCV
a care source, with a second fact stuck to it: cardiovascular disease
Wang Xiaoming 12345
a name and a chart number in one cell
120/2
the blood pressure is a typo, and the original value is gone
column 16
the column name says nothing; only the values can tell you
"blood pressure" (column name)
actually holds heart rate — move it by the label and it's wrong

All of the above are rewritten for illustration. What we kept is the shape these cells really have, not any real person's data: the names, chart numbers, and institution names in real files never appear here, and never leave the institution's own server room.

And her actual job is not moving data. It is caring for people.

How it works

AI comes third. People come last.

The hard part is not "get an AI to read the file." The hard part is reading it reliably, being able to explain why it read it that way, and not sending medical records to the cloud. So the order is deliberate:

  1. 1. Read the file's own structure first

    Which row is the real header? Is a row a person, or one service visit? Are there sessions spread out sideways, or multiple sheets? A spreadsheet carries these facts natively — merged ranges, cell formats — so read them instead of approximating with statistics. No AI in this layer at all.

  2. 2. Work out each column deterministically

    The key is not to trust the column name. Names lie, so we read the whole column's values alongside it: a column of 137/67 is blood pressure; 123/AC is a fasting glucose; V(114年) means it was done that year. On a typical file this layer resolves well over 90% of columns without touching AI.

  3. 3. If we've seen the shape before, just apply it

    A mapping a person once confirmed is remembered — and not just by column name, but by the combination of the name, the shape of its values, and what it was understood to mean. So the same station's roster next month, or a pharmacy's monthly file, skips the AI entirely from the second time on.

  4. 4. Only the leftover columns go to a model

    And they go in one batch, not one call per column. The model is the on-premise embedding model we trained ourselves, running on the institution's own machine — no network, no metering. It only fills in what the deterministic layer couldn't read, and it is not allowed to overwrite a confident result. If the model returns garbage, the pipeline falls back to the layer beneath it rather than failing the import.

  5. 5. Ask a person last

    And only about things that genuinely have no answer — a cell like 120/2, where the original value is gone. When we ask, we show the column's sample values and the system's own guess, rather than handing over a blank form to check from scratch. The answer is remembered, so we don't ask again.

We hold ourselves to one number: after a file comes in, how many columns still need a human. That number has to keep moving toward zero.

  • The model in layer four is one we trained and open-sourced
  • Where Intake AI sits in the whole platform

What we deliberately don't do

Some conveniences cost you your honesty

No LLM call per column

Sending every cell to a cloud model puts the bill on the institution and destroys the on-premise tier. So a file costs one batched model call, or zero when memory hits — never one per column.

Nothing invented

If a blood pressure says 120/2, we flag it and keep the original. We do not helpfully "correct" it to 120/82. The system is allowed to guess wrong and be fixed; it is not allowed to quietly write a plausible-looking number into a medical record.

"Not understood yet" is never dressed up as understood

A column we genuinely decoded is shown with what it actually means. A column we only recognized the shape of says so: "I can see this is a set of coded columns, but I don't know what it's asking — confirm it, or give me a dictionary." A complete-looking screen is easier to build, and it makes people think it has already been checked.

Nothing goes to the cloud

The model that does the judging runs on the institution's own machine. Patient data doesn't have to leave the server room, and nobody has to sign a cross-border transfer agreement to have one cell read correctly.

How we know it didn't move things wrong

Six real rosters, checked cell by cell

Because moving a cell wrong throws no error, the only way to know is to check every cell. These six are annual rosters and phone-visit tracking sheets from different stations, made by different people. We did not write them. We checked where the system sent each fact: of 1,088 records, 9 went to the wrong place.

We write up where those 9 went wrong. The cell described above — hospital name, line break, abbreviated condition — is one of them: the hospital name came out right, and the condition stayed stuck to it. Every time we change something we re-run all six, because fixing one way of sticking things together does not fix the next.

There is also data we refuse to import: phone-visit rows with no name, ID numbers whose format cannot be determined. Those get flagged for a person. We do not guess and we do not force them through. Better to have someone look twice than to let one wrong record in quietly.

1,088

records checked cell by cell across six real rosters

9

records sent to the wrong place — each one written up

90%+

of columns in a typical file read deterministically, no AI

On-site

the model that does the judging runs on the institution's own machine

  • 4 of the 9 come from one 39-row sheet, the messiest of the six. An average hides how bad the hardest case is.
  • On one very long sheet we checked the first 500 rows only.
  • The rows we refuse to import are not counted in the 1,088. They are flagged for a person, not ignored.

Why this needs models of our own

You cannot buy the model this layer needs

Layer four has to read CV in an "other hospital" column, L-CT on a screening roster, 皮蛇 in a nursing note. We tried the best available Chinese models; they read almost none of it, because none of it exists in public training data. So we trained one, and opened it.

There is a second half to this, about sound. What gets said during an interview or a home visit also used to be retyped back at the office — and the older adult is speaking Taigi. That is the other kind of model.

  • Why we raised a model that reads clinical writing
  • Taigi speech: the half where sound becomes words

Her actual job is not moving data. It is caring for people.

Want to see it read the sheet you trust least? Send us one.

The most convincing thing is not our slides — it is the sheet you trust least. We can run the reading pass without importing anything, so you can see what it understood, what it would bring to a person, and what it honestly says it doesn't know.

Contact usSee the technology behind it