Methodology

Nomicho · Methodology v1.0 · June 2026 · Correspondence: support@nomicho.jp

This page describes how Nomicho estimates blood-alcohol concentration (BAC), an intoxication state, an estimated range, a forward projection, and a next-morning hangover estimate. Every part is built on published research, cited inline below and listed in full at the end. It is written for anyone who wants to check our work — curious users, journalists, clinicians, and reviewers.

Estimate, not measurement. Nomicho is a self-tracking aid built on the drinks you log yourself. It is not a breathalyzer, not a fitness-to-drive authority, and not medical advice. Real values vary widely between people and situations. Never drive after drinking, even a little.

1. What it is, and what it is not

Given your physical profile and a timestamped list of drinks you logged (volume + ABV, optionally a sip duration and a food note), Nomicho computes a central BAC estimate in % w/v (grams of ethanol per 100 mL of blood — the unit of Japan’s 0.03% 酒気帯び運転 threshold), a lower and upper estimated range, an intoxication state (a word, not a number), a direction (rising / falling / flat), a projection of where the session is heading, and a separate hangover estimate for the morning after.

It is a pure calculation of its inputs: no network call, no measurement of your body. It never renders a “safe to drive” verdict, never makes a health claim, and once a session closes its peak is frozen (§13) so a later profile edit can’t rewrite history.

2. The governing principle: conservative direction of error

The most important property of the model:

Under-warning is the dangerous failure. When the model errs, it is biased to err toward a higher estimated BAC, an earlier warning, or a wider range — never the reverse.

This single idea drives most of the choices below: per-minute integration that clamps at zero rather than a closed form (which would understate next-day residual alcohol); an elimination rate set slightly below the healthy-population average (slower presumed clearance keeps alcohol “present” longer); a slow-metabolizer edge on the upper bound of the range; reliability penalties that only ever widen the range as your profile leaves the data the formulas were validated on; and the flush adjustment that moves warnings earlier for the large share of the Japanese population with a low-activity ALDH2 variant. Where a choice is not conservative, we say so (§14–§15).

3. Inputs

Collected once (required): sex, age (as a 5-year band → its midpoint), weight, height, and flush response (how easily you redden — a proxy for ALDH2 activity). Full date of birth is deliberately not collected: a ±5-year band shifts the estimate by about 3%, well inside the formulas’ own error and the noise in self-reported weight.

Optional: body-fat % (advanced setting — replaces the estimated body-water figure with a direct one); a per-session food note (what you’ve eaten and whether you’re eating now, each with a time); hours slept (hangover only); and a per-drink sip duration / finish time.

Collected but deliberately not used in the BAC math (v1): drinking frequency. Heavy chronic drinking modestly speeds elimination (via CYP2E1 induction; Cederbaum 2012), but a self-reported “daily” can’t distinguish an induced metaboliser from one-beer-with-dinner, and applying a speed-up on weak evidence would lower the estimate — the dangerous direction. So we don’t.

4. Pipeline

For a given moment, BAC is computed from every drink in the previous 24 hours:

Step 1  Distribution volume V (litres)        Watson (M) / Forrest (F) / body-fat override
Step 2  Pure-alcohol dose per drink (g)       volume × ABV × 0.789
Step 3  Per-drink absorption (g/min)          zero-order ramp × food bioavailability; optional sip-spread
Step 4  Elimination + integration            per-minute: BAC = max(0, BAC + absorbed/(10·V) − β/60)
Step 5  State mapping                        threshold ladder, flush-shifted (impairment tiers only)
Step 6  Estimated range                      slow-/fast-elimination envelope + peak-region width
Step 7  Direction / projection / pace        forward integration of existing drinks + a continuous pace stream

Each step below carries a confidence grade (High / Medium / Low) reflecting how well-grounded its parameters are. The parameters of each step are cited where they appear; the way they’re assembled — the per-minute numerical integration, the rolling 24-hour window, the clamp-at-zero — is our own implementation of the standard zero-order (Widmark) model, not a separate source.

