<!-- AUTO-GENERATED by backend/scripts/generate_catalogs.py — do not edit by hand. Re-run the script after changing manifests, events, or permissions. CI fails if this file drifts. -->

# Modules catalog

Single source of truth for every module loaded into the running DentalPin instance. Generated from module manifests, `get_permissions()`, `get_event_handlers()`, and grep of `event_bus.publish` callsites.

Maintained by `backend/scripts/generate_catalogs.py`. CI fails if a manifest changes without re-generation.

## Summary

| Module | Version | Category | Depends | Install | Removable | Permissions | Emits | Consumes | FE layer |
|--------|---------|----------|---------|---------|-----------|-------------|-------|----------|----------|
| `accounting_export` | 0.1.0 | official | billing, payments | manual | yes | 2 | 0 | 0 | yes |
| `agenda` | 0.4.0 | official | patients, catalog, odontogram | auto | no | 4 | 11 | 0 | yes |
| `billing` | 0.1.0 | official | patients, catalog, budget, payments | auto | no | 3 | 3 | 1 | yes |
| `budget` | 0.1.0 | official | patients, catalog, odontogram | auto | no | 5 | 7 | 4 | yes |
| `catalog` | 0.1.0 | official | — | auto | no | 3 | 0 | 0 | yes |
| `clinical_notes` | 0.2.0 | official | patients, odontogram, treatment_plan, media, agenda | auto | no | 2 | 6 | 0 | yes |
| `copilot` | 0.1.0 | official | — | auto | yes | 5 | 3 | 1 | yes |
| `media` | 0.2.0 | official | patients | auto | no | 4 | 7 | 1 | yes |
| `migration_import` | 0.1.0 | official | patients, patients_clinical, clinical_notes, agenda, schedules, recalls, catalog, budget, odontogram, treatment_plan, billing, payments, media | manual | yes | 4 | 5 | 0 | yes |
| `notifications` | 0.1.0 | official | patients, agenda, budget, billing, catalog | auto | no | 8 | 7 | 6 | yes |
| `odontogram` | 0.3.0 | official | patients, catalog | auto | no | 4 | 7 | 0 | yes |
| `patient_timeline` | 0.1.0 | official | patients | auto | no | 1 | 0 | 35 | yes |
| `patients` | 0.1.0 | official | — | auto | no | 2 | 3 | 0 | yes |
| `patients_clinical` | 0.1.0 | official | patients | auto | no | 4 | 1 | 0 | yes |
| `payments` | 0.1.0 | official | patients, budget | auto | no | 4 | 3 | 2 | yes |
| `periodontogram` | 0.1.0 | official | patients, odontogram | manual | yes | 2 | 1 | 2 | yes |
| `recalls` | 0.1.0 | official | patients, agenda | auto | yes | 3 | 4 | 5 | yes |
| `reports` | 0.1.0 | official | patients, agenda, catalog, budget, billing, payments | auto | no | 3 | 0 | 0 | yes |
| `schedules` | 0.1.0 | official | agenda | auto | yes | 8 | 0 | 3 | yes |
| `treatment_plan` | 0.1.0 | official | patients, agenda, odontogram, catalog, budget, media | auto | no | 5 | 13 | 5 | yes |
| `verifactu` | 0.1.0 | official | billing, catalog | manual | yes | 5 | 1 | 1 | yes |
| `whatsapp_kapso` | 0.1.0 | community | notifications, patients | manual | yes | 2 | 0 | 0 | yes |

## Modules

### `accounting_export` — v0.1.0

Export invoices and payments for the accountant (gestoría).

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=False · removable=True
- **Depends:** `billing`, `payments`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `accounting_export.export.read`
  - `accounting_export.export.run`
- **Events emitted:** —
- **Events consumed:** —
- **Module CLAUDE.md:** [`backend/app/modules/accounting_export/CLAUDE.md`](../backend/app/modules/accounting_export/CLAUDE.md)

### `agenda` — v0.4.0

