# IPSC scoring on Scoring Services

> How hit factor, stage points, overall percentage and the combined table are computed from an imported scorecard. TDT and IDPA use time-plus instead.

Resumo: no IPSC, pontos do stage vêm de A/C/D menos penalidades; hit factor é pontos divididos pelo tempo; os pontos de stage na divisão são proporcionais ao melhor hit factor daquela pista. Overall é a colocação. Combinado é a auditoria pista a pista. TDT e IDPA ordenam pelo menor tempo, e o Match Editor não abre nessas provas.

These are the analysis rules the portal and the Match Editor use. They follow the usual IPSC hit-factor model. They are not a substitute for the current federation rulebook, and a resimulation can diverge from PractiScore when scorecards are incomplete.

## Points on one stage

Power factor on the shooter:

| Factor | Name | Charlie | Delta |
| --- | --- | --- | --- |
| Major | Maior | 4 | 2 |
| Minor | Menor | 3 | 1 |

Alpha is always 5. Then:

```
raw = (A × 5) + (C × charlie) + (D × delta)
penalties = (MISS + NS + PROC) × 10
stage_points_raw = max(0, raw - penalties)
```

- Miss (M) scores 0 as a zone and also costs 10. It is not a double penalty beyond that: relative to a perfect Alpha it costs the 5 you did not earn plus the 10.
- No-shoot (NS) and procedural (PROC) cost 10 each. They are not targets. They do not count in `A + C + D + MISS`.
- Points never go below zero after penalties.
- Invalid marks (`-`, `DNF`, `DQ`, empty) count as 0.

Hit factor:

```
hit_factor = stage_points_raw / time    when time > 0
hit_factor = 0                           when time is 0
```

Time is seconds. A zero time yields zero hit factor and zero stage points in the division.

## Stage points inside a division

For each stage, look only at shooters in that division.

1. `best_hit_factor` = highest hit factor on that stage in the division.
2. `max_stage_points` = `(A + C + D + MISS) × 5` for that shooter (every target an Alpha).
3. If `best_hit_factor` is above zero:

```
stage_points = (hit_factor / best_hit_factor) × max_stage_points
stage_points = min(stage_points, max_stage_points)
```

The leader of the stage in the division receives `max_stage_points`. Everyone else receives a share of that maximum, proportional to hit factor.

The Match Editor uses the target count on that shooter's own scorecard. PractiScore often uses the stage's designed maximum. When a card has fewer targets (partial DNF), the editor's maximum is smaller. Published overall numbers come from the import; a what-if in the editor can therefore differ slightly from the range software. Say so when the two disagree. Do not invent a third formula.

## Division total, percentage, place

- Division total = sum of stage points.
- Percentage = shooter total / best total in the division × 100, capped at 100. The leader is 100% when the math is recomputed.
- Place sorts by percentage descending, then total descending, then athlete name ascending.
- Until someone edits a card, the editor shows the percentage stored at import. After an edit, it recomputes percentage from the simulated totals.

PSBL (percentage of possible points) = division total / (all targets × 5) × 100.

Percent Alpha (`%A`) = Alphas / (A + C + D). Miss, no-shoot and procedural are outside that ratio.

## Overall versus Combined

| View | Path | Answers |
| --- | --- | --- |
| Overall | `/overall/{id}/{year}/{slug}` | Place, percentage, points, time in the division |
| Combined | `/combinado/{id}/{year}/{slug}` | A/C/D, penalties, time, hit factor and stage points, stage by stage |

Same imported match, two questions. A shooter can look strong on overall percentage and still have one stage that explains the gap. Use Combined, heatmaps or athlete detail for that stage. Do not call the combined table "the overall".

Category and class filters change who is on the board. Always name the division and, when relevant, the category.

## TDT and IDPA (time-plus)

TDT (Tiro de Defesa Tático) and IDPA are not hit-factor matches on this platform.

- Ranking prefers the lower total time.
- Zones and penalties add time; they do not build a hit factor.
- The Match Editor does not open. Use overall and time-based heatmaps (`/tdt`, `/idpa`, `/pages/tdt-time-plus`).
- Do not explain a TDT result with Alpha/Charlie hit factor.

## Citation

Report the metric you actually used: place in the division, stage hit factor, or time-plus total. Identify match, year and division. Label the source as imported results. Scoring formulas here explain the analysis; they do not certify the match.
