15_Ubungen

Keine Dateien in diesem Thema verfügbar.

Lernmaterialien

Mongo DB

  • Erstellen sie aus der Vorlage ein umfangreiches Mongo DB Modell.

  • Definieren Sie das Hauptdokument und begründen Sie Ihre Wahl.

  • Prüfen Sie für sämtliche Arrays ob referencing oder embedding die bessere Wahl ist.

  • Erstellen Sie für Ihr Modell einige Abfragen und erklären Sie diese.

Themen

Pizza

{
  "_id": "piz_8f3b2b1a",

  "pizzeria": {
    "name": "Pizzeria Bella Napoli",
    "companyId": "ATU12345678",
    "country": "AT",
    "address": {
      "street": "Favoritenstraße 12",
      "zip": "1100",
      "city": "Wien",
      "country": "AT"
    },
    "contact": {
      "phone": "+43 1 555 1234",
      "email": "kontakt@bellanapoli.at"
    }
  },

  "store": {
    "storeId": "store_vie_001",
    "status": "OPEN",
    "openedAt": "2024-01-15",
    "currency": "EUR",
    "vatRateDefault": 0.1,
    "openingHours": [
      { "day": "MON", "from": "11:00", "to": "22:00" },
      { "day": "TUE", "from": "11:00", "to": "22:00" },
      { "day": "WED", "from": "11:00", "to": "22:00" },
      { "day": "THU", "from": "11:00", "to": "22:00" },
      { "day": "FRI", "from": "11:00", "to": "23:00" },
      { "day": "SAT", "from": "11:00", "to": "23:00" },
      { "day": "SUN", "from": "11:00", "to": "22:00" }
    ]
  },

  "products": [
    {
      "productId": "prd_piz_001",
      "type": "PIZZA",
      "name": "Margherita",
      "price": 9.9,
      "currency": "EUR",
      "vatRate": 0.1,
      "status": "ACTIVE",
      "ingredients": ["Tomatensauce", "Mozzarella", "Basilikum"],
      "allergens": ["GLUTEN", "MILK"]
    },
    {
      "productId": "prd_piz_002",
      "type": "PIZZA",
      "name": "Salami",
      "price": 11.9,
      "currency": "EUR",
      "vatRate": 0.1,
      "status": "ACTIVE",
      "ingredients": ["Tomatensauce", "Mozzarella", "Salami"],
      "allergens": ["GLUTEN", "MILK"]
    },
    {
      "productId": "prd_pas_001",
      "type": "PASTA",
      "name": "Spaghetti Carbonara",
      "price": 12.5,
      "currency": "EUR",
      "vatRate": 0.1,
      "status": "ACTIVE",
      "ingredients": ["Spaghetti", "Ei", "Speck", "Parmesan"],
      "allergens": ["GLUTEN", "EGG", "MILK"]
    },
    {
      "productId": "prd_drk_001",
      "type": "DRINK",
      "name": "Cola 0,33l",
      "price": 2.9,
      "currency": "EUR",
      "vatRate": 0.2,
      "status": "ACTIVE",
      "deposit": { "amount": 0.0, "currency": "EUR" }
    }
  ],

  "authorizedUsers": [
    {
      "userId": "emp_1001",
      "role": "OWNER",
      "permissions": ["VIEW", "EDIT_MENU", "REFUND", "CLOSE_DAY"],
      "limits": {
        "dailyRefundLimit": 300.0,
        "maxDiscountPercent": 50
      }
    },
    {
      "userId": "emp_2007",
      "role": "CASHIER",
      "permissions": ["VIEW", "CREATE_ORDER", "APPLY_DISCOUNT"],
      "limits": {
        "dailyRefundLimit": 50.0,
        "maxDiscountPercent": 15
      }
    }
  ],

  "orders": [
    {
      "orderId": "ord_000001",
      "orderDate": "2026-03-01",
      "channel": "IN_STORE",
      "status": "PAID",
      "currency": "EUR",
      "customer": {
        "name": "Max Mustermann",
        "phone": "+43 699 1234567"
      },
      "items": [
        {
          "productId": "prd_piz_001",
          "name": "Margherita",
          "qty": 1,
          "unitPrice": 9.9,
          "vatRate": 0.1,
          "notes": "extra Basilikum"
        },
        {
          "productId": "prd_drk_001",
          "name": "Cola 0,33l",
          "qty": 2,
          "unitPrice": 2.9,
          "vatRate": 0.2
        }
      ],
      "pricing": {
        "subtotal": 15.7,
        "discount": { "amount": 0.0, "currency": "EUR", "reason": null },
        "vatTotal": 1.87,
        "total": 17.57
      },
      "payment": {
        "method": "CARD",
        "provider": "POS_TERMINAL",
        "tip": { "amount": 1.0, "currency": "EUR" }
      },
      "audit": {
        "createdAt": "2026-03-01T12:10:00Z",
        "createdBy": "emp_2007",
        "source": "POS"
      }
    },
    {
      "orderId": "ord_000002",
      "orderDate": "2026-03-02",
      "channel": "DELIVERY",
      "status": "PAID",
      "currency": "EUR",
      "customer": {
        "name": "Sara Beispiel",
        "phone": "+43 670 5550000",
        "address": {
          "street": "Praterstraße 5",
          "zip": "1020",
          "city": "Wien",
          "country": "AT"
        }
      },
      "items": [
        {
          "productId": "prd_piz_002",
          "name": "Salami",
          "qty": 2,
          "unitPrice": 11.9,
          "vatRate": 0.1
        }
      ],
      "pricing": {
        "subtotal": 23.8,
        "deliveryFee": { "amount": 2.5, "currency": "EUR", "vatRate": 0.1 },
        "discount": { "amount": 2.0, "currency": "EUR", "reason": "Gutschein" },
        "vatTotal": 2.43,
        "total": 26.73
      },
      "payment": {
        "method": "CASH",
        "provider": "COURIER",
        "tip": { "amount": 2.0, "currency": "EUR" }
      },
      "delivery": {
        "driverId": "emp_3010",
        "etaMinutes": 35,
        "status": "DELIVERED"
      },
      "audit": {
        "createdAt": "2026-03-02T19:30:00Z",
        "createdBy": "emp_2007",
        "source": "WEB_ORDER"
      }
    }
  ],

  "dailySummary": {
    "asOf": "2026-03-02T22:15:00Z",
    "currency": "EUR",
    "ordersCount": 2,
    "revenueGross": 44.3,
    "tips": 3.0,
    "paymentBreakdown": {
      "CARD": 17.57,
      "CASH": 26.73
    }
  },

  "createdAt": "2024-01-15T09:00:00Z",
  "updatedAt": "2026-03-02T22:15:00Z"
}