Appointments, scheduling, cabinets.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=False
- **Depends:** `patients`, `catalog`, `odontogram`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `agenda.appointments.read`
  - `agenda.appointments.write`
  - `agenda.cabinets.read`
  - `agenda.cabinets.write`
- **Events emitted:**
  - `agenda.visit_note_updated`
  - `appointment.cabinet_changed`
  - `appointment.cancelled`
  - `appointment.checked_in`
  - `appointment.completed`
  - `appointment.confirmed`
  - `appointment.in_treatment`
  - `appointment.no_show`
  - `appointment.scheduled`
  - `appointment.status_changed`
  - `appointment.updated`
- **Events consumed:** —
- **Module CLAUDE.md:** [`backend/app/modules/agenda/CLAUDE.md`](../backend/app/modules/agenda/CLAUDE.md)

### `billing` — v0.1.0

Invoices, payments, credit notes, PDF billing.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=False
- **Depends:** `patients`, `catalog`, `budget`, `payments`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `billing.admin`
  - `billing.read`
  - `billing.write`
- **Events emitted:**
  - `invoice.issued`
  - `invoice.paid`
  - `invoice.sent`
- **Events consumed:**
  - `payment.refunded`
- **Module CLAUDE.md:** [`backend/app/modules/billing/CLAUDE.md`](../backend/app/modules/billing/CLAUDE.md)

### `budget` — v0.1.0

Dental treatment quotes, versioning, signatures.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=False
- **Depends:** `patients`, `catalog`, `odontogram`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `budget.accept_in_clinic`
  - `budget.admin`
  - `budget.read`
  - `budget.renegotiate`
  - `budget.write`
- **Events emitted:**
  - `budget.accepted`
  - `budget.expired`
  - `budget.rejected`
  - `budget.reminder_sent`
  - `budget.renegotiated`
  - `budget.sent`
  - `budget.viewed`
- **Events consumed:**
  - `odontogram.treatment.performed`
  - `treatment_plan.budget_sync_requested`
  - `treatment_plan.treatment_added`
  - `treatment_plan.treatment_removed`
- **Module CLAUDE.md:** [`backend/app/modules/budget/CLAUDE.md`](../backend/app/modules/budget/CLAUDE.md)

### `catalog` — v0.1.0

Treatment catalog, categories, VAT types.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=False
- **Depends:** —
- **Frontend layer:** `frontend`
- **Permissions:**
  - `catalog.admin`
  - `catalog.read`
  - `catalog.write`
- **Events emitted:** —
- **Events consumed:** —
- **Module CLAUDE.md:** [`backend/app/modules/catalog/CLAUDE.md`](../backend/app/modules/catalog/CLAUDE.md)

### `clinical_notes` — v0.2.0

Polymorphic clinical notes (administrative, diagnosis, treatment, treatment plan) with author. Attachments delegated to media.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=False
- **Depends:** `patients`, `odontogram`, `treatment_plan`, `media`, `agenda`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `clinical_notes.notes.read`
  - `clinical_notes.notes.write`
- **Events emitted:**
  - `clinical_notes.administrative_created`
  - `clinical_notes.appointment_administrative_created`
  - `clinical_notes.appointment_clinical_created`
  - `clinical_notes.diagnosis_created`
  - `clinical_notes.plan_created`
  - `clinical_notes.treatment_created`
- **Events consumed:** —
- **Module CLAUDE.md:** [`backend/app/modules/clinical_notes/CLAUDE.md`](../backend/app/modules/clinical_notes/CLAUDE.md)

### `copilot` — v0.1.0

Conversational AI agent over DentalPin, scoped to the caller's permissions.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=True
- **Depends:** —
- **Frontend layer:** `frontend`
- **Permissions:**
  - `copilot.chat`
  - `copilot.configure`
  - `copilot.history.read`
  - `copilot.history.read_all`
  - `copilot.supervise`
- **Events emitted:**
  - `copilot.digest.sent`
  - `copilot.session.ended`
  - `copilot.session.started`
- **Events consumed:**
  - `appointment.cancelled`
