Index: src/schemas/customer.ts
===================================================================
--- src/schemas/customer.ts	(revision 057453cdc828f504e8bcd813422d99221b3b5732)
+++ src/schemas/customer.ts	(revision 057453cdc828f504e8bcd813422d99221b3b5732)
@@ -0,0 +1,64 @@
+import { z } from 'zod';
+
+export const customerTableFilterValueSchema = z.union([z.string(), z.array(z.string())]);
+
+export const customerTableFiltersSchema = z.object({
+  name: z.string(),
+  role: z.array(z.string()),
+  status: z.string(),
+});
+
+export const addressSchema = z.object({
+  street: z.string(),
+  city: z.string().optional(),
+  country: z.string(),
+  state: z.string().optional(),
+  zip: z.string(),
+});
+
+export const bankAccountSchema = z.object({
+  accountNumber: z.string().optional(),
+  bicSwift: z.string().optional(),
+  iban: z.string().optional(),
+  routingNumber: z.string().optional(),
+});
+
+export const customerStatusSchema = z.union([
+  z.literal('active'),
+  z.literal('banned'),
+  z.literal('inactive'),
+]);
+
+export const customerSchema = z.object({
+  id: z.string().optional(),
+  name: z.string(),
+  email: z.string(),
+  address: addressSchema,
+  logoUrl: z.string().optional(),
+  phoneNumber: z.string().optional(),
+  vatNumber: z.string().optional(),
+  companyNumber: z.string().optional(),
+  representative: z.string(),
+  status: customerStatusSchema.optional(),
+});
+
+export const tenantSchema = customerSchema
+  .omit({
+    companyId: true,
+    status: true,
+  })
+  .extend({
+    lastInvoiceNumber: z.string(),
+  });
+
+export const newCustomerSchema = z.object({
+  name: z.string(),
+  email: z.string(),
+  address: addressSchema,
+  logoUrl: z.any().nullable().optional(),
+  phoneNumber: z.string().optional(),
+  vatNumber: z.string().optional(),
+  companyNumber: z.string().optional(),
+  representative: z.string(),
+  status: customerStatusSchema,
+});
Index: src/schemas/employee.ts
===================================================================
--- src/schemas/employee.ts	(revision 057453cdc828f504e8bcd813422d99221b3b5732)
+++ src/schemas/employee.ts	(revision 057453cdc828f504e8bcd813422d99221b3b5732)
@@ -0,0 +1,29 @@
+import { z } from 'zod';
+
+export const employeeTableFilterValueSchema = z.union([z.string(), z.array(z.string())]);
+
+export const employeeTableFiltersSchema = z.object({
+  name: z.string(),
+  status: z.string(),
+});
+
+export const employeeStatusSchema = z.union([z.literal('active'), z.literal('inactive')]);
+
+export const employeeSchema = z.object({
+  id: z.string().optional(),
+  name: z.string(),
+  email: z.string().email(),
+  status: employeeStatusSchema.optional(),
+  iban: z.string().optional(),
+  cv: z.string().optional(),
+  photo: z.string().optional(),
+  project: z.string().optional(),
+});
+
+export const newEmployeeSchema = employeeSchema
+  .omit({
+    id: true,
+  })
+  .extend({
+    status: employeeStatusSchema,
+  });
Index: src/schemas/index.ts
===================================================================
--- src/schemas/index.ts	(revision 057453cdc828f504e8bcd813422d99221b3b5732)
+++ src/schemas/index.ts	(revision 057453cdc828f504e8bcd813422d99221b3b5732)
@@ -0,0 +1,15 @@
+export * from './customer';
+export * from './invoice';
+
+export * from './models/customer';
+export * from './models/invoice';
+export * from './models/employee';
+
+// If not already exported, also export the schemas
+export {
+  employeeSchema,
+  employeeStatusSchema,
+  employeeTableFilterValueSchema,
+  employeeTableFiltersSchema,
+  newEmployeeSchema,
+} from './employee';
Index: src/schemas/invoice.ts
===================================================================
--- src/schemas/invoice.ts	(revision 057453cdc828f504e8bcd813422d99221b3b5732)
+++ src/schemas/invoice.ts	(revision 057453cdc828f504e8bcd813422d99221b3b5732)
@@ -0,0 +1,98 @@
+import { z } from 'zod';
+import { customerSchema, tenantSchema } from './customer';
+
+export const serviceSchema = z.object({
+  id: z.string(),
+  name: z.string(),
+  sprint: z.number(),
+  hour: z.number(),
+  month: z.number(),
+});
+
+export const invoiceTableFilterValueSchema = z
+  .union([z.string(), z.array(z.string()), z.date()])
+  .nullable();
+
+export const invoiceTableFiltersSchema = z.object({
+  name: z.string(),
+  service: z.array(z.string()),
+  status: z.string(),
+  startDate: z.date().nullable(),
+  endDate: z.date().nullable(),
+});
+
+export const invoiceItemSchema = z.object({
+  title: z.string(),
+  price: z.number(),
+  total: z.number(),
+  service: serviceSchema,
+  quantity: z.number(),
+  description: z.string(),
+});
+
+export const invoiceStatusSchema = z.union([
+  z.literal('draft'),
+  z.literal('processing'),
+  z.literal('pending'),
+  z.literal('overdue'),
+  z.literal('paid'),
+]);
+
+export const monthSchema = z.union([
+  z.literal('January'),
+  z.literal('February'),
+  z.literal('March'),
+  z.literal('April'),
+  z.literal('May'),
+  z.literal('June'),
+  z.literal('July'),
+  z.literal('August'),
+  z.literal('September'),
+  z.literal('October'),
+  z.literal('November'),
+  z.literal('December'),
+]);
+
+export const invoiceSchema = z.object({
+  id: z.string(),
+  sent: z.number().optional(),
+  dueDate: z.coerce.date(),
+  status: invoiceStatusSchema,
+  currency: z.union([z.literal('EUR'), z.literal('USD')]),
+  quantityType: z.union([
+    z.literal('Unit'),
+    z.literal('Hour'),
+    z.literal('Sprint'),
+    z.literal('Month'),
+  ]),
+  subTotal: z.number(),
+  createDate: z.coerce.date(),
+  month: monthSchema,
+  discount: z.number().optional(),
+  taxes: z.number().optional(),
+  totalAmount: z.number(),
+  invoiceNumber: z.string(),
+  items: z.array(invoiceItemSchema),
+  invoiceFrom: tenantSchema,
+  invoiceTo: customerSchema,
+  pdfRef: z.string().optional(),
+});
+
+export const updateInvoiceSchema = invoiceSchema.omit({
+  id: true,
+  sent: true,
+});
+
+export const createInvoiceSchema = invoiceSchema.omit({
+  id: true,
+  sent: true,
+});
+
+export interface InvoiceFilters {
+  name: string;
+  service: string[];
+  status: string;
+  startDate: Date | null;
+  endDate: Date | null;
+  where?: [string, string, any][];
+}
Index: src/schemas/models/customer.ts
===================================================================
--- src/schemas/models/customer.ts	(revision 057453cdc828f504e8bcd813422d99221b3b5732)
+++ src/schemas/models/customer.ts	(revision 057453cdc828f504e8bcd813422d99221b3b5732)
@@ -0,0 +1,21 @@
+import { z } from 'zod';
+import {
+  addressSchema,
+  bankAccountSchema,
+  customerSchema,
+  customerStatusSchema,
+  customerTableFilterValueSchema,
+  customerTableFiltersSchema,
+  newCustomerSchema,
+  tenantSchema,
+} from '../customer';
+
+export type CustomerTableFilters = z.infer<typeof customerTableFiltersSchema>;
+export type CustomerTableFilterValue = z.infer<typeof customerTableFilterValueSchema>;
+
+export type Address = z.infer<typeof addressSchema>;
+export type BankAccount = z.infer<typeof bankAccountSchema>;
+export type CustomerStatus = z.infer<typeof customerStatusSchema>;
+export type Customer = z.infer<typeof customerSchema>;
+export type NewCustomer = z.infer<typeof newCustomerSchema>;
+export type Tenant = z.infer<typeof tenantSchema>;
Index: src/schemas/models/employee.ts
===================================================================
--- src/schemas/models/employee.ts	(revision 057453cdc828f504e8bcd813422d99221b3b5732)
+++ src/schemas/models/employee.ts	(revision 057453cdc828f504e8bcd813422d99221b3b5732)
@@ -0,0 +1,15 @@
+import { z } from 'zod';
+import {
+  employeeSchema,
+  employeeStatusSchema,
+  employeeTableFilterValueSchema,
+  employeeTableFiltersSchema,
+  newEmployeeSchema,
+} from '../employee';
+
+export type EmployeeTableFilters = z.infer<typeof employeeTableFiltersSchema>;
+export type EmployeeTableFilterValue = z.infer<typeof employeeTableFilterValueSchema>;
+
+export type EmployeeStatus = z.infer<typeof employeeStatusSchema>;
+export type Employee = z.infer<typeof employeeSchema>;
+export type NewEmployee = z.infer<typeof newEmployeeSchema>;
Index: src/schemas/models/invoice.ts
===================================================================
--- src/schemas/models/invoice.ts	(revision 057453cdc828f504e8bcd813422d99221b3b5732)
+++ src/schemas/models/invoice.ts	(revision 057453cdc828f504e8bcd813422d99221b3b5732)
@@ -0,0 +1,23 @@
+import { z } from 'zod';
+import {
+  createInvoiceSchema,
+  invoiceItemSchema,
+  invoiceSchema,
+  invoiceStatusSchema,
+  invoiceTableFilterValueSchema,
+  invoiceTableFiltersSchema,
+  monthSchema,
+  serviceSchema,
+  updateInvoiceSchema,
+} from '../invoice';
+
+export type InvoiceTableFilterValue = z.infer<typeof invoiceTableFilterValueSchema>;
+export type InvoiceTableFilters = z.infer<typeof invoiceTableFiltersSchema>;
+
+export type Service = z.infer<typeof serviceSchema>;
+export type InvoiceItem = z.infer<typeof invoiceItemSchema>;
+export type InvoiceStatus = z.infer<typeof invoiceStatusSchema>;
+export type Month = z.infer<typeof monthSchema>;
+export type Invoice = z.infer<typeof invoiceSchema>;
+export type CreateInvoice = z.infer<typeof createInvoiceSchema>;
+export type UpdateInvoice = z.infer<typeof updateInvoiceSchema>;
