<!--
SPDX-License-Identifier: Apache-2.0
SPDX-FileCopyrightText: 2026 UpSkillZone
-->

# Refund and Outcome Credit Policy

This document is the canonical policy for refunds, partial refunds, and the
UpSkillZone-specific **outcome credit** mechanism. It supersedes any wording on
marketing pages, sales emails, or third-party listings. Where a learner's
written enrollment agreement diverges from this document, the more
learner-favourable wording applies.

The numbers in this policy are deliberate. Do not round, restate, or
"approximately" them in support replies. Quote them exactly.

---

## §1. Standard refund window

A learner may request an unconditional, no-questions-asked refund of paid
tuition if **either** of the following is true, **whichever occurs sooner**:

1. **14 calendar days** have not yet elapsed since the enrollment payment was
   captured (timezone: learner's billing-address timezone, fall back to UTC if
   unknown), **OR**
2. The learner has not yet started their **first Job Twin attempt** in the
   enrolled track.

The "first Job Twin attempt" is defined as the first time the learner clicks
**Start Attempt** on a Job Twin and the platform records a non-empty session
event in `job_twin_sessions`. Browsing the Job Twin catalogue, watching the
preview video, or opening the brief does not count.

A standard-window refund returns **100% of tuition paid**, in the original
currency, to the original payment instrument. There is no processing fee in §1.
The entrance assessment fee (see §4) is excluded.

---

## §2. The outcome credit mechanism

The outcome credit is the commercial differentiator of UpSkillZone. It exists
because we sell an outcome, not a course, and the policy must reflect that.

### §2.1 Triggering conditions

An outcome credit is **triggered** when **all three** of the following are
true:

1. The learner has **completed the program** — every required Job Twin in the
   enrolled track has at least one attempt graded at or above the track's
   pass threshold, and the credential has been issued.
2. The learner has **signed a hire attestation** — within the 6-month
   post-credential window, the learner countersigned an employer-initiated
   attestation in the `hire_attestations` table confirming start of paid
   employment in a role mapped to the track.
3. The learner has **failed the 90-day outcome attestation** — at the
   90-day-post-start checkpoint, the employer signs `"no"` or
   `"declined"` on the `outcome_attestation_90d` form (i.e., the role did not
   work out, the role ended, or the employer declines to confirm continued
   employment).

If condition 3 lands as `"yes"`, no outcome credit is owed — the outcome was
delivered.

### §2.2 What the learner receives

When triggered, the learner is owed, **at the learner's election**, exactly one
of:

- **Cash refund**: 100% of tuition paid, **minus a flat $200 USD processing
  fee**, returned to the original payment instrument. The $200 covers Stripe
  / RazorpayX irreversible fees, credential-issuance cost, and federation
  registry storage. It is not a margin line; it is a pass-through.
- **Track credit**: 100% of tuition paid, **with no $200 deduction**,
  applied as credit toward enrollment in any other UpSkillZone track within
  the next 24 months. Credit is non-transferable and non-cashable once
  elected.

The learner's election is final once submitted via the in-app outcome credit
form.

### §2.3 Time window to claim

The outcome credit must be claimed within **30 calendar days** of the date the
employer's 90-day outcome attestation is signed. After day 30, the right
expires. The platform sends reminders at T+0, T+7, T+21, and T+29 to the
learner's verified email.

### §2.4 What the platform does behind the scenes

When triggered and elected, the outcome credit pipeline:

1. Marks `enrollment.outcome_credit_state = 'elected_<refund|track_credit>'`.
2. Files a Stripe refund (or RazorpayX reversal) — see §5.
3. Revokes any pending placement-bonus payable to the hiring partner if the
   hiring contract attached such a bonus to the same hire event.
4. Leaves the learner's credential **untouched** — see §4.

---

## §3. Edge cases

### §3.1 No hire attestation was ever signed

If the learner completes the program but never signs a hire attestation
within the 6-month window, the outcome credit does not trigger — there is
no hire to fail. The learner is, however, eligible for the program's
**re-enrollment credit** (50% of tuition toward the next cohort of the same
track), which is documented in the enrollment agreement, not here.

### §3.2 Hire signed, but 90-day window has not elapsed

