---
# System prepended metadata

title: Vouchers Module

---

# Vouchers Module

## Story

* As an admin, I want to create offers that are:
    * Only available to specific users
    * automatically activated / expired for the attached users according to individual starts_at and ends_at time stamps

## Tables

### Voucher

* t.bigint id
* t.bigint offer_id
* t.string user_id
* t.string phone_number
* t.datetime starts_at
* t.datetime ends_at
* t.timestamps

An admin can create a voucher, with either a user_id or a phone_number. Multiple vouchers can exist for the same user. Each voucher has it's own starts_at and ends_at timestamps. 

### Offer

We add the following rule: 

Entity: User
Method: has_voucher
Relation: is
Value: True

User.has_voucher checks for a voucher that is available. 
Each voucher can only be used once. 
The offer coupon_code itself can be used as the voucher code.