Internal Reference · INVSP
How the Oripa Banner Builder works
An Oripa (original pack) is a gacha-style banner: customers spend tokens to pull random prizes. This tool takes your real inventory, lets you pick a grand prize, and then automatically composes the rest of the banner into rarity tiers so every business rule holds at once — the right profit margin, the right perceived value, and a prize mix that feels good to pull.
Glossarium · key terms
Oripa 原パ
Short for original pack. A sealed gacha banner of mixed prizes. Customers buy pulls and receive a random item from the pool.
Pull
One draw from the banner. Each pull yields exactly one prize. A banner has a fixed number of pulls (the pull qty).
Token / pull P
The price of one pull, in rupiah. Must be a multiple of 5. Example: Rp 10.000 per pull.
Token value
A prize's price expressed in tokens, where 1 token = Rp 1.000. So price ÷ 1.000. A Rp 3.850.000 prize = 3.850 tokens.
Pull qty Q
Total number of prizes (pulls) in the banner. Must be a multiple of 50. Every prize quantity adds up to Q, the Final Chase included.
Token inflow T
Total money the banner collects if every pull sells: T = P × Q. Example: 10.000 × 1.000 = Rp 10jt.
Valuation
A prize's normal selling price. This is the number that builds the banner's perceived value and decides which rarity class it lands in.
COGS
Cost of goods sold — the weighted-average cost Kyou paid per unit (from item_stocks). Drives the gross-profit guard.
Banner value
The sum of valuation × qty across every prize in the banner — the total retail value being given away.
Multiplier
banner value ÷ token inflow. How much perceived value the banner returns vs. tokens collected. Must land in 120–150%.
Gross profit · GP
(inflow − total COGS) ÷ inflow. The real margin after paying for every prize. Must be ≥ 35%.
Prize pool
The curated set of inventory items you hand the builder. It only picks prizes from this pool — so it's the most important thing you assemble.
Days to Sell
Days to sell one unit over the item's life: age ÷ units sold all-time. Never sold → "Created Since" (days since the item was created).
Life Remaining
Days to Sell × Stock — days to clear current stock. Auto-fill only pulls items with Life Remaining > 100 days (slow movers with buffer — safe to lock into a pack).
Two numbers per prize, two different jobs. Valuation (selling price) is what the customer perceives they're winning — it drives the multiplier and the rarity bands. COGS (cost) is what Kyou actually pays — it drives gross profit. A banner can give away 135% of perceived value while still profiting 35%, because cost is far below retail.
The five rarity classes
Every prize is sorted into a class purely by its valuation relative to the pull price P. Cheaper items pad the volume; pricier items are the wins. The two thresholds are 0.70 × P and 1.30 × P.
Gutter
< 90% of P
Cheap, high-margin bulk filler — carries the pulls that keep gross profit up. Qty = the remainder.
Deuce
90–130% of P
Roughly "your token back". Qty ≈ 90% of stock, preferring items with stock > 5.
Strike
> 130% of P
Solid mid prizes, below the Chase tier. Qty ≈ 50% of stock.
Chase
top cluster
The desirable wins — the top value cluster (cut at the first big value gap). 4–10 variants, one each.
Final Chase
the grand prize
A single item with the highest valuation. You always pick this by hand.
Value ladder Gutter → Deuce → Strike → Chase → Final Chase · Strike is always strictly below Chase · Figure note: chase-total dominance is advisory (figures have a compressed value spread).
The math, in three formulas
Why both can hold at once. Suppose T = Rp 10jt. A 130% multiplier means the banner gives away Rp 13jt of retail value — but if those prizes only cost Rp 6,5jt, gross profit is (10 − 6,5) ÷ 10 = 35%. The customer feels a great deal; the business still profits. The tool searches for a prize mix where both stay in range.
The 16 SOP rules · live checklist
The tool checks all of these in real time as you build. Each shows ✓ green or ✗ red with the current number, so you always know exactly what's left to fix.
Inputs & totals
R1Token/pull is a multiple of 5.
R2Pull qty is a multiple of 50.
ΣAll prize quantities sum to Q (Final Chase included).
R16Every line qty is ≥ 1 and within stock.
Value & profit
R5Gross profit ≥ 35% (total COGS ≤ 65% of inflow).
R6Multiplier 120–150%.
Class bands & variants
R3⚠ Gutter is the bottom filler (below 90% of P). Advisory.
R4Every Deuce item is 90–130% of P.
R7Every Strike item is above the Deuce band and below the Chase tier.
R8Chase has 4–10 variants, qty 1 each.
R9Final Chase has the highest per-item valuation.
Chase dominance — advisory ⚠ for figures (compressed value spread)
R10⚠ Chase total > Gutter total.
R11⚠ Chase total > Deuce total.
R12⚠ Chase total > Strike total.
R13⚠ Chase total > Final Chase value.
Quantity ratios
R14Deuce + Strike qty ≥ 10% of the banner.
R15Gutter qty ≤ 75% of the banner.
How to use — step by step
Connect to Metabase
Open the tool from the Hub and log in with your Metabase credentials. It pulls every ready-stock, available item with a price — your prize candidates. (One-time setup: the oripa → main question ID must be set in the Hub Registry.)
Build the prize pool
Click + Add from inventory. Search by name/character, filter by price, category, series, or manufacturer, and hit + add on the items you want. To add specific items fast, paste IDs into Add by ID (separated by space, tab, or comma) — this reaches the whole catalog, not just the visible rows. The pool summary shows total prize value, token value, and average margin.
Recommend (or set) token price & pull qty
Hit 🎯 Recommend P & Q and the tool derives both from your pool: target inflow ≈ 2.1 × (Final Chase + Chase tier value), with the pull price anchored on your cheapest items. It lands the multiplier around 135% with profit headroom. You can override either field anytime — at the top or inside Banner Composition — and the banner re-balances live.
Pick the Final Chase
Choose the grand prize from the dropdown — sorted by value, highest first. This is always manual; the builder composes everything else around your choice.
Build or Auto-build
⚡ Auto-build classifies your pool, balances quantities, and tries up to 60 layouts to satisfy every rule (⇄ Shuffle for an alternative). + Build is the plain version — it just places the items you've selected into their tiers at qty 1, with no auto-fill and no rebalance, so you stay in full control.
Fill the missing tiers from inventory
You don't have to pre-load Gutter/Deuce/Strike into the pool. Curate just the premium prizes, build, then use the ⚡ Fill from inventory bar in Banner Composition. Figure rule: fills only pull items from the same series as the banner (the Final Chase's series) that have Life Remaining > 100 days — slow movers with enough stock buffer to lock into a pack, never your fast sellers. Choose the tier, optionally override the series or restrict a category, set how many variants, and it picks (cheapest-first for Gutter, nearest-pull for Deuce, highest-first for Strike/Chase) and rebalances. Auto-fill missing completes every empty required tier from the banner's series in one click.
Read the checklist & stats
The left panel shows multiplier, GP%, gutter / deuce-strike ratios, and the live 16-rule SOP check. Green means done. Any red rule tells you exactly what's off and by how much.
Fine-tune by hand
In the composition table, swap any item, change Deuce/Strike quantities, or + add / ✕ remove variants. Click the coloured tier dropdown on any row to move that item to another class (e.g. Chase → Strike, or promote one to ★ Final Chase). With auto-rebalance on, quantities re-balance after each edit to hold the multiplier; turn it off for full manual control. The checklist keeps validating either way.
Save & export
💾 Save stores the banner (one can be flagged active); ↓ XLSX exports every prize with valuation, COGS, quantities, totals, and the summary. Saved banners persist on the server.
Troubleshooting — what the messages mean
If a banner won't fully comply, it's almost always the pool vs. banner size. The builder tells you which; here's the fix.
🎯
Not enough Chase candidates
"Only N item(s)… need at least 4"
Add more mid/high-value prizes priced above the Deuce band and below your Final Chase — or pick a higher-valued Final Chase so more items fall beneath it.
🪙
No Deuce items
Deuce tier empty
Use ⚡ Fill → Deuce to pull items priced near the pull value (70–130% of P) from inventory. Deuce is what the rebalancer uses to tune the multiplier.
🧱
No Gutter filler
Gutter tier empty
Use ⚡ Fill → Gutter (or Auto-fill missing) to source a cheap item (below 70% of P). Gutter absorbs the leftover pulls to reach Q.
📈
Multiplier too high
R6 — above 150%
The banner is too small for its prizes. Raise the pull qty, or choose a less expensive Final Chase / Chase tier.
📉
Multiplier too low
R6 — below 120%
The pool can't give away enough value for this inflow. Add higher-value prizes, or lower the pull qty / token price.
💰
Gross profit below 35%
R5 — GP too thin
Your prize mix is too costly. Swap in higher-margin items (the pool panel warns when average margin is under 50%).
Rule of thumb. Build the banner around your prizes, not the other way round. Pick the grand prize and a handful of Chase items first, then size the token inflow so the multiplier lands mid-band — the gutter/deuce fillers do the rest.