OAC Integration
Administrator view of the Oracle Analytics Cloud feed behind Executive Overview. The dashboard reads one typed adapter; this page shows which source that adapter is currently serving and what still has to be configured and validated.
Current Source
Executive Overview's four KPI cards and its budget, overtime, event-cost and exception panels all read the same adapter.
Serving: Seeded POC warehouse (Oracle payroll, Kronos timecard, Oracle Benefits, Oracle GL shapes). OAC is not connected. Figures on the dashboard are synthetic POC values and must not be read as county financials.
Required Server-Side Configuration
Names only. Values are set as backend secrets by an administrator and are read inside server handlers — never in browser code. Provide either the read-only service account or the OAuth client credentials, not both.
| OAC_BASE_URL | Base URL of the county's Oracle Analytics Cloud instance used for all REST calls. | https://<tenant>.analytics.ocp.oraclecloud.com | Server environment only | Required |
|---|---|---|---|---|
| OAC_DATASET_PATH | Catalog path of the Volusia County Insights POC Master dataset queried by the adapter. | /shared/Volusia/Insights POC Master | Server environment only | Required |
| OAC_SERVICE_USER | Read-only service account used for unattended queries (option A: basic service account). | svc_costintel_ro | Server environment only | Required (one auth method) |
| OAC_SERVICE_PASSWORD | Password for the read-only service account (option A). | stored as a backend secret | Server environment only | Required (one auth method) |
| OAC_OAUTH_CLIENT_ID | IDCS/OCI IAM confidential application client id (option B: OAuth client credentials). | 0a1b2c3d4e5f... | Server environment only | Required (one auth method) |
| OAC_OAUTH_CLIENT_SECRET | Client secret for the OAuth confidential application (option B). | stored as a backend secret | Server environment only | Required (one auth method) |
| OAC_OAUTH_TOKEN_URL | Token endpoint used to exchange client credentials for an access token (option B). | https://idcs-<id>.identity.oraclecloud.com/oauth2/v1/token | Server environment only | Required (one auth method) |
| OAC_SCOPE | Requested OAuth scope granting read-only analytics access (option B). | urn:opc:resource:consumer::all | Server environment only | Optional |
Field Mapping — Volusia County Insights POC Master
How each dataset column lands on an executive panel. The adapter normalises these into the same typed view models the POC source produces, so the screens do not change when the feed does.
| KPI — Budget Actual | GL_ACTUAL_AMOUNT | SUM, filtered to fiscal period | KpiPoint(budgetActual).value | Compared against GL_REVISED_BUDGET for the variance hint. |
|---|---|---|---|---|
| KPI — Budget Actual | GL_REVISED_BUDGET | SUM, filtered to fiscal period | KpiPoint(budgetActual).hint | Drives the over/under tone on the card. |
| KPI — Contract Revenue | CONTRACT_REIMBURSEMENT_AMOUNT | SUM by CONTRACT_ID, fiscal period | KpiPoint(contractRevenue).value | Reconciled billing amount, not invoiced-to-date. |
| KPI — Overtime Cost | PAY_OT_AMOUNT | SUM where PAY_CODE in OT set | KpiPoint(overtimeCost).value | Timecard OT hours multiplied by the payroll OT rate at source. |
| KPI — Fully Burdened Event Cost | EVENT_BURDENED_COST | SUM where EVENT_ID is not null | KpiPoint(eventCost).value | Base pay + OT + benefit burden as computed in the dataset. |
| Budget vs Actual by Department | DEPARTMENT_NAME, GL_REVISED_BUDGET, GL_ACTUAL_AMOUNT | SUM grouped by DEPARTMENT_NAME | BudgetBar.department / budget / actual | Variance is derived client-side as actual − budget. |
| Overtime by Unit | UNIT_NAME, DIVISION_NAME, PAY_OT_AMOUNT, PAY_OT_HOURS | SUM grouped by UNIT_NAME | UnitBar.unit / division / otCost / otHours | Units with zero OT in the period are dropped before ranking. |
| Event Cost Summary & Drill-in | EVENT_ID, EVENT_NAME, EVENT_CATEGORY, EVENT_START_DATE, EVENT_END_DATE, EVENT_BURDENED_COST, PAY_OT_HOURS, EMPLOYEE_ID | SUM / COUNT DISTINCT grouped by EVENT_ID | EventSummaryRow.* and EventDrill.rows | Drill-in re-queries the same dataset filtered to one EVENT_ID, grouped by EMPLOYEE_ID. |
| At-Risk Exceptions | EXCEPTION_ID, EXCEPTION_TYPE, EXCEPTION_SEVERITY, EXCEPTION_AMOUNT, EXCEPTION_STATUS, EXCEPTION_DATE | Row-level, filtered to STATUS = Open, ranked by severity then amount | RiskItem.* | Severity vocabulary must map to High / Medium / Low before rendering. |
Validation Before Switching
Run these comparisons against a live OAC response for the selected period. Every row must be an exact match or within tolerance before the adapter is pointed at OAC.
| Budget actual, all departments | $114,903,472 | — | $1,000 | Awaiting live response | SUM(GL_ACTUAL_AMOUNT) grouped by DEPARTMENT_NAME must tie to the POC ledger total. |
|---|---|---|---|---|---|
| Overtime cost, all units | $843,290 | — | $500 | Awaiting live response | SUM(PAY_OT_AMOUNT) across units must tie to the POC overtime total. |
| Overtime hours, all units | 18,010 | — | 10 | Awaiting live response | SUM(PAY_OT_HOURS) confirms the timecard join did not duplicate rows. |
| Fully burdened event cost | $311,520 | — | $500 | Awaiting live response | SUM(EVENT_BURDENED_COST) where EVENT_ID is not null. |
| Events in period | 5 | — | Exact | Awaiting live response | COUNT(DISTINCT EVENT_ID) must match exactly; a difference means a date-filter mismatch. |
| Open at-risk exceptions | 8 | — | Exact | Awaiting live response | Row count where EXCEPTION_STATUS = Open within the period. |