defmodule Yousign.SignatureRequestInput do @moduledoc """ Models a Yousign request signature input. See: https://developers.yousign.com/reference/post-signature_requests """ use TypedStruct @type delivery_mode :: :email | :none @type reminder_settings :: %{ interval_in_days: non_neg_integer(), max_occurrences: non_neg_integer() } @type signature_level :: :electronic_signature | :advanced_electronic_signature | :electronic_signature_with_qualified_certificate | :qualified_electronic_signature_mode_1 @type signature_authentication_mode :: :otp_sms | :otp_email | :no_otp | nil @type redirect_urls :: %{success: String.t() | nil, error: String.t() | nil} | nil @type field_input :: %{ type: :signature, document_id: String.t(), width: non_neg_integer() | nil, height: non_neg_integer() | nil, page: non_neg_integer(), x: non_neg_integer(), y: non_neg_integer() } | %{ type: :mention, document_id: String.t(), width: non_neg_integer() | nil, page: non_neg_integer(), x: non_neg_integer(), y: non_neg_integer(), mention: String.t() } | %{ type: :text, document_id: String.t(), width: non_neg_integer() | nil, height: non_neg_integer() | nil, page: non_neg_integer(), x: non_neg_integer(), y: non_neg_integer(), max_length: non_neg_integer(), instruction: String.t(), optional: boolean() } | %{ type: :checkbox, document_id: String.t(), page: non_neg_integer(), x: non_neg_integer(), y: non_neg_integer(), optional: boolean(), name: String.t() | nil, checked: boolean() } @type signer_info :: %{ first_name: String.t(), last_name: String.t(), email: String.t(), phone_number: String.t() | nil, locale: :en | :de | :fr | :it | :es | :pl | :nl } @type signer_from_info :: %{ info: signer_info(), fields: list(field_input()), signature_level: signature_level(), signature_authentication_mode: signature_authentication_mode(), redirect_urls: redirect_urls() } @derive Jason.Encoder typedstruct do field :name, String.t(), enforce: true field :delivery_mode, delivery_mode(), enforce: true field :ordered_signers, boolean() | nil, default: nil field :reminder_settings, reminder_settings() | nil, default: nil field :timezone, String.t() | nil, default: nil field :email_custom_note, String.t() | nil, default: nil field :expiration_date, DateTime.t() | nil, default: nil field :template_id, String.t() | nil, default: nil field :external_id, String.t() | nil, default: nil field :branding_id, String.t() | nil, default: nil field :documents, list(String.t()), enforce: true field :signers, list(signer_from_info()), enforce: true end end