Taxi

{
  "_id": "tax_3c91f7b2",

  "taxiCompany": {
    "name": "Vienna City Taxi",
    "companyId": "ATU87654321",
    "country": "AT",
    "address": {
      "street": "Landstraße 21",
      "zip": "1030",
      "city": "Wien",
      "country": "AT"
    },
    "contact": {
      "phone": "+43 1 700 700",
      "email": "office@viennacitytaxi.at"
    }
  },

  "fleet": {
    "fleetId": "fleet_vie_01",
    "status": "ACTIVE",
    "currency": "EUR",
    "defaultVatRate": 0.1,
    "dispatchCenter": {
      "name": "Zentrale Wien",
      "phone": "+43 1 700 700"
    }
  },

  "vehicles": [
    {
      "vehicleId": "veh_1001",
      "plate": "W-123TX",
      "brand": "Toyota",
      "model": "Prius",
      "year": 2021,
      "type": "HYBRID",
      "seats": 4,
      "status": "AVAILABLE",
      "meter": {
        "tariffId": "tariff_vie_std",
        "currency": "EUR"
      }
    },
    {
      "vehicleId": "veh_1002",
      "plate": "W-456TX",
      "brand": "Mercedes-Benz",
      "model": "E-Klasse",
      "year": 2020,
      "type": "DIESEL",
      "seats": 4,
      "status": "IN_SERVICE",
      "meter": {
        "tariffId": "tariff_vie_std",
        "currency": "EUR"
      }
    }
  ],

  "drivers": [
    {
      "driverId": "drv_2001",
      "name": "Ahmed Kaya",
      "licenseNo": "AT-DL-558812",
      "status": "ON_DUTY",
      "assignedVehicleId": "veh_1001",
      "roles": ["DRIVER"],
      "limits": {
        "maxCashOnHand": 300.0
      }
    },
    {
      "driverId": "drv_2002",
      "name": "Julia Steiner",
      "licenseNo": "AT-DL-992014",
      "status": "OFF_DUTY",
      "assignedVehicleId": null,
      "roles": ["DRIVER", "TRAINER"],
      "limits": {
        "maxCashOnHand": 300.0
      }
    }
  ],

  "tariffs": [
    {
      "tariffId": "tariff_vie_std",
      "name": "Standard Wien",
      "currency": "EUR",
      "vatRate": 0.1,
      "baseFee": 4.0,
      "perKm": 1.8,
      "perMinute": 0.5,
      "nightSurcharge": {
        "from": "22:00",
        "to": "06:00",
        "percent": 10
      }
    }
  ],

  "rides": [
    {
      "rideId": "ride_000001",
      "rideDate": "2026-03-01",
      "status": "COMPLETED",
      "channel": "APP",
      "currency": "EUR",

      "customer": {
        "customerId": "cus_9001",
        "name": "Max Mustermann",
        "phone": "+43 699 1234567",
        "rating": 4.8
      },

      "pickup": {
        "address": "Wien Hbf, 1100 Wien",
        "lat": 48.185,
        "lng": 16.374,
        "requestedAt": "2026-03-01T08:12:00Z",
        "pickupAt": "2026-03-01T08:18:00Z"
      },
      "dropoff": {
        "address": "Stephansplatz, 1010 Wien",
        "lat": 48.208,
        "lng": 16.373,
        "dropoffAt": "2026-03-01T08:33:00Z"
      },

      "driverId": "drv_2001",
      "vehicleId": "veh_1001",

      "trip": {
        "distanceKm": 6.4,
        "durationMinutes": 15,
        "routeQuality": "NORMAL"
      },

      "pricing": {
        "tariffId": "tariff_vie_std",
        "baseFee": 4.0,
        "distanceFee": 11.52,
        "timeFee": 7.5,
        "surcharges": [
          { "type": "NIGHT", "amount": 0.0, "currency": "EUR" }
        ],
        "discount": { "amount": 2.0, "currency": "EUR", "reason": "Promo" },
        "vatTotal": 2.1,
        "total": 23.12
      },

      "payment": {
        "method": "CARD",
        "provider": "STRIPE",
        "tip": { "amount": 2.0, "currency": "EUR" }
      },

      "audit": {
        "createdAt": "2026-03-01T08:12:02Z",
        "createdBy": "system_dispatch",
        "source": "MOBILE_APP"
      }
    },

    {
      "rideId": "ride_000002",
      "rideDate": "2026-03-02",
      "status": "COMPLETED",
      "channel": "PHONE",
      "currency": "EUR",

      "customer": {
        "customerId": null,
        "name": "Sara Beispiel",
        "phone": "+43 670 5550000",
        "rating": null
      },

      "pickup": {
        "address": "Praterstraße 5, 1020 Wien",
        "lat": 48.215,
        "lng": 16.385,
        "requestedAt": "2026-03-02T21:05:00Z",
        "pickupAt": "2026-03-02T21:14:00Z"
      },
      "dropoff": {
        "address": "Mariahilfer Straße 1, 1070 Wien",
        "lat": 48.200,
        "lng": 16.355,
        "dropoffAt": "2026-03-02T21:38:00Z"
      },

      "driverId": "drv_2001",
      "vehicleId": "veh_1001",

      "trip": {
        "distanceKm": 8.9,
        "durationMinutes": 24,
        "routeQuality": "HEAVY_TRAFFIC"
      },

      "pricing": {
        "tariffId": "tariff_vie_std",
        "baseFee": 4.0,
        "distanceFee": 16.02,
        "timeFee": 12.0,
        "surcharges": [
          { "type": "NIGHT", "amount": 3.2, "currency": "EUR" }
        ],
        "discount": { "amount": 0.0, "currency": "EUR", "reason": null },
        "vatTotal": 3.52,
        "total": 38.74
      },

      "payment": {
        "method": "CASH",
        "provider": "DRIVER",
        "tip": { "amount": 3.0, "currency": "EUR" }
      },

      "audit": {
        "createdAt": "2026-03-02T21:05:10Z",
        "createdBy": "dispatcher_01",
        "source": "CALL_CENTER"
      }
    }
  ],

  "dailySummary": {
    "asOf": "2026-03-02T23:05:00Z",
    "currency": "EUR",
    "ridesCount": 2,
    "revenueGross": 61.86,
    "tips": 5.0,
    "paymentBreakdown": {
      "CARD": 23.12,
      "CASH": 38.74
    }
  },

  "createdAt": "2025-02-01T09:00:00Z",
  "updatedAt": "2026-03-02T23:05:00Z"
}

