Outcome Owl provides operational visibility into your business processes. Most of that visibility comes from a small set of attributes — identifiers, statuses, timestamps, business categories — none of which need to contain personal, regulated, or otherwise sensitive content to be useful. This document is for the privacy officer, compliance officer, security architect, or operations leader deciding what data should flow into Outcome Owl. The recommendations here are not requirements imposed by the platform — they are hygiene patterns that let you keep regulated content out of an external observability tool while still getting full value from the analytics, deviation detection, and process visibility the platform delivers.
01 — The Platform Side
These are the privacy-relevant facts about how Outcome Owl is deployed. They are deployment defaults, not negotiated per-customer terms.
| Property | What this means |
|---|---|
| Single-tenant deployment | Each customer runs on dedicated AWS infrastructure such as a dedicated database, application servers, S3 buckets, and VPC. No customer's data is co-mingled with any other customer's data at any layer. |
| Customer-controlled data flow | Outcome Owl receives data your systems push to it. The platform does not pull data from your environment. You decide what attributes are populated and what values they contain. |
| Optional IP allowlisting | The UI and API entry points can be restricted to specific IP ranges (e.g. corporate offices, VPN, or defined network ranges) so the deployment is reachable only from your approved networks. |
| Standard PostgreSQL storage | Data is stored in standard relational tables, not a proprietary format. Export at any time, in any volume, by standard SQL or CSV. There is no vendor format converting your data into something only Outcome Owl can read. |
| Encryption | TLS in transit. Encryption at rest on both RDS and S3 per AWS security posture. |
| Configurable retention | Restatement history and intake staging records each have independent retention policies (1–3,650 days); data is automatically purged on the schedule you configure. Audit logs and session records are purged to maintain SOC 2 compliance. |
| AWS Secrets Manager | Database credentials, JWT signing keys, SSO secrets, and API keys are stored in AWS Secrets Manager and retrieved at runtime. Not in code, not in environment files. |
| Audit trail | Every authentication event, configuration change, user account modification, and administrative action is recorded with actor identity, timestamp, IP, and what changed. |
| No proprietary lock-in | If you leave the platform, you take your data. There is no proprietary export format. PostgreSQL is open and standard. |
02 — The Frame
A useful frame for the privacy conversation:
| Concern | Who owns it |
|---|---|
| What the platform does with whatever it receives (encryption, access control, audit trail, retention, isolation). | Platform. Covered in section 1. |
| What you choose to send into the platform in the first place. | Customer. Covered in sections 3, 4, and 5. |
The architectural side (platform) is fixed by deployment. The data side (customer) is fully under your control. Most privacy and regulatory questions reduce to a single design choice: what attributes should we populate, and with what values? The default answer for regulated organizations is surrogate identifiers and process metadata only. The rest of this document explains how to apply that default.
03 — The Data Side
Every Observation has system-defined fields (UUIDs, timestamps, statuses) and customer-defined Attributes (name/value pairs you populate). This table classifies the most common attribute categories and recommends a hygiene pattern for each.
| Category | Examples | Recommended Hygiene |
|---|---|---|
| Process identifiers | ObservationID, ParentObservationID, OriginatingObservationID | Use surrogate IDs — hash or tokenize the natural business key (claim number, loan number, member ID). The chain-assembly logic depends on the IDs being stable and unique within your deployment, not on them being human-readable. |
| Process statuses | "Pending Adjudication," "Awaiting Documentation," "Paid," "Denied" | Send as-is. Status values are operational, not regulated. They are the primary grouping dimension for analytics. |
| Timestamps | Process step start / end timestamps | Send as-is. Timestamps are not regulated content. |
| Business categories | Claim type, region, product line, network tier, channel, geography | Send as-is. These are the primary attributes for insight and lift analysis. They are not personal data. |
| Quantitative values | Allowed amount, paid amount, deductible, copay, cycle time | Send as-is for amounts and durations; tokenize if the value is itself an identifier (e.g. an account number masquerading as a number). |
| Personal identifiers | Member name, claimant name, borrower name, email, phone, SSN, DOB, address | Do not send. Use a tokenized member/claimant key instead. The platform never needs the cleartext name to assemble the process chain or compute analytics. |
| Clinical or financial detail | Diagnosis codes, procedure codes, prescription content, account balance, card data | Do not send. If you need to slice analytics by, say, "high-cost claim category," create a derived category attribute (e.g. a Cost Tier of "high," "medium," or "low") and send the category, not the underlying value. |
| Free text | Comments, custom notes, narrative descriptions | Be explicit about what is permitted. Free-text fields can hold any content; they are the most common path for regulated content to enter the platform unintentionally. Either restrict free-text fields to operational metadata (e.g. "Approved by SR adjuster after second review"), or disable free-text attributes entirely for sensitive process types. |
| System-of-origin tags | claims_platform_v3, eligibility_legacy, manual_intake | Send as-is. Useful for diagnosing data quality issues by source system. |
| External case references | A pointer back to the source system's record | Use a surrogate that maps to the source record only inside your environment. The platform does not need a look-up-able external ID; it needs a stable identifier. |
Hygiene by design, not by review. The most reliable privacy posture is "the platform never receives the regulated value in the first place." Tokenization, hashing, and category derivation should happen in your ingestion pipeline (the layer that publishes to Outcome Owl), not as a cleanup pass after data has already been sent. Review-after-ingestion is a remediation strategy; tokenization-before-ingestion is a privacy strategy.
04 — The Central Pattern
Surrogate identifiers are the central hygiene pattern for regulated-data customers. The pattern works as follows:
natural_business_key → stable_surrogate_id. The mapping never leaves your environment.The key property: the surrogate is stable (the same business record always maps to the same surrogate) and unique (no two business records map to the same surrogate). Chain assembly, analytics, and deviation detection all work identically on surrogates as on natural keys.
| Strategy | When to use | Notes |
|---|---|---|
| Hash of natural key (e.g. SHA-256) | Default for most customers. | Deterministic, repeatable, no mapping table needed if you accept that the hash is the surrogate. Caveat: if the natural key is low-entropy (e.g. a 9-digit SSN), the hash is brute-forceable; salt with a per-deployment secret if this matters. |
| UUID with mapping table | When you need to dissociate the surrogate from the natural key entirely. | Generate a fresh UUID per business record; store the mapping internally. Highest privacy posture. Requires the mapping infrastructure. |
| Format-preserving encryption (FPE) | When the surrogate must look like the natural key for legacy compatibility. | Specialized; usually overkill for observability. |
For most customers, the SHA-256 hash with a per-deployment salt is the right default. The salt makes the hash useless to anyone outside your deployment.
05 — The Biggest Hazard
Free-text fields (comments, custom narrative attributes) are the most common privacy hazard. They are unbounded, and operations staff naturally type whatever context they need — including protected health information (PHI), personally identifiable information (PII), and account-identifying detail — without realizing it is leaving the source system.
The platform itself does not parse, search, or analyze free-text content for analytics; free-text fields are display-only metadata. The cost of populating them with regulated content is therefore high (regulatory exposure) and the analytical benefit is low. The cost-benefit strongly favors keeping free-text minimal.
06 — By Framework
Outcome Owl's regulatory posture is framework-by-framework and is discussed directly with each prospective customer. The following defaults apply until that conversation is closed — they describe what to send if you are operating without a framework-specific commitment from Outcome Owl.
For SOC 2 (the customer's SOC 2, not Outcome Owl's), CCPA, NYDFS Cybersecurity Regulation, FFIEC, and other regulatory frameworks: the same first principle applies. Send process metadata, not regulated content. Where the framework requires a specific contractual posture (BAA, DPA, attestation, audit cooperation), discuss directly with Outcome Owl before sending data subject to that framework.
07 — Applied
A regional health plan wants observability into its claim adjudication workflow. The natural data model has member names, claim numbers, diagnosis codes, dollar amounts, and free-text adjuster notes. None of those need to enter Outcome Owl.
| Attribute | Value pattern |
|---|---|
| ObservationID | SHA256(salt + claim_number) — surrogate, stable, unique |
| ParentObservationID | Surrogate of the parent process step (intake → eligibility, eligibility → adjudication, etc.) |
| OriginatingObservationID | Surrogate of the claim intake event |
| Claim Type | "Inpatient", "Outpatient", "Pharmacy", "DME", "Behavioral Health" — categorized upstream |
| Network Tier | "In-Network", "Out-of-Network", "Tier 2" |
| State | Member's resident state (no street address) |
| Processing Queue | "Auto-Adjudicated", "Pended-Documentation", "Pended-Authorization", "Manual Review", "FWA Review" |
| Cost Tier | "<$500", "$500–5K", "$5K–50K", "$50K+" — categorized upstream from the actual dollar amount |
| Assigned Team | "Adjudication Team A", "Specialty Pricing", "Provider Relations" |
Result: the operations team sees adjudication SLA performance, pended-claim aging, network-tier patterns, FWA review throughput, and prompt-pay risk by state — all the analytics they need — without any PHI ever leaving the claims platform.
A regional lender wants observability into the loan origination pipeline. The natural data model has borrower SSNs, FICO scores, account numbers, and dollar amounts.
| Attribute | Value pattern |
|---|---|
| ObservationID | SHA256(salt + application_id) |
| Loan Type | "Personal", "Auto", "Mortgage", "HELOC", "Small Business" |
| Channel | "Branch", "Online", "Broker", "Direct Mail" |
| Processing Step | "Application Intake", "Document Verification", "Credit Pull", "Underwriting", "Appraisal Order", "Approval", "Funding" |
| Score Band | "720+", "680–719", "640–679", "<640" — derived from FICO |
| Loan Amount Band | "<$25K", "$25K-100K", "$100K-500K", "$500K+" |
| Submission Day | Day-of-week (useful for staffing analytics) |
| Assigned Underwriter | Surrogate ID, not name |
For a non-regulated process like B2B order fulfillment, the hygiene posture is lighter. Customer names may be acceptable as-is (B2B customer names are typically not regulated personal data in most jurisdictions). The defaults still apply: send process metadata, prefer categories over raw values, and be deliberate about free-text. But the regulated-vertical concerns above are not load-bearing for non-regulated B2B processes.
08 — Before You Send
Before sending the first observation to Outcome Owl from a regulated-data process:
Keep the natural business key inside your environment. Send the surrogate, the status, the category, and the timing — and get full process observability with nothing regulated leaving your systems.