Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
f8ea09d
docs(spp_farmer_registry_demo,spp_mis_demo_v2): sync descriptions wit…
emjay0921 Mar 23, 2026
300854e
docs(spp_farmer_registry_demo,spp_mis_demo_v2): add generated READMEs
emjay0921 Mar 23, 2026
eccf65d
docs(spp_case_demo,spp_grm_demo): sync descriptions with code
emjay0921 Mar 23, 2026
7802878
docs(spp_case_demo,spp_grm_demo): add generated READMEs
emjay0921 Mar 23, 2026
5eecd02
docs(spp_mis_demo_v2): remove stale README.md, fix USE_CASES.md
emjay0921 Mar 23, 2026
c43a7ee
fix(spp_demo,spp_mis_demo_v2): convert farmer stories to households, …
emjay0921 Mar 25, 2026
d7ae3ce
fix(spp_mis_demo_v2): fix stale Input Subsidy reference in help text
emjay0921 Mar 25, 2026
e8a80c9
fix(spp_demo): hide obsolete demo generator settings from Settings UI
emjay0921 Mar 25, 2026
78ad283
fix(spp_demo,spp_mis_demo_v2): fix CI failures - test assertions and …
emjay0921 Mar 25, 2026
beeb977
fix(spp_demo): fix corrupted Jose Reyes Sr name from bulk replace
emjay0921 Mar 25, 2026
beed47d
docs(spp_mis_demo_v2,spp_farmer_registry_demo): regenerate READMEs wi…
emjay0921 Mar 25, 2026
9d87db3
docs: regenerate READMEs after rebase on 19.0
emjay0921 Mar 26, 2026
17caa21
fix(spp_mis_demo_v2): clarify household enrollment in USE_CASES, filt…
emjay0921 Mar 26, 2026
25198e6
fix(spp_demo,spp_mis_demo_v2): group naming, unique seeded names, pay…
emjay0921 Mar 26, 2026
05ab60c
feat(spp_mis_demo_v2): add compliance criteria to demo programs
emjay0921 Mar 29, 2026
1e3cf6b
fix(spp): add tomllib fallback for Python < 3.11
emjay0921 Mar 30, 2026
bef7ecc
fix(spp): support Python 3.9+ by removing 3.10 type union syntax
emjay0921 Mar 30, 2026
aa6da89
fix(spp_mis_demo_v2,spp_programs): eligibility CEL, CR approval workf…
emjay0921 Mar 31, 2026
6b3fbcf
feat(spp_mis_demo_v2): add locale-aware demographic data to demo gene…
emjay0921 Mar 31, 2026
91146e9
fix(spp_mis_demo_v2): correct locale names, add story area assignment…
emjay0921 Apr 6, 2026
3621e6b
fix(spp_mis_demo_v2): remove GRM references, clean up use case
emjay0921 Apr 7, 2026
acea04e
docs(spp_mis_demo_v2): restructure use case with story numbering and …
emjay0921 Apr 7, 2026
12702ed
docs(spp_mis_demo_v2): fill locale names, remove GRM, restructure use…
emjay0921 Apr 7, 2026
2106b15
docs(spp_mis_demo_v2): fill missing ages/genders, add geographic loca…
emjay0921 Apr 7, 2026
85ae4be
docs(spp_mis_demo_v2): add member tables to HH6 and HH7 for consistency
emjay0921 Apr 7, 2026
639ade9
feat(spp_mis_demo_v2): add area assignments for HH10-12, IND1-2 and r…
emjay0921 Apr 7, 2026
467a856
style(spp_mis_demo_v2): fix prettier formatting in USE_CASES.md
emjay0921 Apr 7, 2026
a064f47
style(spp_mis_demo_v2): apply prettier formatting to USE_CASES.md
emjay0921 Apr 7, 2026
770114e
fix(spp_mis_demo_v2): remove duplicate random import in demo generator
emjay0921 Apr 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions spp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,14 @@ import shutil
import subprocess
import sys
import time
import tomllib

try:
import tomllib
except ModuleNotFoundError:
try:
import tomli as tomllib
except ModuleNotFoundError:
tomllib = None
from pathlib import Path

