Manage EVV sources
Outcome
Each upstream EVV vendor (Sandata, Tellus, HHAeXchange, AuthentiCare, etc.) that pushes visits into your tenant is registered, healthy, and mapped so that incoming records land on the right members and providers.
Prerequisites
| Scope | What it lets you do |
|---|---|
evv.source.read | View sources |
evv.source.write | Add / edit sources, mappings, suppression |
A trading-partner credential or push-API feed already configured (see 5.6 — Trading partner credentials or 5.7 — SFTP feeds & Push API) — EVV sources flow over either transport.
The list page
/evv/sources. Each row is one configured source:
| Column | Notes |
|---|---|
| Name | Vendor display label. |
| Vendor | Vendor type (sandata, hhaex, tellus, custom). |
| Transport | SFTP or PUSH. |
| Last visit received | Timestamp of the most recent inbound visit. |
| Health | green / amber / red based on expected cadence. |
| Visits today | Count. |
| Exceptions today | Count. |
Source detail
Click into a source for tabs:
| Tab | Purpose |
|---|---|
| Overview | Vendor metadata, transport, mapping binding. |
| Mappings | Vendor's field names → canonical field names. |
| Health | Expected cadence, current latency, recent failures. |
| Suppressions | Member / provider IDs whose inbound traffic the platform should drop. |
| Activity | Recent inbound batches with row counts. |
Steps to add a source
Click
+ New EVV source. Pick the vendor type. The form pre-fills the canonical mapping for that vendor.Bind the transport:
Transport Bind to SFTPAn ingestion feed configured for the vendor's host. PUSHA minted Push API key (see 5.7). Confirm field mappings under the Mappings tab. The default mapping covers the vendor's standard schema; override any field whose vendor name deviates from the standard.
Set expected cadence under Health. Common patterns:
Cadence When to use Every 15 minutesReal-time push vendors. HourlyHourly SFTP drops. DailyEnd-of-day batch vendors. The platform raises the source to
amberif no traffic in 1.5× the expected window,redat 3×.Save. The source goes live; the Activity tab will populate as inbound traffic arrives.
Steps to suppress a stuck record
When a vendor keeps re-pushing a known-bad visit (causing a duplicate exception every cycle):
Open the source's Suppressions tab.
Click
+ Add suppression. Specify the suppression scope:Scope Use case Specific visit ID A single bad visit. Member + date range All visits for a member in a window (e.g. while migrating away from the vendor). Provider + date range All visits for a provider. Provide a reason and an optional expiration. Save. The platform silently discards matching inbound records and notes the suppression in the source's Activity tab.
Steps to triage source health
A red source is alerting and needs immediate attention:
Open the source detail → Health tab. Look at the latency chart.
Cross-check transport: open the bound feed (under Configuration → Ingestion) and click
Test connection. If the connection fails, fix the credential (see 5.6).Cross-check the vendor's status page if the vendor publishes one.
File a support ticket with the vendor through your normal channel, including the expected vs. actual cadence numbers from the dashboard.
Validation
| Check | Expected |
|---|---|
Source is green within 1 cadence cycle of save | Yes (assuming traffic arrives). |
| Mapped fields produce visits with the expected member / provider IDs | Yes — confirm via /evv/visits. |
| Suppression silently drops matching records | Yes; Activity tab shows the dropped count. |
| Health alerts fire when traffic stalls | Yes. |
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Mapping save returns "field not in canonical schema" | Tried to map to a name the platform does not know | Use only canonical field names from the dropdown. |
Source stuck on amber despite traffic | Cadence misconfigured | Lower the expected cadence to match actual delivery. |
| Suppression not blocking | Scope does not match the vendor's actual identifiers | Confirm the suppression scope matches the inbound payload's IDs (some vendors use external IDs you need to add to the member). |
| Vendor pushes records for unknown members | Mapping does not produce a member match | Add member alias on the affected members (6.1 — Member detail). |