Skip to content

feat(CP-2): Mislaka file upload and parser#16

Merged
ncamaa merged 1 commit intomainfrom
feature/CP-2-mislaka-parser
Apr 12, 2026
Merged

feat(CP-2): Mislaka file upload and parser#16
ncamaa merged 1 commit intomainfrom
feature/CP-2-mislaka-parser

Conversation

@ncamaa
Copy link
Copy Markdown
Collaborator

@ncamaa ncamaa commented Apr 12, 2026

Summary

  • Add POST /api/plans/:planId/mislaka/parse endpoint for parsing Mislaka "HaTmuna HaMle'a" Excel files
  • Parser reads Sheet 1 ("My Products"), maps Hebrew column headers to English fields, infers pension plan types from Hebrew product names
  • Handles header variations, formatted numbers (commas, currency symbols), and multiple status variants (active/inactive/frozen/closed)
  • Uses memory-based multer upload (10MB limit, xlsx/xls only) - no temp files on disk
  • Response matches the shape expected by the frontend (useParseMislaka hook), enabling removal of the client-side mock fallback
  • Added to OpenAPI docs under "Mislaka" tag
  • Added Hebrew character ignore rule to cspell config

New files

  • src/api/mislaka/parser.ts - Core parser: header mapping, plan type inference, number/status parsing
  • src/api/mislaka/mislakaModel.ts - Zod schemas for request params and response
  • src/api/mislaka/mislakaService.ts - Service layer with plan ownership check
  • src/api/mislaka/mislakaController.ts - Request handler with file/auth validation
  • src/api/mislaka/mislakaRouter.ts - Express router with multer middleware and OpenAPI registration
  • src/api/mislaka/__tests__/parser.test.ts - 15 unit tests for parser and plan type inference
  • src/api/mislaka/__tests__/mislakaService.test.ts - 5 unit tests for service layer

Test plan

  • pnpm test passes (264 tests, 20 new)
  • pnpm build succeeds (tsc + tsup)
  • pnpm spell - 0 issues
  • Manual test: upload a real Mislaka Excel file via curl or frontend
  • Verify frontend useParseMislaka hook works with the real endpoint (removes 404 mock fallback)

Add POST /api/plans/:planId/mislaka/parse endpoint that accepts a
multipart Excel upload of the Israeli pension clearinghouse file
(HaTmuna HaMle'a) and returns structured pension product data.

- Parser reads Sheet 1, maps Hebrew column headers to English fields
- Infers plan type from Hebrew product names
- Handles header variations, formatted numbers, status variants
- Memory-based upload via multer (10MB limit, xlsx/xls only)
- Registered in OpenAPI docs
- 20 unit tests covering parser, header mapping, and service layer
@ncamaa ncamaa merged commit a9ce3d5 into main Apr 12, 2026
5 checks passed
@ncamaa ncamaa deleted the feature/CP-2-mislaka-parser branch April 12, 2026 11:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant