Metadata-Version: 2.4
Name: deped-primitives
Version: 0.11.0
Summary: Shared DepEd PSGC, hierarchy, territory, SQL, and Marimo primitives.
Author-email: Marcelino Veloso III <marsveloso@gmail.com>
Requires-Python: >=3.14
Requires-Dist: deped-runtime>=0.5.0
Requires-Dist: polars>=1.42
Requires-Dist: pyyaml>=6.0
Requires-Dist: rich>=15.0
Provides-Extra: marimo
Requires-Dist: deped-runtime[marimo]>=0.5.0; extra == 'marimo'
Description-Content-Type: text/markdown

# deped-primitives

![Github CI](https://github.com/justmars/deped-primitives/actions/workflows/ci.yml/badge.svg)

`deped-primitives` is the shared semantic contract layer for the DepEd data
ecosystem. It centralizes reusable rules for PSGC identity, administrative
hierarchies, boundaries, school vocabularies, access scopes, SQL construction,
provider context, metrics, and review helpers.

It is intentionally small. Producer repos own source ingestion and artifacts;
consumer repos own products, notebooks, dashboards, and runtime state. This
package owns the deterministic interpretation rules that those repos should
not copy locally.

## Quick Start

```python
from deped_primitives.identity import GeoType, ancestor_codes, normalize_code
from deped_primitives.identity.codes import normalize_boundary_pcode_to_psgc_id
from deped_primitives.schools.names import clean_school_name
from deped_primitives.selection.access import AccessScope, scope_locks_from_access

assert normalize_code(" 13-3900-0000 ") == "1339000000"
assert ancestor_codes("1380610001", GeoType.BGY) == [
    "1300000000",
    "1380600000",
    "1380610000",
]
assert normalize_boundary_pcode_to_psgc_id("PH0102801") == "0102801000"
assert clean_school_name("baliwag nhs") == "Baliwag National High School"
assert scope_locks_from_access(
    AccessScope(level="regional", psgc_region_id="1300000000")
).locked_levels == ("region",)
```

Import specialized semantics from their owner modules rather than from the root
package:

```python
from deped_primitives.areas.boundaries import usable_area_boundary_components
from deped_primitives.authority.legislative import legislative_child_rollups
from deped_primitives.selection.providers import provider_context_sql
from deped_primitives.selection.navigation import build_territory_path
from deped_primitives.selection.search import SEARCH_TARGET_BY_KEY
```

Current shared semantics to check before copying local code:

- `deped_primitives.authority.governance` for DepEd source governance area IDs,
  canonical division authority ID grammar, division/school match keys,
  historical division-label aliases, and resolution/status vocabularies.
- `deped_primitives.selection.providers` and
  `deped_primitives.selection.provider_contracts` for school-keyed provider
  context and provider contract metadata.
- `deped_primitives.selection.marimo` for notebook region-group, territory, and
  area-scope controls. Use `deped-runtime` for CLI, SQLite, file, workbook, and
  other non-semantic runtime plumbing.
- `deped_primitives.selection.navigation` and
  `deped_primitives.selection.search` for application-neutral territory paths,
  sibling semantics, Directory targets, and literal matching policy.

## Documentation

- [Overview](docs/index.md) explains the domain flow and reading path.
- [Ecosystem](docs/ecosystem.md) explains sibling-repo ownership boundaries and
  what belongs in this package.
- [Status](docs/status.md) is the current capability map.
- [Package reference](docs/reference/package.md) lists the curated package
  surface and owner-module references.
- [Migration to 0.1](docs/migration-0.1.md) covers the current public import
  layout.

## Development

```sh
pre-commit run --all-files
just check
```

Useful narrower commands:

```sh
just test
uv run zensical build
uv run --extra marimo marimo check notebooks/*.py
```
