rosterops
A deterministic, configurable, Polars-based pharma roster processing and validation engine.
rosterops ingests a baseline roster (or a single snapshot) plus optional
movement files — transfers, promotions, terminations, leave, hires/rehires,
temporary coverage — normalizes them into a canonical model, reconstructs the
expected roster as of a requested date, applies configurable business rules,
and returns validated Polars DataFrames with audit-ready reports.
It is a local-first data-processing library and CLI. It never writes back to a CRM, HR system, or database, requires no network access, and never fabricates historical events from a single snapshot.
Status
Beta (Phases 0–8 complete). process and validate commands are
implemented (Modes A/B), rules execute end-to-end, outputs include CSV/Parquet/JSON
and rosterops_report.xlsx, reconciliation and movement metrics are computed,
and the example scenario runs. See
IMPLEMENTATION_PHASES.md for the full tracker
and REQUIREMENTS.md for the operative specification.
Install
pip install -e ".[dev]" # development
pip install -e ".[excel]" # with Excel read/write support
pip install -e ".[pandas]" # with pandas interop
Requires Python 3.10+. Core dependencies: polars, pydantic, PyYAML.
Quick look
rosterops --help
rosterops --version
rosterops rules list
rosterops rules describe TRF-002
rosterops validate-inputs --config examples/config/scenario.yaml
from rosterops import RosterConfig
config = RosterConfig.from_file("examples/config/scenario.yaml")
print(config.data.grain)
Documentation
REQUIREMENTS.md— operative requirements: modes, domain model, effective-date semantics, the 86-rule catalogue, outputs, security, testing.IMPLEMENTATION_PHASES.md— phase-by-phase progress tracker with acceptance criteria, test matrices, and backlog.
Development
ruff check . && ruff format --check .
mypy src
pytest
License
MIT — see LICENSE.
Metadata
Release files for rosterops 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| rosterops-0.1.0.tar.gz | 125.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rosterops-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 222.5 kB
Release files / rosterops-0.1.0.tar.gz
| Download URL | rosterops-0.1.0.tar.gz |
|---|---|
| Size | 125.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e3d07c7a2544b7fe0258e362e33441daac58d589e702c5a028b7d67d055c58e3
|
|
BLAKE2b-256 checksum How to use checksums |
4023ca7d43608fbeb92afe76effe6b2adbf3ec80a7c927b2b8a17ccc60f4ad95
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.3
|
Release files / rosterops-0.1.0-py3-none-any.whl
| Download URL | rosterops-0.1.0-py3-none-any.whl |
|---|---|
| Size | 97.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2a066645568ff761b94af58bb89b746115672414895d1f43bab0981d9184098e
|
|
BLAKE2b-256 checksum How to use checksums |
89bff75b1a7102fc5a71d0cb50349240c886038ae0e5cef5216bf576ac95ea89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.3
|
Security for rosterops 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.