# Project plan — odoo_modules

Evidence date: 2026-10-08.

Source repository: `git@bitbucket.org:overdrive/odoo_modules.git`.

Inspected revision: `main` at `df1bfde` (2026-07-08) — `fix(dokploy): revert compose mounts to restore production uptime`.

This plan describes what the repository contains. It does not decide what the product should become.

## Product

`odoo_modules` is a custom Odoo 17 addon repository for Silicon Overdrive (production host named in compose as `https://sodoo.appnotify.co.za`). It is not a standalone application. It extends the official `odoo:17.0` image with six installable modules:

| Module | Application name | Role |
|---|---|---|
| `so_helpdesk` | Silicon Overdrive Helpdesk | Departmental service desk |
| `my_company` | My Company | Internal social hub |
| `jb_ai_assistant` | AI Assistant | Personal OpenAI chat (default bot name Udi) |
| `jb_timesheet` | JB Timesheets | Timesheet extensions, targets, EIT and Convergence |
| `jb_timesheet_v2` | Time Sheet V2 | Weekly planning workspace on top of `jb_timesheet` |
| `jb_mail_inbox` | JB Mail Inbox | Shared IMAP inbox with contact and CRM routing |

Provenance: **Implemented** in `addons/*/__manifest__.py`. Product framing for helpdesk, the hub, and the assistant is also **Documented** in `docs/so_helpdesk.md`, `docs/my_company.md`, and `docs/jb_ai_assistant.md`.

Authors recorded on manifests: Silicon Overdrive (`so_helpdesk`) and JB (the other five modules). License on every manifest: LGPL-3.

## Branch reality

Default branch is `main`. History on `main` is 23 commits, from `736ccb5` (2026-07-01, "Initial commit") to `df1bfde` (2026-07-08). No other branches were present on the remote HEAD that was cloned.

This documentation set is based on `main` at `df1bfde`.

The task-creation scan (2026-09-28) listed `nerd.html` and `sonar-project.properties` at the repository root. Neither file is in `main`. The root has `erd.html` instead. Provenance: **Unknown** — those scan-host files may have been untracked, or they were removed before `df1bfde`.

## Scope in the repository

In scope of what is implemented on `main`:

- Six Odoo 17 addons under `addons/`.
- Local development stack: `docker-compose.yml` (Postgres 15 + `odoo:17.0`).
- Production stack: `docker-compose.dokploy.yml`, startup script `scripts/odoo-start.sh`, production config `config/odoo.prod.conf`.
- One-time production database bootstrap from `work_scripts/production_sync/odoo_full.zip`.
- In-repo module docs under `docs/`, a changelog that covers only the AI assistant, an entity diagram page `erd.html`, and operational scripts under `work_scripts/`.

Out of scope of the code that was found, or not present as a committed application:

- Odoo core, Enterprise, or the standard Odoo Helpdesk app. `so_helpdesk` is a community module that depends on `base`, `mail`, `utm`, `product`, `portal`, `website`, and `resource`.
- Stock, delivery, or RMA pickings. `docs/so_helpdesk.md` states product returns are tickets with an optional product link only. Provenance: **Documented** and consistent with the module (no `stock` dependency).
- Automated CI. No `sonar-project.properties`, pipeline file, or test runner config was found. `work_scripts/` contains manual Python scripts named `test_*.py`.
- Auto-install of `jb_timesheet`, `jb_timesheet_v2`, or `jb_mail_inbox` on production boot. The startup script installs or upgrades `so_helpdesk`, `my_company`, and `jb_ai_assistant` only.

## System architecture

```text
Browser / portal
  → Odoo 17 (image odoo:17.0)
      → addons/  (extra-addons)
      → PostgreSQL 15 (database name used by bootstrap: odoo)
  → OpenAI chat completions (jb_ai_assistant)
  → IMAP mailboxes (so_helpdesk and jb_mail_inbox)
  → EIT HTTP API (manual timesheet push)
  → Convergence HTTP API (automatic timesheet push when configured)
  → CRM and Contacts (standard Odoo, required by jb_mail_inbox)
  → Project and HR Timesheet (standard Odoo, required by the timesheet modules)
```

Production is defined for Dokploy. The Odoo service command is `/odoo-start.sh`. The compose file sets `SODOO_WEB_BASE_URL` to `https://sodoo.appnotify.co.za`. Provenance: **Implemented** in `docker-compose.dokploy.yml`. Whether that host is the live site at the evidence date is **Unknown / Requires Confirmation** — the last commit on this line is 2026-07-08, and this review did not probe the host.

## Major components