Fleischerei / Metzgerei (butchery.json)

{
  "_id": "but_001",
  "business": {
    "type": "BUTCHERY",
    "name": "Metzgerei Huber",
    "companyId": "ATU11111111",
    "address": { "street": "Hauptstraße 1", "zip": "4020", "city": "Linz", "country": "AT" },
    "currency": "EUR"
  },
  "products": [
    { "productId": "meat_001", "name": "Rindsschnitzel", "unit": "kg", "price": 19.9, "vatRate": 0.1 },
    { "productId": "meat_002", "name": "Leberkäse", "unit": "kg", "price": 12.9, "vatRate": 0.1 }
  ],
  "sales": [
    {
      "saleId": "sale_0001",
      "date": "2026-03-02",
      "channel": "IN_STORE",
      "items": [
        { "productId": "meat_001", "qty": 0.6, "unitPrice": 19.9 },
        { "productId": "meat_002", "qty": 0.3, "unitPrice": 12.9 }
      ],
      "total": 15.81,
      "payment": { "method": "CARD" }
    }
  ]
}

Supermarkt (supermarket.json)

{
  "_id": "sup_001",
  "business": {
    "type": "SUPERMARKET",
    "name": "CityMarket",
    "companyId": "ATU22222222",
    "address": { "street": "Ring 10", "zip": "1010", "city": "Wien", "country": "AT" },
    "currency": "EUR"
  },
  "departments": ["GROCERY", "BAKERY", "FRESH", "HOUSEHOLD"],
  "sales": [
    {
      "saleId": "sale_0101",
      "date": "2026-03-02",
      "cashDesk": "KASSE_3",
      "items": [
        { "sku": "sku_100", "name": "Milch 1L", "qty": 2, "unitPrice": 1.59, "vatRate": 0.1 },
        { "sku": "sku_200", "name": "Shampoo", "qty": 1, "unitPrice": 3.99, "vatRate": 0.2 }
      ],
      "total": 7.17,
      "payment": { "method": "CASH" }
    }
  ]
}

