# HRMS Software Requirements Specification (SRS) ...
Criado em: 31 de julho de 2026
Respondido usando GPT-5.6 Thinking por Chat01
Criado em: 31 de julho de 2026
Respondido usando GPT-5.6 Thinking por Chat01
This document defines the functional and non-functional requirements for a custom Human Resource Management System (HRMS) delivered as a web app and mobile app.
The purpose of this SRS is to provide a build-ready functional foundation for designing, developing, testing, and launching a custom HRMS platform.
The HRMS platform will centralize employee data, HR operations, manager approvals, and employee self-service across web and mobile experiences.
The web app is the main operational workspace for admins, HR teams, recruiters, managers, and payroll users.
The mobile app is focused on daily employee and manager actions.
mermaidflowchart TD A[Login] --> B[Dashboard] B --> C[Employee Directory] B --> D[Attendance Monitor] B --> E[Leave Approvals] B --> F[Reports] B --> G[Announcements] B --> H[Settings] B --> I[Recruitment] B --> J[Onboarding] B --> K[Payroll] B --> L[Performance] C --> C1[Employee Profile] C1 --> C2[Documents] C1 --> C3[Attendance History] C1 --> C4[Leave History] C1 --> C5[Employment Details] D --> D1[Daily Attendance View] D --> D2[Shifts] D --> D3[Correction Requests] E --> E1[Pending Requests] E --> E2[Leave Calendar] I --> I1[Job Openings] I --> I2[Candidate Pipeline] I2 --> I3[Candidate Detail] J --> J1[Onboarding Tasks] K --> K1[Payroll Runs] K --> K2[Payslips] L --> L1[Review Cycles] L --> L2[Employee Reviews]
mermaidflowchart TD M1[Login] --> M2[Biometric Unlock] M2 --> M3[Home] M3 --> M4[Clock In or Out] M3 --> M5[My Attendance] M3 --> M6[Apply Leave] M3 --> M7[My Leave Balance] M3 --> M8[My Profile] M3 --> M9[Payslips] M3 --> M10[Notifications] M3 --> M11[Announcements] M3 --> M12[Onboarding Tasks] M3 --> M13[Manager Approvals] M6 --> M6A[Select Leave Type] M6A --> M6B[Select Dates] M6B --> M6C[Submit Request] M13 --> M13A[Review Request] M13A --> M13B[Approve or Reject]
mermaiderDiagram COMPANY ||--o{ BRANCH : has COMPANY ||--o{ DEPARTMENT : has COMPANY ||--o{ HOLIDAY : defines COMPANY ||--o{ ANNOUNCEMENT : publishes COMPANY ||--o{ JOB_OPENING : creates COMPANY ||--o{ PAYROLL_RUN : processes BRANCH ||--o{ EMPLOYEE : assigns DEPARTMENT ||--o{ EMPLOYEE : groups DESIGNATION ||--o{ EMPLOYEE : classifies ROLE ||--o{ USER : grants USER ||--|| EMPLOYEE : maps_to EMPLOYEE ||--o{ EMPLOYEE_DOCUMENT : owns EMPLOYEE ||--o{ ATTENDANCE_RECORD : logs EMPLOYEE ||--o{ ATTENDANCE_CORRECTION_REQUEST : submits EMPLOYEE ||--o{ LEAVE_BALANCE : holds EMPLOYEE ||--o{ LEAVE_REQUEST : creates EMPLOYEE ||--o{ NOTIFICATION : receives EMPLOYEE ||--o{ ONBOARDING_TASK : assigned EMPLOYEE ||--o{ PAYSLIP : receives EMPLOYEE ||--o{ PERFORMANCE_REVIEW : reviewed_in EMPLOYEE }o--|| EMPLOYEE : reports_to SHIFT ||--o{ ATTENDANCE_RECORD : applies_to LEAVE_TYPE ||--o{ LEAVE_BALANCE : defines LEAVE_TYPE ||--o{ LEAVE_REQUEST : used_by PAYROLL_RUN ||--o{ PAYSLIP : contains SALARY_COMPONENT ||--o{ PAYSLIP : contributes_to JOB_OPENING ||--o{ CANDIDATE : attracts CANDIDATE ||--o{ INTERVIEW : attends PERFORMANCE_CYCLE ||--o{ PERFORMANCE_REVIEW : contains COMPANY { uuid id PK string name string timezone string country string status } BRANCH { uuid id PK uuid company_id FK string name string location } DEPARTMENT { uuid id PK uuid company_id FK string name } DESIGNATION { uuid id PK string title string grade } ROLE { uuid id PK string name string permission_set } USER { uuid id PK uuid role_id FK string email string password_hash boolean is_active } EMPLOYEE { uuid id PK uuid user_id FK uuid branch_id FK uuid department_id FK uuid designation_id FK uuid manager_employee_id FK string employee_code string full_name string status date joining_date } ATTENDANCE_RECORD { uuid id PK uuid employee_id FK uuid shift_id FK datetime clock_in_at datetime clock_out_at string status } LEAVE_REQUEST { uuid id PK uuid employee_id FK uuid leave_type_id FK date start_date date end_date string approval_status } PAYROLL_RUN { uuid id PK uuid company_id FK string period_label string status date processed_on } PAYSLIP { uuid id PK uuid payroll_run_id FK uuid employee_id FK decimal gross_pay decimal net_pay } JOB_OPENING { uuid id PK uuid company_id FK string title string status } CANDIDATE { uuid id PK uuid job_opening_id FK string full_name string email string stage } PERFORMANCE_REVIEW { uuid id PK uuid performance_cycle_id FK uuid employee_id FK decimal final_score string status }
User stores application authentication identity.Employee stores HR profile information and references the user account where applicable./auth/users/roles/employees/branches/departments/designations/attendance/attendance-corrections/leave-types/leave-balances/leave-requests/holidays/announcements/notifications/job-openings/candidates/interviews/onboarding/payroll-runs/payslips/performance-cycles/performance-reviews/reports/settings/audit-logsAfter this SRS, the best next documents would be:
This HRMS SRS defines a modular web and mobile platform that starts with employee management, attendance, leave, self-service, and reporting, while leaving room to scale into payroll, recruitment, onboarding, and performance management. The included screen flows and ER model provide a practical starting point for product design and engineering execution.
This section provides a practical API contract structure for the MVP and future-ready modules.
json{ "success": true, "message": "Request completed successfully", "data": {}, "meta": { "page": 1, "limit": 20, "total": 100 } }
json{ "success": false, "message": "Validation failed", "errors": [ { "field": "email", "message": "Email is required" } ] }
/auth/loginPurpose: authenticate a user.
Request body:
Response fields:
/auth/refreshPurpose: issue a new access token.
/auth/logoutPurpose: revoke the current session.
/auth/forgot-passwordPurpose: send password reset instructions.
/auth/reset-passwordPurpose: set a new password.
/users/mePurpose: fetch the current authenticated user profile.
/rolesPurpose: list available roles.
/rolesPurpose: create a role.
/roles/{id}Purpose: update role permissions.
/employeesPurpose: list employees with filters.
Supported query params:
/employeesPurpose: create an employee.
Example request:
json{ "firstName": "Ava", "lastName": "Rahman", "email": "[email protected]", "phone": "+8801XXXXXXXXX", "branchId": "uuid", "departmentId": "uuid", "designationId": "uuid", "managerEmployeeId": "uuid", "joiningDate": "2026-08-01", "employmentType": "full_time" }
/employees/{id}Purpose: fetch employee details.
/employees/{id}Purpose: update employee details.
/employees/{id}/documentsPurpose: list employee documents.
/employees/{id}/documentsPurpose: upload an employee document.
/attendance/check-inPurpose: create a clock-in record.
Example request:
json{ "employeeId": "uuid", "timestamp": "2026-07-31T09:00:00+06:00", "location": { "lat": 23.8103, "lng": 90.4125 }, "deviceType": "mobile" }
/attendance/check-outPurpose: create a clock-out record.
/attendance/mePurpose: fetch current user's attendance history.
/attendancePurpose: fetch attendance records for admins and managers.
Supported filters:
/attendance-correctionsPurpose: submit an attendance correction request.
/attendance-corrections/{id}/approvePurpose: approve a correction request.
/attendance-corrections/{id}/rejectPurpose: reject a correction request.
/leave-typesPurpose: list leave policy types.
/leave-balances/mePurpose: fetch current employee leave balances.
/leave-requestsPurpose: create a leave request.
Example request:
json{ "leaveTypeId": "uuid", "startDate": "2026-08-10", "endDate": "2026-08-12", "durationType": "full_day", "reason": "Family event" }
/leave-requests/mePurpose: fetch employee leave history.
/leave-requests/pendingPurpose: fetch pending approvals for managers.
/leave-requests/{id}/approvePurpose: approve leave.
/leave-requests/{id}/rejectPurpose: reject leave.
/announcementsPurpose: list visible announcements.
/announcementsPurpose: create an announcement.
/notificationsPurpose: fetch user notifications.
/notifications/{id}/readPurpose: mark a notification as read.
/reports/headcountPurpose: fetch headcount summary.
/reports/attendance-summaryPurpose: fetch attendance metrics.
/reports/leave-summaryPurpose: fetch leave metrics.
/job-openings/candidates/interviews/onboarding/payroll-runs/payslips/performance-cycles/performance-reviews200 success201 created400 validation error401 unauthenticated403 forbidden404 not found409 conflict422 business rule violation500 server errorThis section translates the screen flow into practical interface blocks for design and development.
Sections:
Sections:
Sections:
Tabs:
Sections:
Sections:
Sections:
Sections:
Sections:
Sections:
Sections:
Sections:
Sections:
This backlog is prioritized for delivery planning.
These are practical planning ranges and will vary by geography, team composition, design depth, and compliance complexity.
The strongest execution path is:
This document now includes:
This gives you a strong starting package for product planning, UI design, and engineering kickoff.
I’ve received the complete HRMS SRS and delivery package. What would you like me to produce from it—for example, a polished DOCX/PDF, a requirements review and gap analysis, or a developer-ready implementation plan?
ধন্যবাদ। যেহেতু আমরা সফটওয়্যারটি তৈরিতে (Development) হাত দিতে যাচ্ছি, তাই আপনি প্রথমে Requirements Review and Gap Analysis দিয়ে শুরু করুন, যাতে রিকোয়ারমেন্টসের কোনো ঘাটতি থাকলে তা শুরুতেই ধরা পড়ে। এর পাশাপাশি একটি Developer-ready Implementation Plan তৈরি করে দিন, যেন আমাদের ডেভলপমেন্ট টিম দ্রুত এবং সুনির্দিষ্টভাবে কাজ শুরু করতে পারে।"
নিচের নথিটি Development Kickoff-এর ভিত্তি হিসেবে ব্যবহার করা যাবে। এতে প্রথমে build-blocking gap, তারপর recommended technical decisions, architecture, sprint plan, testing এবং release criteria দেওয়া হয়েছে।
:::writing{variant="document" id="48317"}
ডকুমেন্ট সংস্করণ: 1.0
প্রযোজ্য পরিধি: HRMS Web App, Mobile App এবং Backend Platform
প্রধান লক্ষ্য: Development শুরুর আগে অস্পষ্টতা, business-rule gap, security risk এবং architecture risk শনাক্ত করা এবং একটি বাস্তবায়নযোগ্য delivery plan নির্ধারণ করা।
বর্তমান SRS একটি শক্তিশালী product foundation তৈরি করেছে। এতে প্রয়োজনীয় module, user role, screen flow, core entity, high-level API, backlog এবং release plan অন্তর্ভুক্ত আছে।
তবে এটি এখনো সরাসরি coding শুরু করার মতো সম্পূর্ণ developer-ready নয়। প্রধান ঘাটতিগুলো হলো:
Development শুরু করা যাবে, তবে প্রথমে একটি Sprint 0 বা Foundation Sprint সম্পন্ন করা প্রয়োজন। এই sprint-এ scope, data model, permission matrix, workflow state এবং technical architecture lock করতে হবে।
| Priority | অর্থ | Development impact |
|---|---|---|
| P0 — Blocker | Coding শুরুর আগে সিদ্ধান্ত প্রয়োজন | সমাধান না হলে rework, security breach বা data corruption হতে পারে |
| P1 — High | সংশ্লিষ্ট module development-এর আগে সমাধান প্রয়োজন | Feature অসম্পূর্ণ বা operationally unreliable হতে পারে |
| P2 — Medium | MVP release-এর আগে সমাধান করা উচিত | Usability, reporting বা maintainability সমস্যা হবে |
| P3 — Later | Phase 2 বা future enhancement | MVP development বন্ধ করবে না |
SRS-এর এক অংশে recruitment, onboarding, payroll এবং performance management-কে Phase 2 বলা হয়েছে। আবার required web sections-এ এগুলোকে আবশ্যিক screen হিসেবে দেখানো হয়েছে।
Employee self-service-এর মধ্যে payslip access রয়েছে, কিন্তু payroll MVP-এর বাইরে। একইভাবে reports export এক জায়গায় MVP scope-এর অংশ, অন্য জায়গায় future iteration বলা হয়েছে।
MVP-তে শুধুমাত্র নিচের module সক্রিয় থাকবে:
নিচের module-এর menu, API এবং database functionality Phase 2 feature flag-এর পেছনে থাকবে:
Payslip screen MVP-তে প্রদর্শিত হবে না, যদি না external payroll system থেকে payslip upload করার একটি স্পষ্ট requirement যোগ করা হয়।
Report export-এর ক্ষেত্রে MVP baseline হবে:
SRS-এ Company entity আছে, কিন্তু system single-company deployment হবে নাকি SaaS multi-tenant platform হবে তা বলা হয়নি।
এক organization-এর employee, attendance বা payroll data অন্য organization-এর user-এর কাছে প্রকাশিত হওয়ার সম্ভাবনা তৈরি হবে।
Platform-কে শুরু থেকেই multi-tenant capable হিসেবে design করতে হবে, এমনকি প্রথম deployment-এ একটি company থাকলেও।
প্রত্যেক business table-এ সরাসরি বা নির্ভরযোগ্য relational path-এর মাধ্যমে company_id থাকতে হবে।
প্রয়োজনীয় নিয়ম:
companyId বিশ্বাস করা যাবে না।উদাহরণ:
textUNIQUE(company_id, employee_code) UNIQUE(company_id, email) UNIQUE(company_id, department_name)
বর্তমান Role.permission_set string-based field production-grade RBAC-এর জন্য যথেষ্ট নয়।
Manager কোন employee দেখতে পারবেন, branch admin কোন branch পরিচালনা করবেন এবং payroll user কোন salary data দেখতে পারবেন—এগুলোর data scope নির্ধারিত হয়নি।
নিচের entity প্রয়োজন:
rolespermissionsrole_permissionsuser_role_assignmentsrole_scope_assignmentsPermission format হতে পারে:
textemployee.read employee.create employee.update attendance.read.team attendance.correct leave.approve leave.override document.read.salary payroll.finalize settings.manage audit.read
Permission-এর সঙ্গে scope যুক্ত থাকতে হবে:
শুধু UI menu লুকানো authorization নয়। প্রতিটি API endpoint এবং data query-তে server-side authorization প্রয়োজন।
বর্তমান ER diagram-এ USER ||--|| EMPLOYEE বাধ্যতামূলক one-to-one relationship দেখানো হয়েছে।
কিন্তু বাস্তবে:
textUser 0..1 ---- 0..1 Employee
আরও ভালো model:
users: authentication identityemployees: HR identityuser_employee_links: প্রয়োজন হলে explicit mappingemployment_records: employment lifecycleuser_sessions: active sessionsexternal_identities: Google/Microsoft SSO mappingLeave এবং attendance correction-এর জন্য multi-level approval বলা হয়েছে, কিন্তু নিচের নিয়মগুলো নেই:
Shared approval engine ব্যবহার করা উচিত:
approval_definitionsapproval_definition_stepsapproval_instancesapproval_instance_stepsapproval_actionsপ্রাথমিক MVP rule:
বর্তমান requirements সাধারণ day shift-এর জন্য যথেষ্ট, কিন্তু production attendance system-এর জন্য নিচের rule অনুপস্থিত:
Attendance data দুই স্তরে রাখতে হবে:
textattendance_events - check_in - check_out - break_start - break_end - manual_adjustment
textattendance_days - work_date - first_check_in - last_check_out - worked_minutes - late_minutes - early_exit_minutes - overtime_minutes - status - calculation_version
গুরুত্বপূর্ণ নিয়ম:
work_date shift start date অনুযায়ী নির্ধারণ করতে হবে।incomplete status পাবে।শুধু LeaveBalance table ব্যবহার করলে accrual, carry-forward, adjustment, cancellation এবং historical reconciliation কঠিন হবে।
Leave balance একটি immutable ledger থেকে গণনা করতে হবে।
textleave_ledger - opening_balance - accrual - approved_leave - cancellation_reversal - expiry - manual_adjustment - carry_forward
প্রয়োজনীয় business rules:
“Quickly”, “minimal delay” এবং “responsive” testable acceptance criteria নয়।
এই সংখ্যাগুলো capacity test-এর পরে সংশোধন করা যাবে:
বর্তমান status list আছে, কিন্তু lifecycle transition rule নেই।
প্রস্তাবিত state:
textdraft invited probation active notice resigned terminated archived
Account status এবং employment status আলাদা রাখতে হবে।
উদাহরণ:
notice status-এ থেকেও login করতে পারবেন।terminated হলে policy অনুযায়ী account disable হবে।প্রয়োজনীয় additional tables:
employment_recordsemployee_assignmentsemployee_manager_historyemployee_status_historyUnique employee ID generation উল্লেখ করা হয়েছে, কিন্তু format বা concurrency rule নেই।
Recommended configuration:
textPrefix: EMP Sequence: 000001 Scope: Company বা Branch Example: EMP-000123
Database sequence বা transactional counter ব্যবহার করতে হবে। Application-side “last number + 1” ব্যবহার করা যাবে না।
Employee transfer হলে পুরোনো attendance ও reports কোন branch/department-এ গণনা হবে তা নির্ধারিত নয়।
Recommended rule:
শুধু start date এবং end date রাখলে half-day, holiday exclusion এবং mixed-duration leave support করা কঠিন।
প্রয়োজন:
textleave_requests leave_request_days
leave_request_days-এ থাকতে পারে:
Holiday শুধু company-level entity হিসেবে যথেষ্ট নয়।
প্রয়োজন:
Shift entity আছে, কিন্তু employee-এর shift history নেই।
প্রয়োজন:
shift_assignmentsShift পরিবর্তন historical attendance recalculation করবে কি না, সেটিও rule হিসেবে নির্ধারণ করতে হবে।
GPS attendance-এর জন্য প্রয়োজন:
Location data প্রয়োজনের অতিরিক্ত সময় সংরক্ষণ করা উচিত নয়।
বর্তমানে notification entity আছে, কিন্তু channel delivery tracking নেই।
Recommended model:
notifications: user-facing messagenotification_deliveries: push/email/in-app channel resultdevice_tokens: mobile push registrationnotification_preferencesnotification_templatesDelivery status:
textqueued sent delivered failed read
Domain event এবং transactional outbox pattern ব্যবহার করলে database commit হওয়ার আগে notification চলে যাওয়ার ঝুঁকি কমবে।
Employee document upload-এর জন্য নিচের requirement প্রয়োজন:
ফাইল সরাসরি public URL দিয়ে serve করা যাবে না।
Audit log শুধু “record sensitive changes” বললে যথেষ্ট নয়।
প্রতিটি log-এ থাকতে হবে:
Password, token এবং অত্যন্ত sensitive value audit payload-এ রাখা যাবে না।
Audit log সাধারণ admin user পরিবর্তন বা delete করতে পারবেন না।
“Present”, “Absent”, “Late” এবং “Headcount” metric-এর calculation definition প্রয়োজন।
উদাহরণ:
প্রতিটি report-এর data dictionary তৈরি করতে হবে।
বর্তমান API section endpoint inventory হিসেবে ভালো, কিন্তু developer contract হিসেবে অসম্পূর্ণ।
নিচের বিষয়গুলো প্রতিটি endpoint-এ প্রয়োজন:
DESIGNATION table-এ company_id প্রয়োজন।
permission_set string বাদ দিয়ে normalized permission tables ব্যবহার করতে হবে।
ATTENDANCE_RECORD-এ explicit work_date প্রয়োজন।
একটি payslip-এ অনেক salary component এবং একই component অনেক payslip-এ থাকতে পারে।
সঠিক model:
textpayslips payslip_line_items salary_components
প্রয়োজনীয় field:
textfile_asset_id document_type document_number issued_on expires_on visibility verification_status version
শুধু manager_employee_id current manager দেখাতে পারে, history নয়। Historical reporting-এর জন্য আলাদা manager assignment table প্রয়োজন।
Employee-এর সঙ্গে direct notification relationship যথেষ্ট নয়। User account এবং device delivery relationship প্রয়োজন।
Candidate থেকে employee conversion-এর ক্ষেত্রে duplicate email, previous application এবং offer acceptance state define করতে হবে।
Soft delete ব্যবহার করা হলেও unique constraint এবং restore behavior স্পষ্ট হতে হবে। Audit-critical data physical delete করা উচিত নয়।
নিচের security controls requirement-এ যুক্ত করা প্রয়োজন:
Payroll বা bank information যোগ হলে আরও শক্ত field-level encryption এবং access segregation প্রয়োজন হবে।
Mobile MVP-এর জন্য নিচের সিদ্ধান্ত প্রয়োজন:
Offline clock-in MVP-তে অনুমোদন না করাই নিরাপদ। Network না থাকলে app user-কে correction request workflow দেখাবে।
Static policy এবং profile data encrypted local cache-এ রাখা যেতে পারে।
Payroll module বর্তমানে high-level। Development শুরুর আগে country-specific specification প্রয়োজন:
Payroll compliance specification ছাড়া payroll engine build শুরু করা উচিত নয়।
প্রয়োজন:
প্রয়োজন:
MVP-এর জন্য microservice architecture-এর পরিবর্তে modular monolith ব্যবহার করা সবচেয়ে বাস্তবসম্মত।
এতে module boundary পরিষ্কার থাকবে, কিন্তু deployment ও debugging তুলনামূলক সহজ হবে।
একই language ecosystem ব্যবহারের ফলে shared type, validation schema এবং developer context switching কমবে।
textidentity authorization organization employees attendance leave approvals notifications announcements documents reports audit settings
textAPI gateway or application API layer background worker event/outbox processor file service notification adapters audit service report export worker
text/apps /web /mobile /api /worker /packages /api-client /contracts /ui-web /ui-mobile /validation /permissions /date-time /testing /infrastructure /docker /terraform-or-equivalent /monitoring /docs /adr /api /data-dictionary /runbooks
API request/response DTO mobile বা web source code থেকে আলাদাভাবে shared contract package-এ রাখা উচিত।
company_id থাকবে।created_at, updated_at, created_by এবং updated_by থাকবে।deleted_at থাকবে।Base path:
text/api/v1
textAuthorization: Bearer <token>
textX-Request-Id Idempotency-Key Accept-Language
Idempotency-Key শুধু duplicate-sensitive write operation-এ বাধ্যতামূলক হবে।
YYYY-MM-DDEmployee self check-in endpoint-এ client থেকে employeeId নেওয়া উচিত নয়।
Recommended endpoint:
textPOST /api/v1/me/attendance/check-in POST /api/v1/me/attendance/check-out
Authorized admin manual adjustment-এর জন্য আলাদা endpoint:
textPOST /api/v1/employees/{employeeId}/attendance-adjustments
Leave approval endpoint action-oriented হতে পারে:
textPOST /api/v1/leave-requests/{id}/actions/approve POST /api/v1/leave-requests/{id}/actions/reject POST /api/v1/leave-requests/{id}/actions/withdraw POST /api/v1/leave-requests/{id}/actions/cancel
একই pattern attendance correction-এর ক্ষেত্রেও ব্যবহার করা উচিত।
Error response-এ machine-readable code থাকা প্রয়োজন:
json{ "success": false, "code": "LEAVE_INSUFFICIENT_BALANCE", "message": "Available leave balance is insufficient.", "errors": [], "requestId": "uuid" }
Recommended business codes:
textAUTH_INVALID_CREDENTIALS AUTH_MFA_REQUIRED AUTH_SESSION_EXPIRED ACCESS_SCOPE_DENIED EMPLOYEE_CODE_CONFLICT ATTENDANCE_ALREADY_CHECKED_IN ATTENDANCE_NO_OPEN_SESSION ATTENDANCE_OUTSIDE_GEOFENCE LEAVE_INSUFFICIENT_BALANCE LEAVE_OVERLAPPING_REQUEST LEAVE_POLICY_NOT_ASSIGNED APPROVAL_ALREADY_COMPLETED RESOURCE_VERSION_CONFLICT
List API-তে standard format ব্যবহার করতে হবে:
textpage limit sort search filter[field]
Maximum limit server-side enforce করতে হবে।
Large dataset-এর জন্য ভবিষ্যতে cursor pagination ব্যবহার করা যেতে পারে, তবে MVP admin table-এর জন্য consistent offset pagination যথেষ্ট।
একই leave request দুই approver একই সময়ে approve করলে double action ঠেকাতে:
ব্যবহার করতে হবে।
Client stale resource update করলে 409 RESOURCE_VERSION_CONFLICT return করা উচিত।
textdraft submitted pending_approval approved rejected withdrawn cancellation_pending cancelled
Allowed transition ছাড়া direct status update নিষিদ্ধ থাকবে।
textsubmitted pending_approval approved rejected withdrawn
Approved correction raw event delete করবে না। Adjustment event এবং recalculated attendance day তৈরি করবে।
textinvited active locked disabled
Employment status আলাদা হবে:
textdraft probation active notice resigned terminated
textnot_scheduled present late absent on_leave holiday weekend incomplete corrected
Late, present এবং overtime আলাদা dimensions হিসেবেও রাখা যেতে পারে; একটি single status-এর ওপর সব reporting নির্ভর করা উচিত নয়।
Recommended plan:
Web, backend এবং mobile development parallel চলবে।
এক role অন্য role-এর restricted API বা screen access করতে পারবে না।
Backend team-এর primary ownership:
প্রতিটি business rule-এর unit test থাকতে হবে।
Web team-এর primary ownership:
Mobile team-এর primary ownership:
QA team Sprint 1-এর পরে নয়, Sprint 0 থেকেই যুক্ত থাকবে।
QA deliverables:
প্রধানত:
OpenAPI contract-এর বিপরীতে web এবং mobile API client পরীক্ষা করতে হবে।
Critical journeys:
কোনো story development-এ নেওয়ার আগে থাকতে হবে:
কোনো feature complete ধরা হবে যখন:
কমপক্ষে:
Staging environment production configuration-এর যতটা সম্ভব কাছাকাছি হওয়া উচিত।
Production migration backward-compatible হওয়া উচিত।
| Risk | Impact | Mitigation |
|---|---|---|
| MVP scope expansion | Timeline overrun | Feature flag এবং written scope baseline |
| Permission leakage | Sensitive HR data exposure | Scoped RBAC এবং automated access tests |
| Attendance calculation error | Payroll ও employee dispute | Raw event preservation এবং versioned calculation |
| Leave balance mismatch | Operational dispute | Immutable leave ledger |
| GPS privacy issue | Employee trust এবং legal risk | Consent, retention এবং restricted access |
| Timezone error | Incorrect attendance | UTC storage এবং explicit work date |
| Notification duplication | Poor user experience | Outbox এবং idempotent consumer |
| Data migration failure | Launch delay | Rehearsal এবং rollback |
| Payroll added too early | Major scope increase | Phase 2 localization specification |
| Incomplete UAT | Production defect | Role-based UAT scripts এবং pilot rollout |
পূর্ণ feature development শুরু করার আগে নিচের সব item “Yes” হতে হবে:
বর্তমান SRS বাতিল বা পুনরায় শুরু করার প্রয়োজন নেই। এটিকে Product Requirements Baseline হিসেবে রেখে উপরের gap resolution এবং technical decision-গুলো একটি supplementary specification হিসেবে অনুমোদন করা উচিত।
Development-এর সবচেয়ে নিরাপদ ও দ্রুত পথ হবে:
এই approach অনুসরণ করলে HRMS MVP তুলনামূলক কম rework, পরিষ্কার module boundary এবং ভবিষ্যৎ payroll, recruitment ও performance expansion-এর উপযোগী foundation নিয়ে তৈরি হবে। :::
পরবর্তী যৌক্তিক ধাপ হলো এই পরিকল্পনাকে Jira-ready epics, stories, subtasks এবং পূর্ণ OpenAPI 3.0 contract-এ ভেঙে development board প্রস্তুত করা।