- **Module CLAUDE.md:** [`backend/app/modules/copilot/CLAUDE.md`](../backend/app/modules/copilot/CLAUDE.md)

### `media` — v0.2.0

Patient documents, photos, X-rays + polymorphic attachments.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=False
- **Depends:** `patients`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `media.attachments.read`
  - `media.attachments.write`
  - `media.documents.read`
  - `media.documents.write`
- **Events emitted:**
  - `document.deleted`
  - `document.uploaded`
  - `media.attachment_linked`
  - `media.attachment_unlinked`
  - `media.pair_created`
  - `media.pair_removed`
  - `media.photo_uploaded`
- **Events consumed:**
  - `patient.archived`
- **Module CLAUDE.md:** [`backend/app/modules/media/CLAUDE.md`](../backend/app/modules/media/CLAUDE.md)

### `migration_import` — v0.1.0

Importa datos de pacientes, citas, presupuestos, pagos y documentos desde un archivo DPMF generado por dental-bridge.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=False · removable=True
- **Depends:** `patients`, `patients_clinical`, `clinical_notes`, `agenda`, `schedules`, `recalls`, `catalog`, `budget`, `odontogram`, `treatment_plan`, `billing`, `payments`, `media`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `migration_import.binary.write`
  - `migration_import.job.execute`
  - `migration_import.job.read`
  - `migration_import.job.write`
- **Events emitted:**
  - `migration.binary.resolved`
  - `migration.entity.persisted`
  - `migration.job.completed`
  - `migration.job.failed`
  - `migration.job.started`
- **Events consumed:** —
- **Module CLAUDE.md:** [`backend/app/modules/migration_import/CLAUDE.md`](../backend/app/modules/migration_import/CLAUDE.md)

### `notifications` — v0.1.0

Email templates, preferences, SMTP, event-driven sending.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=False
- **Depends:** `patients`, `agenda`, `budget`, `billing`, `catalog`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `notifications.logs.read`
  - `notifications.preferences.read`
  - `notifications.preferences.write`
  - `notifications.send`
  - `notifications.settings.read`
  - `notifications.settings.write`
  - `notifications.templates.read`
  - `notifications.templates.write`
- **Events emitted:**
  - `email.failed`
  - `email.sent`
  - `notification.delivered`
  - `notification.failed`
  - `notification.queued`
  - `notification.reply_received`
  - `notification.sent`
- **Events consumed:**
  - `appointment.cancelled`
  - `appointment.scheduled`
  - `budget.accepted`
  - `budget.sent`
  - `invoice.sent`
  - `patient.created`
- **Module CLAUDE.md:** [`backend/app/modules/notifications/CLAUDE.md`](../backend/app/modules/notifications/CLAUDE.md)

### `odontogram` — v0.3.0

Dental charting, tooth state, clinical treatments.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=False
- **Depends:** `patients`, `catalog`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `odontogram.read`
  - `odontogram.treatments.read`
  - `odontogram.treatments.write`
  - `odontogram.write`
- **Events emitted:**
  - `odontogram.condition.changed`
  - `odontogram.surface.updated`
  - `odontogram.tooth.updated`
  - `odontogram.treatment.added`
  - `odontogram.treatment.deleted`
  - `odontogram.treatment.performed`
  - `odontogram.treatment.status_changed`
- **Events consumed:** —
- **Module CLAUDE.md:** [`backend/app/modules/odontogram/CLAUDE.md`](../backend/app/modules/odontogram/CLAUDE.md)

### `patient_timeline` — v0.1.0