Friseursalon (hair_salon.json)

{
  "_id": "hair_001",
  "business": {
    "type": "HAIR_SALON",
    "name": "Salon Nova",
    "companyId": "ATU33333333",
    "address": { "street": "Bahnhofstraße 5", "zip": "5020", "city": "Salzburg", "country": "AT" },
    "currency": "EUR"
  },
  "services": [
    { "serviceId": "srv_001", "name": "Haarschnitt", "durationMin": 30, "price": 29.0, "vatRate": 0.2 },
    { "serviceId": "srv_002", "name": "Färben", "durationMin": 90, "price": 79.0, "vatRate": 0.2 }
  ],
  "appointments": [
    {
      "appointmentId": "app_0001",
      "dateTime": "2026-03-02T14:00:00+01:00",
      "customer": { "name": "Anna Beispiel", "phone": "+43 660 111111" },
      "staff": { "employeeId": "emp_10", "name": "Mara" },
      "serviceIds": ["srv_001"],
      "status": "COMPLETED",
      "total": 29.0,
      "payment": { "method": "CARD" }
    }
  ]
}

Kosmetikstudio (cosmetics_studio.json)

{
  "_id": "cos_001",
  "business": { "type": "COSMETICS_STUDIO", "name": "Glow Studio", "companyId": "ATU44444444", "currency": "EUR" },
  "services": [
    { "serviceId": "c_001", "name": "Gesichtsbehandlung", "durationMin": 60, "price": 69.0, "vatRate": 0.2 },
    { "serviceId": "c_002", "name": "Maniküre", "durationMin": 40, "price": 35.0, "vatRate": 0.2 }
  ],
  "appointments": [
    {
      "appointmentId": "app_010",
      "dateTime": "2026-03-01T10:30:00+01:00",
      "customer": { "name": "Sophie", "email": "sophie@example.com" },
      "serviceIds": ["c_001", "c_002"],
      "status": "PAID",
      "total": 104.0,
      "payment": { "method": "CARD" }
    }
  ]
}

Zahnarztpraxis (dentist.json)

{
  "_id": "dent_001",
  "business": { "type": "DENTIST", "name": "Zahnzentrum Mitte", "companyId": "ATU55555555", "currency": "EUR" },
  "treatments": [
    { "code": "D001", "name": "Kontrolle", "price": 40.0, "vatRate": 0.0 },
    { "code": "D010", "name": "Professionelle Zahnreinigung", "price": 110.0, "vatRate": 0.0 }
  ],
  "visits": [
    {
      "visitId": "v_0001",
      "dateTime": "2026-03-02T09:00:00+01:00",
      "patient": { "patientId": "pat_77", "name": "Max Mustermann" },
      "treatmentCodes": ["D010"],
      "status": "BILLED",
      "invoice": { "invoiceNo": "INV-2026-1001", "total": 110.0, "payer": "PATIENT" }
    }
  ]
}

Hausarztpraxis (gp_practice.json)

