ES
SOP-IT-004 · v1.0
Jun 24, 2026

Technical Onboarding — New Client

Technical checklist when activating a new client · all tiers except Autoverify
Scope: all tiers except Autoverify.
Status: summary to expand as we complete each setup.

Quick checklist

#Step
1Open Dental: create clients/<id>.json with the client's Customer Key
2Open Dental: import plans from master to the client's base
2.aStedi: create API code for the client (clearinghouse)
2.bOpen Dental: activate Key Connect (client's customer_key)
2.cOD Imaging: create folder "Insurance Verification - BC"
2.dOD: create Insurance Status tag in appointment notes (Yami's steps pending)
3Sheet Insurance Logins: fill in client's portal credentials
4Sheet Dr Directory: load providers (NPI, license, etc.)
5Sheet Agreement & Cycle: load agreement and client's billing cycle
6Stripe: client creates their subscription; manually add the $150 installation fee (one-time) at day 31
7Jotform: manually add client to the listing
8Google Script ALL PATIENTS BALANCE: add client to the Composite ID Generator file
9WhatsApp: create group and add Yami BC + client's team

Detail

1-2Open Dental — credentials and plans

Create clients/<id>.json with the open_dental block (shared Developer Key + client's Customer Key). Then import plans from master to their base:

cd "/Users/yamibrandan/Documents/Claude/Projects/api open dental stedi claims"
source .venv/bin/activate

# 1. Test without writing, confirm listed plans are the BC curated ones:
python push_plans.py --source master --dest <client-id> --limit 3 --dry-run

# 2. If the 3 are correct, real test with 3:
python push_plans.py --source master --dest <client-id> --limit 3

# 3. If all OK, migrate all BC curated plans:
python push_plans.py --source master --dest <client-id>

--source master = our developers OD; --dest <client-id> = the new base. Creates only what's missing (carriers, code groups). Real offices already have ADA codes, so import_proc_codes is NOT needed.

DO NOT use --all: the master has old developer plans (the "8-9 already existing" ones at the start) that we do NOT want in the client. Without --all, the default filter (Plan Updated - BC) only grabs the curated ones.

2.a-dAdditional OD + Stedi setup (pending to expand with details)

These steps are documented here so they don't get forgotten — Yami will provide the exact steps to enrich each one.

2.a — Stedi: create API code for the client

Go to the Stedi dashboard → create a new API code associated with the client. This is what enables sending 270/276/837D to the clearinghouse on behalf of the client's provider.

(Detailed steps pending)

2.b — Open Dental: Key Connect

Activate the client's customer_key in Open Dental Key Connect so our scripts can access their OD base via API.

(Detailed steps pending)

2.c — Create "Insurance Verification - BC" image category in Open Dental

This is the Image Category where AutoVerify uploads the eligibility and benefits PDF for each patient. If the category doesn't exist, the upload fails silently.

1Open Dental → Setup → Definitions

2In the left list Select Category

Choose Image Categories.

3In Edit Items, click Add

4In Name type exactly

Insurance Verification - BC

Leave all Usage checkboxes unchecked; Hidden unchecked.

5Click Save

Short path: Setup → Definitions → Image Categories → Add → Name: "Insurance Verification - BC" → Save

Exact spelling: same spaces, same capitalization, and dash with space on each side. AutoVerify matches by exact name when uploading. If you type Insurance Verification-BC or insurance verification - BC, uploads fail.
Technical pending (dev): Currently the backend points to STEDI_PDF_DOC_CATEGORY = "Insurance". For PDFs to actually land in the new category:
  • config.py → change to STEDI_PDF_DOC_CATEGORY = "Insurance Verification - BC"
  • .env.example (and prod .env) → same
  • Redeploy
Without this change: the client creates the new folder but PDFs still go to Insurance, and the new one stays empty.

2.d — OD: Insurance Status tag in appointment notes

Create the Insurance Status tag in the client's appointment notes (e.g. INS ACTIVE - BC / INS INACTIVE - BC). This is used by SOP-IT-003 (Metrics & A/R Recovery) to count cycle verifications.

(Yami will provide the detailed steps)

3Insurance Logins (Sheet)

Fill in client's insurance portal credentials.

Open Insurance Logins Sheet

4Dr Directory (Sheet)

Load client's providers (name, NPI, license, etc.).

Open Dr Directory Sheet

5Agreement & Cycle (Sheet)

Load agreement and billing cycle for the client.

Open Agreement & Cycle Sheet

6Stripe

Client creates subscription in Stripe. Manually add the $150 installation fee (one-time) at day 31 from activation.

7Jotform

Manually add the client to the Jotform listing.

8Google Script — ALL PATIENTS BALANCE

Manually add the client to the "ALL PATIENTS BALANCE" script, in the Composite ID Generator file.

9WhatsApp

Create the client's WhatsApp group and add Yami BC + the client's team.

Hosting map — where each piece lives

URLSystemHow to update
brandacare.com/docs/…API-Setup.pdfWordPress / CloudwaysWP Admin → WP File Managerpublic_html/docs/ → replace file (same name)
brandacare.com (landing, dashboards)WordPress / CloudwaysDashboards via GitHub Actions + SFTP to public_html/dashboards/
manual.brandacare.comNetlifyDrag-and-drop the docs/ folder
manual.tecnico.brandacare.comNetlifyDrag-and-drop the docs-tecnico/ folder
Cache note (important): After replacing the PDF, the old version may still show up due to cache. Purge:
  1. WP Admin → Breeze → Purge All Cache
  2. Cloudways → Application → Purge Varnish (if applicable)
  3. Cloudflare → Purge (if in front)
Optional: use ?v=2 at the end of the link in the email to force the new version. Always verify in incognito.

To expand (TODO)