5. Step 1 — Distribution volume V · Confidence: High

How much body water the alcohol spreads into. Sex-specific formulas, the modern forensic standard (Maskell et al. 2020).

Male — total body water (Watson, Watson & Batt 1980):

TBW (L) = 2.447 − 0.09516·age + 0.1074·height_cm + 0.3362·weight_kg
V (L)   = TBW / 0.806

Female — Forrest, Searle 2014 re-derivation:

BMI    = weight_kg / (height_m)²
Vd_kg  = 0.9367 − 0.0124·BMI      (litres of distribution per kg)
V (L)  = Vd_kg · weight_kg

Optional body-fat override (Walling & Schwartz 2024):

FFM (kg) = weight_kg · (1 − body_fat% / 100)
TBW (L)  = FFM · 0.732
V (L)    = TBW / 0.806

Constants: 0.806 — whole blood is ~80.6% water by mass (the standard forensic body-water-to-blood conversion); 0.732 — fat-free mass is ~73.2% water.

These formulas are best-validated for roughly BMI 18.5–30, age 20–60 (Maskell et al. 2020). Outside that band the central estimate drifts — and for a slim, low-BMI profile (common in the Japanese demographic) the height term tends to under-estimate BAC, the dangerous direction. The central estimate is left as-is (it’s our best central guess), but this regime is exactly what the slow-elimination edge (§10) and the reliability penalties (§10) exist to bracket on the upper bound.

6. Step 2 — Pure-alcohol dose · Confidence: High

pure_alcohol_g = volume_ml · (ABV% / 100) · 0.789

0.789 g/mL is ethanol’s density at 20 °C (NIST Chemistry WebBook) — closer to actual than the consumer-rounded 0.8. The dominant real-world error here is upstream of the model: your self-reported pour and strength. That’s inherent to any self-logging tool and is folded into the range as drink-mass noise (§10), not something the math can remove.

7. Step 3 — Absorption · Confidence: Medium–High

The most elaborate part of the model, and the part most specific to the Japanese context (eating while drinking is the norm). Each drink’s alcohol moves from stomach to blood along a zero-order ramp: a drink of G grams over a ramp of R minutes delivers G/R grams per minute until exhausted, so its peak falls at the end of the ramp. A bioavailability factor ≤ 1.0 discounts the alcohol lost to first-pass metabolism in the fed state.

Food-state parameters:

StateRamp (min)bioavailability (M)bioavailability (F)
Empty stomach301.001.00
Snack (~210 kcal)400.850.85
Full meal (~460 kcal)500.710.66

Ramps are anchored to measured fasting/snack time-to-peak data (Veasey et al. 2020; cross-checked against beverage-type time-to-peak in Mitchell et al. 2014); the full-meal ramp is set toward a typical ~460 kcal Japanese meal (Oshima et al. 2012) rather than a larger Western test meal. Empty-stomach bioavailability is 1.0 — we model no first-pass loss when fasted (the conservative, highest-peak assumption).

Food’s effect fades as the stomach empties — gastric emptying being the single largest source of person-to-person variation in absorption (Holt 1981). Each food note carries a time, and an intensity that decays from full protection back toward the fasted defaults — exponential for a snack (half-life ≈ 87 min, anchored to liquid-meal gastric emptying in Hopkins et al. 2013), and lag-then-linear for a full meal (a short trituration lag, then a gradual decay). “Eating now” instead ramps protection up over the meal before it begins to fade.

Sip-spread (finish time) · Confidence: Medium. By default a drink is one instant at the logged time. If you give a finish time, intake is spread evenly across that span (one sub-portion per minute, each running the same gastric walk, summed). Because spreading lowers the modelled peak — the anti-conservative direction — it is never applied silently: it needs your input (or an explicit opt-in default that discloses the trade-off), and is capped at 2 hours, since a sip duration is an unverifiable self-report and past ~2 h elimination could erase a real peak. The range always uses the gastric ramp, not the sip span, so opting in can never falsely narrow it.