try:
Expand Down Expand Up @@ -99,13 +106,15 @@ DEFAULT_CONFIG = {
def load_config() -> dict:
"""Load config from ~/.spp.toml, returning defaults if not found."""
config = DEFAULT_CONFIG.copy()
if CONFIG_PATH.exists():
if CONFIG_PATH.exists() and tomllib is not None:
try:
with open(CONFIG_PATH, "rb") as f:
user_config = tomllib.load(f)
config.update(user_config)
except (tomllib.TOMLDecodeError, OSError) as e:
warn(f"Could not load config from {CONFIG_PATH}: {e}")
elif CONFIG_PATH.exists() and tomllib is None:
warn("tomllib not available (Python < 3.11). Install 'tomli' or upgrade Python to load ~/.spp.toml config.")
return config


Expand All @@ -131,7 +140,7 @@ DEMO_PROFILES = {
}


def run(cmd: str | list, check: bool = True, capture: bool = False, **kwargs) -> subprocess.CompletedProcess:
def run(cmd, check: bool = True, capture: bool = False, **kwargs) -> subprocess.CompletedProcess:
"""Run a command with nice defaults."""
if isinstance(cmd, str):
kwargs.setdefault("shell", True)
Expand Down Expand Up @@ -909,7 +918,7 @@ def cmd_sql(args):
run(docker_compose("exec", "db", "psql", "-U", "odoo", "-d", db_name))


def _show_url(open_browser: bool = False) -> str | None:
def _show_url(open_browser: bool = False):
"""Get the running Odoo server URL."""
service, profile = _find_running_odoo()
if not service:
Expand Down
16 changes: 10 additions & 6 deletions spp_case_demo/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ OpenSPP Case Management Demo Data
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:39196739031b49c0d69e329806b940da071ca49472f130cd28ffd45eda6459e7
!! source digest: sha256:force_regen
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
Expand All @@ -24,16 +24,20 @@ OpenSPP Case Management Demo Data

Demo data generator for Case Management system. Creates realistic cases
with intervention plans, home visits, progress notes, and service
referrals. Includes 9 fixed demo stories for training and sales demos,
plus configurable random case generation for volume testing.
referrals. Includes 9 fixed demo stories plus 3 background cases for
training and sales demos, and configurable volume case generation using
Faker for locale-aware random data (non-deterministic — each run
produces different results).

Key Capabilities
~~~~~~~~~~~~~~~~

- Generate 9 fixed demo stories with predictable personas and case
progressions for consistent training scenarios
- Create random volume cases with configurable distribution percentages
for plans, visits, notes, and closures
progressions for consistent training scenarios, plus 3 background
cases (Fernandez Intake Pending, Johnson Assessment, Kim Case Closed)
for variety
- Create random volume cases using Faker (non-seeded) with configurable
distribution percentages for plans, visits, notes, and closures
- Link generated cases to existing registrants or create standalone
cases
- Backdate case records and related activities to simulate realistic
Expand Down
6 changes: 3 additions & 3 deletions spp_case_demo/readme/DESCRIPTION.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
Demo data generator for Case Management system. Creates realistic cases with intervention plans, home visits, progress notes, and service referrals. Includes 9 fixed demo stories for training and sales demos, plus configurable random case generation for volume testing.
Demo data generator for Case Management system. Creates realistic cases with intervention plans, home visits, progress notes, and service referrals. Includes 9 fixed demo stories plus 3 background cases for training and sales demos, and configurable volume case generation using Faker for locale-aware random data (non-deterministic — each run produces different results).

### Key Capabilities

- Generate 9 fixed demo stories with predictable personas and case progressions for consistent training scenarios
- Create random volume cases with configurable distribution percentages for plans, visits, notes, and closures
- Generate 9 fixed demo stories with predictable personas and case progressions for consistent training scenarios, plus 3 background cases (Fernandez Intake Pending, Johnson Assessment, Kim Case Closed) for variety
- Create random volume cases using Faker (non-seeded) with configurable distribution percentages for plans, visits, notes, and closures
- Link generated cases to existing registrants or create standalone cases
- Backdate case records and related activities to simulate realistic timelines over configurable day ranges
- Create intervention plans with multiple interventions across case lifecycle stages
Expand Down
16 changes: 10 additions & 6 deletions spp_case_demo/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -367,20 +367,24 @@ <h1 class="title">OpenSPP Case Management Demo Data</h1>
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:39196739031b49c0d69e329806b940da071ca49472f130cd28ffd45eda6459e7
!! source digest: sha256:force_regen
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/license-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OpenSPP/OpenSPP2/tree/19.0/spp_case_demo"><img alt="OpenSPP/OpenSPP2" src="https://img.shields.io/badge/github-OpenSPP%2FOpenSPP2-lightgray.png?logo=github" /></a></p>
<p>Demo data generator for Case Management system. Creates realistic cases
with intervention plans, home visits, progress notes, and service
referrals. Includes 9 fixed demo stories for training and sales demos,
plus configurable random case generation for volume testing.</p>
referrals. Includes 9 fixed demo stories plus 3 background cases for
training and sales demos, and configurable volume case generation using
Faker for locale-aware random data (non-deterministic — each run
produces different results).</p>
<div class="section" id="key-capabilities">
<h1>Key Capabilities</h1>
<ul class="simple">
<li>Generate 9 fixed demo stories with predictable personas and case
progressions for consistent training scenarios</li>
<li>Create random volume cases with configurable distribution percentages
for plans, visits, notes, and closures</li>
progressions for consistent training scenarios, plus 3 background
cases (Fernandez Intake Pending, Johnson Assessment, Kim Case Closed)
for variety</li>
<li>Create random volume cases using Faker (non-seeded) with configurable
distribution percentages for plans, visits, notes, and closures</li>
<li>Link generated cases to existing registrants or create standalone
cases</li>
<li>Backdate case records and related activities to simulate realistic
Expand Down
Loading
Loading