| Component | Location | Role |
|---|---|---|
| Helpdesk | `addons/so_helpdesk/` | Teams, tickets, SLA, IMAP, portal, ratings |
| My Company | `addons/my_company/` | Feed, kudos, announcements, OWL hub |
| AI Assistant | `addons/jb_ai_assistant/` | OWL chat, OpenAI, card rails, admin oversight |
| JB Timesheets | `addons/jb_timesheet/` | Analytic-line extensions, reports, EIT, Convergence |
| Time Sheet V2 | `addons/jb_timesheet_v2/` | Weekly plans and a personal dashboard |
| Mail Inbox | `addons/jb_mail_inbox/` | IMAP sync, contact log notes, CRM leads |
| Local compose | `docker-compose.yml` | Dev database and Odoo ports 8069 / 8071 / 8072 |
| Dokploy compose | `docker-compose.dokploy.yml` | Production services and secrets via environment |
| Startup | `scripts/odoo-start.sh` | Runtime config, bootstrap, module install |
| Production dump | `work_scripts/production_sync/` | Zip and dump used to seed an empty production database |

## Milestones visible in Git

There is no separate project plan in the repository. The commit history is the implementation record.

| When | Commit | What landed |
|---|---|---|
| 2026-07-01 | `736ccb5`, `11745cf` | Initial repository |
| 2026-07-08 | `46516cd` | My Company hub and Dokploy deployment config |
| 2026-07-08 | `d91981c` through `91d7057` | Production database sync, bootstrap, `web.base.url` |
| 2026-07-08 | `2e32ec2` through `07fde26` | Helpdesk module, auto-install, internal-user access |
| 2026-07-08 | `150eb24` through `142f616` | Hub logo, display name, helpdesk logo |
| 2026-07-08 | `a6631f5`, `49184fc` | AI assistant and production auto-install |
| 2026-07-08 | `21bc5fb` through `df1bfde` | Dokploy mount fixes; tip reverts compose mounts to restore uptime |

`jb_timesheet`, `jb_timesheet_v2`, and `jb_mail_inbox` are on `main`. Their introduction relative to the 2026-07-01 initial commits was not separated into later feature commits in the 23-commit log that was read. Provenance: **Implemented**. Exact first-introduction commit for those three modules was not isolated beyond "present on `main`".

## Known dependencies

Odoo image and Postgres are pinned in compose: `odoo:17.0`, `postgres:15`.

Module dependency chains:

- `jb_timesheet_v2` depends on `jb_timesheet`, `hr_timesheet`, and `project`.
- `jb_timesheet` depends on `base`, `mail`, `hr`, `project`, `analytic`, and `hr_timesheet`.
- `jb_mail_inbox` depends on `base`, `mail`, `contacts`, and `crm`.
- `so_helpdesk` depends on `base`, `mail`, `utm`, `product`, `portal`, `website`, and `resource`.
- `my_company` depends on `base`, `web`, `mail`, and `hr`.
- `jb_ai_assistant` depends on `base`, `web`, and `mail`.

External systems (URLs are configuration, not hardcoded, except OpenAI's default base URL `https://api.openai.com/v1`):

- OpenAI-compatible chat completions.
- EIT billing API (`jb_timesheet.eit_api_url`, blank in seed data).
- Convergence time API (`jb_timesheet.convergence_api_url`, blank in seed data).
- One or more IMAP servers, configured per mailbox record.

What EIT and Convergence are, beyond the field labels in code, is **Unknown / Requires Confirmation**.

## Current project status

**Implemented** and present on `main` as of `df1bfde`. The changelog (`CHANGELOG.md`) records only `jb_ai_assistant` version `17.0.1.0.0`. Module versions on manifests are higher for several modules (`so_helpdesk` `17.0.2.1.0`, `jb_mail_inbox` `17.0.3.0.0`, `my_company` `17.0.1.10.0`). The changelog is incomplete relative to the tree.

In-repo roadmaps that are explicitly not in the current modules:

- My Company (`docs/my_company.md`): mention autocomplete, reactions, record tagging, embedded Discuss, moderation queue, digest email.
- AI Assistant (`docs/jb_ai_assistant.md`): image generation, email drafting, knowledge-base tools, streaming responses.

No open milestone document was found. Whether further work is planned outside this repository is **Unknown / Requires Confirmation**.

## Human review

- Confirm that `https://sodoo.appnotify.co.za` is still the production base URL.
- Confirm whether tracked `.env`, `work_scripts/production_sync/odoo_full.zip`, and `odoo_backup.dump` are supposed to be in Git. `.gitignore` lists `.env`, but the file is tracked.
- Confirm the meaning and ownership of the EIT and Convergence APIs.
- Confirm whether `nerd.html` and `sonar-project.properties` from the 2026-09-28 scan should exist.