When both “have eaten” and “eating now” apply, the model takes the more protective single effect, not the sum — which under-credits stacked food and so predicts a slightly higher peak. Deliberately conservative.

8. Step 4 — Elimination and integration · Confidence: High

β = 0.015 %/hr   (constant)

0.015 %/hr is a well-supported population average for moderate/social drinkers (Jones 2010). It sits slightly below healthy-cohort means, so presumed clearance is marginally slow — the over-warning direction. Elimination is treated as zero-order (constant rate), the forensic-standard Widmark treatment, valid across the BAC range this product operates in (Cederbaum 2012). No speed-up is applied for self-reported heavy drinking (§3).

BAC is built minute by minute over a rolling 24-hour window, so alcohol still present from yesterday is handled automatically:

BAC = 0
for each minute from window-start to now:
    absorbed = Σ (per-minute absorption from every active drink)
    BAC = max(0, BAC + absorbed/(10·V) − β/60)

The clamp-at-zero and per-minute walk matter: a closed-form shortcut would keep subtracting elimination across a period when BAC was already zero, and so under-estimate the next day’s starting BAC — the dangerous direction. Drinks logged more than 24 hours late are kept in your diary totals but excluded from the BAC reconstruction (they have long since metabolized to zero; injecting them would fabricate a past reading).

9. Step 5 — Intoxication state · Confidence: High (ladder) / Low (flush magnitudes)

This maps a BAC number to a word for the main UI; it does not change the number.

thresholds (% w/v) = 0.02, 0.05, 0.10, 0.15, 0.20
  sober          < 0.02
  feeling it     0.02 – 0.05
  buzzed         0.05 – 0.10
  drunk          0.10 – 0.15
  past it        0.15 – 0.20
  over the limit 0.20 – 0.25
  alcohol poisoning        0.25 – 0.30
  severe alcohol poisoning ≥ 0.30

Flush adjustment (ALDH2 proxy): for users who redden easily, the impairment thresholds are shifted down (× 0.80 for “a little”, × 0.60 for “strongly”), so warnings come earlier. About 40–50% of the Japanese population carry a low-activity ALDH2 variant (Chen et al. 2022; Japan MHLW e-Health Net) — acetaldehyde accumulates and the same physical BAC feels stronger, with effects (and hangover) reached at lower amounts (Yokoyama et al. 2005). The shift changes the felt-state word only, never the BAC number, because physical impairment at a given BAC is unchanged. The 0.80 / 0.60 magnitudes are deliberately cautious estimates (the literature supports a strong shift but doesn’t quantify it precisely), biased toward earlier warnings. The two poisoning tiers are clinical, BAC-keyed risks and are not flush-shifted.

The state words you see (sober, feeling it, buzzed, …) are Nomicho’s own plain-language vocabulary, not a clinical scale — chosen to describe a state without instructing on behaviour. The threshold values are anchored to Japan’s Road Traffic Act 0.03% 酒気帯び reference point and conventional behavioural-impairment bands rather than to a single study; like the flush magnitudes, they’re a deliberate, cautious mapping, not a literature-pinned constant.

10. Step 6 — Estimated range · Confidence: Medium

When the calculation is least certain, Nomicho shows a range instead of a single number. The range is a physiological envelope, not a statistical confidence interval — which is why the app labels it 推定範囲 (“estimated range”), never 信頼区間.

It is built from two real BAC trajectories around the central estimate — a slow metaboliser for the upper edge, a fast one for the lower — combined with a peak-region width:

slow      = integrate at β = 0.010   (slow metaboliser → upper edge)
fast      = integrate at β = 0.020   (fast metaboliser → lower edge)

peakWidth = combines a baseline (~0.13) with one-sided penalties that widen
            the range as BMI, age, weight, or recent drinking pace leave the
            validated centre

upper = centroid + √(slowΔ² + peakWidth²)
lower = max(0, centroid − √(fastΔ² + peakWidth²))