Patient timeline — unified activity log.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=False
- **Depends:** `patients`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `patient_timeline.read`
- **Events emitted:** —
- **Events consumed:**
  - `agenda.visit_note_updated`
  - `appointment.cancelled`
  - `appointment.checked_in`
  - `appointment.completed`
  - `appointment.confirmed`
  - `appointment.in_treatment`
  - `appointment.no_show`
  - `appointment.scheduled`
  - `budget.accepted`
  - `budget.expired`
  - `budget.rejected`
  - `budget.reminder_sent`
  - `budget.renegotiated`
  - `budget.sent`
  - `budget.viewed`
  - `clinical_notes.administrative_created`
  - `clinical_notes.diagnosis_created`
  - `clinical_notes.plan_created`
  - `clinical_notes.treatment_created`
  - `document.uploaded`
  - `email.failed`
  - `email.sent`
  - `invoice.issued`
  - `invoice.paid`
  - `media.pair_created`
  - `media.photo_uploaded`
  - `notification.reply_received`
  - `odontogram.treatment.performed`
  - `patient.medical_updated`
  - `treatment_plan.closed`
  - `treatment_plan.confirmed`
  - `treatment_plan.created`
  - `treatment_plan.item_completed_without_note`
  - `treatment_plan.reactivated`
  - `treatment_plan.treatment_completed`
- **Module CLAUDE.md:** [`backend/app/modules/patient_timeline/CLAUDE.md`](../backend/app/modules/patient_timeline/CLAUDE.md)

### `patients` — v0.1.0

Patient identity: name, contact, demographics, status.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=False
- **Depends:** —
- **Frontend layer:** `frontend`
- **Permissions:**
  - `patients.read`
  - `patients.write`
- **Events emitted:**
  - `patient.archived`
  - `patient.created`
  - `patient.updated`
- **Events consumed:** —
- **Module CLAUDE.md:** [`backend/app/modules/patients/CLAUDE.md`](../backend/app/modules/patients/CLAUDE.md)

### `patients_clinical` — v0.1.0

Normalized medical history, allergies, medications, emergency contacts.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=False
- **Depends:** `patients`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `patients_clinical.emergency.read`
  - `patients_clinical.emergency.write`
  - `patients_clinical.medical.read`
  - `patients_clinical.medical.write`
- **Events emitted:**
  - `patient.medical_updated`
- **Events consumed:** —
- **Module CLAUDE.md:** [`backend/app/modules/patients_clinical/CLAUDE.md`](../backend/app/modules/patients_clinical/CLAUDE.md)

### `payments` — v0.1.0

Patient-centric collections, allocations to budgets / on-account, refunds, patient ledger, and dental payment reports.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=False
- **Depends:** `patients`, `budget`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `payments.record.read`
  - `payments.record.refund`
  - `payments.record.write`
  - `payments.reports.read`
- **Events emitted:**
  - `payment.allocated`
  - `payment.recorded`
  - `payment.refunded`
- **Events consumed:**
  - `odontogram.treatment.performed`
  - `treatment_plan.item_session_completed`
- **Module CLAUDE.md:** [`backend/app/modules/payments/CLAUDE.md`](../backend/app/modules/payments/CLAUDE.md)

### `periodontogram` — v0.1.0

SEPA periodontal charting — snapshots, probing sites, BoP/PI/CAL indices.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=False · removable=True
- **Depends:** `patients`, `odontogram`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `periodontogram.read`
  - `periodontogram.write`
- **Events emitted:**
  - `periodontogram.snapshot.closed`
- **Events consumed:**
  - `odontogram.treatment.performed`
  - `patient.archived`
- **Module CLAUDE.md:** [`backend/app/modules/periodontogram/CLAUDE.md`](../backend/app/modules/periodontogram/CLAUDE.md)

### `recalls` — v0.1.0

Patient recalls: schedule call-backs, work the monthly call list, log attempts, auto-link booked appointments.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=True
- **Depends:** `patients`, `agenda`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `recalls.delete`
  - `recalls.read`
  - `recalls.write`
- **Events emitted:**
  - `recall.cancelled`
  - `recall.completed`
  - `recall.created`
  - `recall.snoozed`
- **Events consumed:**
  - `appointment.cancelled`
  - `appointment.completed`
  - `appointment.scheduled`
  - `patient.archived`
  - `treatment_plan.treatment_completed`
- **Module CLAUDE.md:** [`backend/app/modules/recalls/CLAUDE.md`](../backend/app/modules/recalls/CLAUDE.md)

