fix: claim_id теперь генерируется только на бэкенде (n8n)

-  Удалена локальная генерация claim_id в ClaimForm.tsx
-  claim_id создаётся n8n при SMS верификации
-  Step1Phone: передаёт session_id в n8n, сохраняет claim_id
-  Step1Policy: сохраняет claim_id из ответа n8n при проверке полиса
-  Добавлено детальное логирование для отладки
- 📝 PROJECT_TIMELINE.md - полная хронология проекта (24 окт - 1 ноя)
This commit is contained in:
AI Assistant
2025-11-01 16:53:10 +03:00
parent c049ed6666
commit b06fdb731c
4 changed files with 605 additions and 31 deletions

View File

@@ -43,12 +43,8 @@ interface FormData {
}
export default function ClaimForm() {
// Генерируем claim_id один раз при загрузке формы
const [claimId] = useState(() => {
const date = new Date().toISOString().split('T')[0];
const randomId = Math.random().toString(36).substr(2, 6).toUpperCase();
return `CLM-${date}-${randomId}`;
});
// ✅ claim_id будет создан n8n в Step1Phone после SMS верификации
// Не генерируем его локально!
// Генерируем session_id и сохраняем в sessionStorage
const [sessionId] = useState(() => {
@@ -63,13 +59,16 @@ export default function ClaimForm() {
const [currentStep, setCurrentStep] = useState(0);
const [formData, setFormData] = useState<FormData>({
voucher: '',
claim_id: claimId,
claim_id: undefined, // ✅ Будет заполнен n8n в Step1Phone
session_id: sessionId,
paymentMethod: 'sbp',
});
const [isPhoneVerified, setIsPhoneVerified] = useState(false);
const [debugEvents, setDebugEvents] = useState<any[]>([]);
// 🔥 VERSION CHECK: Если видишь это в консоли - фронт обновился!
console.log('🔥 ClaimForm v2.0 - claim_id НЕ генерируется на фронте!');
// Динамически определяем список шагов на основе выбранного eventType
const documentConfigs = formData.eventType ? getDocumentsForEventType(formData.eventType) : [];
const totalDocumentSteps = documentConfigs.length;
@@ -82,20 +81,13 @@ export default function ClaimForm() {
message,
data: {
...data,
claim_id: claimId // Добавляем claim_id во все события
claim_id: formData.claim_id // ✅ Используем claim_id из formData (от n8n)
}
};
setDebugEvents(prev => [event, ...prev]);
};
// Логируем генерацию claim_id и session_id при первой загрузке
useState(() => {
addDebugEvent('system', 'info', `🆔 Сгенерирован Claim ID: ${claimId}`, {
claim_id: claimId,
session_id: sessionId,
timestamp: new Date().toISOString()
});
});
// ✅ claim_id будет залогирован в Step1Phone после получения от n8n
const updateFormData = useCallback((data: Partial<FormData>) => {
setFormData((prev) => ({ ...prev, ...data }));
@@ -127,7 +119,7 @@ export default function ClaimForm() {
'Content-Type': 'application/json',
},
body: JSON.stringify({
claim_id: claimId,
claim_id: formData.claim_id, // ✅ Используем claim_id от n8n
voucher: formData.voucher,
email: formData.email,
phone: formData.phone,
@@ -146,10 +138,10 @@ export default function ClaimForm() {
message.success(`Заявка ${result.claim_number} успешно создана!`);
addDebugEvent('form', 'success', `✅ Заявка ${result.claim_number} создана`);
// Сброс формы
// Сброс формы (создаём новую заявку, claim_id будет сгенерирован при следующем SMS)
setFormData({
voucher: '',
claim_id: claimId,
claim_id: undefined, // ✅ Очищаем для новой заявки
session_id: sessionId,
paymentMethod: 'sbp',
});
@@ -164,7 +156,7 @@ export default function ClaimForm() {
addDebugEvent('form', 'error', '❌ Ошибка соединения');
console.error(error);
}
}, [formData, claimId, sessionId, addDebugEvent]);
}, [formData, sessionId, addDebugEvent]);
// Динамически генерируем шаги на основе выбранного eventType
const steps = useMemo(() => {
@@ -176,7 +168,7 @@ export default function ClaimForm() {
description: 'Подтверждение по SMS',
content: (
<Step1Phone
formData={{ ...formData, claim_id: claimId, session_id: sessionId }}
formData={{ ...formData, session_id: sessionId }} // ✅ claim_id будет создан n8n
updateFormData={updateFormData}
onNext={nextStep}
onPrev={prevStep}
@@ -193,7 +185,7 @@ export default function ClaimForm() {
description: 'Полис ERV',
content: (
<Step1Policy
formData={{ ...formData, claim_id: claimId, session_id: sessionId }}
formData={{ ...formData, session_id: sessionId }} // ✅ claim_id уже в formData от n8n
updateFormData={updateFormData}
onNext={nextStep}
addDebugEvent={addDebugEvent}
@@ -244,7 +236,7 @@ export default function ClaimForm() {
description: 'Контакты и выплата',
content: (
<Step3Payment
formData={{ ...formData, claim_id: claimId }}
formData={formData} // ✅ claim_id уже в formData
updateFormData={updateFormData}
onPrev={prevStep}
onSubmit={handleSubmit}
@@ -256,12 +248,12 @@ export default function ClaimForm() {
});
return stepsArray;
}, [formData, documentConfigs, isPhoneVerified, claimId, sessionId, nextStep, prevStep, updateFormData, handleSubmit, setIsPhoneVerified, addDebugEvent]);
}, [formData, documentConfigs, isPhoneVerified, sessionId, nextStep, prevStep, updateFormData, handleSubmit, setIsPhoneVerified, addDebugEvent]);
const handleReset = () => {
setFormData({
voucher: '',
claim_id: claimId,
claim_id: undefined, // ✅ Очищаем для новой заявки
session_id: sessionId,
paymentMethod: 'sbp',
});