Skip to content
karim.semaan(open to work)
WorkExperienceAboutSkillsContactResume ↓
← All work
PayStream preview
Full-stackProtected2025

PayStream

Enterprise payroll ETL

Raw input
VendorAmountDate
acme CORP $1,250.0003/04/25
globex llc 890.5 usd2025-4-3
InitechUSD 2,0004/3/2025

Synthetic rows. Real client data is never exposed.

Synthetic data only. Real client data is never exposed.

Protected work

Built as AI Solutions Lead at BDO, serving multinational FMCG/pharma payroll teams. Source and real client datasets are private. Reach out for a walkthrough.

Request access

PayStream automates enterprise payroll processing. It ingests vendor payroll exports and runs deterministic pandas/openpyxl pipelines to produce bank payment files, GL/finance reports, total and individual variance reports, and accruals, with currency conversion and a centralized naming-conventions module exposed over REST. The React + TypeScript frontend drives a FastAPI + SQLAlchemy backend with JWT/bcrypt auth, RBAC, rate limiting, audit logging, and multi-database support, shipped with Docker Compose. Built under client engagement; everything shown here runs on synthetic rows. Real client data is never exposed.

  • React
  • TypeScript
  • Vite
  • FastAPI
  • Python
  • pandas
  • openpyxl
  • SQLAlchemy
  • JWT
  • Docker

Architecture · vendor exports → bank files + finance reports

  1. 01

    Ingest vendor exports

    Vendor payroll export files enter the FastAPI backend.

  2. 02

    Deterministic ETL

    pandas / openpyxl pipelines clean, map, and currency-convert against a centralized naming-conventions module.

  3. 03

    Generate outputs

    Produces bank payment files, GL/finance reports, total + individual variance reports, and accruals.

  4. 04

    Secure delivery

    Served through a React config UI over JWT/bcrypt auth, RBAC, rate limiting, and audit logging.

Outputs
bank files · GL/variance · accruals
Platform
multi-currency · multi-DB
Security
JWT/bcrypt · RBAC · audit log
Private · request access
Want something like this? Get in touch →
© 2026 Karim SemaanBuilt with Next.js, Tailwind & Supabase.LinkedIn ↗GitHub ↗