# 02 — Project Management

**Domain:** Project Management  
**BE:** Ashraful (Project/links) · Sharif (Project Type) · **FE:** Bablu  
**Category:** Already delivered (`project_categories`) — no new Phase-1 BE card.

## Features
Project Type · Project Category (exists) · Project · Project Status (enum) · Project↔Service

## Workstreams
Database · Backend · API Contract · Frontend · Tests

### PMS-API-1.1 — Project Types API Contract Lock

**Task ID:** PMS-API-1.1
**Domain:** 02/11
**Feature:** Project Type
**Workstream:** API Contract
**Task Title:** Project Types API Contract Lock
**Description:** NEW STRUCTURAL. Freeze CRUD + active list.
**Owner:** Sharif
**Lane:** C
**Priority:** P0
**Estimate:** 1.00h
**Dependency:** PMS-API-0
**Dependency Type:** HARD
**Specification Reference:** SRS §7; card 1.1-BE
**Business Rule Reference:** Unique name/company
**API Contract Reference:** Self
**Acceptance Criteria**
- Contract lists endpoints, payloads, errors, permissions
**Definition of Done:** In 11-api.md
**Git Ownership / File Ownership:** `project_types` → Sharif
**Git Conflict Risk:** LOW
**Parallelization Notes:** SOFT-unlocks 1.1-FE

_Detail card:_ `docs/projects/PMS_PHASE1_TASK_CARDS.md` → `PMS-API-1.1`

---

### PMS-1.1-BE — Project Types — Backend

**Task ID:** PMS-1.1-BE
**Domain:** 02. Project
**Feature:** Project Type
**Workstream:** Backend
**Task Title:** Project Types — Backend
**Description:** CRUD project_types.
**Owner:** Sharif
**Lane:** C
**Priority:** P0
**Estimate:** 5.00h
**Dependency:** PMS-0.1 HARD; PMS-API-1.1 SOFT
**Dependency Type:** HARD/SOFT
**Specification Reference:** SRS §7
**Business Rule Reference:** Type ≠ Category
**API Contract Reference:** PMS-API-1.1
**Acceptance Criteria**
- Duplicate name → 422
- IDOR blocked
**Definition of Done:** Global BE DoD
**Git Ownership / File Ownership:** `project_types`
**Git Conflict Risk:** LOW
**Parallelization Notes:** Parallel with 1.2-BE

_Detail card:_ `docs/projects/PMS_PHASE1_TASK_CARDS.md` → `PMS-1.1-BE`

---

### PMS-1.1-FE — Project Types — Frontend

**Task ID:** PMS-1.1-FE
**Domain:** 02. Project
**Feature:** Project Type
**Workstream:** Frontend
**Task Title:** Project Types — Frontend
**Description:** Types admin UI.
**Owner:** Bablu
**Lane:** D
**Priority:** P1
**Estimate:** 3.00h
**Dependency:** 0.1-FE HARD; API-1.1 SOFT; 1.1-BE SOFT
**Dependency Type:** HARD/SOFT/SOFT
**Specification Reference:** Card 1.1-FE
**Business Rule Reference:** N/A
**API Contract Reference:** PMS-API-1.1
**Acceptance Criteria**
- Permission gated
- API errors shown
**Definition of Done:** Global FE DoD
**Git Ownership / File Ownership:** FE types pages
**Git Conflict Risk:** LOW
**Parallelization Notes:** Mock from contract

_Detail card:_ `docs/projects/PMS_PHASE1_TASK_CARDS.md` → `PMS-1.1-FE`

---

### PMS-API-2.1 — Projects API Contract Lock

**Task ID:** PMS-API-2.1
**Domain:** 02/11
**Feature:** Project
**Workstream:** API Contract
**Task Title:** Projects API Contract Lock
**Description:** NEW STRUCTURAL.
**Owner:** Ashraful
**Lane:** A
**Priority:** P0
**Estimate:** 1.50h
**Dependency:** PMS-API-0
**Dependency Type:** HARD
**Specification Reference:** SRS §6
**Business Rule Reference:** BR-01
**API Contract Reference:** Self
**Acceptance Criteria**
- Status enum + FK rules documented
**Definition of Done:** In 11-api.md
**Git Ownership / File Ownership:** `projects` → Ashraful
**Git Conflict Risk:** LOW
**Parallelization Notes:** Unlocks 2.1-FE early

_Detail card:_ `docs/projects/PMS_PHASE1_TASK_CARDS.md` → `PMS-API-2.1`

---

### PMS-2.1-BE — Project CRUD — Backend