{
  "_id": "gp_001",
  "business": { "type": "GENERAL_PRACTICE", "name": "Hausarzt Dr. König", "companyId": "ATU66666666", "currency": "EUR" },
  "services": [
    { "code": "G001", "name": "Ordinationsbesuch", "price": 0.0, "payer": "INSURANCE" },
    { "code": "G020", "name": "Impfung", "price": 25.0, "payer": "PATIENT" }
  ],
  "consultations": [
    {
      "consultationId": "c_001",
      "dateTime": "2026-03-02T11:20:00+01:00",
      "patient": { "patientId": "pat_12", "name": "Eva Beispiel" },
      "serviceCodes": ["G020"],
      "status": "COMPLETED",
      "billing": { "total": 25.0, "paid": true, "method": "CASH" }
    }
  ]
}

Apotheke (pharmacy.json)

{
  "_id": "pha_001",
  "business": { "type": "PHARMACY", "name": "Apotheke am Park", "companyId": "ATU77777777", "currency": "EUR" },
  "inventory": [
    { "sku": "rx_001", "name": "Ibuprofen 400", "category": "OTC", "price": 6.9, "vatRate": 0.1, "stock": 120 },
    { "sku": "rx_900", "name": "Antibiotikum X", "category": "PRESCRIPTION", "price": 14.5, "vatRate": 0.1, "stock": 40 }
  ],
  "sales": [
    {
      "saleId": "sale_9001",
      "date": "2026-03-02",
      "items": [
        { "sku": "rx_001", "qty": 1, "unitPrice": 6.9, "requiresPrescription": false },
        { "sku": "rx_900", "qty": 1, "unitPrice": 14.5, "requiresPrescription": true, "prescriptionId": "eRx_ABC123" }
      ],
      "total": 21.4,
      "payment": { "method": "CARD" }
    }
  ]
}

Physiotherapie-Praxis (physio.json)

{
  "_id": "phy_001",
  "business": { "type": "PHYSIOTHERAPY", "name": "Physio Aktiv", "companyId": "ATU88888888", "currency": "EUR" },
  "therapies": [
    { "therapyId": "t_001", "name": "Massage", "durationMin": 30, "price": 45.0, "vatRate": 0.2 },
    { "therapyId": "t_002", "name": "Manuelle Therapie", "durationMin": 45, "price": 65.0, "vatRate": 0.2 }
  ],
  "sessions": [
    {
      "sessionId": "s_0001",
      "dateTime": "2026-03-01T16:00:00+01:00",
      "client": { "clientId": "cl_01", "name": "Tom" },
      "therapyIds": ["t_002"],
      "status": "PAID",
      "total": 65.0,
      "payment": { "method": "CARD" }
    }
  ]
}

Fitnessstudio (gym.json)

{
  "_id": "gym_001",
  "business": { "type": "GYM", "name": "FitBase", "companyId": "ATU99999999", "currency": "EUR" },
  "memberships": [
    { "planId": "p_basic", "name": "Basic", "monthlyFee": 29.9 },
    { "planId": "p_premium", "name": "Premium", "monthlyFee": 49.9 }
  ],
  "members": [
    { "memberId": "m_100", "name": "Lena", "planId": "p_premium", "status": "ACTIVE", "since": "2025-09-01" }
  ],
  "checkins": [
    { "checkinId": "ci_0001", "memberId": "m_100", "dateTime": "2026-03-02T18:05:00+01:00", "gate": "G1" }
  ],
  "payments": [
    { "paymentId": "pay_0001", "memberId": "m_100", "period": "2026-03", "amount": 49.9, "method": "SEPA", "status": "PAID" }
  ]
}

Hotel (hotel.json)

{
  "_id": "hot_001",
  "business": { "type": "HOTEL", "name": "Hotel Danube", "companyId": "ATU12121212", "currency": "EUR" },
  "rooms": [
    { "roomId": "101", "type": "STANDARD", "ratePerNight": 120.0 },
    { "roomId": "201", "type": "DELUXE", "ratePerNight": 190.0 }
  ],
  "bookings": [
    {
      "bookingId": "b_0001",
      "guest": { "name": "Max Mustermann", "email": "max@example.com" },
      "roomId": "201",
      "checkIn": "2026-03-05",
      "checkOut": "2026-03-07",
      "status": "CONFIRMED",
      "pricing": { "nights": 2, "roomTotal": 380.0, "cityTax": 10.0, "total": 390.0 },
      "payment": { "method": "CARD", "status": "PREAUTHORIZED" }
    }
  ]
}

Reisebüro (travel_agency.json)

{
  "_id": "trv_001",
  "business": { "type": "TRAVEL_AGENCY", "name": "ReiseWelt", "companyId": "ATU23232323", "currency": "EUR" },
  "offers": [
    { "offerId": "o_001", "title": "Rom Wochenende", "basePrice": 399.0 },
    { "offerId": "o_002", "title": "Kreta 7 Nächte", "basePrice": 899.0 }
  ],
  "bookings": [
    {
      "bookingId": "tb_0001",
      "offerId": "o_002",
      "customer": { "name": "Sara Beispiel", "phone": "+43 670 5550000" },
      "travelers": 2,
      "dates": { "from": "2026-06-10", "to": "2026-06-17" },
      "status": "PAID",
      "total": 1798.0,
      "payment": { "method": "BANK_TRANSFER" }
    }
  ]
}