The slow-elimination edge clears zero later than the central estimate, so the upper bound stays above zero for a while after the centre has mathematically reached zero — answering “am I really clear yet?” cautiously, by construction. The elimination range (0.010–0.020 %/hr) comes straight from the published population spread (Jones 2010; Dettling et al. 2007); we deliberately do not skew it for the Japanese cohort, because the flush genetics act on acetaldehyde, not on the alcohol-elimination rate. The reliability penalties only ever widen, and only as your profile leaves the validation centre, following a CV-based error-propagation framework (Searle 2014); their exact coefficients (the ~0.13 baseline and the BMI/age/weight/pace penalties) are engineering estimates, not literature-pinned constants. The app shows a single number while the spread is small and switches to a range once it grows.

11. Step 7 — Direction, projection, and pace · Confidence: Medium / Low (pace)

A single calculation decides whether the next minute is rising, falling, or flat, so the on-screen arrow can’t disagree with the curve. The projection answers “where is this session heading?” by replaying your drinks to now and then integrating forward with a continuous flow at your observed pace — tracking the peak. It deliberately does not invent discrete future drinks (there’s no defensible “what size?” guess); the useful question is “still rising, or past the peak?”. Pace compares your in-session grams/hour to your own rolling average; it drives a gentle descriptor only and never feeds the BAC number.

This step carries no citation by design: the projection and pace logic are the app’s own engineering and a deliberate UX judgment (the ±25% “similar” pace band especially), not derived from published research. We’d rather say that plainly than imply a source that doesn’t exist.

12. Hangover estimate · Confidence: Low–Medium

This is explicitly a heuristic, not a pharmacokinetic model — a transparent, literature-informed scoring rule that outputs a 1–5 severity (Penning et al. 2012) to compare against your own morning report. It is the lowest-confidence part of the system. It combines a per-kg dose term, a sleep-debt term (Devenney et al. 2021), an acute-peak term, a congener proxy (by drink type — darker spirits score higher; Rohsenow et al. 2010), and how intoxicated you felt, with a flush multiplier applied only to the dose-driven terms (acetaldehyde load follows alcohol processed, not how you slept). Weights are informed by published hangover-severity research, where felt intoxication is the strongest single predictor (Mackus et al. 2020); even so, every slope and boundary is a v1 placeholder, not a calibrated value. An optional per-user factor, learned from your past actual-vs-predicted ratio and clamped to a safe range, personalises it over time.

13. Frozen history · Confidence: High

BAC is always recomputed from your drinks, never stored. So that a later profile edit can’t silently re-bend every past night’s chart, each session saves a snapshot of the profile inputs that produced its peak and freezes it when the session closes. A session’s recorded peak is reproducible from its own frozen inputs, not from whatever your profile says later.

14. Assumptions and simplifications

Consolidated, each with our claimed direction of error.

AssumptionDirection of error
Zero-order (linear-ramp) absorption instead of first-order uptakePeak slightly higher/earlier → conservative
Constant elimination rate; no slow-down near zero, no speed-up at high BACMinor; the slow-elimination edge covers the near-zero case
No speed-up for self-reported heavy drinkersNever speeds presumed clearance → conservative
Empty-stomach bioavailability = 1.0Assumes all fasted alcohol reaches blood → conservative
Food combined by most-protective effect, not summedUnder-credits stacked food → higher peak → conservative
Sip-spread assumes steady gastric kinetics; gated behind explicit input + 2 h capPeak slightly up → conservative
One ramp/bioavailability per food state; no ABV or carbonation dependenceMixed; a documented punt
Age as a 5-year band midpoint, not exact birth date~3% — negligible
Sex-binary formulas (others pick a formula)No validated neutral formula exists
Flush adjusts the felt-state word only, never the BAC numberCorrect by construction
Range baseline and penalties are engineering estimates, not a single published CIOne-sided widening; ~1σ target, not 95%

15. Known limitations

Owned, not hidden.

16. References

Distribution & body water

Pure-alcohol dose

Absorption & gastric emptying

Elimination

Flush response (ALDH2)

Hangover predictors

Confidence & range