HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/buyercall_forms/buyercall/buyercall/blueprints/api2/doc/serializers.py
from flask_restx import fields
from buyercall.blueprints.api2.restplus import api
from datetime import date, datetime, timedelta

account_users = api.model("accountUsers", {
    'firstname': fields.String(required=True, description='Account user''s first name', example='John', max_length=64),
    'lastname': fields.String(required=True, description='Account user''s last name', example='Doe', max_length=64),
    'email': fields.String(required=True, description='Account user''s email address', example='john@doe.com',
                           max_length=128),
    'phonenumber': fields.Integer(required=True,
                                  description='Account user''s phone number. Please use the '
                                              'user''mobile number to enable two factor authentication',
                                  example='7732909554', max_length=10),
    'role': fields.String(required=True, description='Account user''s role. Either admin or agent.', example='agent',
                          enum=['admin', 'agent']),
    'password': fields.String(required=True, description='Account user''s account password.',
                              example='xfdf4ef@sdf!dfggD2S&fF', max_length=256)
})


account_add = api.model('account', {
    'name': fields.String(required=True, description='The name of the dealer added by partner', example='ABC Motors',
                          max_length=255),
    'is_active': fields.Boolean(required=True, description='Whether or not the partner account is active',
                                default=True),
    'partner_account_code': fields.String(required=False, description='Internal partner code for a dealer',
                                          example='A0034244', max_length=64),
    'partner_account_credit_service_provider': fields.String(required=False,
                                                             description='Dealer''s credit score service provider',
                                                             example='offerlogix', max_length=128),
    'users': fields.List(fields.Nested(account_users))
})

account_update = api.model('account ', {
    'name': fields.String(required=False, description='The name of the dealer added by partner', max_length=255,
                          example='ABC Motors'),
    'is_active': fields.Boolean(required=False, description='Whether or not the partner account is active'),
    'partner_account_code': fields.String(required=False, description='Internal partner code for a dealer',
                                          max_length=64, example='A0034244'),
    'users': fields.List(fields.Nested(account_users))
})

agent_add = api.model('agent', {
    'title': fields.String(required=False, description='The business title of the agent', max_length=128,
                           example='Manager'),
    'firstname': fields.String(required=False, description='First name of the agent', max_length=128,
                               example='Todd'),
    'lastname': fields.String(required=False, description='Last name of the agent', max_length=128,
                              example='Sweeney'),
    'phone_number': fields.String(required=True, description='Phone number of the agent', max_length=20,
                                  example='3445054312'),
    'mobile_number': fields.String(required=False, description='Mobile number of the agent', max_length=20,
                                   example='3363004312'),
    'email': fields.String(required=False, description='Email address of the agent', max_length=254,
                           example='user@company.com'),
    'department': fields.String(required=False, description='Department of the agent', max_length=128,
                                example='Internet Sales'),
    'description': fields.String(required=True, description='Description for the agent, forwarding number or group',
                                 example='front desk agent'),
    'timezone': fields.String(required=False, description='Timezone of the agent', example='US/Eastern',
                              enum=['US/Eastern', 'US/Central', 'US/Pacific', 'US/Mountain', 'US/Hawaii', 'US/Alaska']),
    'all_hours': fields.Boolean(required=False, description='Whether the agent is available 24/7. The agent will '
                                                            'default to the agent schedule if all_hours is set '
                                                            'to false.', default=True)
})

agent_update = api.model('agent ', {
    'title': fields.String(required=False, description='The business title of the agent', max_length=128,
                           example='Manager'),
    'firstname': fields.String(required=False, description='First name of the agent', max_length=128,
                               example='Todd'),
    'lastname': fields.String(required=False, description='Last name of the agent', max_length=128,
                              example='Sweeney'),
    'phone_number': fields.String(required=False, description='Phone number of the agent', max_length=20,
                                  example='3445054312'),
    'mobile_number': fields.String(required=False, description='Mobile number of the agent', max_length=20,
                                   example='3363004312'),
    'email': fields.String(required=False, description='Email address of the agent', max_length=254,
                           example='user@company.com'),
    'department': fields.String(required=False, description='Department of the agent', max_length=128,
                                example='Internet Sales'),
    'description': fields.String(required=False, description='Description for the agent, forwarding number or group',
                                 example='front desk agent'),
    'timezone': fields.String(required=False, description='Timezone of the agent', example='US/Eastern',
                            enum=['US/Eastern', 'US/Central', 'US/Pacific', 'US/Mountain', 'US/Hawaii', 'US/Alaska']),
    'all_hours': fields.Boolean(required=False, description='Whether the agent is available 24/7. The agent will '
                                                            'default to the agent schedule if all_hours is set '
                                                            'to false.')
})

agent_schedule_day_update = api.model('scheduleDay', {
    'day': fields.String(required=True, description='The scheduled day for a specific agent', example='Monday',
                                 enum=['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']),
    'available_from': fields.String(required=False, description='When the agent is available from on this day in '
                                                                'their timezone. '
                                                                'Must be in 24 hour format followed by AM/PM.',
                                    example='08:00 AM', max_length=8),
    'available_to': fields.String(required=False, description='When the agent becomes unavailable on this day. '
                                                              'Must be in 24 hour format followed by AM/PM.',
                                  example='17:00 PM', max_length=8),
    'is_active': fields.Boolean(required=False, description='If the agent is available on this day')
})

agent_schedule_update = api.model('schedule', {
    'schedule': fields.List(fields.Nested(agent_schedule_day_update), required=True, description='The schedule list of days')
})

blocked_number_add = api.model('block', {
    'phonenumber': fields.String(required=True, description='The phone number that needs blocking',
                                 max_length=20, example="7075543212"),
    'status': fields.String(required=True, description='The status of the blocked phone number',
                            enum=['blocked', 'unblocked'], example="blocked"),
    'global_exclusion': fields.Boolean(required=False,
                                       description='If the blocked phone number is a global exclusion. '
                                                   'The number will be blocked for all accounts', default=False)
})

blocked_number_update = api.model('block ', {
    'phonenumber': fields.String(required=False, description='The phone number that needs blocking',
                                 max_length=20, example="7075543212"),
    'status': fields.String(required=False, description='The status of the blocked phone number',
                            enum=['blocked', 'unblocked'], example="blocked"),
    'global_exclusion': fields.Boolean(required=False,
                                       description='If the blocked phone number is a global exclusion. '
                                                   'The number will be blocked for all accounts', default=False)
})

message_phonenumber_add = api.model('message', {
    'phone_number_id': fields.Integer(required=True, description='The Id of a BuyCall phone number associated '
                                                                 'with an account', example=1),
    'number': fields.String(required=True, description='The phone number that needs to received the message, '
                                                       'also known as the to_ number', max_length=20,
                            example="7732909654"),
    'body': fields.String(required=True, description='The body content of the text message',
                          max_length=1024, example='Are you still interested in this vehicle?'),
    'media': fields.String(required=False, description='The url to a media file that can be included as '
                                                       'image attachment to the text message', max_length=512,
                           example='https://s3-us-west-2.amazonaws.com/buyercall-logo/logo_buyercall_yellow.png')
})

widget_agent_add = api.model('widgetOptionsAgent', {
    'id': fields.Integer(required=True, description='The unique identifier of an agent', example=3),
    'fullName': fields.String(required=True, description='The fullname of an agent',
                              max_length=256, default='', example='Tory Phelps'),
    'contactUsing': fields.String(required=True, description='The type of device the agent is using', default='phone',
                                  enum=['phone', 'mobile', 'app'])
})

widget_option_add = api.model('widgetOptions', {
    'agents': fields.List(fields.Nested(widget_agent_add), required=True, description='The list of agents'),
    'addHiddenInformation': fields.Boolean(required=True, description='If a hidden message should be played '
                                                                      'to the agent. '
                                                                      'A hidden information identify the call '
                                                                      'purpose before connecting the caller',
                                           default=False),
    'language': fields.String(required=True, description='The language used for the widget', default='en',
                              enum=['en', 'es']),
    'hiddenInformation': fields.String(required=True, description='Hidden information is a message '
                                                                  'played to the agent to identify the call '
                                                                  'purpose before connecting the caller',
                                       max_length=256, default='', example='A click to call lead'),
    'recordCalls': fields.Boolean(required=True, description='If a phone call should be recorded', default=False),
    'voicemail': fields.Boolean(required=True, description='If a voicemail should be enabled', default=True),
    'voicemailMessage': fields.String(required=True, description='The voicemail intro message being '
                                                                 'played to the caller', max_length=256,
                                      default='Sorry we are not available at the moment. '
                                              'Please leave a message and we will get back to '
                                              'you as soon as possible.', example='Please leave a message '
                                                                                  'after the beep'),
    "routeRandomly": fields.Boolean(required=True, description='Route calls randomly to agents', default=False, example=False),
    "routeInSequence": fields.Boolean(required=True, description='Route calls in sequence to agents', default=False, example=False),
    "routeSimultaneously": fields.Boolean(required=True, description='Route calls simultaneously to agents', default=True, example=True),
    "retryRouting": fields.List(fields.String(description='Retry and call agents if the call was not connect the first time round'), required=True, description='0 - Never retry the call, 1 - Retry the call once, 2 - Retry the call twice', attribute='', min_items=3, max_items=3,
                                default=["0", "", ""], example=["0", "", ""]),
})

widget_add = api.model('widget', {
    'name': fields.String(required=True, description='The name of the widget', max_length=128,
                          example='click to call widget'),
    'type': fields.String(required=True, description='The widget type', max_length=128, default='widget',
                          enum=['widget', 'adf']),
    'phonenumber_id': fields.Integer(required=True, description='The Id of the BuyerCall phone number '
                                                                'associated with the widget', example=3),
    '_options': fields.Nested(widget_option_add, required=True, description='The call settings for the widget'),
    'enabled': fields.Boolean(required=True, description='Whether or not the widget is enabled', default=True)
})

widget_agent_edit = api.model('widgetOptionsAgent ', {
    'id': fields.Integer(required=True, description='The unique identifier of an agent', example=4),
    'fullName': fields.String(required=False, description='The fullname of an agent', max_length=256, default='',
                              example='Tracey Jali'),
    'contactUsing': fields.String(required=False, description='The type of device the agent is using',
                                  enum=['phone', 'mobile', 'app'], example='phone', default='phone')
})

widget_option_edit = api.model('widgetOptions ', {
    'agents': fields.List(fields.Nested(widget_agent_edit), required=False, description='The list of agents'),
    'addHiddenInformation': fields.Boolean(required=False, description='If a hidden message should be played '
                                                                       'to the agent.'
                                                                       'A hidden information identify the call '
                                                                       'purpose before connecting the caller',
                                           default=False),
    'language': fields.String(required=False, description='The language used for the widget',
                              default='en', example='en', enum=['en', 'es']),
    'hiddenInformation': fields.String(required=False, description='Hidden information is a message '
                                                                   'played to the agent to identify the call '
                                                                   'purpose before connecting the caller',
                                       max_length=256, default='', example='click to call lead'),
    'recordCalls': fields.Boolean(required=False, description='If a phone call should be recorded',
                                  default=False),
    'voicemail': fields.Boolean(required=False, description='If voicemail should be enabled',
                                default=True),
    'voicemailMessage': fields.String(required=False, description='The voicemail intro message being '
                                                                  'played to the caller',
                                      max_length=256, default='Sorry we are not available at '
                                                              'the moment. Please leave a message and we '
                                                              'will get back to you as soon as possible.',
                                      example='Please leave a message after the beep.'),
    "routeRandomly": fields.Boolean(required=False, description='Route calls randomly to agents', default=False, example=False),
    "routeInSequence": fields.Boolean(required=False, description='Route calls in sequence to agents', default=False, example=False),
    "routeSimultaneously": fields.Boolean(required=False, description='Route calls simultaneously to agents', default=True,
                                          example=True),
    "retryRouting": fields.List(fields.String(description='Retry and call agents if the call was not connect the first time round'), required=False,
                                description='0 - Never retry the call, 1 - Retry the call once, 2 - Retry the call twice', attribute='', min_items=3, max_items=3,
                                default=["0", "", ""], example=["0", "", ""]),
})

widget_edit = api.model('widget ', {
    'name': fields.String(required=False, description='The name of the widget', max_length=128,
                          example='click to call widget'),
    'type': fields.String(required=False, description='The widget type', max_length=128, default='widget',
                          enum=['widget', 'adf']),
    'phonenumber_id': fields.Integer(required=False, description='The Id of the BuyerCall phone number '
                                                                 'associated with the widget', example=3),
    '_options': fields.Nested(widget_option_edit, required=False, description='The call settings for the widget'),
    'enabled': fields.Boolean(required=False, description='Whether or not the widget is enabled', default=True)
})

widget_call = api.model('call ', {
    'number': fields.String(required=True, description='The phone that will be called. '
                                                       'This will be the lead or '
                                                       'customer phone number.',
                            max_length=20, example='5654432098'),
    'firstname': fields.String(required=False, description='First name of the lead', max_length=128,
                               example='Todd'),
    'lastname': fields.String(required=False, description='Last name of the lead', max_length=128,
                              example='Sweeney'),
    'email': fields.String(required=False, description='Email address of the lead', max_length=254,
                           example='user@company.com'),
    'source': fields.String(required=False,
                            description='The source associated with the phone number.',
                            max_length=50),
    'question': fields.String(required=False, description='The question asked by the lead', max_length=254,
                           example='Did I win?'),

})

phonenumber_agents_add = api.model('phoneAgents', {
    'id': fields.Integer(required=True, description='The unique identifier of an agent', example=3),
    'fullName': fields.String(required=True, description='The fullname of an agent', max_length=256,
                              example='Barry White', default=''),
    'contactUsing': fields.String(required=True, description='The type of device the agent is using', default='phone',
                                  enum=['phone', 'mobile', 'app'])
})

phonenumber_route_config_default_add = api.model('phoneRouteConfigDefault', {
    'agents': fields.List(fields.Nested(phonenumber_agents_add), required=True, description='The list of agents'),
    'callOrder': fields.String(required=True, description='The call order', max_length=256,
                               enum=['sequence', 'simultaneous', 'shuffle'], default='sequence', example='sequence'),
    'retryRouting': fields.Integer(required=True, description='The retry call routing to agent(s) if the call was '
                                                              'initially missed by the agent(s)',
                                   example=0, default=0)
})

