CW-073 · Foreign workers' documents expire without anyone being told
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 50/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- react, typescript
Research direction
Start with the passportExpiresOn and workPermitExpiresOn fields on the employee in backend/src/modules/employees/, then find how notifications are sent in backend/src/modules/notifications/. The list UI belongs in web/src/features/employees/. Done means a work permit expiring in 29 days appears on the HR list and triggers one notification per window, renewal clears it, and no document number appears in either output.
Written by the indexing model from the issue text.
Description
Priority P1 · Area employees · notifications · Estimate S–M · after Pilot A
Split from CW-068 (#71), whose Pilot A half is done in d89dd40: an employee now carries passportExpiresOn and workPermitExpiresOn, entered on the employee page or by the import, and the page marks a date that has already passed. Nothing looks at those dates ahead of time, and a work permit that lapses unnoticed carries heavy penalties for the employer.
Scope
- A list for HR of passports and work permits expiring within 30, 60 and 90 days, and already expired, for active employees they can see. The list shows dates and names, never the document numbers.
- A notification to HR as each window opens for a document: once per window, not daily. Renewing the document (a later expiry date) clears it, and the next expiry starts its own windows.
- An employee who has left is not listed and not notified.
Acceptance
- A work permit expiring in 29 days appears on the list, and HR is notified once, not daily.
- Renewing that permit removes it from the list, and no further notification is sent for the old date.
- The list and the notification never contain a passport or work permit number.
Files backend/src/modules/employees/, backend/src/modules/notifications/, web/src/features/employees/
Tracked in docs/backlog.md.
- Dominant language
- TypeScript
- Stars
- 0
- Forks
- 0
- Avg merge
- 2d 16h
- Merged PRs (30d)
- 6
Getting set up
- Ships a Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from SuruchBoss/Cwork
-
P1
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
SuruchBoss/Cwork#90 ·
-
documentation good first issue P3 phase-E
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
SuruchBoss/Cwork#50 ·
-
good first issue mobile P2
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SuruchBoss/Cwork#11 ·
-
P2
Difficulty 5/5 Over a week Newbie friendliness 25/100
SuruchBoss/Cwork#89 ·
-
P1
Difficulty 5/5 Over a week Newbie friendliness 25/100
SuruchBoss/Cwork#88 ·
All issues in SuruchBoss/Cwork
Similar issues
-
area:deploy task
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
wilanis/wilanis-js#1017 ·
Maintainers usually reply within 1 day
-
documentation v2
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
modelcontextprotocol/servers#5133 ·
Maintainers usually reply within 1 day
-
budget bug feature frontend good-issue medium needs-review OSCI'26 payments
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
SatyamPandey-07/WorkSphere#5990 · 1 comment ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
lugassawan/swe-workbench#799 ·
Maintainers usually reply within 1 day
-
bug good first issue javascript
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
yukikotani231/sqlsift#326 ·
Maintainers usually reply within 1 day