Add optional KYC flow and service-backed account limits

This commit is contained in:
Stephan D committed 2026-09-12 09:28:24 +02:00
1 parent 61ccfc1844
commit 3397f04ab7
38 files changed
+3443 -36

No files matched your search

@@ -535,6 +535,462 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Prepare demo email again'**
String get demoResend;
/// No description provided for @kycTitle.
///
/// In en, this message translates to:
/// **'Verification & limits'**
String get kycTitle;
/// No description provided for @kycIntro.
///
/// In en, this message translates to:
/// **'Your account, at your pace. Verify your identity when you need higher limits.'**
String get kycIntro;
/// No description provided for @kycDemo.
///
/// In en, this message translates to:
/// **'DEMO · Use sample images only. Photos stay in memory, are never uploaded, and disappear when you leave or reload. Review decisions are simulated.'**
String get kycDemo;
/// No description provided for @kycUnverified.
///
/// In en, this message translates to:
/// **'Not verified'**
String get kycUnverified;
/// No description provided for @kycPending.
///
/// In en, this message translates to:
/// **'In review'**
String get kycPending;
/// No description provided for @kycApproved.
///
/// In en, this message translates to:
/// **'Identity verified'**
String get kycApproved;
/// No description provided for @kycChanges.
///
/// In en, this message translates to:
/// **'New photos needed'**
String get kycChanges;
/// No description provided for @kycDenied.
///
/// In en, this message translates to:
/// **'Verification declined'**
String get kycDenied;
/// No description provided for @kycUnverifiedBody.
///
/// In en, this message translates to:
/// **'You can keep using your account with basic limits. Submit a passport photo and a selfie holding it to request an upgrade.'**
String get kycUnverifiedBody;
/// No description provided for @kycPendingBody.
///
/// In en, this message translates to:
/// **'Your submission is awaiting a human review. Basic limits remain active until approval. You do not need to submit again.'**
String get kycPendingBody;
/// No description provided for @kycApprovedBody.
///
/// In en, this message translates to:
/// **'Your review is complete. Check your current limits below.'**
String get kycApprovedBody;
/// No description provided for @kycChangesBody.
///
/// In en, this message translates to:
/// **'Your account remains available with basic limits. Replace the photos and submit a new review request.'**
String get kycChangesBody;
/// No description provided for @kycDeniedBody.
///
/// In en, this message translates to:
/// **'Basic limits remain available. If you believe this decision is incorrect, contact support for a review.'**
String get kycDeniedBody;
/// No description provided for @kycPassportReason.
///
/// In en, this message translates to:
/// **'The passport details could not be read. Retake the photo in good light, with every edge visible.'**
String get kycPassportReason;
/// No description provided for @kycSelfieReason.
///
/// In en, this message translates to:
/// **'Your face or passport was not clear in the selfie. Keep both visible and in focus.'**
String get kycSelfieReason;
/// No description provided for @kycExpiredReason.
///
/// In en, this message translates to:
/// **'The passport has expired. Use a valid passport and take both photos again.'**
String get kycExpiredReason;
/// No description provided for @kycDeniedReason.
///
/// In en, this message translates to:
/// **'We could not verify your identity from this submission.'**
String get kycDeniedReason;
/// No description provided for @kycStart.
///
/// In en, this message translates to:
/// **'Verify identity'**
String get kycStart;
/// No description provided for @kycResubmit.
///
/// In en, this message translates to:
/// **'Replace photos'**
String get kycResubmit;
/// No description provided for @kycRefresh.
///
/// In en, this message translates to:
/// **'Refresh status & limits'**
String get kycRefresh;
/// No description provided for @kycSupport.
///
/// In en, this message translates to:
/// **'Contact support'**
String get kycSupport;
/// No description provided for @kycSupportBody.
///
/// In en, this message translates to:
/// **'Support is not connected in this preview. In the live app, you will be able to request a review here without submitting documents again.'**
String get kycSupportBody;
/// No description provided for @kycBasic.
///
/// In en, this message translates to:
/// **'Basic'**
String get kycBasic;
/// No description provided for @kycVerifiedTier.
///
/// In en, this message translates to:
/// **'Verified'**
String get kycVerifiedTier;
/// No description provided for @kycLimits.
///
/// In en, this message translates to:
/// **'Your limits'**
String get kycLimits;
/// No description provided for @kycLimitsDemo.
///
/// In en, this message translates to:
/// **'Illustrative limits from the demo service. These are not a live offer.'**
String get kycLimitsDemo;
/// No description provided for @kycDay.
///
/// In en, this message translates to:
/// **'Daily volume'**
String get kycDay;
/// No description provided for @kycMonth.
///
/// In en, this message translates to:
/// **'Monthly volume'**
String get kycMonth;
/// No description provided for @kycCurrent.
///
/// In en, this message translates to:
/// **'Current cap'**
String get kycCurrent;
/// No description provided for @kycRemaining.
///
/// In en, this message translates to:
/// **'Available'**
String get kycRemaining;
/// No description provided for @kycAfter.
///
/// In en, this message translates to:
/// **'After approval'**
String get kycAfter;
/// No description provided for @kycLimitsError.
///
/// In en, this message translates to:
/// **'Limits could not be refreshed. Any values below are out of date. Retry to see your current access.'**
String get kycLimitsError;
/// No description provided for @kycLimitsEmpty.
///
/// In en, this message translates to:
/// **'No limits were returned. Refresh or check with support before making a transaction.'**
String get kycLimitsEmpty;
/// No description provided for @kycLoading.
///
/// In en, this message translates to:
/// **'Loading your status…'**
String get kycLoading;
/// No description provided for @kycPassport.
///
/// In en, this message translates to:
/// **'Passport photo'**
String get kycPassport;
/// No description provided for @kycSelfie.
///
/// In en, this message translates to:
/// **'Selfie with passport'**
String get kycSelfie;
/// No description provided for @kycReview.
///
/// In en, this message translates to:
/// **'Review your photos'**
String get kycReview;
/// No description provided for @kycPassportHelp.
///
/// In en, this message translates to:
/// **'Open your valid passport to the photo page. Show all four edges and keep text sharp. Avoid glare, blur and covered details.'**
String get kycPassportHelp;
/// No description provided for @kycSelfieHelp.
///
/// In en, this message translates to:
/// **'Hold the open passport beside your face. Show your whole face and the photo page in the same image. Keep both sharp and uncovered.'**
String get kycSelfieHelp;
/// No description provided for @kycFileRules.
///
/// In en, this message translates to:
/// **'JPEG or PNG · up to 10 MB · at least 600 × 600 pixels. Take a photo with your camera, then choose it here.'**
String get kycFileRules;
/// No description provided for @kycChoose.
///
/// In en, this message translates to:
/// **'Choose photo'**
String get kycChoose;
/// No description provided for @kycReplace.
///
/// In en, this message translates to:
/// **'Choose a different photo'**
String get kycReplace;
/// No description provided for @kycRemove.
///
/// In en, this message translates to:
/// **'Remove photo'**
String get kycRemove;
/// No description provided for @kycNext.
///
/// In en, this message translates to:
/// **'Continue'**
String get kycNext;
/// No description provided for @kycBack.
///
/// In en, this message translates to:
/// **'Back'**
String get kycBack;
/// No description provided for @kycSkip.
///
/// In en, this message translates to:
/// **'Keep basic limits'**
String get kycSkip;
/// No description provided for @kycClose.
///
/// In en, this message translates to:
/// **'Back to account preview'**
String get kycClose;
/// No description provided for @kycReviewHelp.
///
/// In en, this message translates to:
/// **'Check that both photos are readable and show the same passport. A staff member will review them; submission does not immediately raise your limits.'**
String get kycReviewHelp;
/// No description provided for @kycConfirm.
///
/// In en, this message translates to:
/// **'These photos show me and my own valid passport.'**
String get kycConfirm;
/// No description provided for @kycSubmit.
///
/// In en, this message translates to:
/// **'Submit for review'**
String get kycSubmit;
/// No description provided for @kycSubmitDemo.
///
/// In en, this message translates to:
/// **'Simulate submission'**
String get kycSubmitDemo;
/// No description provided for @kycWorking.
///
/// In en, this message translates to:
/// **'Processing… Please keep this page open.'**
String get kycWorking;
/// No description provided for @kycDiscardTitle.
///
/// In en, this message translates to:
/// **'Discard these photos?'**
String get kycDiscardTitle;
/// No description provided for @kycDiscardBody.
///
/// In en, this message translates to:
/// **'Your draft is only in memory. Leaving will remove the selected photos; you can start again later.'**
String get kycDiscardBody;
/// No description provided for @kycStay.
///
/// In en, this message translates to:
/// **'Keep editing'**
String get kycStay;
/// No description provided for @kycDiscard.
///
/// In en, this message translates to:
/// **'Discard & leave'**
String get kycDiscard;
/// No description provided for @kycErrorUnavailable.
///
/// In en, this message translates to:
/// **'The service is unavailable. Your selected photos are still here. Try again.'**
String get kycErrorUnavailable;
/// No description provided for @kycErrorInternal.
///
/// In en, this message translates to:
/// **'Something went wrong. Try again; your selected photos have been kept.'**
String get kycErrorInternal;
/// No description provided for @kycErrorPermission.
///
/// In en, this message translates to:
/// **'We could not open that photo. Check file access or choose another image.'**
String get kycErrorPermission;
/// No description provided for @kycErrorFormat.
///
/// In en, this message translates to:
/// **'Choose a JPEG or PNG image. Other formats are not supported.'**
String get kycErrorFormat;
/// No description provided for @kycErrorLarge.
///
/// In en, this message translates to:
/// **'This image is too large. Choose one under 10 MB and 40 megapixels.'**
String get kycErrorLarge;
/// No description provided for @kycErrorUnreadable.
///
/// In en, this message translates to:
/// **'This image is damaged or cannot be read. Choose another photo.'**
String get kycErrorUnreadable;
/// No description provided for @kycErrorSmall.
///
/// In en, this message translates to:
/// **'The photo is too small. Use an image at least 600 pixels wide and high.'**
String get kycErrorSmall;
/// No description provided for @kycErrorIncomplete.
///
/// In en, this message translates to:
/// **'Choose both photos and confirm they belong to you before submitting.'**
String get kycErrorIncomplete;
/// No description provided for @kycErrorSession.
///
/// In en, this message translates to:
/// **'Your session has expired. Return to login, then check your verification status.'**
String get kycErrorSession;
/// No description provided for @kycErrorRate.
///
/// In en, this message translates to:
/// **'Too many requests. Wait a moment before trying again.'**
String get kycErrorRate;
/// No description provided for @kycErrorConflict.
///
/// In en, this message translates to:
/// **'Your review status has changed. Refresh it before continuing.'**
String get kycErrorConflict;
/// No description provided for @kycDemoControls.
///
/// In en, this message translates to:
/// **'Demo: simulate a backoffice decision'**
String get kycDemoControls;
/// No description provided for @kycDemoApprove.
///
/// In en, this message translates to:
/// **'Approve'**
String get kycDemoApprove;
/// No description provided for @kycDemoCorrect.
///
/// In en, this message translates to:
/// **'Request clearer passport'**
String get kycDemoCorrect;
/// No description provided for @kycDemoSelfie.
///
/// In en, this message translates to:
/// **'Request clearer selfie'**
String get kycDemoSelfie;
/// No description provided for @kycDemoExpired.
///
/// In en, this message translates to:
/// **'Passport expired'**
String get kycDemoExpired;
/// No description provided for @kycDemoDeny.
///
/// In en, this message translates to:
/// **'Decline'**
String get kycDemoDeny;
/// No description provided for @kycPreview.
///
/// In en, this message translates to:
/// **'Explore verification & limits'**
String get kycPreview;
/// No description provided for @kycChooseFirst.
///
/// In en, this message translates to:
/// **'Choose a photo to continue.'**
String get kycChooseFirst;
/// No description provided for @kycStatusStale.
///
/// In en, this message translates to:
/// **'Status could not be refreshed. The status shown is the last known result.'**
String get kycStatusStale;
}
class _AppLocalizationsDelegate