| name | odoo-agile-scrum-devops |
| description | Comprehensive Agile Scrum framework for Odoo ERP development with Finance Shared Service Center workflows, OCA community standards, CI/CD automation, BIR compliance, and multi-agency task management. Use when planning Odoo sprints, managing Finance SSC operations, deploying to DigitalOcean, or coordinating work across agencies (RIM, CKVC, BOM, JPAL, JLI, JAP, LAS, RMQB). |
Odoo Agile Scrum DevOps Master Skill
Overview
This skill combines Agile Scrum methodologies with Odoo development best practices, Finance Shared Service Center operations, OCA community standards, and enterprise DevOps workflows. It's specifically designed for managing odoboo-workspace and InsightPulse AI projects with integration to Notion, Supabase, and DigitalOcean.
When to Use This Skill
Trigger this skill for:
- Planning Odoo module development sprints (odoboo-workspace, InsightPulse AI)
- Creating user stories for Finance SSC features (BIR compliance, month-end closing, travel & expense)
- Setting up CI/CD pipelines for Odoo 18/19 deployments
- Managing multi-agency workflows across RIM, CKVC, BOM, JPAL, JLI, JAP, LAS, RMQB
- Integrating Odoo with Notion task management via MCP tools
- Deploying to DigitalOcean (project ID: 29cde7a1-8280-46ad-9fdf-dea7b21a7825)
- Connecting Odoo to Supabase (project: spdtwktxdalcfigzeqrz) for pgvector operations
- Implementing OCA module standards and contributing to OCA repositories
Project Context
Core Projects
- odoboo-workspace: Odoo 18/19 deployment with OCA modules, DigitalOcean hosting, Supabase integration
- InsightPulse AI (insightpulseai.net): Self-hosted Odoo ERP with AI document processing (PaddleOCR, RTX 4090)
- Finance SSC: Multi-agency Philippine tax compliance and month-end closing automation
Tech Stack
- ERP: Odoo 18/19 Community with OCA modules
- Cloud: DigitalOcean App Platform, Managed PostgreSQL, Spaces (S3)
- Database: Supabase PostgreSQL with pgvector, Qdrant vector database
- AI/ML: PaddleOCR-VL, Custom OCR models for BIR forms
- DevOps: Docker, GitHub Actions, pre-commit hooks
- Frontend: Vercel deployments for custom dashboards
- Orchestration: Docker Compose, SuperClaude multi-agent framework
Sprint Planning Framework
Sprint Cycle (2-week iterations)
Week 1: Planning & Development
Days 1-2: Sprint Planning
-
Backlog Grooming (use Notion MCP tools)
Use notion-fetch to retrieve sprint backlog from Notion database
Review and prioritize user stories with Product Owner
Estimate story points using Fibonacci sequence (1,2,3,5,8,13,21)
-
Sprint Goal Definition
- Define clear, measurable sprint goal
- Align with Finance SSC monthly objectives (month-end closing, BIR deadlines)
- Identify dependencies across agencies
-
Task Breakdown (use notion-create-pages)
- Break user stories into technical tasks
- Assign to team members or agencies
- Set up task tracking with External ID for deduplication
Days 3-8: Active Development
- Daily standup (async via Notion comments)
- Continuous integration via GitHub Actions
- Code review with OCA standards validation
Week 2: Review & Deployment
Days 9-10: Sprint Review & Demo
- Demo to stakeholders (Finance SSC team, agency representatives)
- Deploy to DigitalOcean staging environment
- Update sprint metrics in Notion
Days 11-12: Retrospective & Planning Prep
- Retrospective (What went well? What needs improvement?)
- Prepare backlog for next sprint
- Update documentation
User Story Templates
Finance SSC User Story Template
## User Story: [Feature Name]
**As a** [Finance Manager / Accountant / BIR Compliance Officer]
**I want** [specific functionality]
**So that** [business value / time saved / compliance achieved]
**Agency Impact:** [RIM / CKVC / BOM / JPAL / JLI / JAP / LAS / RMQB / All]
**Acceptance Criteria:**
- [ ] Criterion 1 (must be testable)
- [ ] Criterion 2 (must be measurable)
- [ ] Criterion 3 (must include compliance requirement if BIR-related)
- [ ] Automated tests written and passing
- [ ] Documentation updated in Notion
**Story Points:** [Fibonacci number]
**Priority:** [Critical / High / Medium / Low]
**Sprint:** [Sprint number and date range]
**Technical Notes:**
- Odoo module: [module_name]
- OCA dependencies: [list OCA modules]
- Supabase integration: [Yes/No, describe if yes]
- External APIs: [BIR, Notion, other]
**Definition of Done:**
- [ ] Code reviewed by 2 team members
- [ ] Passes pre-commit hooks (pylint-odoo, flake8)
- [ ] Unit tests coverage >= 80%
- [ ] Integration tests passing
- [ ] Deployed to staging and validated
- [ ] User acceptance testing completed
- [ ] Production deployment successful
- [ ] Monitoring alerts configured
Example: BIR Form 1601-C Automation
## User Story: Automated BIR Form 1601-C Generation
**As a** Finance Manager
**I want** automated generation of BIR Form 1601-C with employee withholding tax data
**So that** I save 3 hours per month and ensure 100% BIR compliance accuracy
**Agency Impact:** All (RIM, CKVC, BOM, JPAL, JLI, JAP, LAS, RMQB)
**Acceptance Criteria:**
- [ ] System reads employee payroll data from Odoo HR module
- [ ] Generates XML in BIR eFPS format (Form 1601-C)
- [ ] Validates ATP (Authorization to Print) requirements
- [ ] Creates audit trail in Odoo with document versioning
- [ ] Supports multiple agencies with separate TIN codes
- [ ] Email notification sent to Finance SSC manager upon generation
- [ ] PDF preview generated before submission
**Story Points:** 8
**Priority:** Critical
**Sprint:** Sprint 12 - Nov 1-15, 2025
**Technical Notes:**
- Odoo module: `finance_bir_compliance`
- OCA dependencies: `account`, `hr_payroll`, `report_xlsx`
- Supabase integration: No
- External APIs: BIR eFPS API (staging), Email service
**BIR Compliance Requirements:**
- Form must include: TIN, Taxpayer Name, Address, Return Period
- Withholding tax amounts must be rounded to 2 decimal places
- XML schema validation against BIR XSD
- ATP number must be printed on hard copy
**Definition of Done:**
- [x] Code reviewed by 2 team members
- [x] Passes pre-commit hooks
- [x] Unit tests coverage 85%
- [x] Integration tests with BIR staging API passing
- [ ] Deployed to staging and validated by Finance Manager
- [ ] UAT completed with sample data from all 8 agencies
- [ ] Production deployment planned for Nov 20, 2025
- [ ] Sentry monitoring configured for BIR API errors
Example: Travel Expense OCR Processing
## User Story: Receipt OCR with PaddleOCR Integration
**As a** Employee submitting travel expenses
**I want** to upload receipt photos that are automatically processed
**So that** I don't spend 15 minutes manually entering data per receipt
**Agency Impact:** All
**Acceptance Criteria:**
- [ ] Mobile upload interface accepts JPG/PNG/PDF
- [ ] PaddleOCR extracts: merchant name, date, total amount, tax amount
- [ ] Confidence score >= 90% for auto-approval, <90% flags for review
- [ ] Extracted data populates Odoo expense form fields
- [ ] Original image stored in DigitalOcean Spaces
- [ ] OCR results stored in Supabase with pgvector for similarity search
- [ ] Supports multiple languages (English, Tagalog)
**Story Points:** 13
**Priority:** High
**Sprint:** Sprint 13 - Nov 16-30, 2025
**Technical Notes:**
- Odoo module: `expense_management_ocr`
- OCA dependencies: `hr_expense`, `document_management`
- Supabase integration: Yes (pgvector for receipt deduplication)
- External APIs: None (self-hosted PaddleOCR on RTX 4090)
- Hardware: RTX 4090 optimization required
**Definition of Done:**
- [ ] Code reviewed by 2 team members
- [ ] GPU memory optimization completed (batch processing)
- [ ] 95% accuracy on test dataset (100 sample receipts)
- [ ] Response time < 3 seconds per receipt
- [ ] Deployed to staging with GPU server
- [ ] Performance testing under load (50 concurrent uploads)
- [ ] User documentation created with video tutorial
Odoo Development Standards
OCA Module Structure
Follow OCA community standards for all Odoo modules:
my_odoo_module/
├── __init__.py
├── __manifest__.py # Module metadata, dependencies, version
├── models/
│ ├── __init__.py
│ ├── model_name.py # Business logic, field definitions
│ └── model_name_view.xml # UI views
├── views/
│ ├── menu_items.xml
│ └── templates.xml
├── security/
│ ├── ir.model.access.csv # Access control
│ └── security_groups.xml
├── data/
│ └── data.xml # Master data
├── reports/
│ └── report_template.xml
├── static/
│ ├── description/
│ │ ├── icon.png
│ │ └── index.html
│ └── src/
│ ├── js/
│ └── css/
├── tests/
│ ├── __init__.py
│ ├── test_model.py
│ └── test_integration.py
├── i18n/ # Translations
│ ├── en_US.po
│ └── fil_PH.po # Filipino translation
├── README.rst
└── LICENSE
manifest.py Template
{
"name": "Finance BIR Compliance",
"version": "19.0.1.0.0",
"category": "Accounting/Localizations",
"summary": "Philippine BIR tax forms automation and compliance",
"author": "Jake Tolentino, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/l10n-philippines",
"license": "AGPL-3",
"depends": [
"account",
"hr_payroll",
"l10n_ph",
],
"data": [
"security/ir.model.access.csv",
"views/bir_form_views.xml",
"views/menu_items.xml",
"reports/bir_1601c_report.xml",
],
"demo": [
"demo/bir_form_demo.xml",
],
"installable": True,
"application": False,
"auto_install": False,
}
Git Workflow
Branch Naming Convention (OCA Standard)
git checkout -b 19.0-feature-finance_bir_compliance
git checkout -b 18.0-fix-expense_ocr_confidence
git checkout -b 19.0-refactor-multi_agency_reports
Commit Message Convention
git commit -m "[ADD] finance_bir_compliance: BIR Form 1601-C XML generator"
git commit -m "[FIX] expense_ocr: Handle rotated receipt images"
git commit -m "[REF] multi_agency: Optimize database queries for 8 agencies"
git commit -m "[I18N] finance_bir: Add Filipino translations for forms"
Pre-commit Hooks Setup
pip install pre-commit --break-system-packages
cat > .pre-commit-config.yaml << 'EOF'
repos:
- repo: https://github.com/OCA/pylint-odoo
rev: v8.0.20
hooks:
- id: pylint-odoo
args: ["--rcfile=.pylintrc"]
- repo: https://github.com/psf/black
rev: 23.3.0
hooks:
- id: black
args: ["--line-length=88"]
- repo: https://github.com/PyCQA/flake8
rev: 6.0.0
hooks:
- id: flake8
args: ["--max-line-length=88", "--extend-ignore=E203,W503"]
- repo: https://github.com/PyCQA/isort
rev: 5.12.0
hooks:
- id: isort
args: ["--profile=black"]
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
args: ["--maxkb=1024"]
EOF
pre-commit install
CI/CD Pipeline Configuration
GitHub Actions Workflow
Create .github/workflows/odoo-ci-cd.yml:
name: Odoo CI/CD Pipeline
on:
push:
branches: [main, develop, '**-feature-**', '**-fix-**']
pull_request:
branches: [main, develop]
env:
ODOO_VERSION: "19.0"
POSTGRESQL_VERSION: "15"
DO_PROJECT_ID: "29cde7a1-8280-46ad-9fdf-dea7b21a7825"
SUPABASE_PROJECT_ID: "spdtwktxdalcfigzeqrz"
jobs:
lint:
name: Code Quality Checks
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install --break-system-packages pre-commit pylint-odoo flake8 black isort
- name: Run pre-commit hooks
run: pre-commit run --all-files
- name: Run pylint-odoo
run: |
find . -name "*.py" -not -path "./venv/*" | xargs pylint-odoo --rcfile=.pylintrc
test:
name: Unit & Integration Tests
runs-on: ubuntu-latest
needs: lint
services:
postgres:
image: postgres:15
env:
POSTGRES_DB: test_db
POSTGRES_USER: odoo
POSTGRES_PASSWORD: odoo_test_password
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Odoo test image
run: |
docker build -t odoo-test:${{ env.ODOO_VERSION }} \
--build-arg ODOO_VERSION=${{ env.ODOO_VERSION }} \
-f Dockerfile.test .
- name: Run Odoo unit tests
run: |
docker run --rm \
--network host \
-e DB_HOST=localhost \
-e DB_PORT=5432 \
-e DB_USER=odoo \
-e DB_PASSWORD=odoo_test_password \