**Task ID:** PMS-2.1-BE
**Domain:** 02. Project
**Feature:** Project
**Workstream:** Backend
**Task Title:** Project CRUD — Backend
**Description:** Replace stub ProjectController with JSON API.
**Owner:** Ashraful
**Lane:** A
**Priority:** P0
**Estimate:** 8.00h
**Dependency:** 0.1 HARD; categories exist; 1.1-BE SOFT nullable FK; API-2.1 SOFT
**Dependency Type:** HARD/SOFT
**Specification Reference:** SRS §6; card 2.1-BE
**Business Rule Reference:** BR-01; same-company FKs
**API Contract Reference:** PMS-API-2.1
**Acceptance Criteria**
- Invalid client → 422
- Cross-tenant blocked
**Definition of Done:** Global BE DoD; stub replaced
**Git Ownership / File Ownership:** `projects`; Project* BE
**Git Conflict Risk:** MEDIUM — shared Project routes/provider
**Parallelization Notes:** Day-1 spine start

_Detail card:_ `docs/projects/PMS_PHASE1_TASK_CARDS.md` → `PMS-2.1-BE`

---

### PMS-2.1-FE — Project List/Form — Frontend

**Task ID:** PMS-2.1-FE
**Domain:** 02. Project
**Feature:** Project
**Workstream:** Frontend
**Task Title:** Project List/Form — Frontend
**Description:** List/create/edit/detail shell.
**Owner:** Bablu
**Lane:** D
**Priority:** P0
**Estimate:** 6.00h
**Dependency:** 0.1-FE; API-2.1; 2.1-BE SOFT
**Dependency Type:** HARD/SOFT
**Specification Reference:** Card 2.1-FE
**Business Rule Reference:** Status enum match
**API Contract Reference:** PMS-API-2.1
**Acceptance Criteria**
- Create draft/active with dropdowns
**Definition of Done:** Global FE DoD
**Git Ownership / File Ownership:** FE projects
**Git Conflict Risk:** LOW
**Parallelization Notes:** Host for services/contracts tabs

_Detail card:_ `docs/projects/PMS_PHASE1_TASK_CARDS.md` → `PMS-2.1-FE`

---

### PMS-API-2.2 — Project Service Links API Contract Lock

**Task ID:** PMS-API-2.2
**Domain:** 02/11
**Feature:** Project Services
**Workstream:** API Contract
**Task Title:** Project Service Links API Contract Lock
**Description:** NEW STRUCTURAL.
**Owner:** Ashraful
**Lane:** A
**Priority:** P0
**Estimate:** 1.00h
**Dependency:** API-2.1; API-1.2
**Dependency Type:** HARD
**Specification Reference:** SRS §9
**Business Rule Reference:** BR-02
**API Contract Reference:** Self
**Acceptance Criteria**
- Attach/detach/list documented
**Definition of Done:** In 11-api.md
**Git Ownership / File Ownership:** `project_service_links`
**Git Conflict Risk:** LOW
**Parallelization Notes:** Unlocks 2.2-FE

_Detail card:_ `docs/projects/PMS_PHASE1_TASK_CARDS.md` → `PMS-API-2.2`

---

### PMS-2.2-BE — Project Service Links — Backend

**Task ID:** PMS-2.2-BE
**Domain:** 02. Project
**Feature:** Project Services
**Workstream:** Backend
**Task Title:** Project Service Links — Backend
**Description:** Attach services under project.
**Owner:** Ashraful
**Lane:** A
**Priority:** P0
**Estimate:** 6.00h
**Dependency:** 2.1-BE HARD; 1.2-BE HARD; API-2.2 SOFT
**Dependency Type:** HARD
**Specification Reference:** SRS §9
**Business Rule Reference:** BR-02
**API Contract Reference:** PMS-API-2.2
**Acceptance Criteria**
- Duplicate attach → 422
- Detach blocked if active contract (or documented)
**Definition of Done:** Global BE DoD
**Git Ownership / File Ownership:** `project_service_links`
**Git Conflict Risk:** LOW
**Parallelization Notes:** Critical path → contracts

_Detail card:_ `docs/projects/PMS_PHASE1_TASK_CARDS.md` → `PMS-2.2-BE`

---

### PMS-2.2-FE — Project Services Tab — Frontend

**Task ID:** PMS-2.2-FE
**Domain:** 02. Project
**Feature:** Project Services
**Workstream:** Frontend
**Task Title:** Project Services Tab — Frontend
**Description:** Services tab on project detail.
**Owner:** Bablu
**Lane:** D
**Priority:** P1
**Estimate:** 4.00h
**Dependency:** 2.1-FE HARD; API-2.2 SOFT; 2.2-BE SOFT
**Dependency Type:** HARD/SOFT
**Specification Reference:** Card 2.2-FE
**Business Rule Reference:** BR-02
**API Contract Reference:** PMS-API-2.2
**Acceptance Criteria**
- Add/remove; in-use errors shown
**Definition of Done:** Global FE DoD
**Git Ownership / File Ownership:** FE project services tab
**Git Conflict Risk:** LOW
**Parallelization Notes:** After project host screen

_Detail card:_ `docs/projects/PMS_PHASE1_TASK_CARDS.md` → `PMS-2.2-FE`

---
