The MDM Stewardship Agent finds the correct OneKey ID for every healthcare professional (HCP) on your list and explains each answer. Two software agents share the work, and a person always has the last word on anything doubtful.
You drive it with four cards on the Run tab, then read the answers on the Results tab.
This is the whole journey of a run, from the four cards you fill in to the answers you review. The dashed boxes are the working areas of the agents; the next two sections open them up.
#gid= part of the link picks the tab) or a CSV file you upload (up to 5,000 rows and 5 MB; the columns are matched by name and you can correct the matching). An uploaded CSV is never written back to a sheet.| Filter | What it does |
|---|---|
| Source Name | Only rows whose Source Name equals one of the chosen sources are processed. Pick one or more from the list (VeevaCRM, SFDC, LMHC, Synergistix, and any others on offer). If your source is not listed, choose Others and type the Source Name exactly as it is written in the sheet. Any source switches this filter off. |
| Create Date | Specific Date: only rows created that day. Custom Range: rows created from the Start Date to the End Date; both of those days are included. A date is always needed unless you give exact rows. |
| Already-done rows | Rows that already have a OneKey ID or a final confidence in the result columns are skipped. Rows marked not processed are tried again. Reprocess includes the finished rows too and overwrites their results. |
| Limit | Stop after this many rows. 0 means all matching rows. A small limit is the best way to try the tool. |
| Exact rows | A list such as 284, 290-295, using the row numbers shown in the sheet or file (row 1 is the header). For a sheet this overrides every filter above. |
| Uploaded CSV | The file replaces the sheet. Source Name, Create Date and the already-done rule do not apply; only Limit and Exact rows do. |
The Matching Agent turns one row into a file of evidence. It asks OneKey, keeps what could plausibly be the same person, and hands everything over. It does not choose a winner, so a doubtful row can never be settled by a lucky search.
The Validation Agent reads the matches file and recomputes every comparison from the raw names and addresses (the snapshot in the file is for people and is never trusted). It applies the rules below in this order. The same input always gives the same answer, and each answer comes with a reason.
A candidate must have exactly the same name (spaces, hyphens and punctuation are ignored), an address in the row's state, and a profession that fits the row's TypeCode. Each TypeCode (Physician, Nurse, Pharmacist and so on) maps to the set of OneKey professions that are acceptable for it. Assistants are never merged with practitioners: a Physician Assistant is not a Physician and a Pharmacy Technician is not a Pharmacist. If nobody passes, the row goes to Needs Review and the comment says what was found instead (a wrong profession, other states, or only similar names).
When the TypeCode says nothing useful (for example Other or Unverified), nobody is filtered out on profession, but the result can be at most Medium, and if more than one candidate remains the row goes to Needs Review. When both TypeCode and SubType are blank there is no profession check.
Only a profile that is Active and Valid in OneKey can be returned as the answer. Inactive matches are never chosen; they are listed in the next column so the steward can see them.
Every individual and workplace address on a candidate is compared with the row's address. The strongest rule that an address satisfies decides the candidate's rank, and the best rank among the live candidates wins. “Close” means a small spelling or abbreviation difference in the street.
| Rule | Address evidence | Score | Confidence |
|---|---|---|---|
| 1 | Street, address line 2, city and ZIP all match exactly | 100 | High |
| 2 | Street, city and ZIP match exactly | 95 | High |
| 3 | Street is close, address line 2, city and ZIP match exactly | 90 | High |
| 4 | Street is close, city and ZIP match exactly | 85 | Medium |
| 5 | Street is close, city matches exactly | 80 | Medium |
| 6 | City and ZIP match exactly (street does not) | 75 | Medium |
| 7 | Only the city matches | 65 | Low |
| 8 | Only the ZIP matches | 60 | Low |
| 9 | Only the state matches (the address does not) | 50 | Low |
If one candidate has the best rule, it is accepted. If several share it, two tie-breakers are tried in order:
If the candidates are still level, the row goes to Needs Review with all of them listed. A pick made by a tie-breaker is never reported as High.
The confidence comes from the rule that matched (High for rules 1 to 3, Medium for 4 to 6, Low for 7 to 9). It is lowered to Medium when a tie-breaker was needed, when the profession could not be verified because the TypeCode is too vague, or when the row's SubType disagrees with the chosen profile (the comment then says CHECK).
For a Medium or Low pick, the agent looks at the similar names the Matching Agent found. If one of them is live, has a fitting profession and matches the address just as well or better, this may be the wrong person, so the row goes to Needs Review with the proposed match and the alternatives side by side.
| Outcome | When | What is written |
|---|---|---|
| Matched (High) | Rule 1 to 3 address evidence, a fitting profession, no tie-break needed. | OneKey ID, score and confidence; a two-line comment. |
| Matched (Medium) | Rule 4 to 6 evidence, or a tie-breaker was used, or the profession could not be verified. | As above. Worth a quick look. |
| Matched (Low) | Rule 7 to 9: name, state and profession fit, but the address is weak or missing. | As above. Check before relying on it. |
| Needs Review | Anything the rules cannot settle safely: nobody passes the gate, no live profile, a tie, a similar name that matches as well, or a skipped row. | OneKey ID and score stay blank. The comment says why; the clarification column lists the candidates. |
| Not processed | OneKey or the agent failed on that row. | The label API error - not processed or Agent error - not processed. The row is picked up again on the next run. |
| Column | Name | Content |
|---|---|---|
| AA | onekey_id_found | The chosen OneKey ID (blank for Needs Review). |
| AB | match_score | 50 to 100, from the waterfall rule (blank for Needs Review). |
| AC | confidence | High, Medium, Low or Needs Review. |
| AD | comments | Two lines. Line 1 is the verdict and the one fact that decided it; line 2 is the chosen profile, or what else was found. |
| AE | clarification | A numbered list, one candidate per line, with the ID, name, profession, address and why it is shown. |
For example, a match reads: Matched (High) - the street address, city and ZIP match. followed by the profile line
ID · name · Nurse · address. A review reads, for example: Review - 2 profiles match equally well (only the city matches) and nothing separates them.
The full reasoning for every row is also kept in decisions.json and shown in the Results tab.
matches/row_N.json), matches_all.txt (the same in readable form),
decisions.json, summary.json and a console log, plus input_csv.json for an uploaded CSV. On your computer it is under runs/; on AWS Lambda it is stored in the S3 bucket.runs/ folder is excluded from Git.Your Google Sheet (or a CSV file you upload) lists healthcare professionals (HCPs) that were submitted for stewardship. Each one needs its correct OneKey ID, the identifier of that person in the OneKey reference database.
This tool does that lookup for you, row by row, and either writes the answer back to the sheet or, for an uploaded CSV, gives it back as a CSV file:
You need three things. Ask your administrator if you do not have them yet.
How long does it take? About 7 seconds per row (100 rows is roughly 12 minutes). Start with a few rows to get comfortable.
Every session follows the same eight steps. The tabs Run and Results at the top are where you do them.
The address and key are stored only in this browser. On a shared computer, open Settings and click Forget when you are done. Re-check (top right) tests the connection again at any time.
Card 1 Input Data has two choices at the top. Use Google Sheet or Upload CSV.
The link contains gid=...; that number tells the tool which tab to use.
.xlsx files cannot be read.Your file is read in your browser. Only a few rows at a time are sent to the back end while the run is in progress.
| Filter | What it means |
|---|---|
| Source Name | Open the list and tick one or more sources (filled in for you, for example VeevaCRM). Only rows from the ticked sources are processed. If your source is not in the list, tick Others and type the Source Name exactly as it is written in the sheet. Tick Any source to include every source. |
| Create Date | Specific Date: only rows created that day; pick it in the Date box. Custom Range: rows created from the Start Date to the End Date, and both of those days are included. A date is always needed (or exact rows, below). |
| Reprocess rows that already have a result | Off (normal): rows that already have an answer are skipped, and rows marked “not processed” are tried again. On: they are processed again, and if you write, the old answers are overwritten. |
| Limit | 0 means all matching rows. A number such as 5 processes only the first 5. Ideal for a first test. |
| Or pick exact rows | Type row numbers exactly as the sheet or file shows them (row 1 is the header), for example 284, 290-295. For a sheet, this ignores the date, source and already-done filters. |
Read a few Matched rows and a few Needs Review rows. If the decisions make sense, continue to step 7 (sheet) or download the file (CSV). See “Reading the results” below for what each label means.
CSV runs: besides Download CSV (the results table), a CSV run has Download with input columns. It gives your own file back with the five result columns added at the end (onekey_id_found, match_score, confidence, comments, clarification). Download it before you close or reload the page: the uploaded file is kept in the page only for this session.
An uploaded CSV has no write step. Its results stay in the page and in the files you download (step 6), and the Write switch is switched off.
The confirmation box clears after every run, so each write needs a fresh tick. Writing processes the rows again from the start, so it takes as long as the dry run did.
| Outcome | What it means | What to do |
|---|---|---|
| Matched | The tool found one OneKey profile it can stand behind. AA holds its ID. | Nothing, apart from spot checks. |
| Needs Review | The tool could not safely choose one profile (none found, or several equally good). AA and AB are left blank. AD explains why and AE lists the candidates. | A steward decides, using AD and AE. |
| Error - will retry | OneKey or the tool failed for this row. It is not an answer. | Run again later; the row is picked up again. |
| Confidence | Meaning |
|---|---|
| High | Same name, an address in the same state, a matching profession, and the full address, city and ZIP agree. One profile fitted best, with no tie-break needed. |
| Medium | A profile was chosen, but with a caveat: for example several profiles fitted equally well and the tool separated them using SubType or middle name, or the profession could not be confirmed. A tie-broken pick is never shown as High. |
| Low | Weaker evidence, for example only the state matches and the street address does not. |
| Needs Review | No safe single answer (see above). |
The score (0 to 100, column AB) shows how closely the row’s address agrees with the OneKey address. 100 means the whole address matched; lower numbers mean a looser match (for example 50 when only the state matches). It is shown only for matched rows.
| Column | Content |
|---|---|
| AA | OneKey ID found (blank for Needs Review) |
| AB | Match score |
| AC | Confidence (High, Medium, Low, Needs Review, or an “...not processed” marker) |
| AD | Comment: the reason for the decision in plain English |
| AE | Clarification: for Needs Review, a numbered list of the candidate profiles with their IDs and addresses |
The How it works tab shows the same flow as a diagram.
| What you see | What it means and what to do |
|---|---|
| “Not connected yet” banner | Open Settings and enter the API address and key (step 1). |
| “Invalid or missing API key” | The key is wrong or has a typo or a space. Copy it again from your administrator. |
| “Could not get an answer from the API address” | The address is wrong, you are off the company network or VPN, or the back end is down. Check the address in Settings, then ask your administrator. |
| Red label OneKey API down | The OneKey service is not answering. Wait a few minutes and click Re-check. Rows run during an outage are marked “not processed” and retried later. |
| “Writing is disabled on the server” | Only dry runs are allowed. If you are meant to write, ask your administrator to enable it. |
| “Enter the Create Date”, “Enter the Start Date”, “The End Date cannot be before the Start Date” | Pick a date (for a Custom Range, both a Start Date and an End Date). |
| “Excel files are not supported” | Open the file in Excel, choose File, Save As, CSV (comma delimited), and upload the new file. |
| “Match these required columns” | Your file’s columns could not be matched to First name, Last name or State automatically. Choose them in the drop-downs under Match your columns. |
| CSV file too big or has too many rows | The limit is 5,000 rows and 5 MB. Split the file into smaller ones. |
| “The backend does not support CSV upload yet” | The back end is an older version. Ask your administrator to update it (version 1.2.0 or newer). |
| Accented letters look wrong in the results | Save the file as CSV UTF-8 in Excel and upload it again. |
| “0 rows match” / “nothing to run” | Check the date, the Source Name spelling, and whether the rows already have results. Use Check sheet to see what exists. |
| Rows marked Error - will retry | OneKey or the tool failed on those rows. They are not wrong answers. Run again later with the same filters. |
| Timeout or “gateway” message during a run | A batch took too long. Open Settings and lower Rows per call (for example to 2), then run again. |
| Message about an expired AWS login | The person who runs the back end needs to log in to AWS again. Tell your administrator. |
| Closed the page during a run | Batches already finished stay (if Write was on). Start again with the same filters: finished rows are skipped. |
| Results tab shows only This session | Past runs are not stored on this server. Download the CSV after each run if you need a record. |
Still stuck? Send your administrator the message exactly as shown, plus the Run id from the end of the run (for example web_20261025_110628). Never send the API key.
web_20261025_110628. It appears in the Results list.