# 08Liter business glossary

Map between Korean business terms (what users say) and the underlying
DB tables / English identifiers (what tools accept).

## Core terms

| 한국어 (user says) | English / DB | Role |
|---|---|---|
| 법인 회원       | `partner` (B2B account) | The legal entity. `partner.id` = owning account id. |
| 브랜드           | `brand` | Marketing unit owned by a partner (N brands : 1 partner). `brand.partner_id`. |
| 법인 담당자     | `partner_admin` (contact) | Human inside the partner. **Email recipient.** Must have `email_verified_at`. |
| 캠페인           | `campaign` | A single marketing run by a partner. |
| 일반 회원 / 리뷰어 | `member` (B2C) | Read-only — analytics, dashboards, liter rankings. **Marketing send is blocked at the data layer.** |
| 리터             | `liter` | Loyalty currency. `member_liter_transaction` is the ledger. |

## Mapping rules (tool callers MUST follow)

- "브랜드 목록" → `search_brands` (returns brand rows joined to partner).
- "이 법인에게 메일 보내" → recipient is `partner_admin.email`,
  `externalId` is `partner.id`. **Never** put `member.id` in
  `externalId` of write tools.
- "리뷰어 / 일반회원 / 멤버 분석" → `get_ddl` to discover columns,
  then `execute_read_sql` against `member`,
  `member_liter_transaction`, `campaign_apply`, `campaign_review`.
  Reports / dashboards welcome.
- "리뷰어한테 메일 보내" → not a thing here. The system is B2B-send-only;
  offer the analytics alternative.
- Never invent an email — use only `primary_contact_email` from
  `search_brands` or a row from `search_partner_contacts`.

## Status codes (`campaign.status_code`)

| Code | Korean | English |
|------|--------|---------|
| `1206` | 참여자 모집중 | Accepting applies |
| `1208` | 심사 중 | Under review |
| `1209` | 완료 | Closed |
| `1210` | 취소 | Cancelled |
| `1211` | 반려 | Rejected |