Autowerkstatt (car_repair_shop.json)

{
  "_id": "wrk_001",
  "business": { "type": "CAR_REPAIR", "name": "AutoService Gruber", "companyId": "ATU34343434", "currency": "EUR" },
  "services": [
    { "serviceId": "s_oil", "name": "Ölwechsel", "laborMinutes": 30, "laborRatePerHour": 90.0 },
    { "serviceId": "s_brake", "name": "Bremsen wechseln", "laborMinutes": 120, "laborRatePerHour": 90.0 }
  ],
  "jobs": [
    {
      "jobId": "j_0001",
      "date": "2026-03-02",
      "vehicle": { "plate": "W-123TX", "vin": "VIN1234567890" },
      "customer": { "name": "Tom Beispiel" },
      "work": [
        { "serviceId": "s_oil", "laborCost": 45.0, "parts": [{ "sku": "oil_5w30", "qty": 1, "unitPrice": 39.0 }] }
      ],
      "total": 84.0,
      "payment": { "method": "CARD" }
    }
  ]
}

Autovermietung (car_rental.json)

{
  "_id": "rent_001",
  "business": { "type": "CAR_RENTAL", "name": "Rent&Go", "companyId": "ATU45454545", "currency": "EUR" },
  "vehicles": [
    { "vehicleId": "v_01", "class": "ECONOMY", "plate": "W-RENT1", "dailyRate": 49.0, "status": "AVAILABLE" }
  ],
  "rentals": [
    {
      "rentalId": "r_0001",
      "customer": { "name": "Anna Beispiel", "licenseNo": "AT-DL-12345" },
      "vehicleId": "v_01",
      "period": { "from": "2026-03-02", "to": "2026-03-05" },
      "pricing": { "days": 3, "base": 147.0, "deposit": 300.0, "total": 147.0 },
      "status": "ACTIVE",
      "payment": { "method": "CARD" }
    }
  ]
}

Fahrschule (driving_school.json)

{
  "_id": "drvsch_001",
  "business": { "type": "DRIVING_SCHOOL", "name": "Fahrschule Sprint", "companyId": "ATU56565656", "currency": "EUR" },
  "packages": [
    { "packageId": "pkg_b", "name": "B-Schein Komplett", "price": 1590.0, "includesLessons": 18 }
  ],
  "lessons": [
    {
      "lessonId": "l_0001",
      "dateTime": "2026-03-02T17:00:00+01:00",
      "student": { "studentId": "st_01", "name": "Lukas" },
      "instructor": { "employeeId": "ins_7", "name": "Peter" },
      "vehicle": { "plate": "W-FS-10" },
      "status": "COMPLETED",
      "minutes": 50
    }
  ],
  "payments": [
    { "paymentId": "p_0001", "studentId": "st_01", "amount": 500.0, "method": "BANK_TRANSFER", "status": "PAID" }
  ]
}

Immobilienmakler (real_estate_agent.json)

{
  "_id": "rea_001",
  "business": { "type": "REAL_ESTATE", "name": "ImmoPro", "companyId": "ATU67676767", "currency": "EUR" },
  "listings": [
    { "listingId": "lst_001", "type": "APARTMENT", "city": "Wien", "price": 349000, "status": "ACTIVE" }
  ],
  "deals": [
    {
      "dealId": "d_0001",
      "listingId": "lst_001",
      "buyer": { "name": "Eva Beispiel" },
      "seller": { "name": "Privat" },
      "status": "SIGNED",
      "commission": { "percent": 3.0, "amount": 10470.0, "vatRate": 0.2 },
      "invoice": { "invoiceNo": "INV-REA-2026-01", "total": 12564.0 }
    }
  ]
}

Reinigungsfirma / Gebäudereinigung (cleaning_company.json)

{
  "_id": "cln_001",
  "business": { "type": "CLEANING", "name": "CleanUp GmbH", "companyId": "ATU78787878", "currency": "EUR" },
  "services": [
    { "serviceId": "gc_01", "name": "Büroreinigung", "unit": "hour", "rate": 35.0, "vatRate": 0.2 }
  ],
  "contracts": [
    { "contractId": "ct_001", "client": "ACME Office", "serviceId": "gc_01", "hoursPerWeek": 10, "status": "ACTIVE" }
  ],
  "jobs": [
    {
      "jobId": "job_0001",
      "date": "2026-03-02",
      "contractId": "ct_001",
      "hours": 2.5,
      "staff": [{ "employeeId": "emp_1", "name": "Mila" }],
      "total": 87.5
    }
  ]
}

