First tenant through the automated onboarding pipeline. Yardi source, 4 communities.
base.dim_resident223 rows. The Yardi notebook fix (2026-10-05) also brought in 45 missing Integrated residents.| # | Step | Status | Note |
|---|---|---|---|
| A1 | Yardi production read access | Done | Since 2026-09-30. 216 residents at the time, all 4 communities (1-1, 3-1, 4-1, 5-1). |
| A2 | Profile the API: resources, volumes, incremental fields | Done | See the Yardi API tab. |
| A3 | Service lines | Done | AL and MC at all 4. No IL. |
| # | Step | Status | Note |
|---|---|---|---|
| B1 | Careflows tenants (Parties) and AVON medical centers | Done | 4 of each, by Eric, 2026-09-21 (CC-1623). |
| B2 | Blob provider and platform flows per community | Done | 2026-10-01. Complete_Pipeline (warehouse, weekly) and AI_Risk_Complete_Pipeline (risk view, daily). The platform wrote all 8 Airflow DAGs. |
| B3 | AVON patients, providers and staff | To do | Eric. Residents already reach Careflows through the automatic import, so this is about AVON users and doctor links. |
| B4 | Organization address and primary contact | To do | Empty on all 4 tenants. Eric, CC-1623. |
| # | Step | Status | Note |
|---|---|---|---|
| I1 | Airbyte connection to Yardi PROD | Done | 11 streams. Connector v6 retries the 5-minute token and server errors. |
| I2 | Load into FHIR and silver (house Yardi transform) | Done | 221,292 records at first load. Each community checked twice: silver equals FHIR, and Yardi equals silver. |
| I3 | Delete the 834 old test-load duplicates | Done | 2026-10-01. Every one reads back as gone, nothing pointed at them. |
| I4 | Weekly schedule | Done | Yardi pull and load Saturday 17:00, warehouse Sunday 04:00 to 05:30 UTC (moved off Integrated's Saturday slot 2026-10-05), risk view daily 06:00 to 07:15 UTC. |
| I5 | Chain the pull and the load, alert on failure | Done | 2026-10-05. One Databricks job, Saturday 17:00 UTC: it starts the Yardi pull, waits, then loads. A failed or near-empty pull stops the job and sends the failure email. Test run green with new data. Airbyte no longer has its own clock. |
| # | Step | Status | Note |
|---|---|---|---|
| D1 | public.dim_tenants rows | Done | 4 rows, active, start date 2026-10-01. Nothing writes this table automatically. |
| D2 | Daily rows, med orders, move-ins | Done | patient154__v2 through today, 0 duplicates. 5,732 med orders. Move-in on every moved-in resident. |
| D3 | base.dim_resident | Done | 2026-10-05: 223 rows. The Yardi notebook wrote an old staging table name. Fixed, backfilled once, then proven on all 4 weekly runs. |
| D4 | tenant_start_date and tenant_capacity | Done | 4 rows each. Beds 61, 194, 81, 64. |
| D5 | Dashboard tables show the tenant | In progress | 6 show today. About 7 more fill on the 2026-10-06 refresh. See the Tables & dashboards tab. |
| D6 | active flag on residents | To do | Empty on every Yardi resident, Integrated too. Census still works, because it uses the room and move-in instead. Ankita, D2b. |
| # | Step | Status | Note |
|---|---|---|---|
| E1 | Customer sees only their own data | Done | Careflows adds the tenant filter itself when it opens a dashboard. No Superset rule needed. |
| E2 | Dashboards render the tenant in Careflows | To do | Check after the 2026-10-06 refresh. |
| # | Step | Status | Note |
|---|---|---|---|
| F1 | Data Provider Map | Done | Operator links to this page. |
| F2 | Mark the Yardi cell for via Elegante on the map | To do | One click. |
| F3 | Reusable process | Done | Captured in the cc-onboard-tenant skill and its sub-skills. |
| F4 | Decide saas_rate_pmpm | To do | Still empty on all 4. |
| F5 | Confirm Tucson Mountains beds | To do | Yardi says 194 beds in 66 rooms. Ask the operator. |
| F6 | Report the rock as 1 live tenant | To do |
loa_metrics (2026-10-06).medication.source_administration have none. Parked.| Date | What changed |
|---|---|
| 2026-10-06 (evening) | Leaves of absence now load into loa_metrics: 461 leave-days for the 4 communities (334 of them hospital), from May 2026. Feeds the leave and hospitalization dashboards from the next refresh. Integrated (3 Yardi communities, about 3,950 leaves) follows on its next run. |
| 2026-10-06 (later) | Notes and incidents added to the weekly Yardi job. The incident reader reads ids in order (proven on Yardi's sandbox, 33 falls) and waits for Yardi to enable read on PROD; via Elegante must approve that. Leaves design drafted: Integrated alone has 3,956 Yardi leaves we drop today. |
| 2026-10-06 | Yardi turned on AdverseEvent, Practitioner, CareTeam, Immunization, CarePlan and Goal for TEST. Tested: 4 work, CareTeam is empty, and AdverseEvent cannot be searched and holds nothing. No Yardi customer (Integrated included) has incidents today. Asked Yardi for PROD access and how to get staff-entered incidents. 3 more test notes written to Yardi TEST for Yardi to check in their UI. Leaves of absence found in Yardi visit records (236 since May, 156 hospital). One-off pull of every endpoint the weekly pull skips: 3,656 notes with their text, now in blob. Every PROD endpoint is pulled. Asking Yardi for incidents (AdverseEvent). |
| 2026-10-05 | Residents reach base.dim_resident (223), after a one-word fix in the Yardi notebook. Weekly warehouse runs moved to Sunday. Careflows checked: 215 active residents, no duplicates. Yardi pull chained into the load job, test run green. |
| 2026-10-03 | First scheduled weekly cycle. Pull and load green. Canyons warehouse run missed (platform error at start), rerun 2026-10-05. |
| 2026-10-02 | Start-date and bed rows added. First note written to Yardi TEST (HTTP 201). |
| 2026-10-01 | Platform flows for all 4 communities. All 8 Airflow DAGs green. Resident profiles open in Careflows. Old duplicates deleted. |
| 2026-09-30 | Production Yardi access. First PROD pull (219,203 records). All 4 communities loaded into FHIR and silver and checked. |
| 2026-09-27 | Write-back proven: one vital written to Yardi TEST (HTTP 201). dim_tenants rows in. |
| 2026-09-21 | Careflows tenants and AVON medical centers created (Eric). |
| 2026-09-16 | First Airbyte pull from the TEST site lands in blob. |
| 2026-09-15 | Yardi access unblocked: the fix was a new endpoint id, not new keys. |
Read-only check, 2026-10-05.
| Source table | via Elegante | Status |
|---|---|---|
base.dim_resident | 223 residents (Canyons 56, Highlands 36, Foothills 39, Mountains 92) | Has data |
public.patient154__v2 | 133,878 daily rows, through today, 0 duplicates | Has data |
base.dim_moveinout | 215 moved-in residents | Has data |
medication.fct_medication_orders | 5,732 orders, 0 duplicates | Has data |
public.dim_tenants, tenant_start_date, tenant_capacity | 4 rows each | Has data |
WorkBench Residents (Careflows profiles) | 216, refreshed daily | Has data |
medication.source_administration | Med passes land, but with no tenant id (all Yardi customers) | Partial |
| Dashboard table | PROD dashboard | via Elegante rows |
|---|---|---|
public.fact_daily_residents_mv | Community Overview Dashboard | 7,657 |
public.tenant_occupancy_mv | Community Overview Dashboard | 7,657 |
public.pe_falls_mv | Care Performance Dashboard | 52 (falls read 0: no Yardi incident feed) |
public.pe_hospitalizations_mv | Care Performance Dashboard | 52 (reads 0: no Yardi incident feed) |
public.pe_outcomes_metrics_monthly_mv | Care Performance Dashboard | 52 |
public.tenant_table | none on PROD | 4 |
These read base.dim_resident, filled 2026-10-05 after that day's refresh. Integrated shows in the first 7. The last 2 are empty for Integrated too, so check them.
| Dashboard table | PROD dashboard | Integrated rows today |
|---|---|---|
public.resident_daily_list_mv | Community Overview Dashboard | 574,531 |
public.resident_daily_status_mv | none on PROD | 574,531 |
public.tenant_periodic_census_mv | Community Overview Dashboard | 22,850 |
public.tenant_daily_census_mv | none on PROD | 19,416 |
public.resident_stay_mv | none on PROD | 1,223 |
public.resident_event_list_mv | Community Overview Dashboard | 1,133 |
public.tenant_month_census_mv | none on PROD | 223 |
public.pe_average_resident_tenure_mv | Care Performance Dashboard | 0, check |
public.pe_tenant_cohort_retention_mv | Care Performance Dashboard | 0, check |
Frozen for every tenant. None is on a PROD dashboard.
| Dashboard table | PROD dashboard | Integrated rows today |
|---|---|---|
medication.patient_med_count_v3_mv | none on PROD | 58,682 |
medication.patient_week_med_count_hybrid_mv | none on PROD | 48,268 |
medication.patient_week_med_count_mv | none on PROD | 48,268 |
medication.polypharma_kpi_v2_mv | none on PROD | 614 |
medication.polypharma_kpi_v3_mv | none on PROD | 624 |
medication.polypharma_weekly_hybrid_mv | none on PROD | 498 |
public.resident_daily_status_p154_mv | none on PROD | 563,753 |
public.tenant_periodic_census_p154_mv | none on PROD | 3,151 |
Integrated is empty here too. These need new Yardi feeds, outside this onboarding.
| Dashboard table | PROD dashboard | Why it stays empty |
|---|---|---|
incident.fct_incident_events_mv | none on PROD | No Yardi incident feed; No Yardi leave feed |
medication.fct_infection_medication_monthly_mv | none on PROD | Integrated (Yardi) is empty here too |
medication.high_risk_med_dash_mv | none on PROD | Med groups not built for Yardi |
medication.medication_errors_and_administrations_mv | none on PROD | No Yardi med-error feed; Med orders feed for Yardi (medication_testing) not built |
medication.medication_errors_monthly_weekly_mv | Med Quality Dashboard | No Yardi med-error feed |
medication.medication_groups_weighted_average_mv | Med Quality Dashboard | Med groups not built for Yardi |
medication.medication_orders_mv | Med Quality Dashboard | Med orders feed for Yardi (medication_testing) not built |
medication.pe_med_groups_mv | none on PROD | Med groups not built for Yardi |
medication.pe_med_refusals_unavailability_mv | none on PROD | Med orders feed for Yardi (medication_testing) not built |
medication.pe_polypharma_mv | none on PROD | Med groups not built for Yardi; No Yardi polypharmacy weeks feed |
medication.polypharma_dash_mv | none on PROD | No Yardi polypharmacy weeks feed |
medication.polypharma_kpi_mv | Med Quality Dashboard | No Yardi polypharmacy weeks feed |
medication.polypharma_resident_list_mv | Med Quality Dashboard | No Yardi polypharmacy weeks feed |
medication.tenant_filter_mv | none on PROD | No Yardi med-error feed; Med groups not built for Yardi; Med orders feed for Yardi (medication_testing) not built; No Yardi polypharmacy weeks feed; Med passes land without a tenant id |
medication.tenant_period_filter_mv | none on PROD | No Yardi med-error feed; Med groups not built for Yardi; Med orders feed for Yardi (medication_testing) not built; No Yardi polypharmacy weeks feed; Med passes land without a tenant id |
medication.tenant_table_med_quality | none on PROD | No Yardi med-error feed; Med groups not built for Yardi; No Yardi polypharmacy weeks feed |
medication.unavailable_and_refused_periodic_mv | Med Quality Dashboard | Med orders feed for Yardi (medication_testing) not built |
public.fall_aggregate_mv | none on PROD | No Yardi incident feed |
public.fall_rate_dash_mv | none on PROD | No Yardi incident feed; No Yardi leave feed |
public.falls_mv | none on PROD | No Yardi incident feed |
public.incident_events_mv | Med Quality Dashboard | No Yardi incident feed |
public.leave_of_absence_mv | Community Overview Dashboard | No Yardi incident feed; No Yardi leave feed |
public.pe_residents_on_leave_monthly_mv | Care Performance Dashboard | No Yardi leave feed |
public.resident_mla_mv | none on PROD | No Yardi leave feed |
social.fct_resident_visits_mv | none on PROD | No visits source |
social.wellbeing_activity_attendance_mv | Social Engagement Dashboard | No social engagement source |
social.wellbeing_social_engagement_index_mv | Social Engagement Dashboard | No social engagement source |
social.wellbeing_ucla_loneliness_mv | Social Engagement Dashboard | No loneliness survey source |
social.wellbeing_visitation_mv | Social Engagement Dashboard | No social engagement source |
Yardi EHRxConnect, FHIR R4 US Core. Production property since 2026-09-30, read only. The TEST property is a frozen copy from 2026-09-08 and is used only for write tests.
| Item | Value |
|---|---|
| Token | POST {host}/{instance}/identity/connect/token, client credentials, scope APIvR4 |
| Token lifetime | 300 seconds. Refresh about every 4 minutes on a long pull |
| API base | {host}/{instance}/Webservices/FHIR/R4USCore/{guid}/{Resource} |
| Headers | Accept: application/fhir+json, Authorization: Bearer {token} |
| Resident reference on a write | A bare id like 56843-2, not Patient/56843-2 |
| Delete | Not supported. Anything we write stays |
Access from each site's own /metadata, checked 2026-10-06 21:05 UTC. Highlighted rows differ between TEST and PROD.
Click an endpoint to see every pull and push we have done, and where the data lands. Every endpoint open to us on PROD has now been pulled at least once. AdverseEvent, Practitioner, CareTeam, Immunization, CarePlan and Goal were turned on for TEST on 2026-10-06 and tested the same day.
| Endpoint | TEST | PROD |
|---|---|---|
Incidents · 0 pulls, 0 pushes, tested | create read | not available |
Lands in: Weekly task ready since 2026-10-06: reads incident ids in order ( | ||
Notes · 1 pull, 3 pushes | read create search | read search |
Lands in: Blob ( | ||
Note text · 1 pull, 0 pushes | not available | read |
Lands in: Blob ( | ||
Stays and leaves of absence · 4 pulls, 0 pushes | read create search | read create search |
Lands in: FHIR only. Holds 236 leaves of absence (156 hospital) since May 2026. No warehouse table yet | ||
Staff and doctors · 0 pulls, 0 pushes, tested | read search | not available |
Lands in: Not pulled. Asking Yardi to turn it on for PROD | ||
Care team per resident · 0 pulls, 0 pushes, tested | read search | not available |
Lands in: Not pulled. Empty on TEST | ||
Vaccines · 0 pulls, 0 pushes, tested | read search | not available |
Lands in: Not pulled. Asking Yardi to turn it on for PROD | ||
Care plans · 0 pulls, 0 pushes, tested | read search | not available |
Lands in: Not pulled. Asking Yardi to turn it on for PROD | ||
Care plan goals · 0 pulls, 0 pushes, tested | read search | not available |
Lands in: Not pulled. Asking Yardi to turn it on for PROD | ||
Vitals · 4 pulls, 1 push | read create search | read search |
Lands in: FHIR and Careflows only. No warehouse table | ||
Residents · 4 pulls, 0 pushes | read search | read search |
Lands in: FHIR and Careflows; warehouse | ||
Communities, rooms, beds · 4 pulls, 0 pushes | read search | read search |
Lands in: FHIR; the bed count went into | ||
Diagnoses · 4 pulls, 0 pushes | read search | read search |
Lands in: FHIR only | ||
Allergies · 4 pulls, 0 pushes | read search | read search |
Lands in: FHIR only | ||
Med passes · 3 pulls, 0 pushes | read search | read search |
Lands in: FHIR; warehouse | ||
Med orders · 4 pulls, 0 pushes | read search | read search |
Lands in: FHIR; warehouse | ||
Med list · 4 pulls, 0 pushes | read search | read search |
Lands in: FHIR only | ||
Drug details · 0 pulls, 0 pushes | read | read |
Lands in: Not fetched on its own: every med record carries its drug details inline, so the weekly pull has them | ||
Diet orders · 4 pulls, 0 pushes | read search | read search |
Lands in: FHIR only | ||
Insurance · 4 pulls, 0 pushes | read search | not available |
Lands in: FHIR only | ||
Communities as organizations · 1 pull, 0 pushes | read search | read search |
Lands in: TEST only. On PROD our load builds it from the community Location | ||
API settings · 1 pull, 0 pushes | not available | read search |
Lands in: Blob only | ||
API settings · 1 pull, 0 pushes | not available | read search |
Lands in: Blob only | ||
Yardi turned these on for TEST (notes 2026-10-02, the rest 2026-10-06). We tested each one and asked for PROD on 2026-10-06. Results per endpoint are in the drop-downs above.
| Resource | What the doc says it does | What we need it for | Status |
|---|---|---|---|
| DocumentReference | Create and read Progress Notes (11506-3), Daily Logs (51855-5) and documents | Visit notes into the Yardi chart. Chris's goal. One test note is built and dry-run tested, script 03_scripts/yardi_note_writeback.py | On for TEST |
| AdverseEvent | Create and read by id, no search | Incidents and falls. No Yardi customer has incidents today | Needs search, and staff-entered incidents |
| Practitioner, Immunization, CarePlan, Goal | Read and search | Doctors, vaccines, care plans | Work on TEST, PROD asked |
| CareTeam | Read and search by resident | Link residents to their doctors | Empty on TEST, asked why |
| RelatedPerson, ServiceRequest | No operations / not enabled | Nothing for now | Not asked |
Append a row for every write. There is no Delete, so this table is the full record of our footprint in their system.
| When (UTC) | Resource | What | Result |
|---|---|---|---|
| 2026-09-27 16:59 | Observation | One body weight for one resident, repeating their last recorded value, labeled as a Centered Care integration test | 201, id 44451-8, read back and found in search |
| 2026-09-28 13:10 | DocumentReference, AdverseEvent | Empty probes to prove the resources are off. No resident, no content | 400 Invalid Resource, nothing created |
| 2026-09-28 13:14 | DocumentReference | The full test visit note (Progress Note 11506-3), same resident as the vital | 400 Invalid Resource, nothing created. Notes are off until Tom enables them |
| 2026-10-02 17:49 | DocumentReference | The same test visit note, TEST site, after Yardi enabled create on notes | 201, id 1494-28029. Read back 200: Progress Note, Clinical Note, right resident, our first line stored. Full text not readable on TEST (no Binary there). Yardi to confirm it shows in their UI |
| 2026-10-06 14:20 | DocumentReference | 3 more labeled test visit notes, TEST site, same resident: a short one, one with special characters and lists, and a long one (about 40 lines) | 201 x3, ids 1495-28029, 1496-28029, 1497-28029. Read back 200, right resident. Yardi to confirm all 4 in their UI |