# KonseySoft Workspace

## Overview

KonseySoft is a professional web-based accounting and inventory management system (Ön Muhasebe & Stok Takip) for small and medium businesses.

## Known Fixes Applied
- `db.execute()` returns `{ rows: [] }` not an iterable — use `result.rows[0]` not `const [row] =`
- This affected: `invoices.ts` (generateInvoiceNumber), `customers.ts` (stats query), `cash.ts` (balance query)

## Payment Methods (Kasa)
Cash transactions support 5 payment methods with extra fields:
- **Nakit**: no extra fields
- **Kredi Kartı**: cardHolder (kart sahibi), documentNumber (son 4 hane)
- **Çek**: checkOwner/checkOwnerCustomerId, documentNumber, dueDate, bankName
- **Senet**: documentNumber, dueDate
- **Havale/EFT**: bankName, documentNumber (dekont no)

## Stack

- **Monorepo tool**: pnpm workspaces
- **Node.js version**: 24
- **Package manager**: pnpm
- **TypeScript version**: 5.9
- **API framework**: Express 5
- **Database**: PostgreSQL + Drizzle ORM
- **Validation**: Zod (`zod/v4`), `drizzle-zod`
- **API codegen**: Orval (from OpenAPI spec)
- **Frontend**: React + Vite + Tailwind CSS v4
- **Auth**: JWT (jsonwebtoken) + bcryptjs
- **UI**: Shadcn/ui + Lucide Icons
- **Charts**: Recharts
- **Routing**: Wouter

## Structure

```text
artifacts-monorepo/
├── artifacts/
│   ├── api-server/         # Express API server (all routes)
│   └── konseysoft/         # React + Vite frontend (KonseySoft UI)
├── lib/
│   ├── api-spec/           # OpenAPI spec + Orval codegen config
│   ├── api-client-react/   # Generated React Query hooks
│   ├── api-zod/            # Generated Zod schemas from OpenAPI
│   └── db/                 # Drizzle ORM schema + DB connection
├── scripts/                # Utility scripts
├── pnpm-workspace.yaml
├── tsconfig.base.json
├── tsconfig.json
└── package.json
```

## Database Schema

- `users` - Authentication users (admin/user roles)
- `customers` - Cari accounts (customers/suppliers)
- `categories` - Product categories
- `products` - Products with stock tracking
- `stock_movements` - All stock in/out movements
- `invoices` - Sales and purchase invoices
- `invoice_items` - Line items on invoices
- `customer_transactions` - Cari account ledger entries
- `cash_transactions` - Cash register entries

## Default Credentials

- **Username**: admin
- **Password**: admin123

## API Routes

- `POST /api/auth/login` - Login
- `GET /api/auth/me` - Current user
- `GET /api/dashboard` - Dashboard summary
- `CRUD /api/customers` - Customer management
- `CRUD /api/products` - Product management
- `GET/POST /api/categories` - Category management
- `CRUD /api/invoices` - Invoice management (auto-updates stock + cari)
- `GET/POST /api/cash` - Cash transaction management
- `GET /api/reports/sales` - Sales reports
- `GET /api/reports/purchases` - Purchases reports
- `GET /api/reports/stock` - Stock reports
- `GET /api/reports/cash` - Cash reports

## Features

1. Dashboard with KPI cards + monthly chart + recent transactions
2. Customer (Cari) management with balance tracking
3. Product/stock management with critical stock alerts
4. Invoice creation (sales/purchase) with automatic stock & balance updates
5. Cash register (Kasa) for income/expense tracking
6. Reports module with filtering
7. JWT authentication

## Development

Run codegen: `pnpm --filter @workspace/api-spec run codegen`
Push DB: `pnpm --filter @workspace/db run push`
