# Methodology — California Pharmacy Disciplinary Actions

## Universe

Enumerate every quarterly disciplinary-action page linked from the California State Board of Pharmacy disciplinary-action archive from 2005 Q1 through the release cutoff (2026 Q3 for Release 1).

The source-page period and the action's printed effective date are separate fields. Do not assume the printed date lies inside the nominal source quarter.

## Extraction

For each quarterly page:

1. preserve whether the record appears under Personal Licenses or Facility Licenses;
2. parse the published respondent/entity name;
3. parse the published license type and number when present;
4. parse the published case type and case number;
5. retain the published location when present;
6. retain the Board's action sentence(s) as `action_raw`;
7. parse the printed effective date when present;
8. attach the source quarter and source URL.

Applicant rows may legitimately have no issued license number.

## Action normalization

`action_normalized` is a conservative Persistfolio classification of explicit top-level language on the quarterly page. It does not infer charges, severity, cause, current license status, or legal outcome beyond the published action text.

Allowed values:

- `REVOKED`
- `REVOKED_STAYED_PROBATION`
- `REVOKED_STAYED`
- `VOLUNTARY_SURRENDER`
- `PUBLIC_REPROVAL`
- `APPLICATION_DENIED`
- `APPLICATION_GRANTED`
- `APPLICATION_GRANTED_PROBATION`
- `APPLICATION_GRANTED_PUBLIC_REPROVAL`
- `APPLICATION_WITHDRAWN`
- `ACCUSATION_WITHDRAWN`
- `ACCUSATION_DISMISSED`
- `STATEMENT_OF_ISSUES_WITHDRAWN`
- `STATEMENT_OF_ISSUES_DISMISSED`
- `APPEAL_DISMISSED`
- `REINSTATEMENT_GRANTED`
- `PETITION_GRANTED`
- `LETTER_OF_ADMONISHMENT`
- `CEASE_AND_DESIST`
- `RETIRED`
- `NO_DISCIPLINE`
- `COURT_ORDER_RESTRICTION`
- `PROBATION_EXTENDED`
- `SUSPENSION`
- `SUSPENSION_PROBATION`
- `OTHER`

Raw action language is always retained.

## Probation years

Populate `probation_years` only when the quarterly page explicitly states a numeric or written-number duration. Blank means not captured explicitly, not zero.

## Dates

Convert printed effective dates to ISO `YYYY-MM-DD`.

Two-digit years are interpreted within the source archive's 2005+ coverage. Obvious formatting variants such as `Decision effective date`, `Decision Effective:`, spaces around slashes, and an unambiguous missing slash in a numeric date may be normalized. Missing or ambiguous effective dates remain blank and are reported in QA. A printed date with a truncated or typo year (for example `9/7/201`) is ambiguous: it is left blank, counted in QA, and the printed text stays in `action_raw`.

## Layout exceptions

- If the Board page prints the location after the action sentence, it is still captured in `location_raw` and kept out of `action_raw`.
- If the page prints a license type without a number, or a number without a clear type, only what is printed is captured. A lowercase `int` license type is normalized to `INT`.
- A published entry for which the page prints no usable case number (no case label, or a label with the number missing) is, by default, not released. It is never merged into a neighbouring record; it is listed with its raw text in `build_report.json` (`entriesWithoutCaseNumber`) and counted in the quality report.
- Exception (DECISIONS.md #12): seven such entries were each verified individually against the Board's published page and are released with the missing case fields left blank (`case_number` and, where no label is printed, `case_type`). The list is fixed in the build script (`CASE_NUMBER_EXCEPTIONS`), the build fails if any of them stops matching the source, and no case number, label, date, license or action is inferred. Evidence is in `CASE_NUMBER_EXCEPTIONS.md`.
- Label-less lines that only co-list a respondent under another entry's shared block (no case number, location, action or date of their own) are not released. Their license identity is therefore absent from the release, although the neighbouring entry's action text (for example "the licenses are...") may refer to them.

## Primary key

`record_id` is a deterministic Persistfolio identifier derived from source period, entity scope, name, license type/number, case type/number, raw action, effective date, and source URL. It is not an official Board identifier.

## No decision-document parsing

V1 does not open or interpret the underlying legal decision PDF to enrich or correct the quarterly page, except to investigate a clearly broken source record during QA. If decision-by-decision legal interpretation becomes necessary for material coverage, stop and reassess the SKU.

## Exact duplicate source entries

When the Board page repeats an identical source action verbatim, Release 1 retains one row and records the excluded exact duplicate in release QA. Persistfolio does not fabricate separate identities for duplicate HTML/source entries.
