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

# deped-primitives

`deped-primitives` gives DepEd repositories one tested interpretation of shared
codes, names, hierarchies, school attributes, filters, metrics, and review
rules. Projects import the focused module they need instead of copying those
rules locally.

See the [DepEd Orchestrator](https://mv3.dev/deped-orchestrator/) for the full
repository graph and build order.

Provider contracts can be consumed through `ProviderOutputReader`, which binds
the producer identity and supported contract/schema window, resolves declared
SQLite paths inside the provider repository, validates public relations and
columns, delegates complete-receipt and selected output path/contract/hash
verification to `deped-runtime`, and opens the output read-only.

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

The package covers Philippine Standard Geographic Code (PSGC) identity,
administrative hierarchies, boundaries, school vocabulary, access scopes,
Structured Query Language (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.authority.policy` for shared immutable-policy freezing,
  required text, and canonical PSGC-ID validation.
- `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
just package
```

As a shared semantic library, Primitives has no repository-level data product:
`just build` reports that boundary, while `just package` builds the Python
distribution. `just preflight`, `just status --json`, and `just audit` provide
the same read-only operating surface as the data repositories.

Useful narrower commands:

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