### `reports` — v0.1.0

Cross-module reporting: billing, budgets, scheduling.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=False
- **Depends:** `patients`, `agenda`, `catalog`, `budget`, `billing`, `payments`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `reports.billing.read`
  - `reports.budgets.read`
  - `reports.scheduling.read`
- **Events emitted:** —
- **Events consumed:** —
- **Module CLAUDE.md:** [`backend/app/modules/reports/CLAUDE.md`](../backend/app/modules/reports/CLAUDE.md)

### `schedules` — v0.1.0

Clinic + professional operating hours, overrides, availability, and occupancy analytics.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=True
- **Depends:** `agenda`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `schedules.analytics.read`
  - `schedules.availability.read`
  - `schedules.clinic_hours.read`
  - `schedules.clinic_hours.write`
  - `schedules.professional.own.read`
  - `schedules.professional.own.write`
  - `schedules.professional.read`
  - `schedules.professional.write`
- **Events emitted:** —
- **Events consumed:**
  - `appointment.cancelled`
  - `appointment.scheduled`
  - `appointment.updated`
- **Module CLAUDE.md:** [`backend/app/modules/schedules/CLAUDE.md`](../backend/app/modules/schedules/CLAUDE.md)

### `treatment_plan` — v0.1.0

Patient treatment plans with budget + odontogram sync.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=True · removable=False
- **Depends:** `patients`, `agenda`, `odontogram`, `catalog`, `budget`, `media`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `treatment_plan.plans.close`
  - `treatment_plan.plans.confirm`
  - `treatment_plan.plans.reactivate`
  - `treatment_plan.plans.read`
  - `treatment_plan.plans.write`
- **Events emitted:**
  - `treatment_plan.budget_sync_requested`
  - `treatment_plan.closed`
  - `treatment_plan.confirmed`
  - `treatment_plan.created`
  - `treatment_plan.item_completed_without_note`
  - `treatment_plan.item_session_completed`
  - `treatment_plan.items_reordered`
  - `treatment_plan.reactivated`
  - `treatment_plan.status_changed`
  - `treatment_plan.treatment_added`
  - `treatment_plan.treatment_completed`
  - `treatment_plan.treatment_removed`
- **Events consumed:**
  - `appointment.completed`
  - `budget.accepted`
  - `budget.rejected`
  - `budget.renegotiated`
  - `odontogram.treatment.performed`
- **Module CLAUDE.md:** [`backend/app/modules/treatment_plan/CLAUDE.md`](../backend/app/modules/treatment_plan/CLAUDE.md)

### `verifactu` — v0.1.0

Cumplimiento Veri*Factu (AEAT) para clínicas en España.

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** official
- **Install policy:** installable=True · auto_install=False · removable=True
- **Depends:** `billing`, `catalog`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `verifactu.environment.promote`
  - `verifactu.queue.manage`
  - `verifactu.records.read`
  - `verifactu.settings.configure`
  - `verifactu.settings.read`
- **Events emitted:**
  - `verifactu.record.rejected`
- **Events consumed:**
  - `invoice.paid`
- **Module CLAUDE.md:** [`backend/app/modules/verifactu/CLAUDE.md`](../backend/app/modules/verifactu/CLAUDE.md)

### `whatsapp_kapso` — v0.1.0

WhatsApp para notifications vía Kapso (Meta Cloud API).

- **Author:** DentalPin Core Team
- **License:** BSL-1.1
- **Category:** community
- **Install policy:** installable=True · auto_install=False · removable=True
- **Depends:** `notifications`, `patients`
- **Frontend layer:** `frontend`
- **Permissions:**
  - `whatsapp_kapso.settings.read`
  - `whatsapp_kapso.settings.write`
- **Events emitted:** —
- **Events consumed:** —
- **Module CLAUDE.md:** [`backend/app/modules/whatsapp_kapso/CLAUDE.md`](../backend/app/modules/whatsapp_kapso/CLAUDE.md)