phonenumber_route_config_add = api.model('phoneRouteConfig', {
    'configSMSSetup': fields.Boolean(required=True, description='If SMS configuration setup will be enabled',
                                     default=False),
    'defaultRouting': fields.Nested(phonenumber_route_config_default_add, required=True,
                                    description='The route configuration default settings'),
    'greetingMessage': fields.Boolean(required=True, description='If greeting messages should be enabled. '
                                                                 'play a welcome or disclaimer message to'
                                                                 'the caller before connecting to the agent. This '
                                                                 'field is associated with the whisperMessage fields',
                                      default=False),
    'language': fields.String(required=True, description='The language used for the phone call automated messages',
                              default='en', example='en', enum=['en', 'es']),
    'recordCalls': fields.Boolean(required=True, description='If recording of phone calls should be enabled',
                                  default=False),
    # 'routingType': fields.String(required=True, description='The routing type', default='default'),
    'SMSAutoReply': fields.Boolean(required=True, description='If automated SMS replies will be enabled',
                                   default=False),
    'SMSAutoReplyImage': fields.Boolean(required=True, description='If automated SMS image replies should be enabled',
                                        default=False),
    'SMSAutoReplyImageUrl': fields.String(
        required=True,
        description='The URL for the image used in '
                    'the automated SMS reply',
        default='', example='https://s3-us-west-2.amazonaws.com/buyercall-logo/logo_buyercall_yellow.png'),
    'SMSAutoReplyText': fields.String(required=True,
                                      description='The body content of the text message used '
                                                  'for the automated SMS replies',
                                      default='', example='Are you available tomorrow for a showing?'),
    'voicemail': fields.Boolean(required=True, description='If voicemail should be enabled',
                                default=False),
    'voicemailMessage': fields.String(required=True,
                                      description='The voicemail '
                                                  'message that needs to be played to the '
                                                  'caller',
                                      default='', example='Please leave a message after the beep.'),
    'voicemailMessageType': fields.String(
        required=True,
        description='The voicemail message type. If the type is audio an audio file will be played from '
                    'the audio urls. If the type is text the message in voicemailMessage will be played',
                                          enum=['audio', 'text'], example='text', default=''),
    'whisperMessage': fields.String(required=True, description='The message that can be played '
                                                               'to callers before the call'
                                                               'is connected with an agent',
                                    default='',
                                    example='This call will be recorded.'),
    'whisperMessageType': fields.String(
        required=True,
        description='The whisper message type. If the type is audio an audio file will be played '
                    'from the audio urls. If the type is text the message in whisperMessage will be played',
        enum=['audio', 'text'], example='text', default=''),
    'transcribeAnsweredCall': fields.Boolean(required=True, description='If a active answered call should, that is '
                                                                        'being recording, should be transcribed',
                                             default=False),
    'transcribeVoiceMail': fields.Boolean(required=True, description='If a voicemail message should be transcribed',
                                          default=False)
})

phonenumber_add = api.model('phone', {
    'phonenumber': fields.String(required=True,
                                 description='The phone number that will be previsioned. '
                                             'An phone number can be generated using the '
                                             'available phone number api endpoint.',
                                 max_length=20,
                                 example='+17734045678'),
    'type': fields.String(required=True, description='The type of the phone number',
                          enum=['priority', 'tracking'], example='priority', max_length=20),
    'local': fields.Boolean(required=True, description='If the phone number is local',
                            default=True),
    # 'tollfree': fields.Boolean(required=True, description='If the phone number is tollfree'),
    'friendly_name': fields.String(required=True, description='The friendly name for the phone number',
                                   max_length=128,
                                   example='Sales Phone Number'),
    'source': fields.String(required=False,
                            description='The source associated with the phone number.',
                            max_length=256,
                            example='Autotrader'),
    'channel': fields.String(required=False, description='The channel associated with the source',
                             example='ppc',
                             max_length=256),
    'routing_config': fields.Nested(phonenumber_route_config_add, required=True, description='The route '
                                                                                             'configuration of the '
                                                                                             'phonenumber')
})

phonenumber_agents_edit = api.model('phoneAgents ', {
    'id': fields.Integer(required=False, description='The unique identifier of an agent', example=3),
    'fullName': fields.String(required=False, description='The fullname of an agent', max_length=256,
                              example='Barry White', default=''),
    'contactUsing': fields.String(required=False, description='The type of device the agent is using', default='phone',
                                  enum=['phone', 'mobile', 'app'])
})

phonenumber_route_config_default_edit = api.model('phoneRouteConfigDefault ', {
    'agents': fields.List(fields.Nested(phonenumber_agents_edit), required=False, description='The list of agents'),
    'callOrder': fields.String(required=False, description='The call order', max_length=256,
                               enum=['sequence', 'simultaneous', 'shuffle'], default='sequence', example='sequence'),
    'retryRouting': fields.Integer(required=False, description='The retry call routing to agent(s) if the call was '
                                                              'initially missed by the agent(s)',
                                   example=0, default=0)
})

phonenumber_route_config_edit = api.model('phoneRouteConfig ', {
    'configSMSSetup': fields.Boolean(required=False, description='If SMS configuration setup will be enabled',
                                     default=False),
    'defaultRouting': fields.Nested(phonenumber_route_config_default_edit, required=False,
                                    description='The route configuration default settings'),
    'greetingMessage': fields.Boolean(required=False, description='If greeting messages should be enabled. '
                                                                 'play a welcome or disclaimer message to'
                                                                 'the caller before connecting to the agent. This '
                                                                 'field is associated with the whisperMessage fields',
                                      default=False),
    'language': fields.String(required=False, description='The language used for the phone call automated messages',
                              default='en', example='en', enum=['en', 'es']),
    'recordCalls': fields.Boolean(required=False, description='If recording of phone calls should be enabled',
                                  default=False),
    # 'routingType': fields.String(required=True, description='The routing type', default='default'),
    'SMSAutoReply': fields.Boolean(required=False, description='If automated SMS replies will be enabled',
                                   default=False),
    'SMSAutoReplyImage': fields.Boolean(required=False, description='If automated SMS image replies should be enabled',
                                        default=False),
    'SMSAutoReplyImageUrl': fields.String(
        required=False,
        description='The URL for the image used in '
                    'the automated SMS reply',
        default='', example='https://s3-us-west-2.amazonaws.com/buyercall-logo/logo_buyercall_yellow.png'),
    'SMSAutoReplyText': fields.String(required=False,
                                      description='The body content of the text message used '
                                                  'for the automated SMS replies',
                                      default='', example='Are you available tomorrow for a showing?'),
    'voicemail': fields.Boolean(required=False, description='If voicemail should be enabled',
                                default=False),
    'voicemailMessage': fields.String(required=False,
                                      description='The voicemail '
                                                  'message that needs to be played to the '
                                                  'caller',
                                      default='', example='Please leave a message after the beep.'),
    'voicemailMessageType': fields.String(
        required=False,
        description='The voicemail message type. If the type is audio an audio file will be '
                    'played from the audio urls. If the type is text the message in voicemailMessage will be played',
        enum=['audio', 'text'], example='text', default=''),
    'whisperMessage': fields.String(required=False, description='The message that can be played '
                                                                'to callers before the call'
                                                                'is connected with an agent',
                                    default='',
                                    example='This call will be recorded.'),
    'whisperMessageType': fields.String(required=False, description='The whisper message type. '
                                                                    'If the type is audio an audio file '
                                                                    'will be played from the audio urls. '
                                                                    'If the type is text the message in '
                                                                    'whisperMessage will be played',
                                        enum=['audio', 'text'], example='text', default=''),
    'transcribeAnsweredCall': fields.Boolean(required=False, description='If a active answered call should, that is '
                                                                         'being recording, should be transcribed',
                                             default=False),
    'transcribeVoiceMail': fields.Boolean(required=False, description='If a voicemail message should be transcribed',
                                          default=False)
})

phonenumber_edit = api.model('phone ', {
    'friendly_name': fields.String(required=False, description='The friendly name for the phone number',
                                   max_length=128,
                                   example='Sales Phone Number'),
    'source': fields.String(required=False,
                            description='The source associated with the phone number.',
                            max_length=256,
                            example='Autotrader'),
    'channel': fields.String(required=False, description='The channel associated with the source',
                             example='ppc',
                             max_length=256),
    'routing_config': fields.Nested(phonenumber_route_config_edit, required=False, description='The route '
                                                                                              'configuration of the '
                                                                                              'phone number')

})

call_outbound = api.model('call', {
    'agent_id': fields.Integer(required=True,
                               description='The unique identifier of the agent that needs to be called first',
                               example=3),
    'phone_number_id': fields.Integer(required=True,
                                      description='The BuyCall phone number associated '
                                                  'with the partner account',
                                      example=5),
    'number': fields.String(required=True,
                            description='The phone that will be called. '
                                        'This will be the lead or customer phone number',
                            max_length=20,
                            example='7735453320')
})

audio_url_add = api.model('audioUrl', {
    'whisper_message_type': fields.String(
        required=True,
        description='The whisper message type',
        enum=['whisperMessage', 'callBackText', 'voicemailMessage', 'noDigitWhisperMessage', 'digitWhisperMessage'],
        max_length=128,
        example='whisperMessage'),
    'audio_url': fields.String(required=True, description='The URL for the audio file', max_length=256,
                               example='http://url.com/song.mp3'),
    'phonenumber_id': fields.Integer(required=True, description='The Id of BuyerCall phone number '
                                                                'associated with the partner account',
                                     example=5),
    'widget_guid': fields.String(required=False, description='The widget guid the audio URL relates to A audio URL'
                                                             'can below to either a phone number or a widget',
                                 max_length=128, example='11ba6af7-b6f1-47dc-a561-1b7e3e0e037b'),
    'enabled': fields.Boolean(required=True, description='If the audio URL is enabled', default=True)
})

audio_url_edit = api.model('audioUrl ', {
    'whisper_message_type': fields.String(
        required=False,
        description='The whisper message type',
        enum=['whisperMessage', 'callBackText', 'voicemailMessage', 'noDigitWhisperMessage', 'digitWhisperMessage'],
        max_length=128,
        example='whisperMessage'),
    'audio_url': fields.String(required=False, description='The URL for the audio file', max_length=256,
                               example='http://url.com/song.mp3'),
    'phonenumber_id': fields.Integer(required=True, description='The Id of BuyerCall phone number '
                                                                'associated with the partner account',
                                     example=5),
    'widget_guid': fields.String(required=False, description='The widget guid the audio URL relates to A audio URL'
                                                             'can below to either a phone number or a widget',
                                 max_length=128, example='11ba6af7-b6f1-47dc-a561-1b7e3e0e037b'),
    'enabled': fields.Boolean(required=False, description='If the audio URL is enabled', default=True)
})

mobile_agents_add = api.model('mobileAgents', {
    'id': fields.Integer(required=True, description='The unique identifier of an agent', example=3),
    'fullName': fields.String(required=False, description='The fullname of an agent', max_length=256,
                              example='Barry White', default=''),
    'contactUsing': fields.String(required=False, description='The type of device the agent is using', default='phone',
                                  enum=['phone', 'mobile', 'app'])
})

mobile_push_notification = api.model('mobilePushNotification', {
    'sip_username': fields.String(required=True,
                                  description='The mobile app user name',
                                  max_length=64,
                                  example='jsmorgan'),
    'message': fields.String(
        required=True,
        description='The message to be sent as a push notification',
        max_length=128,
        example='If you like us, follow us with BuyerCall'),
})

mobile_route_config_default_add = api.model('mobileRouteConfigDefault', {
    'agents': fields.List(fields.Nested(mobile_agents_add), required=False, description='The list of agents'),
})

mobile_route_config_add = api.model('mobileRouteConfig', {
    'defaultRouting': fields.Nested(mobile_route_config_default_add,
                                    required=False,
                                    description='The default routing configuration for mobile number'),
    'greetingMessage': fields.Boolean(required=False, description='If greeting messages should be enabled. '
                                                                  'play a welcome or disclaimer message to'
                                                                  'the caller before connecting to the agent. This '
                                                                  'field is associated with the whisperMessage fields',
                                      default=False),
    'recordCalls': fields.Boolean(required=False, description='If the phone calls will be recorded', default=False),
    'voicemail': fields.Boolean(required=False,
                                description='If voicemail will be enabled',
                                default=False),
    'voicemailMessage': fields.String(required=False,
                                      description='The voicemail message played to the caller', default='',
                                      example='Please leave a message after the beep.'),
    'voicemailMessageType': fields.String(required=False, description='The voicemail message type. If the type is '
                                                                     'audio an audio file will be played '
                                                                     'from the audio urls. If the type is text '
                                                                     'the message '
                                                                     'in voicemailMessage will be played', default='',
                                          example='text', enum=['text', 'audio']),
    'whisperMessage': fields.String(required=False, description='The greeting message that will be '
                                                               'played to the caller', default='',
                                    example='This call is being recorded.'),
    'whisperMessageType': fields.String(
        required=False,
        description='The whisper message type. If the type is audio an audio file will be played '
                    'from the audio urls. If it is text the message in whisperMessage will be played',
        default='', example='text', enum=['text', 'audio']),
    'transcribeAnsweredCall': fields.Boolean(required=True, description='If a active answered mobile call should, '
                                                                        'that is being recording, should be '
                                                                        'transcribed',
                                             default=False),
    'transcribeVoiceMail': fields.Boolean(required=True, description='If a mobile voicemail message '
                                                                     'should be transcribed',
                                          default=False)
})

mobile_add = api.model('mobile', {
    'sip_username': fields.String(required=True, description='The mobile app user name', max_length=64,
                                  example='jsmorgan'),
    'sip_password': fields.String(required=True, description='The mobile app password', max_length=256, min_length=6,
                                  example='xfg34DFsde453SS=df#'),
    'sip_description': fields.String(required=False,
                                     description='The description for the mobile app', max_length=128,
                                     example='mobile app for jsmorgan'),
    'phonenumber': fields.String(required=True, description='The phone number that needs to be provisioned '
                                                            'for the mobile app. Generate an available phone '
                                                            'number using the available mobile phone number endpoint',
                                 max_length=20, example='+16643309090'),
    'friendly_name': fields.String(required=True, description='The friendly name of the phone number', max_length=128,
                                   example='Phone number for app user jsmorgan'),
    'routing_config': fields.Nested(mobile_route_config_add, required=True, description='The route configuration of '
                                                                                        'the phone'
                                                                                        'number')
})