Sicherheitsdienst (security_service.json)

{
  "_id": "sec_001",
  "business": { "type": "SECURITY", "name": "SecureNow", "companyId": "ATU89898989", "currency": "EUR" },
  "services": [
    { "serviceId": "s_01", "name": "Objektschutz", "ratePerHour": 42.0, "vatRate": 0.2 }
  ],
  "assignments": [
    {
      "assignmentId": "a_0001",
      "date": "2026-03-02",
      "client": "Eventhalle West",
      "serviceId": "s_01",
      "guards": [{ "employeeId": "g_10", "name": "Alex" }, { "employeeId": "g_11", "name": "Nina" }],
      "hours": 6,
      "total": 504.0,
      "status": "BILLED"
    }
  ]
}

Elektrikerbetrieb (electrician.json)

{
  "_id": "elec_001",
  "business": { "type": "ELECTRICIAN", "name": "Elektro Mayer", "companyId": "ATU90909090", "currency": "EUR" },
  "rates": { "laborPerHour": 85.0, "vatRate": 0.2 },
  "jobs": [
    {
      "jobId": "e_0001",
      "date": "2026-03-02",
      "customer": { "name": "K. Berger", "address": "1020 Wien" },
      "work": "Steckdose erneuern",
      "laborHours": 1.0,
      "parts": [{ "sku": "socket_01", "name": "Schuko Steckdose", "qty": 1, "unitPrice": 8.5 }],
      "total": 94.5,
      "payment": { "method": "INVOICE", "status": "OPEN" }
    }
  ]
}

Installateur / Heizungsbetrieb (plumbing_heating.json)

{
  "_id": "plh_001",
  "business": { "type": "PLUMBING_HEATING", "name": "HeizFix", "companyId": "ATU10101010", "currency": "EUR" },
  "rates": { "laborPerHour": 92.0, "vatRate": 0.2 },
  "jobs": [
    {
      "jobId": "p_0001",
      "date": "2026-03-01",
      "customer": { "name": "Familie Huber" },
      "work": "Therme Service",
      "laborHours": 1.5,
      "parts": [{ "sku": "seal_01", "name": "Dichtung", "qty": 2, "unitPrice": 3.0 }],
      "total": 147.0,
      "payment": { "method": "CARD", "status": "PAID" }
    }
  ]
}

Malerbetrieb (painter.json)

{
  "_id": "paint_001",
  "business": { "type": "PAINTER", "name": "Malerteam Blau", "companyId": "ATU11121314", "currency": "EUR" },
  "rates": { "laborPerHour": 60.0, "vatRate": 0.2 },
  "projects": [
    {
      "projectId": "pr_0001",
      "client": "Wohnung Muster",
      "dateStart": "2026-03-02",
      "scope": "Wohnzimmer streichen",
      "laborHours": 6,
      "materials": [{ "name": "Wandfarbe 10L", "qty": 1, "unitPrice": 49.0 }],
      "total": 409.0,
      "status": "IN_PROGRESS"
    }
  ]
}

Tischlerei / Schreinerei (carpentry.json)

{
  "_id": "carp_001",
  "business": { "type": "CARPENTRY", "name": "Tischlerei HolzArt", "companyId": "ATU15151515", "currency": "EUR" },
  "products": [
    { "productId": "cust_001", "name": "Einbauschrank", "basePrice": 2200.0, "vatRate": 0.2 }
  ],
  "orders": [
    {
      "orderId": "o_0001",
      "date": "2026-03-02",
      "customer": { "name": "S. Lang" },
      "productId": "cust_001",
      "measurements": { "widthCm": 240, "heightCm": 260, "depthCm": 60 },
      "status": "ACCEPTED",
      "pricing": { "base": 2200.0, "deposit": 700.0, "total": 2200.0 }
    }
  ]
}

Gärtnerei / Landschaftsbau (gardening_landscape.json)

{
  "_id": "gard_001",
  "business": { "type": "GARDENING_LANDSCAPE", "name": "GrünRaum", "companyId": "ATU16161616", "currency": "EUR" },
  "services": [
    { "serviceId": "g_01", "name": "Heckenschnitt", "ratePerHour": 55.0, "vatRate": 0.2 }
  ],
  "jobs": [
    {
      "jobId": "gjob_0001",
      "date": "2026-03-02",
      "customer": { "name": "Wohnanlage Süd" },
      "serviceId": "g_01",
      "hours": 4,
      "wasteDisposalFee": 25.0,
      "total": 245.0,
      "status": "DONE"
    }
  ]
}