The outcome credit cannot be pre-claimed. If the learner believes the role is
about to end, they should wait for the 90-day attestation to land. If the role
ends at, say, day 65, the employer is asked to sign the attestation early
(`signed_early=true` flag), and the 30-day claim window in §2.3 starts from
that early signature.

### §3.3 Learner left voluntarily

If the learner resigned the role of their own initiative (employer signs
`"declined"` with `reason="learner_resigned"`), the outcome credit **still
triggers**. We do not adjudicate why the role ended; we adjudicate whether the
role landed. This is intentional and is the alignment-of-incentives clause —
see §7.

### §3.4 Employer non-response

If the employer fails to sign either `"yes"` or `"no"` within 30 days of the
90-day checkpoint despite three platform-sent reminders, the attestation is
auto-marked `"declined"` and treated as a §2.1.3 trigger. The learner is
notified.

---

## §4. What is **not** refundable

- The **entrance assessment fee** (currently $49 USD) is non-refundable under
  any clause of this policy. It pays for the rubric grader's time and the
  federation pre-check.
- The **credential**, once issued, is **permanent**. A refund under §2 does
  not retract, revoke, or invalidate the credential. The learner earned it;
  the refund is about the outcome, not the credential. The federation
  registry entry stays.
- Third-party fees the learner paid directly (e.g., a proctoring service the
  learner contracted on their own) are out of scope.

---

## §5. How refunds are processed

- **Stripe** (USD, EUR, GBP, AUD, CAD, SGD): a refund is filed against the
  original `charge_id`. Funds settle to the source instrument in
  approximately **T+5 business days**, where T is the day the refund is filed.
  Stripe's irreversible fees are absorbed by the $200 processing fee in §2.2
  or, in the §1 case, by UpSkillZone.
- **RazorpayX** (INR): a reversal is filed against the original payment
  reference. Funds settle to source in approximately **T+5 business days**.
- **Track credit** (no money movement): applied to the learner's account
  within 1 business day of election.

If the original payment instrument is closed or expired, the learner is asked
to provide a verified replacement. We do not wire to a different account
without identity re-verification.

---

## §6. Disputes

A learner who believes this policy was misapplied may file a dispute by
emailing **founders@upskillzone.com** with subject `REFUND DISPUTE — <enrollment_id>`.

The founders' team will:

1. Acknowledge within **2 business days**.
2. Review the enrollment, attestation, and refund records.
3. Issue a written decision within **14 calendar days** of the dispute being
   filed.

If the dispute is upheld, any owed amount is paid within **5 business days**
of the decision. If denied, the written decision includes the specific clause
of this policy that governs the outcome.

Chargebacks initiated before §6 has been exhausted will be defended; we ask
learners to give us the 14-day window first.

---

## §7. The economic logic

Most edtech operates on the same model: tuition is paid up front, the
provider is paid regardless of whether the learner gets hired or stays hired,
and the provider's incentive is to **enroll** rather than to **place**.

UpSkillZone is structured the opposite way. The outcome credit means:

- If a learner finishes, gets hired, and the role lasts past 90 days — we
  keep the tuition. That is the only scenario in which we do.
- If the learner never gets hired, we owe them the re-enrollment credit
  (§3.1), not the outcome credit, because we did not get a hire to anchor on.
- If the learner gets hired but the role doesn't land at 90 days — we refund
  tuition (minus pass-through costs) or convert it to a future track. Our
  margin on that learner goes to zero.

Concretely: our internal forecasting models tuition as **conditional revenue**
gated on the 90-day attestation, not as booked revenue at enrollment. That is
why finance reports tuition under deferred revenue until day 90+1 of the
hired learner's start date.

We publish this policy verbatim because the alignment is the product. A
learner choosing UpSkillZone over a competitor is choosing a provider whose
revenue is contingent on their employment landing. Anything that obscures
that — undisclosed processing fees, narrow time windows, hostile dispute
flows — undermines the differentiator and is therefore a bug, not a feature.

If you are a support agent reading this: when in doubt, refund. The cost of
an over-refund is the $200 fee and a Stripe fee. The cost of an
under-refund is the trust that this entire mechanism is built on.