mobile_agents_edit = api.model('mobileAgents ', {
    'id': fields.Integer(required=False, description='The unique identifier of an agent', example=3),
    'fullName': fields.String(required=False, description='The fullname of an agent', max_length=256,
                              example='Barry White', default=''),
    'contactUsing': fields.String(required=False, description='The type of device the agent is using', default='phone',
                                  enum=['phone', 'mobile', 'app'])
})

mobile_route_config_default_edit = api.model('mobileRouteConfigDefault ', {
    'agents': fields.List(fields.Nested(mobile_agents_edit), required=False, description='The list of agents'),
})

mobile_route_config_edit = api.model('mobileRouteConfig ', {
    'defaultRouting': fields.Nested(mobile_route_config_default_edit,
                                    required=False,
                                    description='The default routing configuration for mobile number'),
    'greetingMessage': fields.Boolean(required=False, description='If greeting messages should be enabled. '
                                                                 'play a welcome or disclaimer message to'
                                                                 'the caller before connecting to the agent. This '
                                                                 'field is associated with the whisperMessage fields',
                                      default=False),
    'recordCalls': fields.Boolean(required=False, description='If the phone calls will be recorded', default=False),
    'voicemail': fields.Boolean(required=False,
                                description='If voicemail will be enabled',
                                default=False),
    'voicemailMessage': fields.String(required=False,
                                      description='The voicemail message played to the caller', default='',
                                      example='Please leave a message after the beep.'),
    'voicemailMessageType': fields.String(required=False, description='The voicemail message type. If the type is '
                                                                     'audio an audio file will be played '
                                                                     'from the audio urls. If the type is text '
                                                                     'the message '
                                                                     'in voicemailMessage will be played', default='',
                                          example='text', enum=['text', 'audio']),
    'whisperMessage': fields.String(required=False, description='The greeting message that will be '
                                                               'played to the caller', default='',
                                    example='This call is being recorded.'),
    'whisperMessageType': fields.String(
        required=False,
        description='The whisper message type. If the type is audio an audio file will be played '
                    'from the audio urls. If it is text the message in whisperMessage will be played',
        default='', example='text', enum=['text', 'audio']),
    'transcribeAnsweredCall': fields.Boolean(required=False, description='If a active answered call should, that is '
                                                                         'being recording, should be transcribed',
                                             default=False),
    'transcribeVoiceMail': fields.Boolean(required=False, description='If a voicemail message should be transcribed',
                                          default=False)
})

mobile_edit = api.model('mobile ', {
    'sip_enabled': fields.Boolean(required=False, description='If SIP is enabled', default=True),
    'sip_description': fields.String(required=False, description='The description of the SIP', max_length=128,
                                     example='mobile app for jsmorgan'),
    'sip_password': fields.String(required=False, description='The password for SIP', max_length=256, min_length=6),

    'friendly_name': fields.String(required=False, description='The friendly name for the phone number',
                                   max_length=128,
                                   example='jsmorgan mobile number'),
    'routing_config': fields.Nested(mobile_route_config_edit, required=False, description='The route configuration '
                                                                                          'of the phonenumber'),
})

webhook_add = api.model('webhook', {
    'webhook_url': fields.String(required=True,
                                 description='The url that needs to receive a POST request when this webhook event is triggered',
                                 max_length=64, example="https://yourwebhook.com"),
    'security_token': fields.String(required=False,
                           description='Token to be used in webhook header', max_length=256,
                           example='76522633-2450-4ff2-8e80-7064d7839cc5')
})

webhook_edit = api.model('webhook ', {
    'webhook_url': fields.String(required=False,
                                 description='The url that needs to receive a POST request when this webhook event is triggered',
                                 max_length=64, example="https://yourwebhook.com"),
    'security_token': fields.String(required=False,
                           description='Token to be used in webhook header', max_length=256,
                           example='76522633-2450-4ff2-8e80-7064d7839cc5')
})

phonenumber_agent_add = api.model('operationalAgent', {
    'id': fields.Integer(required=True, description='The unique identifier of an agent', example=3),
    'fullName': fields.String(required=False, description='The fullname of an agent', max_length=256,
                              example='Barry White', default=''),
    'contactUsing': fields.String(required=False, description='The type of device the agent is using', default='phone',
                                  enum=['phone', 'mobile', 'app'])
})

contact_add = api.model('contact', {
    'firstname': fields.String(required=True, description='The firstname of the contact', max_length=128, min_length=3, example='John'),
    'lastname': fields.String(required=True, description='The lastname of the contact', max_length=128, example='Smith'),
    'phonenumber': fields.String(required=True, description='The phonenumber of the contact', max_length=20, example='+17732905643'),
    'agent_id': fields.Integer(required=False,
                               description='The unique identifier of the agent that handles the contact',
                               example=3),
    'birthday': fields.String(required=False,
                               description='The birthday of the contact',
                                max_length=32,
                               example='1977-07-20'),
    'avatar': fields.String(required=False,
                              description='The URL to the normal sized avatar. A size of 140 x 140 pixels are recommended',
                              max_length=512,
                              example='https://buyercall-logo.s3-us-west-2.amazonaws.com/BuyerCall_Logo.png'),
    'large_avatar': fields.String(required=False,
                            description='The URL to the large sized avatar. A size of 180 x 180 pixels are recommended',
                            max_length=512,
                            example='https://buyercall-logo.s3-us-west-2.amazonaws.com/BuyerCall_Logo.png'),
    'email': fields.String(required=False, description='Email address of the contact', max_length=64,
                           example='user@company.com'),
    'address_1': fields.String(required=False, description='The first address field of the contact (street address)', max_length=128,
                           example='10 Apple Street'),
    'address_2': fields.String(required=False, description='The second address field of the contact', max_length=128,
                               example='Mount Pleasant'),
    'city': fields.String(required=False, description='The city the contact is in', max_length=64, example='New York'),
    'state': fields.String(required=False, description='The state the contact is in', max_length=64, example='New York'),
    'country': fields.String(required=False, description='The country the contact is in', max_length=64, example='USA'),
    'zip': fields.String(required=False, description='The zip code the contact is in', max_length=10, example='10001'),
    'ip': fields.String(required=False, description='IP address of the contact', max_length=32, example='127.0.0.1'),
    'is_deactivated': fields.Boolean(required=False, description='Whether or not a contact is deactivated.', default=False),
    'status': fields.String(required=False, description='The status of the contact',
                            enum=['no status', 'new lead', 'general interest', 'follow-up required',
                                  'appointment scheduled', 'application started', 'application approved',
                                  'under contract', 'application declined', 'previous customer', 'service',
                                  'billing and accounts', 'sold customer', 'completed conversation', 'do not contact',
                                  'other'],
                            example="no status"),
    'is_do_not_call': fields.Boolean(required=False, description='Whether or not the contact should be callable', default=False),
    'is_unsubscribe': fields.Boolean(required=False, description='Whether or not the contact is unsubscribed', default=False),
    'caller_id': fields.String(required=False, description='The caller id, if available, for the contact', max_length=128, example='')
})

contact_edit = api.model('contact ', {
    'firstname': fields.String(required=False, description='The firstname of the contact', max_length=128, min_length=3, example='John'),
    'lastname': fields.String(required=False, description='The lastname of the contact', max_length=128, example='Smith'),
    'phonenumber': fields.String(required=False, description='The phonenumber of the contact', max_length=20, example='+17732905643'),
    'agent_id': fields.Integer(required=False,
                               description='The unique identifier of the agent that handles the contact',
                               example=3),
    'birthday': fields.String(required=False,
                               description='The birthday of the contact',
                                max_length=32,
                               example='1977-07-20'),
    'avatar': fields.String(required=False,
                              description='The URL to the normal sized avatar. A size of 140 x 140 pixels are recommended',
                              max_length=512,
                              example='https://buyercall-logo.s3-us-west-2.amazonaws.com/BuyerCall_Logo.png'),
    'large_avatar': fields.String(required=False,
                            description='The URL to the large sized avatar. A size of 180 x 180 pixels are recommended',
                            max_length=512,
                            example='https://buyercall-logo.s3-us-west-2.amazonaws.com/BuyerCall_Logo.png'),
    'email': fields.String(required=False, description='Email address of the contact', max_length=64,
                           example='user@company.com'),
    'address_1': fields.String(required=False, description='The first address field of the contact (street address)', max_length=128,
                           example='10 Apple Street'),
    'address_2': fields.String(required=False, description='The second address field of the contact', max_length=128,
                               example='Mount Pleasant'),
    'city': fields.String(required=False, description='The city the contact is in', max_length=64, example='New York'),
    'state': fields.String(required=False, description='The state the contact is in', max_length=64, example='New York'),
    'country': fields.String(required=False, description='The country the contact is in', max_length=64, example='USA'),
    'zip': fields.String(required=False, description='The zip code the contact is in', max_length=10, example='10001'),
    'ip': fields.String(required=False, description='IP address of the contact', max_length=32, example='127.0.0.1'),
    'is_deactivated': fields.Boolean(required=False, description='Whether or not a contact is deactivated.', default=False),
    'status': fields.String(required=False, description='The status of the contact',
                            enum=['no status', 'new lead', 'general interest', 'follow-up required',
                                  'appointment scheduled', 'application started', 'application approved',
                                  'under contract', 'application declined', 'previous customer', 'service',
                                  'billing and accounts', 'sold customer', 'completed conversation', 'do not contact',
                                  'other'],
                            example="no status"),
    'is_do_not_call': fields.Boolean(required=False, description='Whether or not the contact should be callable', default=False),
    'is_unsubscribe': fields.Boolean(required=False, description='Whether or not the contact is unsubscribed', default=False),
    'caller_id': fields.String(required=False, description='The caller id, if available, for the contact', max_length=128, example='')
})

contacts_add = api.model('contacts', {
    'contacts': fields.List(fields.Nested(contact_add), required=True, description='The list of contacts')
})

form_add = api.model('form', {
    'display_name': fields.String(required=True, description='A friendly name for the form.', example='Finance App Form'),
    'widget_id': fields.Integer(required=False, description='Generate a phone to the lead on submission by '
                                                                 'specifying a widget id.', example=3),
    'is_external_api_auto': fields.Boolean(required=False, description='Send the lead automatically to a '
                                                                       'third-party partner. This feature requires '
                                                                       'a partner integration. Please contact support '
                                                                       'for more information', default=False),
    'email_addresses': fields.String(required=False,
                                     description='The list of email addresses, separated by comma or semi-colon, '
                                                 'that should receive a new lead notification.',
                                     example='john@doe.com, jane@doe.com'),
    'adf_email_addresses': fields.String(required=False, description='The list of ADF email addresses, separated by '
                                                                     'comma or semi-colon, that should receive a new '
                                                                     'lead in ADF format.', example='adf@crm.com, '
                                                                                                    'adf@dms.com'),
    'email_subject': fields.String(required=False, description='The subject like of the email notification send to '
                                                               'the list of emails to receive the new lead email '
                                                               'notifications.', max_length=64,
                                   example='New Lead Notification'),
    'partial_data_email': fields.Boolean(required=False,
                                         description='Set to True to send the new lead email notification after a '
                                                     'partial submitted lead.', default=False),
    'full_submit_email': fields.Boolean(required=False, description='Set to True to send the new lead email '
                                                                    'notification after a full submitted lead. Note '
                                                                    'that the partial_data_email parameter will take '
                                                                    'precedence if both parameters are set to True.',
                                        default=False),
    'send_auto_email': fields.Boolean(required=False,
                                      description='Set to True to send the lead an automatic '
                                                  'thank you or confirmation email.', default=False),
    'send_auto_email_subject': fields.String(required=False,
                                             description='The subject line for the automatic thank you or confirmation '
                                                         'email.', max_length=128,
                                             example='Thanks for your interest!'),
    'send_auto_email_msg': fields.String(required=False,
                                         description='The message content for the automatic thank you or confirmation '
                                                     'email.', max_length=512,
                                         example='Thank you for contacting us. We will get back to you as soon as '
                                                 'possible'),
    'send_auto_sms': fields.Boolean(required=False, description='Set to True to send the lead an automatic thank you '
                                                                'or confirmation sms message.', default=False),
    'auto_prequalify_credit': fields.Boolean(required=False, description='Set to True to perform an automatic pre-qualifaction credit check when a lead is posted.', default=False),
    'send_auto_sms_inbound_id': fields.Integer(required=False,
                                               description='The operational phone number id to be used for sending the '
                                                           'automatic thank you or cofirmation sms message.',
                                               example=63),
    'send_auto_sms_msg': fields.String(required=False,
                                       description='The message content for the automatic thank you or '
                                                   'confirmation sms message.',
                                       max_length=256, example='Thanks for the message. We will reply shortly.')
})

form_edit = api.model('form ', {
    'display_name': fields.String(required=False, description='A friendly name for the form.',
                                  example='Finance App Form'),
    'widget_id': fields.Integer(required=False, description='Generate a phone to the lead on submission by '
                                                                 'specifying a widget id.', example=3),
    'is_external_api_auto': fields.Boolean(required=False, description='Send the lead automatically to a '
                                                                       'third-party partner. This feature requires '
                                                                       'a partner integration. Please contact support '
                                                                       'for more information', default=False),
    'email_addresses': fields.String(frequired=False,
                                     description='The list of email addresses, separated by comma or semi-colon, '
                                                 'that should receive a new lead notification.',
                                     example='john@doe.com, jane@doe.com'),
    'adf_email_addresses': fields.String(required=False, description='The list of ADF email addresses, separated by '
                                                                     'comma or semi-colon, that should receive a new '
                                                                     'lead in ADF format.', example='adf@crm.com, '
                                                                                                    'adf@dms.com'),
    'email_subject': fields.String(required=False, description='The subject like of the email notification send to '
                                                               'the list of emails to receive the new lead email '
                                                               'notifications.', max_length=64,
                                   example='New Lead Notification'),
    'partial_data_email': fields.Boolean(required=False,
                                         description='Set to True to send the new lead email notification after a '
                                                     'partial submitted lead.', default=False),
    'full_submit_email': fields.Boolean(required=False, description='Set to True to send the new lead email '
                                                                    'notification after a full submitted lead. Note '
                                                                    'that the partial_data_email parameter will take '
                                                                    'precedence if both parameters are set to True.',
                                        default=False),
    'send_auto_email': fields.Boolean(required=False,
                                      description='Set to True to send the lead an automatic '
                                                  'thank you or confirmation email.', default=False),
    'send_auto_email_subject': fields.String(required=False,
                                             description='The subject line for the automatic thank you or confirmation '
                                                         'email.', max_length=128,
                                             example='Thanks for your interest!'),
    'send_auto_email_msg': fields.String(required=False,
                                         description='The message content for the automatic thank you or confirmation '
                                                     'email.', max_length=512,
                                         example='Thank you for contacting us. We will get back to you as soon as '
                                                 'possible'),
    'send_auto_sms': fields.Boolean(required=False, description='Set to True to send the lead an automatic thank you '
                                                                'or confirmation sms message.', default=False),
    'auto_prequalify_credit': fields.Boolean(required=False, description='Set to True to perform an automatic pre-qualifaction credit check when a lead is posted.', default=False),
    'send_auto_sms_inbound_id': fields.Integer(required=False,
                                               description='The operational phone number id to be used for sending the '
                                                           'automatic thank you or cofirmation sms message.',
                                               example=63),
    'send_auto_sms_msg': fields.String(required=False,
                                       description='The message content for the automatic thank you or '
                                                   'confirmation sms message.',
                                       max_length=256, example='Thanks for the message. We will reply shortly.')
})