IT-Systemhaus / Computerreparatur (it_service.json)

{
  "_id": "it_001",
  "business": { "type": "IT_SERVICE", "name": "IT Helpdesk Pro", "companyId": "ATU17171717", "currency": "EUR" },
  "services": [
    { "serviceId": "it_virus", "name": "Virenentfernung", "flatPrice": 89.0, "vatRate": 0.2 },
    { "serviceId": "it_setup", "name": "PC Einrichtung", "ratePerHour": 75.0, "vatRate": 0.2 }
  ],
  "tickets": [
    {
      "ticketId": "t_0001",
      "openedAt": "2026-03-02T10:10:00+01:00",
      "customer": { "name": "Max Mustermann" },
      "device": { "type": "LAPTOP", "brand": "Dell", "serial": "SN123" },
      "work": [{ "serviceId": "it_virus", "price": 89.0 }],
      "status": "CLOSED",
      "payment": { "method": "CARD", "total": 89.0 }
    }
  ]
}

Handyshop / Handyreparatur (phone_repair_shop.json)

{
  "_id": "phrep_001",
  "business": { "type": "PHONE_REPAIR", "name": "PhoneFix", "companyId": "ATU18181818", "currency": "EUR" },
  "services": [
    { "serviceId": "scr_01", "name": "Displaytausch", "basePrice": 149.0, "vatRate": 0.2 }
  ],
  "repairs": [
    {
      "repairId": "r_0001",
      "date": "2026-03-02",
      "customer": { "name": "Lena" },
      "device": { "brand": "Apple", "model": "iPhone 12" },
      "serviceId": "scr_01",
      "parts": [{ "sku": "disp_ip12", "qty": 1, "unitPrice": 85.0 }],
      "total": 149.0,
      "status": "READY",
      "payment": { "method": "CASH" }
    }
  ]
}

Copyshop / Druckerei (copy_print_shop.json)

{
  "_id": "cpy_001",
  "business": { "type": "COPY_PRINT", "name": "CopyPoint", "companyId": "ATU19191919", "currency": "EUR" },
  "products": [
    { "productId": "p_bw", "name": "A4 SW Kopie", "unitPrice": 0.12, "vatRate": 0.2 },
    { "productId": "p_col", "name": "A4 Farbe", "unitPrice": 0.35, "vatRate": 0.2 }
  ],
  "jobs": [
    {
      "jobId": "job_010",
      "date": "2026-03-02",
      "customer": { "name": "Uni Team" },
      "items": [
        { "productId": "p_bw", "qty": 200, "unitPrice": 0.12 },
        { "productId": "p_col", "qty": 30, "unitPrice": 0.35 }
      ],
      "total": 34.5,
      "payment": { "method": "CARD" }
    }
  ]
}

Paketdienst / Kurierdienst (courier_service.json)

{
  "_id": "cur_001",
  "business": { "type": "COURIER", "name": "FastCourier", "companyId": "ATU20202020", "currency": "EUR" },
  "tariffs": [
    { "tariffId": "t_city", "name": "Stadt", "baseFee": 6.0, "perKm": 1.2, "vatRate": 0.2 }
  ],
  "shipments": [
    {
      "shipmentId": "sh_0001",
      "dateTime": "2026-03-02T12:30:00+01:00",
      "sender": { "name": "Büro A", "address": "1010 Wien" },
      "recipient": { "name": "Büro B", "address": "1020 Wien" },
      "distanceKm": 5.5,
      "pricing": { "tariffId": "t_city", "total": 12.6 },
      "status": "DELIVERED",
      "payment": { "method": "INVOICE", "status": "OPEN" }
    }
  ]
}

Tierarztpraxis (vet_clinic.json)

{
  "_id": "vet_001",
  "business": { "type": "VETERINARY", "name": "Tierarztpraxis West", "companyId": "ATU21212121", "currency": "EUR" },
  "services": [
    { "code": "V001", "name": "Allgemeine Untersuchung", "price": 45.0, "vatRate": 0.2 },
    { "code": "V010", "name": "Impfung", "price": 35.0, "vatRate": 0.2 }
  ],
  "visits": [
    {
      "visitId": "vv_0001",
      "dateTime": "2026-03-02T15:10:00+01:00",
      "owner": { "name": "Sara Beispiel", "phone": "+43 670 5550000" },
      "pet": { "name": "Bello", "species": "DOG", "breed": "Mix", "chipId": "981000000000001" },
      "serviceCodes": ["V001", "V010"],
      "total": 80.0,
      "payment": { "method": "CARD" },
      "status": "PAID"
    }
  ]
}