KLEINUILTIES-WEBAPP/data/data.json
Slim Uiltjies App 1939bf2ef4 Initial commit: Slim Uiltjies AfterCare invoice system
- Progressive Web App with Express + JSON backend
- PIN-based auth, multi-device sync
- Invoice + Statement PDF generation (branded, Grandstander + Nunito)
- Mobile + Desktop responsive layouts
- n8n backup integration
- Custom logo upload
- Settings for business info, fees, banking
- Bulk invoice generation
- Web Share API integration
2026-08-08 09:25:17 +02:00

443 lines
No EOL
12 KiB
JSON

{
"business": [
{
"name": "Slim Uiltjies AfterCare",
"tagline": "A safe place to learn, grow and shine!",
"address": "A loving aftercare, a second home.",
"phone": "084 770 7077",
"email": "",
"facebook": "Slim Uiltjies AfterCare",
"currency": "R",
"currencyCode": "ZAR",
"taxNote": "",
"bankName": "",
"accountHolder": "",
"accountNumber": "",
"branchCode": "",
"referenceNote": "Use child name as payment reference",
"footerNote": "We truly appreciate your timely payments.\nTogether we make a difference in our children's future!",
"receiptPrefix": "SU",
"nextReceiptNumber": 1,
"defaultFullDayFee": 500,
"defaultHalfDayFee": 300,
"updatedAt": "2026-08-07T23:56:14.316Z",
"id": "business",
"logoDataUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAFGUlEQVR4AeyYaWxVRRTHf7wWiyy2QSg0NBAJNSoiGhTUuAYXCKgg0ZAYFE38YIhxDWmDuCTyyQUFt0QJmICRqHxwhaiAwVRciDaCAg2kaADRaEVBUIR6/rzevPvuvW+Z19LW9+5N5s7MmTNnZv5zzpkzk2ibs6StlFOCEv9iAEpcAYg1INaAEkcgNoESV4DYCcYmEJtAiSMQm0CJK0DpnQLBDY9NIIhIqdVjDeiUHR80ACbUwYwJMOdauGcyzLwYLjkD1NYpg5wYIR3TgCGVUD8NHr0JZl0KV46GM4dBXU1y8QJBbQ3GUzsw8wrmXg+L70hPAi9zD3hqVjq/+vfvk61HZFvhAEwaCw/NgGwL84YcZosXUNMu8CjpeUVv6AVpqaKcrF9ZGWn86l/uvhz3Htg3cghMGcfxCeDwXTUGxo106HDiWQsD4M6JRC6+rQ1+/RN+/wtUJuKbfTn0tt2LaOoOUsJ50D6mrgMCtnb0GLz0Idy9FB55w0zj9WT5rc/D4nuZro4dEaZ3E8UdgCgVXrcFNv8YXoLojdvC9DHDw7RuorgD0LciPNWyLGLWfQdHjqanKBlhqV1CyTLzDOM37w03XGHH3+TzIMoL722F+15NT8+vCcvoJkrCedyWX8zBBXqZWTPFAFg4Gx67GW6xmGB0LZGOkp71uQOg+bf8rH84CYhT+8NFdXDXNbDIgpvHZ8Ktl4GCpnCPbqcUBsDC9+CPQ7knL0Cq+sL4UTDfgial6lNy9+tCjsIAOGbn/YJV8P3usDlkm7y0oGE69ItwpNn6daAtV9fCAJDUg3+DnNn95uBWNsLOfUlPr7ZsSUHQg9dl4+jStsIB8KapI27DVnjazELefv5KWPUF7MgCyGAzg5NP8iRE5+U5osWE7CvQ1RQzQMlZdQdA42pwf/IP03oQ1m4G+QkB8ubGaDM5qzbV69A/qbJXynWzU0Tp8Xp5Pn7J423P3QGot6vtotvNw/vS6TXt4iKy9RYINbWEG4YPStGiJj60KtUeLOmk0Ub46bp7KPlpeZTdAVBgExQ86dwgJb1e1S+9rtqBw/onU+uBZO7/jxpKxkuTgi4/r8oyReWOKeHID9v2hLvoAUTvA+EWuPocGDE43OK/IzRuD7fLWerYDPqCiWfDhRZnBHvssgAtSMuj7g7AN7tAtz+/cKnjVHsfeNJeaebdCA9MhYft3Ff9hvMJRYS6LusUof3b/Rv46+1kBlpQ9cxtIDkLLKCS6U0f77Wm5x+Z30mn5FVzB0AO65W10cJ1Va4x2z2tGqorQfUgp+z0hYi7gJxlkNerS06lBVRyvB7Nn+/bD1sibqN+ngxldwAk6NsfYHVTtHdXe6akAGrZJ7DHLkhBni93gK7PQXquunzJE2/n4srYXhgAEvfuJlNzO/O3mk/Idf6qvclMZ+5y2LRTvaOTHlAWr4b99qIUzZGi/muPMJ+Z72h4DQ4fSdEdS4UDoIF05j9nE65fwfEXIYHyle1k80/Jhar+or0UaeEvf5zfROVk59mLktI7BvLGZthuV3DJ/NqOUx2rikDvXQYrPnXXQs3blzoGgCdIDkwvQjILqfiz78PS9UkzkW3Kb3i8+ebSgjVmZss3WMzxAUjmEvM98hW6g+QrJwdf5wCQY5Ce3BwD0JN3pyvmVnQa4ApaDIArYsXGH2tAse2o63piDXBFrNj4Yw0oth11XU+sAa6IFRt/rAHFtqOu64k1wBWxYuOPNeD/vqMdnf9/AAAA///19YHFAAAABklEQVQDAO1X7hAmzgS4AAAAAElFTkSuQmCC"
}
],
"parents": [
{
"id": 1,
"name": "Valentine",
"phone": "082 123 4567",
"email": "valentine@example.com",
"address": "12 Acacia Street, Pretoria",
"notes": "",
"createdAt": "2026-08-07T23:56:14.317Z"
},
{
"id": 2,
"name": "Nomsa Dlamini",
"phone": "073 555 0102",
"email": "nomsa@example.com",
"address": "4 Violet Lane, Centurion",
"notes": "",
"createdAt": "2026-08-07T23:56:14.317Z"
},
{
"id": 3,
"name": "Pieter van Wyk",
"phone": "083 444 9988",
"email": "pieter@example.com",
"address": "78 Garden Road, Hatfield",
"notes": "",
"createdAt": "2026-08-07T23:56:14.317Z"
}
],
"children": [
{
"id": 1,
"parentId": 1,
"name": "Tshireletso",
"plan": "full",
"monthlyFee": 500,
"startDate": "2025-01-01",
"endDate": "",
"notes": "",
"createdAt": "2026-08-07T23:56:14.317Z"
},
{
"id": 2,
"parentId": 2,
"name": "Lerato",
"plan": "full",
"monthlyFee": 500,
"startDate": "2025-02-01",
"endDate": "",
"notes": "",
"createdAt": "2026-08-07T23:56:14.317Z"
},
{
"id": 3,
"parentId": 2,
"name": "Themba",
"plan": "half",
"monthlyFee": 300,
"startDate": "2025-02-01",
"endDate": "",
"notes": "",
"createdAt": "2026-08-07T23:56:14.317Z"
},
{
"id": 4,
"parentId": 3,
"name": "Mia",
"plan": "full",
"monthlyFee": 500,
"startDate": "2025-03-01",
"endDate": "",
"notes": "",
"createdAt": "2026-08-07T23:56:14.317Z"
}
],
"invoices": [
{
"id": 1,
"number": "SU-0001",
"parentId": 1,
"childId": 1,
"period": "2026-01",
"issueDate": "2026-01-05",
"dueDate": "2026-01-25",
"items": [
{
"description": "AfterCare Fees — January 2026",
"quantity": 1,
"unitPrice": 500,
"total": 500
}
],
"subtotal": 500,
"total": 500,
"paid": 500,
"balance": 0,
"status": "paid",
"notes": "",
"createdAt": "2026-08-07T23:56:14.318Z"
},
{
"id": 2,
"number": "SU-0002",
"parentId": 1,
"childId": 1,
"period": "2026-02",
"issueDate": "2026-02-05",
"dueDate": "2026-02-25",
"items": [
{
"description": "AfterCare Fees — February 2026",
"quantity": 1,
"unitPrice": 500,
"total": 500
}
],
"subtotal": 500,
"total": 500,
"paid": 500,
"balance": 0,
"status": "paid",
"notes": "",
"createdAt": "2026-08-07T23:56:14.319Z"
},
{
"id": 3,
"number": "SU-0003",
"parentId": 1,
"childId": 1,
"period": "2026-03",
"issueDate": "2026-03-05",
"dueDate": "2026-03-25",
"items": [
{
"description": "AfterCare Fees — March 2026",
"quantity": 1,
"unitPrice": 500,
"total": 500
}
],
"subtotal": 500,
"total": 500,
"paid": 0,
"balance": 500,
"status": "unpaid",
"notes": "",
"createdAt": "2026-08-07T23:56:14.319Z"
},
{
"id": 4,
"number": "SU-0004",
"parentId": 1,
"childId": 1,
"period": "2026-04",
"issueDate": "2026-04-05",
"dueDate": "2026-04-25",
"items": [
{
"description": "AfterCare Fees — April 2026",
"quantity": 1,
"unitPrice": 500,
"total": 500
}
],
"subtotal": 500,
"total": 500,
"paid": 1000,
"balance": 0,
"status": "paid",
"notes": "March + April combined payment",
"createdAt": "2026-08-07T23:56:14.319Z"
},
{
"id": 5,
"number": "SU-0005",
"parentId": 1,
"childId": 1,
"period": "2026-05",
"issueDate": "2026-05-05",
"dueDate": "2026-05-25",
"items": [
{
"description": "AfterCare Fees — May 2026",
"quantity": 1,
"unitPrice": 500,
"total": 500
}
],
"subtotal": 500,
"total": 500,
"paid": 500,
"balance": 0,
"status": "paid",
"notes": "",
"createdAt": "2026-08-07T23:56:14.320Z"
},
{
"id": 6,
"number": "SU-0006",
"parentId": 1,
"childId": 1,
"period": "2026-06",
"issueDate": "2026-06-05",
"dueDate": "2026-06-25",
"items": [
{
"description": "AfterCare Fees — June 2026",
"quantity": 1,
"unitPrice": 500,
"total": 500
}
],
"subtotal": 500,
"total": 500,
"paid": 500,
"balance": 0,
"status": "paid",
"notes": "",
"createdAt": "2026-08-07T23:56:14.320Z"
},
{
"id": 7,
"number": "SU-0007",
"parentId": 2,
"childId": 2,
"period": "2026-08",
"issueDate": "2026-08-01",
"dueDate": "2026-08-25",
"items": [
{
"description": "AfterCare Fees — August 2026",
"quantity": 1,
"unitPrice": 500,
"total": 500
}
],
"subtotal": 500,
"total": 500,
"paid": 0,
"balance": 500,
"status": "unpaid",
"notes": "",
"createdAt": "2026-08-07T23:56:14.320Z"
},
{
"id": 8,
"number": "SU-0008",
"parentId": 2,
"childId": 2,
"period": "2026-07",
"issueDate": "2026-07-01",
"dueDate": "2026-07-25",
"items": [
{
"description": "AfterCare Fees — July 2026",
"quantity": 1,
"unitPrice": 500,
"total": 500
}
],
"subtotal": 500,
"total": 500,
"paid": 500,
"balance": 0,
"status": "paid",
"notes": "",
"createdAt": "2026-08-07T23:56:14.320Z"
},
{
"id": 9,
"number": "SU-0009",
"parentId": 3,
"childId": 4,
"period": "2026-08",
"issueDate": "2026-08-01",
"dueDate": "2026-08-25",
"items": [
{
"description": "AfterCare Fees — August 2026",
"quantity": 1,
"unitPrice": 500,
"total": 500
}
],
"subtotal": 500,
"total": 500,
"paid": 500,
"balance": 0,
"status": "paid",
"notes": "",
"createdAt": "2026-08-07T23:56:14.320Z"
},
{
"id": 10,
"number": "SU-0010",
"parentId": 2,
"childId": 3,
"period": "2026-08",
"issueDate": "2026-08-01",
"dueDate": "2026-08-25",
"items": [
{
"description": "AfterCare Fees (Half Day) — August 2026",
"quantity": 1,
"unitPrice": 300,
"total": 300
}
],
"subtotal": 300,
"total": 300,
"paid": 300,
"balance": 0,
"status": "paid",
"notes": "",
"createdAt": "2026-08-07T23:56:14.321Z"
}
],
"payments": [
{
"id": 1,
"invoiceId": 1,
"date": "2026-01-07",
"amount": 500,
"method": "cash",
"receivedBy": "Syl-Marie",
"notes": "",
"createdAt": "2026-08-07T23:56:14.319Z"
},
{
"id": 2,
"invoiceId": 2,
"date": "2026-02-25",
"amount": 500,
"method": "cash",
"receivedBy": "Syl-Marie",
"notes": "",
"createdAt": "2026-08-07T23:56:14.319Z"
},
{
"id": 3,
"invoiceId": 4,
"date": "2026-04-24",
"amount": 1000,
"method": "cash",
"receivedBy": "Syl-Marie",
"notes": "",
"createdAt": "2026-08-07T23:56:14.319Z"
},
{
"id": 4,
"invoiceId": 5,
"date": "2026-05-23",
"amount": 500,
"method": "cash",
"receivedBy": "Syl-Marie",
"notes": "",
"createdAt": "2026-08-07T23:56:14.320Z"
},
{
"id": 5,
"invoiceId": 6,
"date": "2026-06-29",
"amount": 500,
"method": "cash",
"receivedBy": "Syl-Marie",
"notes": "",
"createdAt": "2026-08-07T23:56:14.320Z"
},
{
"id": 6,
"invoiceId": 8,
"date": "2026-07-15",
"amount": 500,
"method": "eft",
"receivedBy": "Syl-Marie",
"notes": "",
"createdAt": "2026-08-07T23:56:14.320Z"
},
{
"id": 7,
"invoiceId": 9,
"date": "2026-08-10",
"amount": 500,
"method": "cash",
"receivedBy": "Syl-Marie",
"notes": "",
"createdAt": "2026-08-07T23:56:14.321Z"
},
{
"id": 8,
"invoiceId": 10,
"date": "2026-08-12",
"amount": 300,
"method": "eft",
"receivedBy": "Syl-Marie",
"notes": "",
"createdAt": "2026-08-07T23:56:14.321Z"
}
],
"meta": [
{
"id": "nextReceipt",
"value": 11
},
{
"id": "seeded",
"value": true
},
{
"id": "seededAt",
"value": "2026-08-07T23:56:14.321Z"
}
],
"version": 1,
"_updatedAt": "2026-08-08T00:00:25.392Z"
}