form_lead_add = api.model('formLead', {
'form_lead_id': fields.Integer(required=False,
                                   description='The unique identifier for the form lead. '
                                               'This is only required if lead data is updated for a '
                                               'specific lead.', example=3, default=-1),
    'firstname': fields.String(required=False, description='First name of lead', max_length=255,
                               min_length=0, example='John'),
    'lastname': fields.String(required=False, description='Last name of lead', max_length=255, min_length=0,
                              example='Doe'),
    'phonenumber': fields.String(
        required=True, description='Lead''s phone number. Phone number must be 12 characters starting with the area '
                                   'code. For US use +1.', min_length=10, max_length=12, example='+17734445566'),
    'email': fields.String(required=False, description='Lead''s email address', min_length=0, max_length=255,
                           example='JohnDoe@hotmail.com'),
    'state': fields.String(required=False, description='Lead''s current state', length=2, example='FL'),
    'city': fields.String(required=False, description='Lead''s current city', min_length=0,
                          max_length=255, example='Miami'),
    'birthday': fields.String(required=False, description='Lead''s birth date', example='02/02/1984'),
    'address_1': fields.String(required=False, description='Lead''s current street address 1', min_length=0,
                               max_length=255,
                               example='12 West Rd, Apt 2'),
    'vehicle_trim': fields.String(required=False, description='Vehicle trim', min_length=0,
                                  max_length=255, example='SUV'),
    'vin': fields.String(required=False, description='Vehicle VIN number', min_length=17,
                         max_length=17, example='JH4TB2H26CC000000'),
    'stock_number': fields.String(required=False, description='Stock number of vehicle of interest', min_length=0,
                                  max_length=255,
                                  example='5004312'),
    'location': fields.String(required=False, description='Location of vehicle of interest', min_length=0,
                              max_length=255,
                              example='Chicago'),
    'dealer_lot_id': fields.String(required=False, description='Dealer''s lot id.', min_length=0,
                                   max_length=255, example='L001'),
    'application_type': fields.String(required=False,
                                      description='The type of application. Either Joint or Individual.',
                                      min_length=0, max_length=255, example='Joint'),
    'middlename': fields.String(required=False, description='Middle name of the applicant', max_length=255,
                                min_length=0, example='Mike'),
    'mobile_phone': fields.String(required=False, description='Lead''s mobile number', min_length=10, max_length=12,
                                  example='+17734445566'),
    'phone_bill_name': fields.String(required=False, description='Lead''s name, or other, on the phone bill',
                                     min_length=0, max_length=255, example='Kane Brown'),
    'ssn': fields.String(required=False, description='Lead''s social security number', min_length=9, max_length=9,
                         example='123453389'),
    'driver_license': fields.String(required=False, description='Lead''s driver''s license number', min_length=0,
                                    max_length=255, example='VB342500DF'),
    'driver_license_state': fields.String(required=False, description='Lead''s driver''s license state', length=2,
                                          example='FL'),
    'marital_status': fields.String(required=False, description='Lead''s marital status', max_length=255,
                                    min_length=0, example='Married'),
    'number_of_dependents': fields.Integer(required=False, description='Lead''s number of dependents', example=3),
    'dependent_ages': fields.String(required=False, description='Lead''s dependents'' ages', min_length=0,
                                    max_length=255, example='12, 3, 10'),
    'address_2': fields.String(required=False, description='Lead''s current street address 2', max_length=255,
                               min_length=0, example='Unit 2'),
    'country': fields.String(required=False, description='Lead''s current country', min_length=0,
                             max_length=255, example='USA'),
    'county': fields.String(required=False, description='Lead''s current resident county', max_length=255,
                            min_length=0, example='Cook County'),
    'township': fields.String(required=False, description='Lead''s current township',
                              min_length=0, max_length=255, example='Ballard'),
    'zip': fields.String(required=False, description='Lead''s current zip code', min_length=0,
                         max_length=10, example='50321'),
    'rent_or_own': fields.String(required=False, description='Lead''s current living status', min_length=0,
                                 max_length=255, example='Rent'),
    'landlord_name': fields.String(required=False,
                                   description='Lead''s current landlord. Can also be used for Mortgage Holder name.',
                                   min_length=0, max_length=255, example='John Reid'),
    'landlord_phone': fields.String(required=False, description='Lead''s landlord''s phone number', max_length=12,
                                    min_length=10, example='843994345412'),
    'monthly_housing_payment': fields.Float(required=False,
                                            description='Lead''s current monthly payment for rent or mortgage',
                                            example=1500),
    'address_years_total': fields.Integer(required=False, description='Lead''s total years at current addres',
                                          example=3),
    'address_months_total': fields.Integer(required=False, description='Lead''s total months at current address',
                                           example=36),
    'previous_address_1': fields.String(required=False, description='Lead''s previous street address 1', max_length=255,
                                        min_length=0, example='13 East Rd. Apt 304'),
    'previous_address_2': fields.String(required=False, description='Lead''s previous street address 2',
                                        min_length=0, max_length=255, example='Unit 2'),
    'previous_city': fields.String(required=False, description='Lead''s previous city', max_length=255,
                                   min_length=0, example='Denver'),
    'previous_state': fields.String(required=False, description='Lead''s previous state', length=2,
                                    example='CO'),
    'previous_zip': fields.String(required=False, description='Lead''s previous zip code',
                                  min_length=0, max_length=10, example='40023'),
    'previous_address_years_total': fields.Integer(required=False,
                                                   description='Lead''s total years at a previous address ', example=3),
    'previous_address_months_total': fields.Integer(required=False,
                                                    description='Lead''s total months at a previous address',
                                                    example=36),

    'employer': fields.String(required=False, description='Lead''s current employer name', max_length=255,
                              min_length=0, example='Vans Inc'),
    'employer_address_1': fields.String(required=False, description='Lead''s current employer street address 1',
                                        min_length=0, max_length=255, example='1 Main St.'),
    'employer_address_2': fields.String(required=False, description='Lead''s current employer street address 2',
                                        min_length=0, max_length=255, example='Unit 1'),
    'employer_city': fields.String(required=False, description='Lead''s current employer city', max_length=255,
                                   min_length=0, example='Chicago'),
    'employer_state': fields.String(required=False, description='Lead''s current employer state', length=2,
                                    example='IL'),
    'employer_zip': fields.String(required=False, description='Lead''s current employer zip code', max_length=10,
                                  min_length=0, example='60613'),
    'employment_title': fields.String(required=False, description='Lead''s position at current employer',
                                      min_length=0, max_length=255, example='Manager'),
    'employment_years': fields.Integer(required=False, description='Lead''s years at current employer', max_length=255,
                                       example=2),
    'employment_months': fields.Integer(required=False, description='Lead''s months at current employer',
                                        max_length=255, example=24),
    'work_phone': fields.String(required=False, description='Lead''s employer work phone number', max_length=12,
                                min_length=10, example='+17739540023'),
    'income': fields.Float(required=False, description='Lead''s monthly gross income amount', example=5400),
    'hourly_pay': fields.Integer(required=False, description='Lead''s hourly pay amount', example=15),
    'hours_worked': fields.Integer(required=False, description='Lead''s total hours worked', example=40),
    'pay_period': fields.String(required=False, description='Lead''s pay period', min_length=0,
                                max_length=255, example='bi-weekly'),
    'additional_income': fields.Float(required=False, description='Lead''s additional monthly income amount',
                                      example=1000),
    'additional_income_source': fields.String(required=False, description='Lead''s additional income source',
                                              min_length=0, max_length=255, example='Investment'),
    'previous_employer': fields.String(required=False, description='Lead''s former employer name', max_length=255,
                                       min_length=0, example='Truck LTD'),
    'previous_employer_address_1': fields.String(required=False, description='Lead''s former employer street address 1',
                                                 min_length=0, max_length=255, example='1 Main St'),
    'previous_employer_address_2': fields.String(required=False, description='Lead''s former employer street address 2',
                                                 min_length=0, max_length=255, example='1 Main St'),
    'previous_employer_city': fields.String(required=False, description='Lead''s former employer city', max_length=255,
                                            min_length=0, example='Seattle'),
    'previous_employer_state': fields.String(required=False, description='Lead''s former employer state',
                                             length=2, example='WA'),
    'previous_employer_zip': fields.String(required=False, description='Lead''s former employer zip code',
                                           min_length=0, max_length=10, example='98109'),
    'previous_employer_position': fields.String(required=False, description='Lead''s position at former employer',
                                                min_length=0, max_length=255, example='Engineer'),
    'previous_income': fields.Float(required=False, description='Lead''s income at former employer', example=4000),
    'previous_employer_time_years': fields.Integer(required=False, description='Lead''s years at former employer',
                                                   example=5),
    'previous_employer_time_months': fields.Integer(required=False, description='Lead''s months at former employer',
                                                    example=6),
    'previous_employer_leave_reason': fields.String(required=False,
                                                    description='Lead''s reason for leaving former employer',
                                                    min_length=0, max_length=255, example='Higher paid job'),
    'previous_employer_phone': fields.String(required=False, description='Lead''s former employer phone number',
                                             min_length=10, max_length=12, example='+13328540043'),
    'maintenance_payment': fields.Float(required=False,
                                        description='Lead''s maintenance payments for alimony or child support',
                                        example=5400),
    'child_support_ages': fields.String(required=False,
                                        description='Lead''s children''s ages that requires child support',
                                        min_length=0, max_length=255, example='5,7'),
    'bankruptcy_declaration': fields.Boolean(required=False, description='Bankruptcy', example=False),
    'bankruptcy_discharge_date': fields.Date(required=False, description='The bankruptcy discharge date',
                                             example='03/02/2015'),
    'bankruptcy_chapter': fields.String(required=False, description='The bankruptcy chapter', max_length=255,
                                        min_length=0, example='Chapter 11'),
    'repossession_declaration': fields.Boolean(required=False, description='Repossession declaration', example=False),
    'repossession_date': fields.Date(required=False, description='Repossession date', example='03/03/2015'),
    'repossession_type': fields.String(required=False, description='The type of repossession',
                                       min_length=0, max_length=255, example='Vehicle'),
    'previous_vehicle_credit_total_borrowed': fields.Float(
        required=False, description='Lead''s credit amount borrowed for previous vehicle', example=4000),
    'loan_amount_outstanding': fields.Float(required=False, description='Lead''s current remaining loan amount',
                                            example=3000),
    'loan_with_whom': fields.String(required=False, description='Name of loan broker', min_length=0, max_length=255,
                                    example='J Burns'),
    'bank_name': fields.String(required=False, description='Lead''s bank name', min_length=0, max_length=255,
                               example='US Bank'),
    'bank_city': fields.String(required=False, description='Lead''s bank''s city name', min_length=0,
                               max_length=255, example='Chicago'),
    'checking_balance': fields.Float(required=False, description='Lead''s checking balance amoun', example=4500),
    'saving_balance': fields.Float(required=False, description='Lead''s saving balance amount', example=3000),
    'utilities_payment': fields.Float(required=False, description='Lead''s payment amount for utilities', example=300),
    'child_care_payment': fields.Float(required=False, description='Lead''s child care payment amount', example=400),
    'cable_tv_payment': fields.Float(required=False, description='Lead''s cable tv payment amount', example=180),
    'down_payment_amount': fields.Float(required=False, description='Lead''s available down payment amoun',
                                        example=4000),
    'trade_in_vehicle': fields.String(required=False, description='Lead''s trade-in vehicle', max_length=255,
                                      min_length=0, example='2014 Toyota Tahoe'),
    'co_applicant_firstname': fields.String(required=False, description='Co-application first name', min_length=0,
                                            max_length=255, example='Mary'),
    'co_applicant_middlename': fields.String(required=False, description='Middle name of the co-applicant.',
                                             min_length=0, max_length=255, example='Sarah'),
    'co_applicant_lastname': fields.String(required=False, description='Co-application last name', min_length=0,
                                           max_length=255, example='Doe'),
    'co_applicant_phonenumber': fields.String(required=False, description='Co-application phone number', min_length=10,
                                              max_length=12, example='+13328540043'),
    'co_applicant_mobilephone': fields.String(required=False, description='Co-application mobile phone number',
                                              min_length=10, max_length=12, example='+13328540044'),
    'co_applicant_phone_bill_name': fields.String(required=False, description='Co-application name on phone bill',
                                                  min_length=0, max_length=255, example='M. Fryer'),
    'co_applicant_email': fields.String(required=False, description='Co-application email address', max_length=255,
                                        min_length=0, example='mary@doe.com'),
    'co_applicant_birthday': fields.Date(required=False, description='Co-application date of birth',
                                         example='04/20/1998'),
    'co_applicant_ssn': fields.String(required=False, description='Co-application social security number',
                                      min_length=9, max_length=9, example='101552348'),
    'co_applicant_driver_license': fields.String(required=False, description='Co-application driver''s license number',
                                                 min_length=0, max_length=255, example='SDF00234423423DF'),
    'co_applicant_driver_license_state': fields.String(
        required=False, description='Co-application drivers license state', length=2, example='MA'),
    'co_applicant_marital_status': fields.String(required=False, description='Co-application marital status',
                                                 min_length=0, max_length=255, example='Married'),
    'co_applicant_number_of_dependents': fields.Integer(required=False,
                                                        description='Co-application number of dependents',  example=1),
    'co_applicant_dependent_ages': fields.String(required=False, description='Co-application''s dependents'' ages',
                                                 min_length=0, max_length=255, example='6, 4'),
    'co_applicant_address_1': fields.String(required=False, description='Co-application street address 1',
                                            min_length=0, max_length=255, example='12 West Rd, Apt 2'),
    'co_applicant_address_2': fields.String(required=False, description='Co-application street address 2',
                                            min_length=0, max_length=255, example='Unit 432'),
    'co_applicant_city': fields.String(required=False, description='Co-application city', max_length=255,
                                       min_length=0, example='Miami'),
    'co_applicant_county': fields.String(required=False, description='Co-application address county', max_length=255,
                                         min_length=0, example='Cook'),
    'co_applicant_township': fields.String(required=False, description='Co-application address township',
                                           min_length=0, max_length=255,
                                           example='Ballard'),
    'co_applicant_state': fields.String(required=False, description='Co-application address state', length=2,
                                        example='FL'),
    'co_applicant_zip': fields.String(required=False, description='Co-application zip code', max_length=10,
                                      min_length=0, example='50321'),
    'co_applicant_rent_or_own': fields.String(required=False, description='Co-application living status',
                                              min_length=0, max_length=255, example='Own'),
    'co_applicant_landlord_name': fields.String(required=False, description='Co-application landlord name',
                                                min_length=0, max_length=255, example='TJ Hooks'),
    'co_applicant_landlord_phone': fields.String(required=False, description='Co-application landlord phone',
                                                 min_length=0, max_length=12, example='556345551011'),
    'co_applicant_monthly_housing_payment': fields.Float(
        required=False, description='Co-application current monlty housing payment', example=1200),
    'co_applicant_address_years_total': fields.Integer(
        required=False, description='Co-application years at current address', example=1),
    'co_applicant_address_months_total': fields.Integer(
        required=False, description='Co-application months at current address', example=12),
    'co_applicant_previous_address_1': fields.String(
        required=False, description='Co-application previous street address 1', max_length=255,
        min_length=0, example='14 East Rd, Apt 204'),
    'co_applicant_previous_address_2': fields.String(
        required=False, description='Co-application previous street address 2', min_length=0,
        max_length=255, example='Unit 34'),
    'co_applicant_previous_city': fields.String(required=False, description='Co-application previous city',
                                                min_length=0, max_length=255, example='Boston'),
    'co_applicant_previous_state': fields.String(required=False, description='Co-application previous state', length=2,
                                                 example='MA'),
    'co_applicant_previous_zip': fields.String(required=False, description='Co-application previous zip code',
                                               min_length=0, max_length=10, example='30231'),
    'co_applicant_previous_address_years_total': fields.Integer(
        required=False, description='Co-application time at previous address in years', example=6),
    'co_applicant_previous_address_months_total': fields.Integer(
        required=False, description='Co-application total time at previous address in months', example=7),
    'co_applicant_employer': fields.String(
        required=False, description='Co-application current employer name', min_length=0,
        max_length=255, example='Fast Car LLC'),
    'co_applicant_employer_address_1': fields.String(
        required=False, description='Co-application current employer street address 1', min_length=0,
        max_length=255, example='1 Main St'),
    'co_applicant_employer_address_2': fields.String(required=False,
                                                     description='Co-application current employer street address 2',
                                                     min_length=0, max_length=255, example='UNIT 3'),
    'co_applicant_employer_city': fields.String(
        required=False, description='Co-application current  employer city', min_length=0,
        max_length=255, example='Boston'),
    'co_applicant_employer_state': fields.String(
        required=False, description='Co-application current employer state', length=2, example='MA'),
    'co_applicant_employer_zip': fields.String(
        required=False, description='Co-application current employer zip code', min_length=0,
        max_length=10, example='60613'),
    'co_applicant_employment_title': fields.String(
        required=False, description='Co-application position at current employer', min_length=0,
        max_length=255, example='Manager'),
    'co_applicant_employment_years': fields.Integer(
        required=False, description='Co-application time at current employer in years', example=1),

    'co_applicant_employment_months': fields.Integer(
        required=False, description='Co-application time at current employer in months', example=2),
    'co_applicant_work_phone': fields.String(
        required=False, description='Co-application current employer phone number', min_length=0,
        max_length=12, example='5563455510'),
    'co_applicant_income': fields.Float(
        required=False, description='Co-application current monthly gross income', example=3400),
    'co_applicant_hourly_pay': fields.Integer(
        required=False, description='Co-application''s hourly pay amount',  example=15),
    'co_applicant_hours_worked': fields.Integer(
        required=False, description='Co-application''s total hours worked',  example=40),
    'co_applicant_pay_period': fields.String(
        required=False, description='Co-application''s pay period', min_length=0,
        max_length=255, example='bi-weekly'),
    'co_applicant_additional_income': fields.Float(
        required=False, description='Co-application additional income amount', example=250),
    'co_applicant_additional_income_source': fields.String(
        required=False, description='Co-application additional income source', min_length=0,
        max_length=255, example='Property'),
    'co_applicant_previous_employer': fields.String(
        required=False, description='Co-application former employer name', min_length=0,
        max_length=255, example='Nuff Said Media'),
    'co_applicant_previous_employer_address_1': fields.String(
        required=False, description='Co-application former employer address 1', min_length=0,
        max_length=255, example='1 Main St.'),
    'co_applicant_previous_employer_address_2': fields.String(
        required=False, description='Co-application former employer address 2', min_length=0,
        max_length=255, example='Unit 2'),
    'co_applicant_previous_employer_city': fields.String(
        required=False, description='Co-application former employer city', min_length=0,
        max_length=255, example='Tampa'),
    'co_applicant_previous_employer_state': fields.String(
        required=False, description='Co-application former employer state', length=2, example='FL'),
    'co_applicant_previous_employer_zip': fields.String(
        required=False, description='Co-application former employer zip code', min_length=0,
        max_length=10, example='98109'),
    'co_applicant_previous_employer_position': fields.String(
        required=False, description='Co-application position at former employer', min_length=0,
        max_length=255, example='Manager'),
    'co_applicant_previous_income': fields.Float(
        required=False, description='Co-application income at former employer', example=1500),
    'co_applicant_previous_employer_time_years': fields.Integer(
        required=False, description='Co-application time at former employer', example=1),
    'co_applicant_previous_employer_time_months': fields.Integer(
        required=False, description='Co-application''s months at former employer', example=2),
    'co_applicant_previous_employer_leave_reason': fields.String(
        required=False, description='Co-application''s reason for leaving former employer',
        min_length=0, max_length=255, example='Higher paid job'),
    'co_applicant_previous_employer_phone': fields.String(
        required=False, description='Co-application former employer phone number', min_length=10, max_length=12,
        example='+17734445566'),
    'co_applicant_maintenance_payment': fields.Float(
        required=False, description='Co-application''s maintenance payments for alimony or child support',
        example=5400),
    'co_applicant_child_support_ages': fields.String(
        required=False, description='Co-application''s children''s ages that requires child support',
        min_length=0, max_length=255, example='4,8'),
    'co_applicant_bankruptcy_declaration': fields.Boolean(required=False,
                                                          description='Co-application bankruptcy declaration',
                                                          example=True),
    'co_applicant_bankruptcy_discharge_date': fields.Date(
        required=False, description='Co-application bankruptcy discharge date', max_length=255, example='04/30/2005'),
    'co_applicant_bankruptcy_chapter': fields.String(
        required=False, description='Co-application bankruptcy chapter', max_length=255, example='Chapter 11'),
    'co_applicant_repossession_declaration': fields.Boolean(
        required=False, description='Co-application repossession declaration', example=True),
    'co_applicant_repossession_date': fields.Date(
        required=False, description='Co-application repossession date', max_length=255, example='02/13/1999'),
    'co_applicant_repossession_type': fields.String(
        required=False, description='Co-application type of repossessio', min_length=0,
        max_length=255, example='Vehicle'),
    'co_applicant_previous_vehicle_credit_total_borrowed': fields.Integer(
        required=False, description='Co-application''s credit amount borrowed for previous vehicle', example=4000),
    'co_applicant_loan_amount_outstanding': fields.Float(
        required=False, description='Co-application''s current remaining loan amount',example=3000),
    'co_applicant_loan_with_whom': fields.String(
        required=False, description='Co-application''s name of loan broker', min_length=0,
        max_length=255, example='J Burns'),
    'co_applicant_bank_name': fields.String(
        required=False, description='Co-application''s bank name', min_length=0,
        max_length=255, example='US Bank'),
    'co_applicant_bank_city': fields.String(
        required=False, description='Co-application''s bank''s city name', min_length=0,
        max_length=255, example='Chicago'),
    'co_applicant_checking_balance': fields.Float(
        required=False, description='Co-application''s checking balance amount', example=4500),
    'co_applicant_saving_balance': fields.Float(
        required=False, description='Co-application''s saving balance amount', example=3000),
    'co_applicant_utilities_payment': fields.Float(
        required=False, description='Co-application''s payment amount for utilities', example=300),
    'co_applicant_child_care_payment': fields.Float(
        required=False, description='Co-application''s child care payment amount', example=400),
    'co_applicant_cable_tv_payment': fields.Float(
        required=False, description='Co-application''s cable tv payment amount', example=180),
    'co_applicant_down_payment_amount': fields.Float(
        required=False, description='Co-application''s available down payment amount', example=4000),
    'co_applicant_trade_in_vehicle': fields.String(
        required=False, description='Co-application''s trade-in vehicle', min_length=0,
        max_length=255, example='2014 Toyota Tahoe'),
    'additional_information': fields.String(
        required=False, description='Specify any additional information', min_length=0,
        max_length=255, example='Great looking car'),
    'privacy_policy_agreed': fields.Boolean(
        required=False, description='Usual a checkbox. Confirm that the privacy policy was read', example=True),
    'representative': fields.String(
        required=False, description='This is the name of the sales representative or person according to the lead.',
        min_length=0, max_length=255, example='Tom Hardly'),
    'vehicle_of_interest': fields.String(
        required=False, description='General description of the type of vehicle wanted', min_length=0, max_length=255,
        example='Honda Accord White'),
    'vehicle_model': fields.String(required=False, description='Vehicle model', min_length=0,
                                   max_length=255, example='F-150'),
    'vehicle_year': fields.Integer(required=False, description='Vehicle year', min_length=1800, max_length=3000,
                                   example=2018),
    'vehicle_make': fields.String(required=False, description='Vehicle make', min_length=0,
                                  max_length=255, example='Ford'),
    'e_signature': fields.String(required=False, description='E-signature', min_length=0,
                                 max_length=512, example=''),
    'co_applicant_e_signature': fields.String(required=False, description='E-signature of the co-applicant',
                                              min_length=0, max_length=512, example='')
})

