datakeen-session-react 1.1.140-rc.95 → 1.1.140-rc.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/jdi/JDIError.js +8 -4
- package/dist/cjs/components/jdi/JDIError.js.map +1 -1
- package/dist/cjs/components/jdi/JDIProcessing.js +3 -7
- package/dist/cjs/components/jdi/JDIProcessing.js.map +1 -1
- package/dist/cjs/components/session/UserInputForm.js +2 -2
- package/dist/cjs/components/session/UserInputForm.js.map +1 -1
- package/dist/cjs/i18n/en.json.js +8 -3
- package/dist/cjs/i18n/en.json.js.map +1 -1
- package/dist/cjs/i18n/fr.json.js +8 -3
- package/dist/cjs/i18n/fr.json.js.map +1 -1
- package/dist/cjs/index.css.js +1 -1
- package/dist/cjs/services/pollingService.js.map +1 -1
- package/dist/cjs/utils/apiAnalysis.js.map +1 -1
- package/dist/cjs/utils/validationUtils.js +35 -2
- package/dist/cjs/utils/validationUtils.js.map +1 -1
- package/dist/esm/components/jdi/JDIError.js +8 -4
- package/dist/esm/components/jdi/JDIError.js.map +1 -1
- package/dist/esm/components/jdi/JDIProcessing.js +3 -7
- package/dist/esm/components/jdi/JDIProcessing.js.map +1 -1
- package/dist/esm/components/session/UserInputForm.js +2 -2
- package/dist/esm/components/session/UserInputForm.js.map +1 -1
- package/dist/esm/i18n/en.json.js +8 -3
- package/dist/esm/i18n/en.json.js.map +1 -1
- package/dist/esm/i18n/fr.json.js +8 -3
- package/dist/esm/i18n/fr.json.js.map +1 -1
- package/dist/esm/index.css.js +1 -1
- package/dist/esm/services/pollingService.js.map +1 -1
- package/dist/esm/utils/apiAnalysis.js.map +1 -1
- package/dist/esm/utils/validationUtils.js +35 -2
- package/dist/esm/utils/validationUtils.js.map +1 -1
- package/dist/types/utils/apiAnalysis.d.ts +13 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pollingService.js","sources":["../../../../src/services/pollingService.ts"],"sourcesContent":["import { apiService } from \"./api\";\n\nexport interface AnalysisStatusResponse {\n sessionId: string;\n status: \"pending\" | \"processing\" | \"completed\" | \"failed\";\n progress: number; // 0-100\n currentStep: string; // Backend status: 'analyzing', 'approved', 'rejected', 'to_verify', 'failed', 'error'\n message: string;\n analysisId: string | null;\n analysisStatus?: string; // Raw backend analysis status for debugging\n code?: string; // Conformity code from document (e.g., \"1.0\", \"2.0\", etc.)\n codeName?: string; // Code name (e.g., \"conform\", \"non_conform\")\n codeDescription?: string; // Code description\n startedAt: string | null;\n completedAt: string | null;\n hasResults?: boolean;\n elapsedSeconds?: number;\n}\n\nexport interface PollingOptions {\n interval?: number; // milliseconds between polls (default: 2000)\n maxAttempts?: number; // max number of polls (default: 300 = 10 minutes at 2s interval)\n onProgress?: (status: AnalysisStatusResponse) => void; // callback on status update\n onComplete?: (status: AnalysisStatusResponse) => void; // callback when analysis completes\n onFailed?: (status: AnalysisStatusResponse, error?: string) => void; // callback when analysis fails\n timeout?: number; // total timeout in milliseconds (default: 600000 = 10 minutes)\n}\n\nlet pollingTimeoutId: NodeJS.Timeout | null = null;\nlet pollingStartTime: number = 0;\nlet isPollingActive: boolean = false;\n\n/**\n * Get user-friendly message based on analysis status\n */\nfunction getUserFriendlyMessage(status: AnalysisStatusResponse): string {\n const { currentStep, progress } = status;\n\n // Processing (50%)\n if (progress === 50 && currentStep === 'analyzing') {\n return 'Analyzing your documents...';\n }\n\n // Completed (100%)\n if (progress === 100) {\n switch (currentStep) {\n case 'approved':\n return 'Document verified successfully ✓';\n case 'rejected':\n return 'Document verification failed';\n case 'to_verify':\n return 'Manual verification required';\n case 'failed':\n case 'error':\n return 'Analysis error occurred';\n case 'completed':\n default:\n return 'Analysis completed';\n }\n }\n\n // Default fallback\n return status.message || 'Processing...';\n}\n\n/**\n * Poll the analysis status endpoint until analysis is complete or fails\n * @param sessionId Session ID to check status for\n * @param options Polling configuration\n * @returns Promise that resolves when analysis completes or rejects on failure\n */\nexport async function pollAnalysisStatus(\n sessionId: string,\n options: PollingOptions = {}\n): Promise<AnalysisStatusResponse> {\n const {\n interval = 2000,\n maxAttempts = 300,\n onProgress,\n onComplete,\n onFailed,\n timeout = 600000,\n } = options;\n\n console.log(\n `📡 Starting polling for session ${sessionId} (interval: ${interval}ms, max attempts: ${maxAttempts})`\n );\n\n pollingStartTime = Date.now();\n let attempts = 0;\n isPollingActive = true;\n\n return new Promise((resolve, reject) => {\n // Clear any existing polling\n if (pollingTimeoutId) {\n clearTimeout(pollingTimeoutId);\n }\n\n const poll = async () => {\n if (!isPollingActive) {\n reject(new Error(\"Polling stopped\"));\n return;\n }\n\n try {\n attempts++;\n\n // Check if we've exceeded timeout\n const elapsedTime = Date.now() - pollingStartTime;\n if (elapsedTime > timeout) {\n const errorMsg = `⏱️ Polling timeout exceeded (${elapsedTime}ms)`;\n console.warn(errorMsg);\n isPollingActive = false;\n pollingTimeoutId = null;\n reject(new Error(errorMsg));\n return;\n }\n\n // Check if we've exceeded max attempts\n if (attempts > maxAttempts) {\n const errorMsg = `⚠️ Polling max attempts exceeded (${maxAttempts} attempts)`;\n console.warn(errorMsg);\n isPollingActive = false;\n pollingTimeoutId = null;\n reject(new Error(errorMsg));\n return;\n }\n\n // Fetch status from backend\n const response = await apiService.get<AnalysisStatusResponse>(\n `session/sdk/${sessionId}/analysis-status`\n );\n\n const status = response.data;\n\n // Add user-friendly message\n const userMessage = getUserFriendlyMessage(status);\n\n // Call progress callback with user-friendly message\n if (onProgress) {\n onProgress({\n ...status,\n message: userMessage,\n });\n }\n\n // Check if analysis is complete (progress = 100%)\n if (status.progress === 100) {\n // Check if it's a failure\n if (status.currentStep === 'failed' || status.currentStep === 'error') {\n console.error(\n `❌ Analysis failed for session ${sessionId}: ${status.message}`\n );\n if (onFailed) {\n onFailed(status, status.message);\n }\n isPollingActive = false;\n pollingTimeoutId = null;\n reject(new Error(`Analysis failed: ${userMessage}`));\n return;\n }\n\n // Analysis completed successfully (approved, rejected, to_verify, or completed)\n console.log(`✅ Analysis completed for session ${sessionId} with status: ${status.currentStep}`);\n if (onComplete) {\n onComplete({\n ...status,\n message: userMessage,\n });\n }\n isPollingActive = false;\n pollingTimeoutId = null;\n resolve({\n ...status,\n message: userMessage,\n });\n return;\n }\n\n // Still processing (progress = 50%), schedule next poll\n pollingTimeoutId = setTimeout(poll, interval);\n } catch (error) {\n const errorMsg =\n error instanceof Error ? error.message : \"Unknown error\";\n console.error(\n `❌ Polling error on attempt #${attempts}: ${errorMsg}`\n );\n\n // On network error, retry if we haven't exceeded attempts\n if (attempts < maxAttempts) {\n console.log(`🔄 Retrying in ${interval}ms...`);\n pollingTimeoutId = setTimeout(poll, interval);\n } else {\n isPollingActive = false;\n pollingTimeoutId = null;\n reject(\n new Error(\n `Failed to get analysis status after ${attempts} attempts: ${errorMsg}`\n )\n );\n }\n }\n };\n\n // Start polling\n poll();\n });\n}\n\n/**\n * Stop polling for analysis status\n */\nexport function stopPolling(): void {\n isPollingActive = false;\n if (pollingTimeoutId) {\n clearTimeout(pollingTimeoutId);\n pollingTimeoutId = null;\n }\n console.log(\"🛑 Polling stopped\");\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pollingService.js","sources":["../../../../src/services/pollingService.ts"],"sourcesContent":["import { apiService } from \"./api\";\nimport type { JdiMismatchDetail } from \"../utils/apiAnalysis\";\n\nexport interface AnalysisStatusResponse {\n sessionId: string;\n status: \"pending\" | \"processing\" | \"completed\" | \"failed\";\n progress: number; // 0-100\n currentStep: string; // Backend status: 'analyzing', 'approved', 'rejected', 'to_verify', 'failed', 'error'\n message: string;\n analysisId: string | null;\n analysisStatus?: string; // Raw backend analysis status for debugging\n code?: string; // Conformity code from document (e.g., \"1.0\", \"2.0\", etc.)\n codeName?: string; // Code name (e.g., \"conform\", \"non_conform\")\n codeDescription?: string; // Code description\n // Présent uniquement pour le code 7.0, quand un mismatch d'identité est détecté.\n mismatchDetails?: JdiMismatchDetail[];\n startedAt: string | null;\n completedAt: string | null;\n hasResults?: boolean;\n elapsedSeconds?: number;\n}\n\nexport interface PollingOptions {\n interval?: number; // milliseconds between polls (default: 2000)\n maxAttempts?: number; // max number of polls (default: 300 = 10 minutes at 2s interval)\n onProgress?: (status: AnalysisStatusResponse) => void; // callback on status update\n onComplete?: (status: AnalysisStatusResponse) => void; // callback when analysis completes\n onFailed?: (status: AnalysisStatusResponse, error?: string) => void; // callback when analysis fails\n timeout?: number; // total timeout in milliseconds (default: 600000 = 10 minutes)\n}\n\nlet pollingTimeoutId: NodeJS.Timeout | null = null;\nlet pollingStartTime: number = 0;\nlet isPollingActive: boolean = false;\n\n/**\n * Get user-friendly message based on analysis status\n */\nfunction getUserFriendlyMessage(status: AnalysisStatusResponse): string {\n const { currentStep, progress } = status;\n\n // Processing (50%)\n if (progress === 50 && currentStep === 'analyzing') {\n return 'Analyzing your documents...';\n }\n\n // Completed (100%)\n if (progress === 100) {\n switch (currentStep) {\n case 'approved':\n return 'Document verified successfully ✓';\n case 'rejected':\n return 'Document verification failed';\n case 'to_verify':\n return 'Manual verification required';\n case 'failed':\n case 'error':\n return 'Analysis error occurred';\n case 'completed':\n default:\n return 'Analysis completed';\n }\n }\n\n // Default fallback\n return status.message || 'Processing...';\n}\n\n/**\n * Poll the analysis status endpoint until analysis is complete or fails\n * @param sessionId Session ID to check status for\n * @param options Polling configuration\n * @returns Promise that resolves when analysis completes or rejects on failure\n */\nexport async function pollAnalysisStatus(\n sessionId: string,\n options: PollingOptions = {}\n): Promise<AnalysisStatusResponse> {\n const {\n interval = 2000,\n maxAttempts = 300,\n onProgress,\n onComplete,\n onFailed,\n timeout = 600000,\n } = options;\n\n console.log(\n `📡 Starting polling for session ${sessionId} (interval: ${interval}ms, max attempts: ${maxAttempts})`\n );\n\n pollingStartTime = Date.now();\n let attempts = 0;\n isPollingActive = true;\n\n return new Promise((resolve, reject) => {\n // Clear any existing polling\n if (pollingTimeoutId) {\n clearTimeout(pollingTimeoutId);\n }\n\n const poll = async () => {\n if (!isPollingActive) {\n reject(new Error(\"Polling stopped\"));\n return;\n }\n\n try {\n attempts++;\n\n // Check if we've exceeded timeout\n const elapsedTime = Date.now() - pollingStartTime;\n if (elapsedTime > timeout) {\n const errorMsg = `⏱️ Polling timeout exceeded (${elapsedTime}ms)`;\n console.warn(errorMsg);\n isPollingActive = false;\n pollingTimeoutId = null;\n reject(new Error(errorMsg));\n return;\n }\n\n // Check if we've exceeded max attempts\n if (attempts > maxAttempts) {\n const errorMsg = `⚠️ Polling max attempts exceeded (${maxAttempts} attempts)`;\n console.warn(errorMsg);\n isPollingActive = false;\n pollingTimeoutId = null;\n reject(new Error(errorMsg));\n return;\n }\n\n // Fetch status from backend\n const response = await apiService.get<AnalysisStatusResponse>(\n `session/sdk/${sessionId}/analysis-status`\n );\n\n const status = response.data;\n\n // Add user-friendly message\n const userMessage = getUserFriendlyMessage(status);\n\n // Call progress callback with user-friendly message\n if (onProgress) {\n onProgress({\n ...status,\n message: userMessage,\n });\n }\n\n // Check if analysis is complete (progress = 100%)\n if (status.progress === 100) {\n // Check if it's a failure\n if (status.currentStep === 'failed' || status.currentStep === 'error') {\n console.error(\n `❌ Analysis failed for session ${sessionId}: ${status.message}`\n );\n if (onFailed) {\n onFailed(status, status.message);\n }\n isPollingActive = false;\n pollingTimeoutId = null;\n reject(new Error(`Analysis failed: ${userMessage}`));\n return;\n }\n\n // Analysis completed successfully (approved, rejected, to_verify, or completed)\n console.log(`✅ Analysis completed for session ${sessionId} with status: ${status.currentStep}`);\n if (onComplete) {\n onComplete({\n ...status,\n message: userMessage,\n });\n }\n isPollingActive = false;\n pollingTimeoutId = null;\n resolve({\n ...status,\n message: userMessage,\n });\n return;\n }\n\n // Still processing (progress = 50%), schedule next poll\n pollingTimeoutId = setTimeout(poll, interval);\n } catch (error) {\n const errorMsg =\n error instanceof Error ? error.message : \"Unknown error\";\n console.error(\n `❌ Polling error on attempt #${attempts}: ${errorMsg}`\n );\n\n // On network error, retry if we haven't exceeded attempts\n if (attempts < maxAttempts) {\n console.log(`🔄 Retrying in ${interval}ms...`);\n pollingTimeoutId = setTimeout(poll, interval);\n } else {\n isPollingActive = false;\n pollingTimeoutId = null;\n reject(\n new Error(\n `Failed to get analysis status after ${attempts} attempts: ${errorMsg}`\n )\n );\n }\n }\n };\n\n // Start polling\n poll();\n });\n}\n\n/**\n * Stop polling for analysis status\n */\nexport function stopPolling(): void {\n isPollingActive = false;\n if (pollingTimeoutId) {\n clearTimeout(pollingTimeoutId);\n pollingTimeoutId = null;\n }\n console.log(\"🛑 Polling stopped\");\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiAnalysis.js","sources":["../../../../src/utils/apiAnalysis.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"apiAnalysis.js","sources":["../../../../src/utils/apiAnalysis.ts"],"sourcesContent":["/**\n * Détail d'un champ d'identité en échec pour le code 7.0 (owner mismatch) :\n * valeur saisie par l'utilisateur vs valeur lue sur le document, telles que\n * calculées côté backend (voir GET /session/sdk/:id/analysis-status).\n */\nexport interface JdiMismatchDetail {\n field: 'firstName' | 'lastName' | 'birthDate';\n entered: string;\n read: string;\n}\n\nexport interface Prediction {\n code: string;\n codeDescription: string;\n codeName: string;\n type: string;\n userInput?: {\n birthDate?: string;\n firstName?: string;\n lastName?: string;\n };\n /** Présent uniquement pour le code 7.0, quand un mismatch a été détecté. */\n mismatchDetails?: JdiMismatchDetail[];\n}\n\nexport interface AnalysisResult {\n predictions: Prediction[];\n internal_status: string;\n analysis_id: string;\n}\n\n/**\n * Extrait les root causes principales à partir des prédictions de l'API\n * Retourne les codes d'erreur (ex: \"2.2\", \"4.0\") au lieu des codeNames\n */\nexport const extractRootCauses = (predictions: Prediction[]): string[] => {\n if (!predictions || !Array.isArray(predictions)) {\n return [];\n }\n\n return predictions\n .filter(prediction => prediction.code && prediction.code !== '1.0')\n .map(prediction => prediction.code);\n};\n\n/**\n * Détermine si l'analyse a échoué basé sur les prédictions\n */\nexport const hasAnalysisFailed = (predictions: Prediction[]): boolean => {\n if (!predictions || !Array.isArray(predictions)) {\n return true;\n }\n\n // Si au moins une prédiction n'est pas '1.0' (conform), l'analyse a échoué\n return predictions.some(prediction =>\n prediction.code && prediction.code !== '1.0'\n );\n};\n\n/**\n * Obtient la root cause principale (première dans la liste)\n */\nexport const getPrimaryRootCause = (predictions: Prediction[]): string | null => {\n const rootCauses = extractRootCauses(predictions);\n return rootCauses.length > 0 ? rootCauses[0] : null;\n};\n\nexport function analyzeApiResponse(response: { status: number; data: any }) {\n // Dummy implementation for test\n return response.status === 200 ? 'success' : 'error';\n}\n"],"names":[],"mappings":"AA+BA;;;AAGG;AACI,IAAM,iBAAiB,GAAG,UAAC,WAAyB,EAAA;IACzD,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC/C,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,OAAO;AACJ,SAAA,MAAM,CAAC,UAAA,UAAU,EAAA,EAAI,OAAA,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,KAAK,KAAK,CAAA,CAA5C,CAA4C;SACjE,GAAG,CAAC,UAAA,UAAU,EAAA,EAAI,OAAA,UAAU,CAAC,IAAI,CAAA,CAAf,CAAe,CAAC;AACvC;AAEA;;AAEG;AACI,IAAM,iBAAiB,GAAG,UAAC,WAAyB,EAAA;IACzD,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC/C,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,OAAO,WAAW,CAAC,IAAI,CAAC,UAAA,UAAU,EAAA;QAChC,OAAA,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,KAAK,KAAK;AAA5C,IAAA,CAA4C,CAC7C;AACH;AAEA;;AAEG;AACI,IAAM,mBAAmB,GAAG,UAAC,WAAyB,EAAA;AAC3D,IAAA,IAAM,UAAU,GAAG,iBAAiB,CAAC,WAAW,CAAC;AACjD,IAAA,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;AACrD;;;;"}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
import { __spreadArray } from '../node_modules/tslib/tslib.es6.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Clé i18n (suffixe de `validation_points.7.0.*`) pour chaque champ d'identité
|
|
5
|
+
* en échec. Voir docs backend NFC_JDI_ERROR_MAPPING.md pour le référentiel de
|
|
6
|
+
* codes — 7.0 = "owner" (le détenteur du document ne correspond pas à la
|
|
7
|
+
* saisie utilisateur).
|
|
8
|
+
*/
|
|
9
|
+
var MISMATCH_FIELD_KEY = {
|
|
10
|
+
firstName: "mismatch_first_name",
|
|
11
|
+
lastName: "mismatch_last_name",
|
|
12
|
+
birthDate: "mismatch_birth_date",
|
|
13
|
+
};
|
|
1
14
|
/**
|
|
2
15
|
* Default validation points for success scenarios
|
|
3
16
|
*/
|
|
@@ -30,10 +43,14 @@ function getErrorCodeFromPredictions(predictions) {
|
|
|
30
43
|
* @param predictions - Optional predictions array as fallback for error code
|
|
31
44
|
* @param t - Translation function from i18n
|
|
32
45
|
* @param type - Type of scenario: 'success' or 'error'
|
|
46
|
+
* @param mismatchDetails - Pour le code 7.0 uniquement : champs d'identité en
|
|
47
|
+
* échec (saisi vs lu), calculés côté backend. S'ils sont fournis et non
|
|
48
|
+
* vides, remplacent la bullet "document" générique par un message
|
|
49
|
+
* personnalisé par champ. Sinon, comportement inchangé (message générique).
|
|
33
50
|
* @returns Array of validation point strings
|
|
34
51
|
*/
|
|
35
52
|
function getValidationPoints(errorCode, predictions, t, // Using any to be compatible with i18n TFunction
|
|
36
|
-
type) {
|
|
53
|
+
type, mismatchDetails) {
|
|
37
54
|
// Use errorCode from props, or try to get from predictions as fallback
|
|
38
55
|
var code = errorCode;
|
|
39
56
|
if (!code) {
|
|
@@ -43,9 +60,25 @@ type) {
|
|
|
43
60
|
// Try to get code-specific validation points from i18n
|
|
44
61
|
var quality = t("validation_points.".concat(code, ".quality"), "");
|
|
45
62
|
var readability = t("validation_points.".concat(code, ".readability"), "");
|
|
46
|
-
var document_1 = t("validation_points.".concat(code, ".document"), "");
|
|
47
63
|
// If we have at least quality and readability, use code-specific points
|
|
48
64
|
if (quality && readability) {
|
|
65
|
+
if (code === '7.0' && mismatchDetails && mismatchDetails.length > 0) {
|
|
66
|
+
var mismatchBullets = mismatchDetails
|
|
67
|
+
.map(function (detail) {
|
|
68
|
+
var fieldKey = MISMATCH_FIELD_KEY[detail.field];
|
|
69
|
+
if (!fieldKey)
|
|
70
|
+
return "";
|
|
71
|
+
return t("validation_points.7.0.".concat(fieldKey), {
|
|
72
|
+
entered: detail.entered,
|
|
73
|
+
read: detail.read,
|
|
74
|
+
});
|
|
75
|
+
})
|
|
76
|
+
.filter(Boolean);
|
|
77
|
+
if (mismatchBullets.length > 0) {
|
|
78
|
+
return __spreadArray([quality, readability], mismatchBullets, true).filter(Boolean);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
var document_1 = t("validation_points.".concat(code, ".document"), "");
|
|
49
82
|
// Filter out empty strings
|
|
50
83
|
return [quality, readability, document_1].filter(Boolean);
|
|
51
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validationUtils.js","sources":["../../../../src/utils/validationUtils.ts"],"sourcesContent":["import type { Prediction } from \"./apiAnalysis\";\n\n/**\n * Default validation points for success scenarios\n */\nconst DEFAULT_SUCCESS_VALIDATION_POINTS = {\n quality: \"success.quality_excellent\",\n readability: \"success.readability_confirmed\",\n authenticity: \"success.authenticity_verified\",\n} as const;\n\n/**\n * Default validation points for error scenarios\n */\nconst DEFAULT_ERROR_VALIDATION_POINTS = {\n quality: \"errors.image_quality_insufficient\",\n readability: \"errors.readability_problematic\",\n authenticity: \"errors.authenticity_not_verified\",\n} as const;\n\n/**\n * Safely extracts error code from predictions array\n */\nexport function getErrorCodeFromPredictions(predictions?: Prediction[] | null): string | null {\n if (!predictions || !Array.isArray(predictions) || predictions.length === 0) {\n return null;\n }\n return predictions[0].code || null;\n}\n\n/**\n * Gets validation points based on error code and scenario type\n
|
|
1
|
+
{"version":3,"file":"validationUtils.js","sources":["../../../../src/utils/validationUtils.ts"],"sourcesContent":["import type { Prediction, JdiMismatchDetail } from \"./apiAnalysis\";\n\n/**\n * Clé i18n (suffixe de `validation_points.7.0.*`) pour chaque champ d'identité\n * en échec. Voir docs backend NFC_JDI_ERROR_MAPPING.md pour le référentiel de\n * codes — 7.0 = \"owner\" (le détenteur du document ne correspond pas à la\n * saisie utilisateur).\n */\nconst MISMATCH_FIELD_KEY: Record<JdiMismatchDetail[\"field\"], string> = {\n firstName: \"mismatch_first_name\",\n lastName: \"mismatch_last_name\",\n birthDate: \"mismatch_birth_date\",\n};\n\n/**\n * Default validation points for success scenarios\n */\nconst DEFAULT_SUCCESS_VALIDATION_POINTS = {\n quality: \"success.quality_excellent\",\n readability: \"success.readability_confirmed\",\n authenticity: \"success.authenticity_verified\",\n} as const;\n\n/**\n * Default validation points for error scenarios\n */\nconst DEFAULT_ERROR_VALIDATION_POINTS = {\n quality: \"errors.image_quality_insufficient\",\n readability: \"errors.readability_problematic\",\n authenticity: \"errors.authenticity_not_verified\",\n} as const;\n\n/**\n * Safely extracts error code from predictions array\n */\nexport function getErrorCodeFromPredictions(predictions?: Prediction[] | null): string | null {\n if (!predictions || !Array.isArray(predictions) || predictions.length === 0) {\n return null;\n }\n return predictions[0].code || null;\n}\n\n/**\n * Gets validation points based on error code and scenario type\n *\n * @param errorCode - The error code from API response (e.g., \"1.0\", \"2.1\")\n * @param predictions - Optional predictions array as fallback for error code\n * @param t - Translation function from i18n\n * @param type - Type of scenario: 'success' or 'error'\n * @param mismatchDetails - Pour le code 7.0 uniquement : champs d'identité en\n * échec (saisi vs lu), calculés côté backend. S'ils sont fournis et non\n * vides, remplacent la bullet \"document\" générique par un message\n * personnalisé par champ. Sinon, comportement inchangé (message générique).\n * @returns Array of validation point strings\n */\nexport function getValidationPoints(\n errorCode: string | undefined | null,\n predictions: Prediction[] | undefined | null,\n t: any, // Using any to be compatible with i18n TFunction\n type: 'success' | 'error',\n mismatchDetails?: JdiMismatchDetail[] | null,\n): string[] {\n // Use errorCode from props, or try to get from predictions as fallback\n let code = errorCode;\n if (!code) {\n code = getErrorCodeFromPredictions(predictions);\n }\n\n if (code) {\n // Try to get code-specific validation points from i18n\n const quality = t(`validation_points.${code}.quality`, \"\");\n const readability = t(`validation_points.${code}.readability`, \"\");\n\n // If we have at least quality and readability, use code-specific points\n if (quality && readability) {\n if (code === '7.0' && mismatchDetails && mismatchDetails.length > 0) {\n const mismatchBullets = mismatchDetails\n .map((detail) => {\n const fieldKey = MISMATCH_FIELD_KEY[detail.field];\n if (!fieldKey) return \"\";\n return t(`validation_points.7.0.${fieldKey}`, {\n entered: detail.entered,\n read: detail.read,\n });\n })\n .filter(Boolean);\n\n if (mismatchBullets.length > 0) {\n return [quality, readability, ...mismatchBullets].filter(Boolean);\n }\n }\n\n const document = t(`validation_points.${code}.document`, \"\");\n // Filter out empty strings\n return [quality, readability, document].filter(Boolean);\n }\n }\n\n // Fallback to default validation points\n const defaults = type === 'success'\n ? DEFAULT_SUCCESS_VALIDATION_POINTS\n : DEFAULT_ERROR_VALIDATION_POINTS;\n\n return [\n t(defaults.quality, \"\"),\n t(defaults.readability, \"\"),\n t(defaults.authenticity, \"\"),\n ].filter(Boolean);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Détail d'un champ d'identité en échec pour le code 7.0 (owner mismatch) :
|
|
3
|
+
* valeur saisie par l'utilisateur vs valeur lue sur le document, telles que
|
|
4
|
+
* calculées côté backend (voir GET /session/sdk/:id/analysis-status).
|
|
5
|
+
*/
|
|
6
|
+
interface JdiMismatchDetail {
|
|
7
|
+
field: 'firstName' | 'lastName' | 'birthDate';
|
|
8
|
+
entered: string;
|
|
9
|
+
read: string;
|
|
10
|
+
}
|
|
1
11
|
interface Prediction {
|
|
2
12
|
code: string;
|
|
3
13
|
codeDescription: string;
|
|
@@ -8,6 +18,8 @@ interface Prediction {
|
|
|
8
18
|
firstName?: string;
|
|
9
19
|
lastName?: string;
|
|
10
20
|
};
|
|
21
|
+
/** Présent uniquement pour le code 7.0, quand un mismatch a été détecté. */
|
|
22
|
+
mismatchDetails?: JdiMismatchDetail[];
|
|
11
23
|
}
|
|
12
24
|
interface AnalysisResult {
|
|
13
25
|
predictions: Prediction[];
|
|
@@ -29,4 +41,4 @@ declare const hasAnalysisFailed: (predictions: Prediction[]) => boolean;
|
|
|
29
41
|
declare const getPrimaryRootCause: (predictions: Prediction[]) => string | null;
|
|
30
42
|
|
|
31
43
|
export { extractRootCauses, getPrimaryRootCause, hasAnalysisFailed };
|
|
32
|
-
export type { AnalysisResult, Prediction };
|
|
44
|
+
export type { AnalysisResult, JdiMismatchDetail, Prediction };
|