Este é o prompt que tenho para minha aplicação de controle financeiro baseado em whatsapp e com backend em spring boot e ts na camada de nlp. Melhore o prompt pensando em como não perder nenhum campo, nem adicionar outros sem necessidade, mas melhorar o prompt em si fazendo com que quaisquer situações ou estilos de escritas por esotericos que sejam possam ser parseados.

object NlpPrompt {
    const val PROMPT = """
Analyze the following sentence and extract as much structured financial transaction data as possible.
All field names and values must be in English, except for the 'original_content' field, which should preserve the user's original language and style.
Do not return or store any image or document files, only metadata and extracted text if available.
All date/time fields must be in ISO-8601 format with offset, e.g., \"2024-07-21T00:00:00-03:00\".

If the expense is shared or divided among multiple people, extract:
- total_amount (the full value, in 'amount')
- per_person_amount (if calculable, in 'metadata')
- participants (list of names, nicknames, or phone numbers mentioned, in 'related_contacts')
- Add a note in the 'notes' field describing the split (e.g., "Shared with 4 people").

Return a JSON with these fields (use null if not available):
amount, currency (default \"BRL\"), type (\"INCOME\" or \"EXPENSE\"), category, subcategory, original_content, date (ISO-8601 with offset), time, payment_method, installments, due_date (ISO-8601 with offset), payer, payee, related_contacts (names, nicknames or phone numbers), urgency, recurrence, location, notes, intent, tags, confidence (0 to 1), metadata (object with any relevant file or context info).

Respond ONLY with a valid JSON object, with all fields listed above, even if some are null.

Examples:

Input: \"vó me deu 20tão ontem\"
```json
{
  "amount": 20,
  "currency": "BRL",
  "type": "INCOME",
  "category": "gift",
  "subcategory": null,
  "original_content": "vó me deu 20tão ontem",
  "date": "2024-07-21T00:00:00-03:00",
  "time": null,
  "payment_method": "cash",
  "installments": null,
  "due_date": null,
  "payer": "grandmother",
  "payee": null,
  "related_contacts": [],
  "urgency": "one-time",
  "recurrence": "one-time",
  "location": null,
  "notes": null,
  "intent": "gift",
  "tags": ["gift", "family", "grandmother"],
  "confidence": 0.95,
  "metadata": null
}
```

Input: \"Vamos comer pizza hoje, 100 reais dividido para 4 pessoas.\"
```json
{
  "amount": 100,
  "currency": "BRL",
  "type": "EXPENSE",
  "category": "food",
  "subcategory": "pizza",
  "original_content": "Vamos comer pizza hoje, 100 reais dividido para 4 pessoas.",
  "date": "2024-07-22T00:00:00-03:00",
  "time": null,
  "payment_method": null,
  "installments": null,
  "due_date": null,
  "payer": "me",
  "payee": "pizzeria",
  "related_contacts": [],
  "urgency": "one-time",
  "recurrence": "one-time",
  "location": null,
  "notes": "Shared with 4 people. Each pays 25.",
  "intent": "food",
  "tags": ["pizza", "food", "friends"],
  "confidence": 0.85,
  "metadata": { "per_person_amount": 25, "participants": 4 }
}
```

Input: \"bora nós quatro no cinema, tá 15 conto cada, eu pago hoje à noite\"
```json
{
  "amount": 60,
  "currency": "BRL",
  "type": "EXPENSE",
  "category": "leisure",
  "subcategory": "cinema",
  "original_content": "bora nós quatro no cinema, tá 15 conto cada, eu pago hoje à noite",
  "date": "2024-07-22T00:00:00-03:00",
  "time": "night",
  "payment_method": "cash",
  "installments": null,
  "due_date": null,
  "payer": "me",
  "payee": "cinema",
  "related_contacts": [],
  "urgency": "one-time",
  "recurrence": "one-time",
  "location": null,
  "notes": "Split with four friends. Each pays 15.",
  "intent": "leisure",
  "tags": ["cinema", "leisure", "friends"],
  "confidence": 0.9,
  "metadata": { "per_person_amount": 15, "participants": 4 }
}
```
"""
}