form_equifax_lead_add = api.model('formEQLead', {
    'form_lead_id': fields.Integer(required=False,
                                   description='The unique identifier for the form lead. '
                                               'This is only required if lead data is updated for a '
                                               'specific lead.', example=3, default=-1),
    'firstname': fields.String(required=False, description='First name of lead', max_length=255,
                               min_length=0, example='John'),
    'lastname': fields.String(required=False, description='Last name of lead', max_length=255, min_length=0,
                              example='Doe'),
    'phonenumber': fields.String(
        required=True, description='Lead''s phone number. Phone number must be 12 characters starting with the area '
                                   'code. For US use +1.', max_length=12, min_length=10, example='+17734445566'),
    'email': fields.String(required=False, description='Lead''s email address', min_length=0, max_length=255,
                           example='JohnDoe@hotmail.com'),
    'state': fields.String(required=False, description='Lead''s current state', length=2, example='FL'),
    'city': fields.String(required=False, description='Lead''s current city', min_length=0,
                          max_length=255, example='Miami'),
    'birthday': fields.String(required=False, description='Lead''s birth date', example='02/02/1984'),
    'address_1': fields.String(required=False, description='Lead''s current street address 1', min_length=0,
                               max_length=255,
                               example='12 West Rd, Apt 2'),
    'vehicle_trim': fields.String(required=False, description='Vehicle trim', min_length=0,
                                  max_length=255, example='SUV'),
    'vin': fields.String(required=False, description='Vehicle VIN number', min_length=17,
                         max_length=17, example='JH4TB2H26CC000000'),
    'stock_number': fields.String(required=False, description='Stock number of vehicle of interest', min_length=0,
                                  max_length=255,
                                  example='5004312'),
    'location': fields.String(required=False, description='Location of vehicle of interest', min_length=0,
                              max_length=255,
                              example='Chicago'),
    'dealer_lot_id': fields.String(required=False, description='Dealer''s lot id.', min_length=0,
                                   max_length=255, example='L001'),
    'application_type': fields.String(required=False,
                                      description='The type of application. Either Joint or Individual.',
                                      min_length=0, max_length=255, example='Joint'),
    'middlename': fields.String(required=False, description='Middle name of the applicant', max_length=255,
                                min_length=0, example='Mike'),
    'mobile_phone': fields.String(required=False, description='Lead''s mobile number', min_length=10, max_length=12,
                                  example='+17734445566'),
    'phone_bill_name': fields.String(required=False, description='Lead''s name, or other, on the phone bill',
                                     min_length=0, max_length=255, example='Kane Brown'),
    'ssn': fields.String(required=False, description='Lead''s social security number', min_length=9, max_length=9,
                         example='123453389'),
    'driver_license': fields.String(required=False, description='Lead''s driver''s license number', min_length=0,
                                    max_length=255, example='VB342500DF'),
    'driver_license_state': fields.String(required=False, description='Lead''s driver''s license state', length=2,
                                          example='FL'),
    'marital_status': fields.String(required=False, description='Lead''s marital status', max_length=255,
                                    min_length=0, example='Married'),
    'number_of_dependents': fields.Integer(required=False, description='Lead''s number of dependents', example=3),
    'dependent_ages': fields.String(required=False, description='Lead''s dependents'' ages', min_length=0,
                                    max_length=255, example='12, 3, 10'),
    'address_2': fields.String(required=False, description='Lead''s current street address 2', max_length=255,
                               min_length=0, example='Unit 2'),
    'country': fields.String(required=False, description='Lead''s current country', min_length=0,
                             max_length=255, example='USA'),
    'county': fields.String(required=False, description='Lead''s current resident county', max_length=255,
                            min_length=0, example='Cook County'),
    'township': fields.String(required=False, description='Lead''s current township',
                              min_length=0, max_length=255, example='Ballard'),
    'zip': fields.String(required=False, description='Lead''s current zip code', min_length=0,
                         max_length=10, example='50321'),
    'rent_or_own': fields.String(required=False, description='Lead''s current living status', min_length=0,
                                 max_length=255, example='Rent'),
    'landlord_name': fields.String(required=False,
                                   description='Lead''s current landlord. Can also be used for Mortgage Holder name.',
                                   min_length=0, max_length=255, example='John Reid'),
    'landlord_phone': fields.String(required=False, description='Lead''s landlord''s phone number', max_length=12,
                                    min_length=10, example='843994345412'),
    'monthly_housing_payment': fields.Float(required=False,
                                            description='Lead''s current monthly payment for rent or mortgage',
                                            example=1500),
    'address_years_total': fields.Integer(required=False, description='Lead''s total years at current addres',
                                          example=3),
    'address_months_total': fields.Integer(required=False, description='Lead''s total months at current address',
                                           example=36),
    'previous_address_1': fields.String(required=False, description='Lead''s previous street address 1', max_length=255,
                                        min_length=0, example='13 East Rd. Apt 304'),
    'previous_address_2': fields.String(required=False, description='Lead''s previous street address 2',
                                        min_length=0, max_length=255, example='Unit 2'),
    'previous_city': fields.String(required=False, description='Lead''s previous city', max_length=255,
                                   min_length=0, example='Denver'),
    'previous_state': fields.String(required=False, description='Lead''s previous state', length=2,
                                    example='CO'),
    'previous_zip': fields.String(required=False, description='Lead''s previous zip code',
                                  min_length=0, max_length=10, example='40023'),
    'previous_address_years_total': fields.Integer(required=False,
                                                   description='Lead''s total years at a previous address ', example=3),
    'previous_address_months_total': fields.Integer(required=False,
                                                    description='Lead''s total months at a previous address',
                                                    example=36),

    'employer': fields.String(required=False, description='Lead''s current employer name', max_length=255,
                              min_length=0, example='Vans Inc'),
    'employer_address_1': fields.String(required=False, description='Lead''s current employer street address 1',
                                        min_length=0, max_length=255, example='1 Main St.'),
    'employer_address_2': fields.String(required=False, description='Lead''s current employer street address 2',
                                        min_length=0, max_length=255, example='Unit 1'),
    'employer_city': fields.String(required=False, description='Lead''s current employer city', max_length=255,
                                   min_length=0, example='Chicago'),
    'employer_state': fields.String(required=False, description='Lead''s current employer state', length=2,
                                    example='IL'),
    'employer_zip': fields.String(required=False, description='Lead''s current employer zip code', max_length=10,
                                  min_length=0, example='60613'),
    'employment_title': fields.String(required=False, description='Lead''s position at current employer',
                                      min_length=0, max_length=255, example='Manager'),
    'employment_years': fields.Integer(required=False, description='Lead''s years at current employer', max_length=255,
                                       example=2),
    'employment_months': fields.Integer(required=False, description='Lead''s months at current employer',
                                        max_length=255, example=24),
    'work_phone': fields.String(required=False, description='Lead''s employer work phone number', max_length=12,
                                min_length=10, example='+17739540023'),
    'income': fields.Float(required=False, description='Lead''s monthly gross income amount', example=5400),
    'hourly_pay': fields.Integer(required=False, description='Lead''s hourly pay amount', example=15),
    'hours_worked': fields.Integer(required=False, description='Lead''s total hours worked', example=40),
    'pay_period': fields.String(required=False, description='Lead''s pay period', min_length=0,
                                max_length=255, example='bi-weekly'),
    'additional_income': fields.Float(required=False, description='Lead''s additional monthly income amount',
                                      example=1000),
    'additional_income_source': fields.String(required=False, description='Lead''s additional income source',
                                              min_length=0, max_length=255, example='Investment'),
    'previous_employer': fields.String(required=False, description='Lead''s former employer name', max_length=255,
                                       min_length=0, example='Truck LTD'),
    'previous_employer_address_1': fields.String(required=False, description='Lead''s former employer street address 1',
                                                 min_length=0, max_length=255, example='1 Main St'),
    'previous_employer_address_2': fields.String(required=False, description='Lead''s former employer street address 2',
                                                 min_length=0, max_length=255, example='1 Main St'),
    'previous_employer_city': fields.String(required=False, description='Lead''s former employer city', max_length=255,
                                            min_length=0, example='Seattle'),
    'previous_employer_state': fields.String(required=False, description='Lead''s former employer state',
                                             length=2, example='WA'),
    'previous_employer_zip': fields.String(required=False, description='Lead''s former employer zip code',
                                           min_length=0, max_length=10, example='98109'),
    'previous_employer_position': fields.String(required=False, description='Lead''s position at former employer',
                                                min_length=0, max_length=255, example='Engineer'),
    'previous_income': fields.Float(required=False, description='Lead''s income at former employer', example=4000),
    'previous_employer_time_years': fields.Integer(required=False, description='Lead''s years at former employer',
                                                   example=5),
    'previous_employer_time_months': fields.Integer(required=False, description='Lead''s months at former employer',
                                                    example=6),
    'previous_employer_leave_reason': fields.String(required=False,
                                                    description='Lead''s reason for leaving former employer',
                                                    min_length=0, max_length=255, example='Higher paid job'),
    'previous_employer_phone': fields.String(required=False, description='Lead''s former employer phone number',
                                             min_length=10, max_length=12, example='+13328540043'),
    'maintenance_payment': fields.Float(required=False,
                                        description='Lead''s maintenance payments for alimony or child support',
                                        example=5400),
    'child_support_ages': fields.String(required=False,
                                        description='Lead''s children''s ages that requires child support',
                                        min_length=0, max_length=255, example='5,7'),
    'bankruptcy_declaration': fields.Boolean(required=False, description='Bankruptcy', example=False),
    'bankruptcy_discharge_date': fields.Date(required=False, description='The bankruptcy discharge date',
                                             example='03/02/2015'),
    'bankruptcy_chapter': fields.String(required=False, description='The bankruptcy chapter', max_length=255,
                                        min_length=0, example='Chapter 11'),
    'repossession_declaration': fields.Boolean(required=False, description='Repossession declaration', example=False),
    'repossession_date': fields.Date(required=False, description='Repossession date', example='03/03/2015'),
    'repossession_type': fields.String(required=False, description='The type of repossession',
                                       min_length=0, max_length=255, example='Vehicle'),
    'previous_vehicle_credit_total_borrowed': fields.Float(
        required=False, description='Lead''s credit amount borrowed for previous vehicle', example=4000),
    'loan_amount_outstanding': fields.Float(required=False, description='Lead''s current remaining loan amount',
                                            example=3000),
    'loan_with_whom': fields.String(required=False, description='Name of loan broker', min_length=0, max_length=255,
                                    example='J Burns'),
    'bank_name': fields.String(required=False, description='Lead''s bank name', min_length=0, max_length=255,
                               example='US Bank'),
    'bank_city': fields.String(required=False, description='Lead''s bank''s city name', min_length=0,
                               max_length=255, example='Chicago'),
    'checking_balance': fields.Float(required=False, description='Lead''s checking balance amoun', example=4500),
    'saving_balance': fields.Float(required=False, description='Lead''s saving balance amount', example=3000),
    'utilities_payment': fields.Float(required=False, description='Lead''s payment amount for utilities', example=300),
    'child_care_payment': fields.Float(required=False, description='Lead''s child care payment amount', example=400),
    'cable_tv_payment': fields.Float(required=False, description='Lead''s cable tv payment amount', example=180),
    'down_payment_amount': fields.Float(required=False, description='Lead''s available down payment amoun',
                                        example=4000),
    'trade_in_vehicle': fields.String(required=False, description='Lead''s trade-in vehicle', max_length=255,
                                      min_length=0, example='2014 Toyota Tahoe'),
    'co_applicant_firstname': fields.String(required=False, description='Co-application first name', min_length=0,
                                            max_length=255, example='Mary'),
    'co_applicant_middlename': fields.String(required=False, description='Middle name of the co-applicant.',
                                             min_length=0, max_length=255, example='Sarah'),
    'co_applicant_lastname': fields.String(required=False, description='Co-application last name', min_length=0,
                                           max_length=255, example='Doe'),
    'co_applicant_phonenumber': fields.String(required=False, description='Co-application phone number', min_length=10,
                                              max_length=12, example='+13328540043'),
    'co_applicant_mobilephone': fields.String(required=False, description='Co-application mobile phone number',
                                              min_length=10, max_length=12, example='+13328540044'),
    'co_applicant_phone_bill_name': fields.String(required=False, description='Co-application name on phone bill',
                                                  min_length=0, max_length=255, example='M. Fryer'),
    'co_applicant_email': fields.String(required=False, description='Co-application email address', max_length=255,
                                        min_length=0, example='mary@doe.com'),
    'co_applicant_birthday': fields.Date(required=False, description='Co-application date of birth',
                                         example='04/20/1998'),
    'co_applicant_ssn': fields.String(required=False, description='Co-application social security number',
                                      min_length=9, max_length=9, example='101552348'),
    'co_applicant_driver_license': fields.String(required=False, description='Co-application driver''s license number',
                                                 min_length=0, max_length=255, example='SDF00234423423DF'),
    'co_applicant_driver_license_state': fields.String(
        required=False, description='Co-application drivers license state', length=2, example='MA'),
    'co_applicant_marital_status': fields.String(required=False, description='Co-application marital status',
                                                 min_length=0, max_length=255, example='Married'),
    'co_applicant_number_of_dependents': fields.Integer(required=False,
                                                        description='Co-application number of dependents',  example=1),
    'co_applicant_dependent_ages': fields.String(required=False, description='Co-application''s dependents'' ages',
                                                 min_length=0, max_length=255, example='6, 4'),
    'co_applicant_address_1': fields.String(required=False, description='Co-application street address 1',
                                            min_length=0, max_length=255, example='12 West Rd, Apt 2'),
    'co_applicant_address_2': fields.String(required=False, description='Co-application street address 2',
                                            min_length=0, max_length=255, example='Unit 432'),
    'co_applicant_city': fields.String(required=False, description='Co-application city', max_length=255,
                                       min_length=0, example='Miami'),
    'co_applicant_county': fields.String(required=False, description='Co-application address county', max_length=255,
                                         min_length=0, example='Cook'),
    'co_applicant_township': fields.String(required=False, description='Co-application address township',
                                           min_length=0, max_length=255,
                                           example='Ballard'),
    'co_applicant_state': fields.String(required=False, description='Co-application address state', length=2,
                                        example='FL'),
    'co_applicant_zip': fields.String(required=False, description='Co-application zip code', max_length=10,
                                      min_length=0, example='50321'),
    'co_applicant_rent_or_own': fields.String(required=False, description='Co-application living status',
                                              min_length=0, max_length=255, example='Own'),
    'co_applicant_landlord_name': fields.String(required=False, description='Co-application landlord name',
                                                min_length=0, max_length=255, example='TJ Hooks'),
    'co_applicant_landlord_phone': fields.String(required=False, description='Co-application landlord phone',
                                                 min_length=0, max_length=12, example='556345551011'),
    'co_applicant_monthly_housing_payment': fields.Float(
        required=False, description='Co-application current monlty housing payment', example=1200),
    'co_applicant_address_years_total': fields.Integer(
        required=False, description='Co-application years at current address', example=1),
    'co_applicant_address_months_total': fields.Integer(
        required=False, description='Co-application months at current address', example=12),
    'co_applicant_previous_address_1': fields.String(
        required=False, description='Co-application previous street address 1', max_length=255,
        min_length=0, example='14 East Rd, Apt 204'),
    'co_applicant_previous_address_2': fields.String(
        required=False, description='Co-application previous street address 2', min_length=0,
        max_length=255, example='Unit 34'),
    'co_applicant_previous_city': fields.String(required=False, description='Co-application previous city',
                                                min_length=0, max_length=255, example='Boston'),
    'co_applicant_previous_state': fields.String(required=False, description='Co-application previous state', length=2,
                                                 example='MA'),
    'co_applicant_previous_zip': fields.String(required=False, description='Co-application previous zip code',
                                               min_length=0, max_length=10, example='30231'),
    'co_applicant_previous_address_years_total': fields.Integer(
        required=False, description='Co-application time at previous address in years', example=6),
    'co_applicant_previous_address_months_total': fields.Integer(
        required=False, description='Co-application total time at previous address in months', example=7),
    'co_applicant_employer': fields.String(
        required=False, description='Co-application current employer name', min_length=0,
        max_length=255, example='Fast Car LLC'),
    'co_applicant_employer_address_1': fields.String(
        required=False, description='Co-application current employer street address 1', min_length=0,
        max_length=255, example='1 Main St'),
    'co_applicant_employer_address_2': fields.String(required=False,
                                                     description='Co-application current employer street address 2',
                                                     min_length=0, max_length=255, example='UNIT 3'),
    'co_applicant_employer_city': fields.String(
        required=False, description='Co-application current  employer city', min_length=0,
        max_length=255, example='Boston'),
    'co_applicant_employer_state': fields.String(
        required=False, description='Co-application current employer state', length=2, example='MA'),
    'co_applicant_employer_zip': fields.String(
        required=False, description='Co-application current employer zip code', min_length=0,
        max_length=10, example='60613'),
    'co_applicant_employment_title': fields.String(
        required=False, description='Co-application position at current employer', min_length=0,
        max_length=255, example='Manager'),
    'co_applicant_employment_years': fields.Integer(
        required=False, description='Co-application time at current employer in years', example=1),

    'co_applicant_employment_months': fields.Integer(
        required=False, description='Co-application time at current employer in months', example=2),
    'co_applicant_work_phone': fields.String(
        required=False, description='Co-application current employer phone number', min_length=0,
        max_length=12, example='5563455510'),
    'co_applicant_income': fields.Float(
        required=False, description='Co-application current monthly gross income', example=3400),
    'co_applicant_hourly_pay': fields.Integer(
        required=False, description='Co-application''s hourly pay amount',  example=15),
    'co_applicant_hours_worked': fields.Integer(
        required=False, description='Co-application''s total hours worked',  example=40),
    'co_applicant_pay_period': fields.String(
        required=False, description='Co-application''s pay period', min_length=0,
        max_length=255, example='bi-weekly'),
    'co_applicant_additional_income': fields.Float(
        required=False, description='Co-application additional income amount', example=250),
    'co_applicant_additional_income_source': fields.String(
        required=False, description='Co-application additional income source', min_length=0,
        max_length=255, example='Property'),
    'co_applicant_previous_employer': fields.String(
        required=False, description='Co-application former employer name', min_length=0,
        max_length=255, example='Nuff Said Media'),
    'co_applicant_previous_employer_address_1': fields.String(
        required=False, description='Co-application former employer address 1', min_length=0,
        max_length=255, example='1 Main St.'),
    'co_applicant_previous_employer_address_2': fields.String(
        required=False, description='Co-application former employer address 2', min_length=0,
        max_length=255, example='Unit 2'),
    'co_applicant_previous_employer_city': fields.String(
        required=False, description='Co-application former employer city', min_length=0,
        max_length=255, example='Tampa'),
    'co_applicant_previous_employer_state': fields.String(
        required=False, description='Co-application former employer state', length=2, example='FL'),
    'co_applicant_previous_employer_zip': fields.String(
        required=False, description='Co-application former employer zip code', min_length=0,
        max_length=10, example='98109'),
    'co_applicant_previous_employer_position': fields.String(
        required=False, description='Co-application position at former employer', min_length=0,
        max_length=255, example='Manager'),
    'co_applicant_previous_income': fields.Float(
        required=False, description='Co-application income at former employer', example=1500),
    'co_applicant_previous_employer_time_years': fields.Integer(
        required=False, description='Co-application time at former employer', example=1),
    'co_applicant_previous_employer_time_months': fields.Integer(
        required=False, description='Co-application''s months at former employer', example=2),
    'co_applicant_previous_employer_leave_reason': fields.String(
        required=False, description='Co-application''s reason for leaving former employer',
        min_length=0, max_length=255, example='Higher paid job'),
    'co_applicant_previous_employer_phone': fields.String(
        required=False, description='Co-application former employer phone number', min_length=10, max_length=12,
        example='+17734445566'),
    'co_applicant_maintenance_payment': fields.Float(
        required=False, description='Co-application''s maintenance payments for alimony or child support',
        example=5400),
    'co_applicant_child_support_ages': fields.String(
        required=False, description='Co-application''s children''s ages that requires child support',
        min_length=0, max_length=255, example='4,8'),
    'co_applicant_bankruptcy_declaration': fields.Boolean(required=False,
                                                          description='Co-application bankruptcy declaration',
                                                          example=True),
    'co_applicant_bankruptcy_discharge_date': fields.Date(
        required=False, description='Co-application bankruptcy discharge date', max_length=255, example='04/30/2005'),
    'co_applicant_bankruptcy_chapter': fields.String(
        required=False, description='Co-application bankruptcy chapter', max_length=255, example='Chapter 11'),
    'co_applicant_repossession_declaration': fields.Boolean(
        required=False, description='Co-application repossession declaration', example=True),
    'co_applicant_repossession_date': fields.Date(
        required=False, description='Co-application repossession date', max_length=255, example='02/13/1999'),
    'co_applicant_repossession_type': fields.String(
        required=False, description='Co-application type of repossessio', min_length=0,
        max_length=255, example='Vehicle'),
    'co_applicant_previous_vehicle_credit_total_borrowed': fields.Integer(
        required=False, description='Co-application''s credit amount borrowed for previous vehicle', example=4000),
    'co_applicant_loan_amount_outstanding': fields.Float(
        required=False, description='Co-application''s current remaining loan amount',example=3000),
    'co_applicant_loan_with_whom': fields.String(
        required=False, description='Co-application''s name of loan broker', min_length=0,
        max_length=255, example='J Burns'),
    'co_applicant_bank_name': fields.String(
        required=False, description='Co-application''s bank name', min_length=0,
        max_length=255, example='US Bank'),
    'co_applicant_bank_city': fields.String(
        required=False, description='Co-application''s bank''s city name', min_length=0,
        max_length=255, example='Chicago'),
    'co_applicant_checking_balance': fields.Float(
        required=False, description='Co-application''s checking balance amount', example=4500),
    'co_applicant_saving_balance': fields.Float(
        required=False, description='Co-application''s saving balance amount', example=3000),
    'co_applicant_utilities_payment': fields.Float(
        required=False, description='Co-application''s payment amount for utilities', example=300),
    'co_applicant_child_care_payment': fields.Float(
        required=False, description='Co-application''s child care payment amount', example=400),
    'co_applicant_cable_tv_payment': fields.Float(
        required=False, description='Co-application''s cable tv payment amount', example=180),
    'co_applicant_down_payment_amount': fields.Float(
        required=False, description='Co-application''s available down payment amount', example=4000),
    'co_applicant_trade_in_vehicle': fields.String(
        required=False, description='Co-application''s trade-in vehicle', min_length=0,
        max_length=255, example='2014 Toyota Tahoe'),
    'additional_information': fields.String(
        required=False, description='Specify any additional information', min_length=0,
        max_length=255, example='Great looking car'),
    'privacy_policy_agreed': fields.Boolean(
        required=False, description='Usual a checkbox. Confirm that the privacy policy was read', example=True),
    'representative': fields.String(
        required=False, description='This is the name of the sales representative or person according to the lead.',
        min_length=0, max_length=255, example='Tom Hardly'),
    'vehicle_of_interest': fields.String(
        required=False, description='General description of the type of vehicle wanted', min_length=0, max_length=255,
        example='Honda Accord White'),
    'vehicle_model': fields.String(required=False, description='Vehicle model', min_length=0,
                                   max_length=255, example='F-150'),
    'vehicle_year': fields.Integer(required=False, description='Vehicle year', min_length=1800, max_length=3000,
                                   example=2018),
    'vehicle_make': fields.String(required=False, description='Vehicle make', min_length=0,
                                  max_length=255, example='Ford'),
    'e_signature': fields.String(required=False, description='E-signature', min_length=0,
                                 max_length=512, example=''),
    'co_applicant_e_signature': fields.String(required=False, description='E-signature of the co-applicant',
                                              min_length=0, max_length=512, example='')
})

form_equifax_lead_file_add = api.model('formEQLeadFile ', {
    'file': fields.String(required=False, description='Credit file upload', max_length=255, example='example.pdf'),
})

form_lead_edit = api.model('formLead ', {
    'firstname': fields.String(required=False, description='First name of lead', max_length=255, example='John'),
    'lastname': fields.String(required=False, description='Last name of lead', max_length=255, example='Doe'),
    'phonenumber': fields.String(required=False,
                           description='Lead''s phone number. Phone number must be 12 characters starting with the '
                                       'area code. For US use +1.', max_length=12, example='+17734445566'),
    'email': fields.String(required=False, description='Lead''s email address', max_length=255, example='JohnDoe@hotmail.com'),
    'state': fields.String(required=False, description='Lead''s current state', length=2, example='FL'),
    'city': fields.String(required=False, description='Lead''s current city', max_length=255, example='Miami'),
    'birthday': fields.String(required=False, description='Lead''s birth date', example='2001-02-13'),
    'address_1': fields.String(required=False, description='Lead''s current street address 1', max_length=255, example='12 West Rd, Apt 2'),

    'vehicle_trim': fields.String(required=False, description='Vehicle trim', max_length=255, example='SUV'),
    'vin': fields.String(required=False, description='Vehicle VIN number', max_length=17, example='JH4TB2H26CC000000'),
    'stock_number': fields.String(required=False, description='Stock number of vehicle of interest', max_length=255, example='5004312'),
    'location': fields.String(required=False, description='Location of vehicle of interest', max_length=255, example='Chicago'),
    'dealer_lot_id': fields.String(required=False, description='Dealer''s lot id.', max_length=255, example='L001'),
    'application_type': fields.String(required=False, description='The type of application. Either Joint or Individual.', max_length=255, example='Joint'),

    'middlename': fields.String(required=False, description='Middle name of the applicant', max_length=255, example='Mike'),
    'mobile_phone': fields.String(required=False, description='Lead''s mobile number', max_length=12, example='+17734445566'),
    'phone_bill_name': fields.String(required=False, description='Lead''s name, or other, on the phone bill', max_length=255, example='Kane Brown'),
    'ssn': fields.String(required=False, description='Lead''s social security number', max_length=11, example='123453389'),
    'driver_license': fields.String(required=False, description='Lead''s driver''s license number', max_length=255, example='VB342500DF'),
    'driver_license_state': fields.String(required=False, description='Lead''s driver''s license state', length=2, example='FL'),
    'marital_status': fields.String(required=False, description='Lead''s marital status', max_length=255, example='Married'),
    'number_of_dependents': fields.Integer(required=False, description='Lead''s number of dependents', example=3),
    'dependent_ages': fields.String(required=False, description='Lead''s dependents'' ages', max_length=255, example='12, 3, 10'),
    'address_2': fields.String(required=False, description='Lead''s current street address 2', max_length=255, example='Unit 2'),
    'country': fields.String(required=False, description='Lead''s current country', max_length=255, example='USA'),
    'county': fields.String(required=False, description='Lead''s current resident county', max_length=255, example='Cook County'),
    'township': fields.String(required=False, description='Lead''s current township', max_length=255, example='Ballard'),

    'zip': fields.String(required=False, description='Lead''s current zip code', max_length=10, example='50321'),
    'rent_or_own': fields.String(required=False, description='Lead''s current living status', max_length=255, example='Rent'),
    'landlord_name': fields.String(required=False, description='Lead''s current landlord. Can also be used for Mortgage Holder name.', max_length=255, example='John Reid'),
    'landlord_phone': fields.String(required=False, description='Lead''s landlord''s phone number', max_length=12, example='8439943454'),
    'monthly_housing_payment': fields.Float(required=False, description='Lead''s current monthly payment for rent or mortgage', example=1500),
    'address_years_total': fields.Integer(required=False, description='Lead''s total years at current addres', example=3),
    'address_months_total': fields.Integer(required=False, description='Lead''s total months at current address', example=36),
    'previous_address_1': fields.String(required=False, description='Lead''s previous street address 1', max_length=255, example='13 East Rd. Apt 304'),
    'previous_address_2': fields.String(required=False, description='Lead''s previous street address 2', max_length=255, example='Unit 2'),
    'previous_city': fields.String(required=False, description='Lead''s previous city', max_length=255, example='Denver'),
    'previous_state': fields.String(required=False, description='Lead''s previous state', length=2, example='CO'),
    'previous_zip': fields.String(required=False, description='Lead''s previous zip code', max_length=10, example='40023'),
    'previous_address_years_total': fields.Integer(required=False, description='Lead''s total years at a previous address ', example=3),
    'previous_address_months_total': fields.Integer(required=False, description='Lead''s total months at a previous addres', example=36),

    'employer': fields.String(required=False, description='Lead''s current employer name', max_length=255, example='Vans Inc'),
    'employer_address_1': fields.String(required=False, description='Lead''s current employer street address 1', max_length=255, example='1 Main St.'),
    'employer_address_2': fields.String(required=False, description='Lead''s current employer street address 2', max_length=255, example='Unit 1'),
    'employer_city': fields.String(required=False, description='Lead''s current employer city', max_length=255, example='Chicago'),
    'employer_state': fields.String(required=False, description='Lead''s current employer state', length=2, example='IL'),
    'employer_zip': fields.String(required=False, description='Lead''s current employer zip code', max_length=10, example='60613'),
    'employment_title': fields.String(required=False, description='Lead''s position at current employer', max_length=255, example='Manager'),
    'employment_years': fields.Integer(required=False, description='Lead''s years at current employer', max_length=255, example=2),
    'employment_months': fields.Integer(required=False, description='Lead''s months at current employer', max_length=255, example=24),
    'work_phone': fields.String(required=False, description='Lead''s employer work phone number', max_length=12, example='+17739540023'),
    'income': fields.Float(required=False, description='Lead''s monthly gross income amount', example=5400),
    'hourly_pay': fields.Integer(required=False, description='Lead''s hourly pay amount', example=15),
    'hours_worked': fields.Integer(required=False, description='Lead''s total hours worked', example=40),
    'pay_period': fields.String(required=False, description='Lead''s pay period', max_length=255, example='bi-weekly'),
    'additional_income': fields.Float(required=False, description='Lead''s additional monthly income amount', example=1000),
    'additional_income_source': fields.String(required=False, description='Lead''s additional income source', max_length=255, example='Investment'),

    'previous_employer': fields.String(required=False, description='Lead''s former employer name', max_length=255,
                                       example='Truck LTD'),
    'previous_employer_address_1': fields.String(required=False, description='Lead''s former employer street address 1',
                                                 max_length=255, example='1 Main St'),
    'previous_employer_address_2': fields.String(required=False, description='Lead''s former employer street address 2',
                                                 max_length=255, example='1 Main St'),
    'previous_employer_city': fields.String(required=False, description='Lead''s former employer city', max_length=255,
                                            example='Seattle'),
    'previous_employer_state': fields.String(required=False, description='Lead''s former employer state',
                                             max_length=255, example='WA'),
    'previous_employer_zip': fields.String(required=False, description='Lead''s former employer zip code',
                                           max_length=10, example='98109'),
    'previous_employer_position': fields.String(required=False, description='Lead''s position at former employer',
                                                max_length=255, example='Engineer'),
    'previous_income': fields.Float(required=False, description='Lead''s income at former employer', example=4000),
    'previous_employer_time_years': fields.Integer(required=False, description='Lead''s years at former employer',
                                                   example=5),
    'previous_employer_time_months': fields.Integer(required=False, description='Lead''s months at former employer',
                                                    example=6),
    'previous_employer_leave_reason': fields.String(required=False,
                                                    description='Lead''s reason for leaving former employer',
                                                    max_length=255, example='Higher paid job'),
    'previous_employer_phone': fields.String(required=False, description='Lead''s former employer phone number',
                                             max_length=12, example='+13328540043'),
    'maintenance_payment': fields.Float(required=False,
                                        description='Lead''s maintenance payments for alimony or child support',
                                        example=5400),
    'child_support_ages': fields.String(required=False,
                                        description='Lead''s children''s ages that requires child support',
                                        max_length=255, example='5,7'),
    'bankruptcy_declaration': fields.Boolean(required=False, description='Bankruptcy', example=False),

    'bankruptcy_discharge_date': fields.Date(required=False, description='The bankruptcy discharge date',
                                             example='2005-03-14'),
    'bankruptcy_chapter': fields.String(required=False, description='The bankruptcy chapter', max_length=255,
                                        example='Chapter 11'),
    'repossession_declaration': fields.Boolean(required=False, description='Repossession declaration', example=False),
    'repossession_date': fields.Date(required=False, description='Repossession date', example='2005-03-14'),
    'repossession_type': fields.String(required=False, description='The type of repossession', max_length=255,
                                       example='Vehicle'),
    'previous_vehicle_credit_total_borrowed': fields.Float(required=False,
                                                           description='Lead''s credit amount borrowed for previous vehicle',
                                                           example=4000),
    'loan_amount_outstanding': fields.Float(required=False, description='Lead''s current remaining loan amount',
                                            example=3000),
    'loan_with_whom': fields.String(required=False, description='Name of loan broker', max_length=255,
                                    example='J Burns'),
    'bank_name': fields.String(required=False, description='Lead''s bank name', max_length=255, example='US Bank'),
    'bank_city': fields.String(required=False, description='Lead''s bank''s city name', max_length=255,
                               example='Chicago'),
    'checking_balance': fields.Float(required=False, description='Lead''s checking balance amoun', example=4500),
    'saving_balance': fields.Float(required=False, description='Lead''s saving balance amount', example=3000),
    'utilities_payment': fields.Float(required=False, description='Lead''s payment amount for utilities', example=300),
    'child_care_payment': fields.Float(required=False, description='Lead''s child care payment amount', example=400),
    'cable_tv_payment': fields.Float(required=False, description='Lead''s cable tv payment amount', example=180),
    'down_payment_amount': fields.Float(required=False, description='Lead''s available down payment amoun',
                                        example=4000),

    'trade_in_vehicle': fields.String(required=False, description='Lead''s trade-in vehicle', max_length=255,
                                      example='2014 Toyota Tahoe'),
    'co_applicant_firstname': fields.String(required=False, description='Co-application first name', max_length=255,
                                            example='Mary'),
    'co_applicant_middlename': fields.String(required=False, description='Middle name of the co-applicant.',
                                             max_length=255, example='Sarah'),
    'co_applicant_lastname': fields.String(required=False, description='Co-application last name', max_length=255,
                                           example='Doe'),
    'co_applicant_phonenumber': fields.String(required=False, description='Co-application phone number', max_length=12,
                                        example='+13328540043'),
    'co_applicant_mobilephone': fields.String(required=False, description='Co-application mobile phone number',
                                              max_length=12, example='+13328540044'),
    'co_applicant_phone_bill_name': fields.String(required=False, description='Co-application name on phone bill',
                                                  max_length=255, example='M. Fryer'),
    'co_applicant_email': fields.String(required=False, description='Co-application email address', max_length=255,
                                        example='mary@doe.com'),
    'co_applicant_birthday': fields.Date(required=False, description='Co-application date of birth',
                                              example='04/20/1998'),
    'co_applicant_ssn': fields.String(required=False, description='Co-application social security number',
                                      max_length=11, example='101234558'),
    'co_applicant_driver_license': fields.String(required=False, description='Co-application driver''s license number',
                                                 max_length=255, example='SDF00234423423DF'),
    'co_applicant_driver_license_state': fields.String(required=False,
                                                       description='Co-application drivers license state', length=2,
                                                       example='MA'),
    'co_applicant_marital_status': fields.String(required=False, description='Co-application marital status',
                                                 max_length=255, example='Married'),
    'co_applicant_number_of_dependents': fields.Integer(required=False,
                                                        description='Co-application number of dependents', example=1),
    'co_applicant_dependent_ages': fields.String(required=False, description='Co-application''s dependents'' ages',
                                                 max_length=255, example='6, 4'),

    'co_applicant_address_1': fields.String(required=False, description='Co-application street address 1',
                                            max_length=255, example='12 West Rd, Apt 2'),
    'co_applicant_address_2': fields.String(required=False, description='Co-application street address 2',
                                            max_length=255, example='Unit 432'),
    'co_applicant_city': fields.String(required=False, description='Co-application city', max_length=255,
                                       example='Miami'),
    'co_applicant_county': fields.String(required=False, description='Co-application address county', max_length=255,
                                         example='Cook'),
    'co_applicant_township': fields.String(required=False, description='Co-application address township',
                                           max_length=255, example='Ballard'),
    'co_applicant_state': fields.String(required=False, description='Co-application address state', length=2,
                                        example='FL'),
    'co_applicant_zip': fields.String(required=False, description='Co-application zip code', max_length=10,
                                      example='50321'),
    'co_applicant_rent_or_own': fields.String(required=False, description='Co-application living status',
                                              max_length=255, example='Own'),
    'co_applicant_landlord_name': fields.String(required=False, description='Co-application landlord name',
                                                max_length=255, example='TJ Hooks'),
    'co_applicant_landlord_phone': fields.String(required=False, description='Co-application landlord phone',
                                                 max_length=12, example='5563455510'),
    'co_applicant_monthly_housing_payment': fields.Float(required=False,
                                                         description='Co-application current monlty housing payment',
                                                         example=1200),
    'co_applicant_address_years_total': fields.Integer(required=False,
                                                       description='Co-application years at current address',
                                                       example=1),
    'co_applicant_address_months_total': fields.Integer(required=False,
                                                        description='Co-application months at current address',
                                                        example=12),
    'co_applicant_previous_address_1': fields.String(required=False,
                                                     description='Co-application previous street address 1',
                                                     max_length=255, example='14 East Rd, Apt 204'),
    'co_applicant_previous_address_2': fields.String(required=False,
                                                     description='Co-application previous street address 2',
                                                     max_length=255, example='Unit 34'),

    'co_applicant_previous_city': fields.String(required=False, description='Co-application previous city',
                                                max_length=255, example='Boston'),
    'co_applicant_previous_state': fields.String(required=False, description='Co-application previous state', length=2,
                                                 example='MA'),
    'co_applicant_previous_zip': fields.String(required=False, description='Co-application previous zip code',
                                               max_length=10, example='30231'),
    'co_applicant_previous_address_years_total': fields.Integer(required=False,
                                                                description='Co-application time at previous address in years',
                                                                example=6),
    'co_applicant_previous_address_months_total': fields.Integer(required=False,
                                                                 description='Co-application total time at previous address in months',
                                                                 example=7),
    'co_applicant_employer': fields.String(required=False, description='Co-application current employer name',
                                           max_length=255, example='Fast Car LLC'),
    'co_applicant_employer_address_1': fields.String(required=False,
                                                     description='Co-application current employer street address 1',
                                                     max_length=255, example='1 Main St'),
    'co_applicant_employer_address_2': fields.String(required=False,
                                                     description='Co-application current employer street address 2',
                                                     max_length=255, example='UNIT 3'),
    'co_applicant_employer_city': fields.String(required=False, description='Co-application current  employer city',
                                                max_length=255, example='Boston'),
    'co_applicant_employer_state': fields.String(required=False, description='Co-application current employer state',
                                                 length=2, example='MA'),
    'co_applicant_employer_zip': fields.String(required=False, description='Co-application current employer zip code',
                                               max_length=10, example='60613'),
    'co_applicant_employment_title': fields.String(required=False,
                                                   description='Co-application position at current employer',
                                                   max_length=255, example='Manager'),
    'co_applicant_employment_years': fields.Integer(required=False,
                                                    description='Co-application time at current employer in years',
                                                    example=1),

    'co_applicant_employment_months': fields.Integer(required=False,
                                                     description='Co-application time at current employer in months',
                                                     example=2),
    'co_applicant_work_phone': fields.String(required=False, description='Co-application current employer phone number',
                                             max_length=12, example='5563455510'),
    'co_applicant_income': fields.Float(required=False, description='Co-application current monthly gross income',
                                        example=3400),
    'co_applicant_hourly_pay': fields.Integer(required=False, description='Co-application''s hourly pay amount',
                                              example=15),
    'co_applicant_hours_worked': fields.Integer(required=False, description='Co-application''s total hours worked',
                                                example=40),
    'co_applicant_pay_period': fields.String(required=False, description='Co-application''s pay period', max_length=255,
                                             example='bi-weekly'),
    'co_applicant_additional_income': fields.Float(required=False,
                                                   description='Co-application additional income amount', example=250),
    'co_applicant_additional_income_source': fields.String(required=False,
                                                           description='Co-application additional income source',
                                                           max_length=255, example='Property'),
    'co_applicant_previous_employer': fields.String(required=False, description='Co-application former employer name',
                                                    max_length=255, example='Nuff Said Media'),
    'co_applicant_previous_employer_address_1': fields.String(required=False,
                                                              description='Co-application former employer address 1',
                                                              max_length=255, example='1 Main St.'),
    'co_applicant_previous_employer_address_2': fields.String(required=False,
                                                              description='Co-application former employer address 2',
                                                              max_length=255, example='Unit 2'),
    'co_applicant_previous_employer_city': fields.String(required=False,
                                                         description='Co-application former employer city',
                                                         max_length=255, example='Tampa'),
    'co_applicant_previous_employer_state': fields.String(required=False,
                                                          description='Co-application former employer state', length=2,
                                                          example='FL'),

    'co_applicant_previous_employer_zip': fields.String(required=False,
                                                        description='Co-application former employer zip code',
                                                        max_length=10, example='98109'),
    'co_applicant_previous_employer_position': fields.String(required=False,
                                                             description='Co-application position at former employer',
                                                             max_length=255, example='Manager'),
    'co_applicant_previous_income': fields.Float(required=False, description='Co-application income at former employer',
                                                 example=1500),
    'co_applicant_previous_employer_time_years': fields.Integer(required=False,
                                                                description='Co-application time at former employer',
                                                                example=1),
    'co_applicant_previous_employer_time_months': fields.Integer(required=False,
                                                                 description='Co-application''s months at former employer',
                                                                 example=2),
    'co_applicant_previous_employer_leave_reason': fields.String(required=False,
                                                                 description='Co-application''s reason for leaving former employer',
                                                                 max_length=255, example='Higher paid job'),
    'co_applicant_previous_employer_phone': fields.String(required=False,
                                                          description='Co-application former employer phone number',
                                                          max_length=12, example='+17734445566'),
    'co_applicant_maintenance_payment': fields.Float(required=False,
                                                     description='Co-application''s maintenance payments for '
                                                                 'alimony or child support', example=5400),
    'co_applicant_child_support_ages': fields.String(required=False,
                                                     description='Co-application''s children''s ages that requires child support',
                                                     max_length=255, example='4,8'),
    'co_applicant_bankruptcy_declaration': fields.Boolean(required=False,
                                                          description='Co-application bankruptcy declaration',
                                                          example=True),
    'co_applicant_bankruptcy_discharge_date': fields.Date(required=False,
                                                          description='Co-application bankruptcy discharge date',
                                                          max_length=255, example='04/30/2005'),
    'co_applicant_bankruptcy_chapter': fields.String(required=False, description='Co-application bankruptcy chapter',
                                                     max_length=255, example='Chapter 11'),

    'co_applicant_repossession_declaration': fields.Boolean(required=False,
                                                            description='Co-application repossession declaration',
                                                            example=True),
    'co_applicant_repossession_date': fields.Date(required=False, description='Co-application repossession date',
                                                  max_length=255, example='02/13/1999'),
    'co_applicant_repossession_type': fields.String(required=False, description='Co-application type of repossessio',
                                                    max_length=255, example='Vehicle'),
    'co_applicant_previous_vehicle_credit_total_borrowed': fields.Integer(required=False,
                                                                          description='Co-application''s credit amount borrowed for previous vehicle',
                                                                          example=4000),
    'co_applicant_loan_amount_outstanding': fields.Float(required=False,
                                                         description='Co-application''s current remaining loan amount',
                                                         example=3000),
    'co_applicant_loan_with_whom': fields.String(required=False, description='Co-application''s name of loan broker',
                                                 max_length=255, example='J Burns'),
    'co_applicant_bank_name': fields.String(required=False, description='Co-application''s bank name', max_length=255,
                                            example='US Bank'),
    'co_applicant_bank_city': fields.String(required=False, description='Co-application''s bank''s city name',
                                            max_length=255, example='Chicago'),
    'co_applicant_checking_balance': fields.Float(required=False,
                                                  description='Co-application''s checking balance amount',
                                                  example=4500),
    'co_applicant_saving_balance': fields.Float(required=False, description='Co-application''s saving balance amount',
                                                example=3000),
    'co_applicant_utilities_payment': fields.Float(required=False,
                                                   description='Co-application''s payment amount for utilities',
                                                   example=300),
    'co_applicant_child_care_payment': fields.Float(required=False,
                                                    description='Co-application''s child care payment amount',
                                                    example=400),
    'co_applicant_cable_tv_payment': fields.Float(required=False,
                                                  description='Co-application''s cable tv payment amount', example=180),
    'co_applicant_down_payment_amount': fields.Float(required=False,
                                                     description='Co-application''s available down payment amount',
                                                     example=4000),
    'co_applicant_trade_in_vehicle': fields.String(required=False, description='Co-application''s trade-in vehicle',
                                                   max_length=255, example='2014 Toyota Tahoe'),
    'additional_information': fields.String(required=False, description='Specify any additional information',
                                            max_length=255, example='Great looking car'),
    'privacy_policy_agreed': fields.Boolean(required=False,
                                            description='Usual a checkbox. Confirm that the privacy policy was read',
                                            example=True),
    'representative': fields.String(required=False, description='This is the name of the sales representative or person according to the lead.', max_length=255, example='Tom Hardly'),
    'vehicle_of_interest': fields.String(required=False, description='General description of the type of vehicle wanted', max_length=255, example='Honda Accord White'),
    'vehicle_model': fields.String(required=False, description='Vehicle model', max_length=255, example='F-150'),
    'vehicle_year': fields.Integer(required=False, description='Vehicle year', min_length=1800, max_length=3000, example=2018),
    'vehicle_make': fields.String(required=False, description='Vehicle make', max_length=255, example='Ford'),
    'e_signature': fields.String(required=False, description='E-signature', max_length=512, example=''),
    'co_applicant_e_signature': fields.String(required=False, description='E-signature of the co-applicant', max_length=512, example='')
})